@tonder.io/ionic-lite-sdk 0.0.68-beta.DEV-2106.4 → 0.0.68-beta.DEV-2106.6
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.
- package/dist/classes/BaseInlineCheckout.d.ts +1 -1
- package/dist/helpers/SdkTelemetryClient.d.ts +0 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -0
- package/dist/types/commons.d.ts +4 -0
- package/package.json +1 -1
- package/rollup.config.js +3 -1
- package/src/classes/BaseInlineCheckout.ts +6 -3
- package/src/classes/liteCheckout.ts +12 -1
- package/src/helpers/SdkTelemetryClient.ts +1 -2
- package/src/types/commons.ts +4 -0
- package/tsconfig.json +2 -0
|
@@ -33,7 +33,7 @@ export declare class BaseInlineCheckout<T extends CustomizationOptions = Customi
|
|
|
33
33
|
currency?: string;
|
|
34
34
|
protected cardOnFileInstance: CardOnFile | null;
|
|
35
35
|
protected telemetry: SdkTelemetryClient;
|
|
36
|
-
constructor({ mode, customization, apiKey, apiKeyTonder, returnUrl, tdsIframeId, callBack, baseUrlTonder, tonderPayButtonId }: IInlineCheckoutBaseOptions);
|
|
36
|
+
constructor({ mode, customization, apiKey, apiKeyTonder, returnUrl, tdsIframeId, callBack, baseUrlTonder, tonderPayButtonId, sdkInfo, }: IInlineCheckoutBaseOptions);
|
|
37
37
|
configureCheckout(data: IConfigureCheckout): void;
|
|
38
38
|
/**
|
|
39
39
|
* Get customer ID for telemetry (if available)
|
|
@@ -12,7 +12,6 @@ export declare class SdkTelemetryClient {
|
|
|
12
12
|
private config;
|
|
13
13
|
private readonly REQUEST_TIMEOUT_MS;
|
|
14
14
|
private readonly MAX_MESSAGE_LENGTH;
|
|
15
|
-
private readonly MAX_STACK_LENGTH;
|
|
16
15
|
constructor(config: ITelemetryConfig);
|
|
17
16
|
/**
|
|
18
17
|
* Capture an exception and send immediately
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{get as e}from"lodash";import t from"skyflow-js";function r(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{d(n.next(e))}catch(e){o(e)}}function a(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}d((n=n.apply(e,t||[])).next())}))}function n(e,t,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(e):n?n.value:t.get(e)}function i(e,t,r,n,i){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!i)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?i.call(e,r):i?i.value=r:t.set(e,r),r}function o(e,t,n){return r(this,void 0,void 0,(function*(){const r=yield fetch(`${e}/api/v1/payments/business/${t}`,{headers:{Authorization:`Token ${t}`},signal:n});return yield r.json()}))}"function"==typeof SuppressedError&&SuppressedError;class s{constructor({code:e,body:t,name:r,message:n,stack:i}){this.code=e,this.body=t,this.name=r,this.message=n,this.stack=i}}var a;!function(e){e.INIT_ERROR="INIT_ERROR",e.CREATE_ERROR="CREATE_ERROR",e.REMOVE_SDK_ERROR="REMOVE_SDK_ERROR",e.INVALID_TYPE="INVALID_TYPE",e.STATE_ERROR="STATE_ERROR",e.FETCH_BUSINESS_ERROR="FETCH_BUSINESS_ERROR",e.INVALID_CONFIG="INVALID_CONFIG",e.MERCHANT_CREDENTIAL_REQUIRED="MERCHANT_CREDENTIAL_REQUIRED",e.INVALID_PAYMENT_REQUEST="INVALID_PAYMENT_REQUEST",e.INVALID_PAYMENT_REQUEST_CARD_PM="INVALID_PAYMENT_REQUEST_CARD_PM",e.TYPE_SDK_REQUIRED="TYPE_SDK_REQUIRED",e.ENVIRONMENT_REQUIRED="ENVIRONMENT_REQUIRED",e.FETCH_CARDS_ERROR="FETCH_CARDS_ERROR",e.FETCH_TRANSACTION_ERROR="FETCH_TRANSACTION_ERROR",e.CUSTOMER_AUTH_TOKEN_NOT_VALID="CUSTOMER_AUTH_TOKEN_NOT_VALID",e.SAVE_CARD_ERROR="SAVE_CARD_ERROR",e.REMOVE_CARD_ERROR="REMOVE_CARD_ERROR",e.SUMMARY_CARD_ERROR="SUMMARY_CARD_ERROR",e.CREATE_PAYMENT_ERROR="CREATE_PAYMENT_ERROR",e.PAYMENT_PROCESS_ERROR="PAYMENT_PROCESS_ERROR",e.INVALID_CARD_DATA="INVALID_CARD_DATA",e.SAVE_CARD_PROCESS_ERROR="SAVE_CARD_PROCESS_ERROR",e.START_CHECKOUT_ERROR="START_CHECKOUT_ERROR",e.CREATE_ORDER_ERROR="CREATE_ORDER_ERROR",e.BUSINESS_ID_REQUIRED="BUSINESS_ID_REQUIRED",e.CLIENT_ID_REQUIRED="CLIENT_ID_REQUIRED",e.INVALID_AMOUNT="INVALID_AMOUNT",e.INVALID_ITEMS="INVALID_ITEMS",e.CUSTOMER_OPERATION_ERROR="CUSTOMER_OPERATION_ERROR",e.INVALID_EMAIL="INVALID_EMAIL",e.FETCH_PAYMENT_METHODS_ERROR="FETCH_PAYMENT_METHODS_ERROR",e.INVALID_VAULT_TOKEN="INVALID_VAULT_TOKEN",e.VAULT_TOKEN_ERROR="VAULT_TOKEN_ERROR",e.SECURE_TOKEN_ERROR="SECURE_TOKEN_ERROR",e.SECURE_TOKEN_INVALID="SECURE_TOKEN_INVALID",e.INVALID_SECRET_API_KEY="INVALID_SECRET_API_KEY",e.REMOVE_CARD="REMOVE_CARD",e.SKYFLOW_NOT_INITIALIZED="SKYFLOW_NOT_INITIALIZED",e.ERROR_LOAD_PAYMENT_FORM="ERROR_LOAD_PAYMENT_FORM",e.ERROR_LOAD_ENROLLMENT_FORM="ERROR_LOAD_ENROLLMENT_FORM",e.MOUNT_COLLECT_ERROR="MOUNT_COLLECT_ERROR",e.CARD_ON_FILE_DECLINED="CARD_ON_FILE_DECLINED",e.CARD_SAVED_SUCCESSFULLY="CARD_SAVED_SUCCESSFULLY",e.CARD_REMOVED_SUCCESSFULLY="CARD_REMOVED_SUCCESSFULLY",e.REQUEST_ABORTED="REQUEST_ABORTED",e.REQUEST_FAILED="REQUEST_FAILED",e.UNKNOWN_ERROR="UNKNOWN_ERROR",e.THREEDS_REDIRECTION_ERROR="THREEDS_REDIRECTION_ERROR"}(a||(a={}));const d={[a.INIT_ERROR]:"Error initializing the SDK.",[a.INVALID_TYPE]:"SDK Type invalid.",[a.STATE_ERROR]:"Error updating SDK state.",[a.FETCH_BUSINESS_ERROR]:"Error retrieving merchant information.",[a.INVALID_CONFIG]:"Required configuration options.",[a.MERCHANT_CREDENTIAL_REQUIRED]:"Merchant credential required.",[a.INVALID_PAYMENT_REQUEST]:"The payment data must be of type: :::interface:::.",[a.INVALID_PAYMENT_REQUEST_CARD_PM]:"The fields card and payment_method cannot be provided together.",[a.TYPE_SDK_REQUIRED]:"SDK type required.",[a.ENVIRONMENT_REQUIRED]:"Environment required.",[a.FETCH_CARDS_ERROR]:"Error retrieving cards.",[a.CUSTOMER_AUTH_TOKEN_NOT_VALID]:"The customer's auth token is invalid. Please verify that the customer's data was provided when creating the SDK (sdk.create) and try again.",[a.SAVE_CARD_ERROR]:"Error saving the card.",[a.REMOVE_CARD_ERROR]:"Error deleting the card.",[a.CREATE_PAYMENT_ERROR]:"Error creating the payment.",[a.PAYMENT_PROCESS_ERROR]:"There was an issue processing the payment.",[a.CARD_SAVED_SUCCESSFULLY]:"Card saved successfully.",[a.CARD_REMOVED_SUCCESSFULLY]:"Card deleted successfully.",[a.SAVE_CARD_PROCESS_ERROR]:"Error processing card data.",[a.START_CHECKOUT_ERROR]:"Error processing the payment.",[a.CREATE_ORDER_ERROR]:"Error creating the order.",[a.BUSINESS_ID_REQUIRED]:"Business ID is required.",[a.CLIENT_ID_REQUIRED]:"Client ID is required.",[a.INVALID_AMOUNT]:"Invalid amount.",[a.INVALID_ITEMS]:"Invalid items.",[a.CUSTOMER_OPERATION_ERROR]:"Error registering or fetching customer",[a.INVALID_EMAIL]:"Invalid email.",[a.FETCH_PAYMENT_METHODS_ERROR]:"Error retrieving active payment methods.",[a.INVALID_VAULT_TOKEN]:"An invalid vault token response was received.",[a.VAULT_TOKEN_ERROR]:"Error retrieving the vault token.",[a.SECURE_TOKEN_ERROR]:"Error getting secure token.",[a.SECURE_TOKEN_INVALID]:"Invalid secure token.",[a.INVALID_SECRET_API_KEY]:"SECRET API KEY is required.",[a.REMOVE_CARD]:"Card deleted successfully",[a.SKYFLOW_NOT_INITIALIZED]:"Skyflow not initialized.",[a.ERROR_LOAD_PAYMENT_FORM]:"There was an issue loading the payment form.",[a.INVALID_CARD_DATA]:"Invalid card data.",[a.ERROR_LOAD_ENROLLMENT_FORM]:"There was an issue loading the card form.",[a.MOUNT_COLLECT_ERROR]:"Mount failed. Make sure all inputs are complete and valid.",[a.CARD_ON_FILE_DECLINED]:"Transaction declined. Please verify your card details.",[a.REQUEST_ABORTED]:"Requests canceled.",[a.REQUEST_FAILED]:"Request failed.",[a.UNKNOWN_ERROR]:"An unexpected error occurred.",[a.CREATE_ERROR]:"Error creating the SDK.",[a.FETCH_TRANSACTION_ERROR]:"Error retrieving the transaction.",[a.THREEDS_REDIRECTION_ERROR]:"Ocurrió un error durante la redirección de 3DS.",[a.REMOVE_SDK_ERROR]:"Ocurrió un error removiendo la instancia del SDK."};a.INIT_ERROR,a.STATE_ERROR,a.FETCH_BUSINESS_ERROR,a.INVALID_CONFIG,a.TYPE_SDK_REQUIRED,a.ENVIRONMENT_REQUIRED,a.FETCH_CARDS_ERROR,a.SAVE_CARD_ERROR,a.REMOVE_CARD_ERROR,a.CREATE_PAYMENT_ERROR,a.START_CHECKOUT_ERROR,a.CREATE_ORDER_ERROR,a.BUSINESS_ID_REQUIRED,a.CLIENT_ID_REQUIRED,a.INVALID_AMOUNT,a.INVALID_ITEMS,a.CUSTOMER_OPERATION_ERROR,a.INVALID_EMAIL,a.FETCH_PAYMENT_METHODS_ERROR,a.INVALID_VAULT_TOKEN,a.VAULT_TOKEN_ERROR,a.SECURE_TOKEN_ERROR,a.INVALID_SECRET_API_KEY,a.CUSTOMER_AUTH_TOKEN_NOT_VALID,a.SECURE_TOKEN_INVALID,a.REMOVE_CARD,a.SKYFLOW_NOT_INITIALIZED,a.INVALID_TYPE,a.PAYMENT_PROCESS_ERROR,a.INVALID_PAYMENT_REQUEST,a.INVALID_PAYMENT_REQUEST_CARD_PM,a.SAVE_CARD_PROCESS_ERROR,a.ERROR_LOAD_PAYMENT_FORM,a.INVALID_CARD_DATA,a.ERROR_LOAD_ENROLLMENT_FORM,a.MOUNT_COLLECT_ERROR,a.CARD_ON_FILE_DECLINED,a.CARD_SAVED_SUCCESSFULLY,a.CARD_REMOVED_SUCCESSFULLY,a.REQUEST_ABORTED,a.REQUEST_FAILED,a.UNKNOWN_ERROR,a.CREATE_ERROR,a.FETCH_TRANSACTION_ERROR,a.THREEDS_REDIRECTION_ERROR,a.REMOVE_SDK_ERROR;class l extends Error{constructor(e){var t,r;const n=e.message||d[e.code]||"Unknown error";super(n),this.name="TonderError",this.code=e.code,this.details={code:(null===(t=e.details)||void 0===t?void 0:t.code)||e.code,message:(null===(r=e.details)||void 0===r?void 0:r.message)||n}}}const c=()=>({javascript_enabled:!0,time_zone:(new Date).getTimezoneOffset(),language:navigator.language||"en-US",color_depth:window.screen?window.screen.colorDepth:null,screen_width:window.screen?window.screen.width*window.devicePixelRatio||window.screen.width:null,screen_height:window.screen?window.screen.height*window.devicePixelRatio||window.screen.height:null,user_agent:navigator.userAgent}),u=e=>{var t;return e&&"business"in e?null===(t=null==e?void 0:e.business)||void 0===t?void 0:t.pk:""},h=e=>new s({code:(null==e?void 0:e.status)?e.status:e.code,body:null==e?void 0:e.body,name:e?"string"==typeof e?"catch":e.name:"Error",message:e?"string"==typeof e?e:e.message:"Error",stack:"string"==typeof e?void 0:e.stack}),p=(e,t=void 0)=>r(void 0,void 0,void 0,(function*(){let r,n,i="Error";e&&"json"in e&&(r=yield null==e?void 0:e.json()),e&&"status"in e&&(n=e.status.toString()),!r&&e&&"text"in e&&(i=yield e.text()),(null==r?void 0:r.detail)&&(i=r.detail);return new s({code:n,body:r,name:n,message:i,stack:t})}));class _{constructor({payload:e=null,apiKey:t,baseUrl:r,redirectOnComplete:n,tdsIframeId:i,tonderPayButtonId:o,callBack:s}){this.localStorageKey="verify_transaction_status_url",this.setPayload=e=>{this.payload=e},this.baseUrl=r,this.apiKey=t,this.payload=e,this.tdsIframeId=i,this.tonderPayButtonId=o,this.redirectOnComplete=n,this.callBack=s}setStorageItem(e){return localStorage.setItem(this.localStorageKey,JSON.stringify(e))}getStorageItem(){return localStorage.getItem(this.localStorageKey)}removeStorageItem(){return localStorage.removeItem(this.localStorageKey)}saveVerifyTransactionUrl(){var e,t,r,n,i,o;const s=null===(r=null===(t=null===(e=this.payload)||void 0===e?void 0:e.next_action)||void 0===t?void 0:t.redirect_to_url)||void 0===r?void 0:r.verify_transaction_status_url;if(s)this.saveUrlWithExpiration(s);else{const e=null===(o=null===(i=null===(n=this.payload)||void 0===n?void 0:n.next_action)||void 0===i?void 0:i.iframe_resources)||void 0===o?void 0:o.verify_transaction_status_url;e?this.saveUrlWithExpiration(e):console.log("No verify_transaction_status_url found")}}saveUrlWithExpiration(e){try{const t={url:e,expires:(new Date).getTime()+12e5};this.setStorageItem(t)}catch(e){console.log("error: ",e)}}getUrlWithExpiration(){const e=this.getStorageItem();if(e){const t=JSON.parse(e);if(!t)return;return(new Date).getTime()>t.expires?(this.removeVerifyTransactionUrl(),null):t.url}return null}removeVerifyTransactionUrl(){return this.removeStorageItem()}getVerifyTransactionUrl(){return this.getStorageItem()}loadIframe(){var e,t,r;if(null===(r=null===(t=null===(e=this.payload)||void 0===e?void 0:e.next_action)||void 0===t?void 0:t.iframe_resources)||void 0===r?void 0:r.iframe)return new Promise(((e,t)=>{var r,n,i;const o=null===(i=null===(n=null===(r=this.payload)||void 0===r?void 0:r.next_action)||void 0===n?void 0:n.iframe_resources)||void 0===i?void 0:i.iframe;if(o){this.saveVerifyTransactionUrl();const r=document.createElement("div");r.innerHTML=o,document.body.appendChild(r);const n=document.createElement("script");n.textContent='document.getElementById("tdsMmethodForm").submit();',r.appendChild(n);const i=document.getElementById("tdsMmethodTgtFrame");i?i.onload=()=>e(!0):(console.log("No redirection found"),t(!1))}else console.log("No redirection found"),t(!1)}))}getRedirectUrl(){var e,t,r;return null===(r=null===(t=null===(e=this.payload)||void 0===e?void 0:e.next_action)||void 0===t?void 0:t.redirect_to_url)||void 0===r?void 0:r.url}redirectToChallenge(){const e=this.getRedirectUrl();if(e)if(this.saveVerifyTransactionUrl(),this.redirectOnComplete)window.location=e;else{const t=document.querySelector(`#${this.tdsIframeId}`);if(t){t.setAttribute("src",e),t.setAttribute("style","display: block");const n=this,i=e=>r(this,void 0,void 0,(function*(){const e=()=>{try{const e=document.querySelector(`#${this.tonderPayButtonId}`);e&&(e.disabled=!1)}catch(e){}t&&t.setAttribute("style","display: none"),n.callBack&&n.callBack(n.payload),t.removeEventListener("load",i)},o=t=>r(this,void 0,void 0,(function*(){const i=yield new Promise(((e,r)=>e(t)));if(i){if((e=>"Pending"!==(null==e?void 0:e.transaction_status))(i))return e();{const e=setTimeout((()=>r(this,void 0,void 0,(function*(){clearTimeout(e),yield o(n.requestTransactionStatus())}))),7e3)}}}));yield o(n.requestTransactionStatus())}));t.addEventListener("load",i)}else console.log("No iframe found")}else this.callBack&&this.callBack(this.payload)}requestTransactionStatus(){return r(this,void 0,void 0,(function*(){const e=this.getUrlWithExpiration(),t=e.startsWith("https://")?e:`${this.baseUrl}${e}`,r=yield fetch(t,{method:"GET",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKey}`}});if(200!==r.status)return console.error("La verificación de la transacción falló."),null;return yield r.json()}))}getURLParameters(){const e={},t=new URLSearchParams(window.location.search);for(const[r,n]of t)e[r]=n;return e}handleSuccessTransaction(e){return this.removeVerifyTransactionUrl(),e}handleDeclinedTransaction(e){return this.removeVerifyTransactionUrl(),e}handle3dsChallenge(e){return r(this,void 0,void 0,(function*(){const t=document.createElement("form");t.name="frm",t.method="POST",t.action=e.redirect_post_url;const r=document.createElement("input");r.type="hidden",r.name=e.creq,r.value=e.creq,t.appendChild(r);const n=document.createElement("input");n.type="hidden",n.name=e.term_url,n.value=e.TermUrl,t.appendChild(n),document.body.appendChild(t),t.submit(),yield this.verifyTransactionStatus()}))}handleTransactionResponse(e){return r(this,void 0,void 0,(function*(){const t=yield e.json();return"Pending"===t.status&&t.redirect_post_url?yield this.handle3dsChallenge(t):["Success","Authorized"].includes(t.status)?this.handleSuccessTransaction(t):(this.handleDeclinedTransaction(e),t)}))}verifyTransactionStatus(){return r(this,void 0,void 0,(function*(){const e=this.getUrlWithExpiration();if(e){const t=e.startsWith("https://")?e:`${this.baseUrl}${e}`;try{const e=yield fetch(t,{method:"GET",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKey}`}});return 200!==e.status?(console.error("La verificación de la transacción falló."),this.removeVerifyTransactionUrl(),e):yield this.handleTransactionResponse(e)}catch(e){console.error("Error al verificar la transacción:",e),this.removeVerifyTransactionUrl()}}else console.log("No verify_transaction_status_url found")}))}}const E=Object.freeze({production:"https://app.tonder.io",sandbox:"https://sandbox.tonder.io",stage:"https://stage.tonder.io",development:"http://localhost:8000"});function m(e,t,n){return r(this,void 0,void 0,(function*(){try{const r=`${e}/api/v1/checkout-router/`,i=n,o=yield fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${t}`},body:JSON.stringify(Object.assign(Object.assign({},i),"undefined"!=typeof MP_DEVICE_SESSION_ID?{mp_device_session_id:MP_DEVICE_SESSION_ID}:{}))});if(o.status>=200&&o.status<=299)return yield o.json();{const e=yield o.json(),t=new Error("Failed to start checkout router");throw t.details=e,t}}catch(e){throw e}}))}function y(e,t,n=!0,i=null){return r(this,void 0,void 0,(function*(){let r=yield window.OpenPay;return r.setId(e),r.setApiKey(t),r.setSandboxMode(n),yield r.deviceData.setup({signal:i})}))}const R=Object.freeze({production:"https://api.tonder.io",sandbox:"https://api-stage.tonder.io",stage:"https://api-stage.tonder.io",development:"https://api-stage.tonder.io"}),v=Object.freeze({TELEMETRY:"/telemetry/v1/events",ACQ_SUBSCRIPTION_TOKEN:"/acq-kushki/subscription/token",ACQ_SUBSCRIPTION_CREATE:"/acq-kushki/subscription/create"});function f(e="stage"){return`${R[e]}${v.TELEMETRY}`}const A="https://cdn.kushkipagos.com/kushki.min.js";let O=!1,T=null;class C{constructor(e){var t;this.acquirerInstance=null,this.isTestEnvironment=null===(t=e.isTestEnvironment)||void 0===t||t;const r=this.isTestEnvironment?"stage":"production";this.apiUrl=function(e="stage"){return R[e]}(r),this.merchantId=e.merchantId,this.apiKey=e.apiKey}initialize(){return r(this,void 0,void 0,(function*(){yield function(){return r(this,void 0,void 0,(function*(){return O?Promise.resolve():T||(T=new Promise(((e,t)=>{if(document.querySelector(`script[src="${A}"]`))return O=!0,void e();const r=document.createElement("script");r.src=A,r.async=!0,r.onload=()=>{O=!0,e()},r.onerror=()=>{T=null,t(new Error("Failed to load acquirer script"))},document.head.appendChild(r)})),T)}))}(),this.acquirerInstance=function(e,t){if(!window.Kushki)throw new Error("Acquirer script not loaded. Call initialize() first.");return new window.Kushki({merchantId:e,inTestEnvironment:t})}(this.merchantId,this.isTestEnvironment)}))}getAcquirerInstance(){if(!this.acquirerInstance)throw new Error("CardOnFile not initialized. Call initialize() first.");return this.acquirerInstance}getJwt(e){return r(this,void 0,void 0,(function*(){const t=this.getAcquirerInstance();return new Promise(((r,n)=>{t.requestSecureInit({card:{number:e}},(e=>{if("code"in e&&e.code)return void n(new Error(`Error getting JWT: ${e.message}`));const t=e;t.jwt?r(t.jwt):n(new Error("No JWT returned from acquirer"))}))}))}))}generateToken(e){return r(this,void 0,void 0,(function*(){const t=yield fetch(`${this.apiUrl}${v.ACQ_SUBSCRIPTION_TOKEN}`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKey}`},body:JSON.stringify(e)});if(!t.ok){const e=yield t.text();throw new Error(`Failed to generate token: ${t.status} - ${e}`)}return t.json()}))}createSubscription(e){return r(this,void 0,void 0,(function*(){const t=yield fetch(`${this.apiUrl}${v.ACQ_SUBSCRIPTION_CREATE}`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKey}`},body:JSON.stringify(e)});if(!t.ok){const e=yield t.text();throw new Error(`Failed to create subscription: ${t.status} - ${e}`)}return t.json()}))}validate3DS(e,t){return r(this,void 0,void 0,(function*(){const r=this.getAcquirerInstance();return new Promise(((n,i)=>{r.requestValidate3DS({secureId:e,security:t},(e=>{const t=e;t.code&&"3DS000"!==t.code?i(new Error("3DS validation failed}")):!1!==t.isValid?n(!0):i(new Error("3DS validation failed"))}))}))}))}process(e){var t,n;return r(this,void 0,void 0,(function*(){const r=yield this.getJwt(e.cardBin),i=yield this.generateToken({card:e.cardTokens,currency:e.currency,jwt:r}),o=i.secureId||(null===(t=i.details)||void 0===t?void 0:t.secureId),s=i.security||(null===(n=i.details)||void 0===n?void 0:n.security);if(!o||!s)throw new Error("Missing secureId or security in token response");return yield this.validate3DS(o,s),this.createSubscription({token:i.token,contactDetails:e.contactDetails,metadata:{customerId:e.customerId},currency:e.currency})}))}}class g{constructor(e){this.REQUEST_TIMEOUT_MS=1200,this.MAX_MESSAGE_LENGTH=500,this.MAX_STACK_LENGTH=15e3,this.config=e}captureException(e,t){try{const r=this.buildEvent(e,t||{});this.sendEvent(r)}catch(e){}}extractErrorInfo(e){try{if(e instanceof Error)return{name:e.name||"Error",message:this.truncate(e.message||"Unknown error",this.MAX_MESSAGE_LENGTH),stack:e.stack?this.truncate(e.stack,this.MAX_STACK_LENGTH):void 0};const t=this.safeStringify(e);return{name:"NonErrorException",message:this.truncate(t,this.MAX_MESSAGE_LENGTH),stack:void 0}}catch(e){return{name:"SerializationError",message:"Failed to serialize error",stack:void 0}}}safeStringify(e){try{const t=new WeakSet;return JSON.stringify(e,((e,r)=>{if("object"==typeof r&&null!==r){if(t.has(r))return"[Circular]";t.add(r)}return r}))}catch(t){return String(e)}}buildEvent(e,t){const r=this.extractErrorInfo(e),n=Object.assign({},t.metadata||{});"undefined"!=typeof window&&(n.url=window.location.href);const i={platform:this.config.platform,platform_version:this.config.platform_version,env:this.config.mode,feature:t.feature||"unknown",level:"error",message:r.message,name:r.name,metadata:n};return t.tenant_id&&(i.tenant_id=t.tenant_id),t.process_id&&(i.process_id=t.process_id),t.user_id&&(i.user_id=t.user_id),r.stack&&(i.stack=r.stack),t.error_code&&(i.error_code=t.error_code),t.http_status&&(i.http_status=t.http_status),i}truncate(e,t){return e.length<=t?e:e.substring(0,t)+"..."}sendEvent(e){this.sendHttpRequest(e).then((()=>{})).catch((()=>{}))}sendHttpRequest(e){return r(this,void 0,void 0,(function*(){try{const t=JSON.stringify(e),r=new AbortController,n=setTimeout((()=>r.abort()),this.REQUEST_TIMEOUT_MS);try{const e=yield fetch(this.config.endpoint,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${this.config.apiKey}`},body:t,keepalive:!0,signal:r.signal});return clearTimeout(n),e.ok}catch(e){return clearTimeout(n),!1}}catch(e){return!1}}))}}const I=Object.freeze({name:"@tonder.io/ionic-lite-sdk",version:"0.0.68-beta.DEV-2106.4"});class S extends Error{constructor(e){var t;const r=S.parseStatusCode(e.statusCode);super(S.resolveMessage(e.errorCode,e.message)),this.status="error",Object.setPrototypeOf(this,new.target.prototype),this.name="TonderError",this.code=e.errorCode,this.statusCode=r;const n=Object.assign({},e.details||{});delete n.systemCode;const i=S.extractSystemError(e,n);this.details=Object.assign(Object.assign({},n),{code:e.errorCode,statusCode:r}),this.details.systemError=i,null===(t=Error.captureStackTrace)||void 0===t||t.call(Error,this,S)}static parseStatusCode(e){const t=Number(e);return Number.isFinite(t)?t<100||t>599?500:Math.trunc(t):500}static resolveMessage(e,t){return t||(d[e]||d[a.UNKNOWN_ERROR]||"An unexpected error occurred.")}static isHttpStatusCode(e){const t=Number(e);return Number.isFinite(t)&&t>=100&&t<=599}static resolveSystemError(e){return"string"!=typeof e?null:e.trim()}static extractSystemError(e,t){var r,n,i;const o=null==t?void 0:t.cause,s=[null==t?void 0:t.systemError,null===(r=null==e?void 0:e.details)||void 0===r?void 0:r.systemError,null===(n=null==o?void 0:o.body)||void 0===n?void 0:n.code,null===(i=null==o?void 0:o.details)||void 0===i?void 0:i.code];for(const e of s){const t=S.resolveSystemError(e);if(t)return t}return"APP_INTERNAL_001"}}function N(e,t){var r;if(!(null==e?void 0:e.errorCode))throw new Error("buildPublicAppError requires errorCode");const n=!!e.details&&Object.keys(e.details).length>0,i=e.errorCode!==(null==t?void 0:t.code)||!!e.message||void 0!==e.statusCode||n;if(t instanceof S&&!i)return t;const o=null!==(r=e.statusCode)&&void 0!==r?r:S.isHttpStatusCode(null==t?void 0:t.statusCode)?Number(t.statusCode):S.isHttpStatusCode(null==t?void 0:t.code)?Number(t.code):S.isHttpStatusCode(null==t?void 0:t.status)?Number(t.status):500,s=Object.assign(Object.assign({},(null==t?void 0:t.details)||{}),e.details||{});return void 0===s.cause&&void 0!==t&&(s.cause=t),new S({errorCode:e.errorCode,message:e.message,details:s,statusCode:o})}var b,D,M,U,k,L,w,P,j,V,K,F,x;class B{constructor({mode:e="stage",customization:t,apiKey:r,apiKeyTonder:n,returnUrl:i,tdsIframeId:o,callBack:s=(()=>{}),baseUrlTonder:a,tonderPayButtonId:d}){b.add(this),this.baseUrl="",this.cartTotal="0",this.secureToken="",this.customization={redirectOnComplete:!0},this.metadata={},this.order_reference=null,this.card={},this.currency="",this.cardOnFileInstance=null,D.set(this,void 0),M.set(this,void 0),this.apiKeyTonder=n||r||"",this.returnUrl=i,this.callBack=s,this.mode=e,this.customer={},this.baseUrl=a||E[this.mode]||E.stage,this.abortController=new AbortController,this.customization=Object.assign(Object.assign({},this.customization),t||{}),this.process3ds=new _({apiKey:r,baseUrl:this.baseUrl,redirectOnComplete:this.customization.redirectOnComplete,tdsIframeId:o,tonderPayButtonId:d,callBack:s}),this.tdsIframeId=o,this.telemetry=new g({endpoint:f(this.mode),apiKey:this.apiKeyTonder,platform:I.name,platform_version:I.version,mode:this.mode||"stage"})}configureCheckout(e){"secureToken"in e&&n(this,b,"m",L).call(this,e.secureToken),n(this,b,"m",U).call(this,e)}getCustomerId(){var e,t;return null===(t=null===(e=n(this,M,"f"))||void 0===e?void 0:e.id)||void 0===t?void 0:t.toString()}reportSdkError(e,t){var r,n,i;try{const o=this.getCustomerId(),s=Object.assign({tenant_id:null===(i=null===(n=null===(r=this.merchantData)||void 0===r?void 0:r.business)||void 0===n?void 0:n.pk)||void 0===i?void 0:i.toString(),user_id:o},t||{});s.user_id||delete s.user_id,s.feature=(null==t?void 0:t.feature)||"unknown",this.telemetry.captureException(e,s)}catch(e){}}verify3dsTransaction(){return r(this,void 0,void 0,(function*(){const e=yield this.process3ds.verifyTransactionStatus(),t=yield n(this,b,"m",K).call(this,e);return this.process3ds.setPayload(t),this._handle3dsRedirect(t)}))}payment(e){return new Promise(((t,i)=>r(this,void 0,void 0,(function*(){var r,o;let s;try{n(this,b,"m",U).call(this,e),s=yield this._checkout(e),this.process3ds.setPayload(s);if(yield this._handle3dsRedirect(s)){try{const e=document.querySelector(`#${this.tonderPayButtonId}`);e&&(e.disabled=!1)}catch(e){}this.callBack&&this.callBack(s),t(s)}}catch(t){this.reportSdkError(t,{feature:"payment",process_id:(null==s?void 0:s.payment_id)||(null===(r=null==s?void 0:s.payment)||void 0===r?void 0:r.id)||(null===(o=null==s?void 0:s.payment)||void 0===o?void 0:o.pk),metadata:{step:"payment",request:e,response:s}}),i(N({errorCode:a.PAYMENT_PROCESS_ERROR},t))}}))))}getSecureToken(e){return r(this,void 0,void 0,(function*(){try{return yield function(e,t,n=null){return r(this,void 0,void 0,(function*(){try{const r=yield fetch(`${e}/api/secure-token/`,{method:"POST",headers:{Authorization:`Token ${t}`,"Content-Type":"application/json"},signal:n});if(r.ok)return yield r.json();throw yield p(r)}catch(e){throw h(e)}}))}(this.baseUrl,e)}catch(e){throw this.reportSdkError(e,{feature:"secure-token",metadata:{step:"getSecureToken"}}),N({errorCode:a.SECURE_TOKEN_ERROR},e)}}))}_initializeCheckout(){return r(this,void 0,void 0,(function*(){const e=yield this._fetchMerchantData();e&&e.mercado_pago&&e.mercado_pago.active&&function(){try{const e=document.createElement("script");e.src="https://www.mercadopago.com/v2/security.js",e.setAttribute("view",""),e.onload=()=>{},e.onerror=e=>{console.error("Error loading Mercado Pago script:",e)},document.head.appendChild(e)}catch(e){console.error("Error attempting to inject Mercado Pago script:",e)}}(),this._hasCardOnFileKeys()&&(yield this._initializeCardOnFile())}))}_checkout(e){return r(this,void 0,void 0,(function*(){throw new Error("The #checkout method should be implement in child classes.")}))}_setCartTotal(e){throw new Error("The #setCartTotal method should be implement in child classes.")}_getCustomer(e=null){return r(this,void 0,void 0,(function*(){return n(this,M,"f")||i(this,M,yield function(e,t,n,i=null){return r(this,void 0,void 0,(function*(){const r=`${e}/api/v1/customer/`,o={email:n.email,first_name:null==n?void 0:n.firstName,last_name:null==n?void 0:n.lastName,phone:null==n?void 0:n.phone},s=yield fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${t}`},signal:i,body:JSON.stringify(o)});if(201===s.status)return yield s.json();throw new Error(`Error: ${s.statusText}`)}))}(this.baseUrl,this.apiKeyTonder,this.customer,e),"f"),n(this,M,"f")}))}_handleCheckout({card:t,payment_method:i,customer:o,isSandbox:s,enable_card_on_file:a,returnUrl:d}){return r(this,void 0,void 0,(function*(){const{openpay_keys:l,reference:u,business:h}=this.merchantData,p=Number(this.cartTotal);let _,E,R;try{let v;!v&&l.merchant_id&&l.public_key&&!i&&(v=yield y(l.merchant_id,l.public_key,s,this.abortController.signal));const{id:f,auth_token:A}=o;_={business:this.apiKeyTonder,client:A,billing_address_id:null,shipping_address_id:null,amount:p,status:"A",reference:u,is_oneclick:!0,items:this.cartItems,currency:this.currency,metadata:this.metadata};const O=yield function(e,t,n){return r(this,void 0,void 0,(function*(){const r=`${e}/api/v1/orders/`,i=n,o=yield fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${t}`},body:JSON.stringify(i)});if(201===o.status)return yield o.json();throw new Error(`Error: ${o.statusText}`)}))}(this.baseUrl,this.apiKeyTonder,_),T=(new Date).toISOString();E={business_pk:h.pk,client_id:f,amount:p,date:T,order_id:O.id,customer_order_reference:this.order_reference?this.order_reference:u,items:this.cartItems,currency:this.currency,metadata:this.metadata};const C=yield function(e,t,n){return r(this,void 0,void 0,(function*(){const r=`${e}/api/v1/business/${n.business_pk}/payments/`,i=n,o=yield fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${t}`},body:JSON.stringify(i)});if(o.status>=200&&o.status<=299)return yield o.json();throw new Error(`Error: ${o.statusText}`)}))}(this.baseUrl,this.apiKeyTonder,E);R=Object.assign(Object.assign(Object.assign(Object.assign({name:e(this.customer,"firstName",e(this.customer,"name","")),last_name:e(this.customer,"lastName",e(this.customer,"lastname","")),email_client:e(this.customer,"email",""),phone_number:e(this.customer,"phone",""),return_url:d||this.returnUrl,id_product:"no_id",quantity_product:1,id_ship:"0",instance_id_ship:"0",amount:p,title_ship:"shipping",description:"transaction",device_session_id:v||null,token_id:"",order_id:O.id,business_id:h.pk,payment_id:C.pk,source:"sdk",items:this.cartItems,metadata:this.metadata,browser_info:c(),currency:this.currency},i?{payment_method:i}:{card:t}),{apm_config:n(this,D,"f")}),this.customer&&"identification"in this.customer?{identification:this.customer.identification}:{}),void 0!==a?{enable_card_on_file:a}:{});const g=yield m(this.baseUrl,this.apiKeyTonder,R);return g||!1}catch(e){throw this.reportSdkError(e,{feature:"payment",process_id:null==R?void 0:R.payment_id,metadata:{step:"_handleCheckout",orderItems:_,paymentItems:E,routerItems:R}}),e}}))}_fetchMerchantData(){return r(this,void 0,void 0,(function*(){try{return this.merchantData||(this.merchantData=yield o(this.baseUrl,this.apiKeyTonder,this.abortController.signal)),this.merchantData}catch(e){return this.reportSdkError(e,{feature:"fetch-merchant-data",metadata:{step:"_fetchMerchantData"}}),this.merchantData}}))}_getCustomerCards(e,t){return r(this,void 0,void 0,(function*(){return yield function(e,t,n,i,o=null){return r(this,void 0,void 0,(function*(){try{const r=`${e}/api/v1/business/${i}/cards/`,s=yield fetch(r,{method:"GET",headers:{Authorization:`Bearer ${n}`,"Content-Type":"application/json","User-token":t},signal:o});if(s.ok)return yield s.json();if(401===s.status)return{user_id:0,cards:[]};throw yield p(s)}catch(e){throw h(e)}}))}(this.baseUrl,e,this.secureToken,t)}))}_saveCustomerCard(e,t,n,i=!1){return r(this,void 0,void 0,(function*(){return yield function(e,t,n,i,o,s=!1){return r(this,void 0,void 0,(function*(){try{const r=`${e}/api/v1/business/${i}/cards/`,a=yield fetch(r,{method:"POST",headers:Object.assign({Authorization:`Bearer ${n}`,"Content-Type":"application/json","User-token":t},s?{"X-App-Origin":"sdk/ionic"}:{}),body:JSON.stringify(o)});if(a.ok)return yield a.json();throw yield p(a)}catch(e){throw h(e)}}))}(this.baseUrl,e,this.secureToken,t,n,i)}))}_removeCustomerCard(e,t,n){return r(this,void 0,void 0,(function*(){return yield function(e,t,n,i="",o){return r(this,void 0,void 0,(function*(){try{const r=`${e}/api/v1/business/${o}/cards/${i}`,s=yield fetch(r,{method:"DELETE",headers:{Authorization:`Bearer ${n}`,"Content-Type":"application/json","User-token":t}});if(204===s.status)return d[a.CARD_REMOVED_SUCCESSFULLY];if(s.ok&&"json"in s)return yield s.json();throw yield p(s)}catch(e){throw h(e)}}))}(this.baseUrl,e,this.secureToken,n,t)}))}_fetchCustomerPaymentMethods(){return r(this,void 0,void 0,(function*(){return yield function(e,t,n={status:"active",pagesize:"10000"},i=null){return r(this,void 0,void 0,(function*(){try{const r=new URLSearchParams(n).toString(),o=yield fetch(`${e}/api/v1/payment_methods?${r}`,{method:"GET",headers:{Authorization:`Token ${t}`,"Content-Type":"application/json"},signal:i});if(o.ok)return yield o.json();throw yield p(o)}catch(e){throw h(e)}}))}(this.baseUrl,this.apiKeyTonder)}))}_hasCardOnFileKeys(){var e,t;return!!(null===(t=null===(e=this.merchantData)||void 0===e?void 0:e.cardonfile_keys)||void 0===t?void 0:t.public_key)}_initializeCardOnFile(){var e;return r(this,void 0,void 0,(function*(){return this.cardOnFileInstance||(this.cardOnFileInstance=new C({merchantId:null===(e=this.merchantData)||void 0===e?void 0:e.cardonfile_keys.public_key,apiKey:this.apiKeyTonder,isTestEnvironment:"production"!==this.mode}),yield this.cardOnFileInstance.initialize()),this.cardOnFileInstance}))}_handle3dsRedirect(e){var t,n;return r(this,void 0,void 0,(function*(){if(e&&"next_action"in e?null===(n=null===(t=null==e?void 0:e.next_action)||void 0===t?void 0:t.iframe_resources)||void 0===n?void 0:n.iframe:null)this.process3ds.loadIframe().then((()=>{this.process3ds.verifyTransactionStatus()})).catch((t=>{console.log("Error loading iframe:",t),this.reportSdkError(t,{feature:"3ds-verification",metadata:{step:"_handle3dsRedirect",response:e}})}));else{if(!this.process3ds.getRedirectUrl())return e;this.process3ds.redirectToChallenge()}}))}}function Y(e,t,n=null){return r(this,void 0,void 0,(function*(){const r=yield fetch(`${e}/api/v1/vault-token/`,{method:"GET",headers:{Authorization:`Token ${t}`},signal:n});if(r.ok){return(yield r.json()).token}throw new Error("Failed to retrieve bearer token")}))}D=new WeakMap,M=new WeakMap,b=new WeakSet,U=function(e){var t,r;!e||e&&0===Object.keys(e).length||(n(this,b,"m",k).call(this,e.customer),this._setCartTotal((null===(t=e.cart)||void 0===t?void 0:t.total)||0),n(this,b,"m",w).call(this,(null===(r=e.cart)||void 0===r?void 0:r.items)||[]),n(this,b,"m",P).call(this,e),n(this,b,"m",j).call(this,e),n(this,b,"m",V).call(this,e),n(this,b,"m",F).call(this,e))},k=function(e){e&&(this.customer=e)},L=function(e){this.secureToken=e},w=function(e){this.cartItems=e},P=function(e){this.metadata=null==e?void 0:e.metadata,this.order_reference=null==e?void 0:e.order_reference},j=function(e){this.currency=null==e?void 0:e.currency},V=function(e){this.card=null==e?void 0:e.card},K=function(e){var t,n,i,o,s;return r(this,void 0,void 0,(function*(){if("Hard"===(null===(t=null==e?void 0:e.decline)||void 0===t?void 0:t.error_type)||(null===(n=null==e?void 0:e.checkout)||void 0===n?void 0:n.is_route_finished)||(null==e?void 0:e.is_route_finished)||["Pending"].includes(null==e?void 0:e.transaction_status))return e;if(["Success","Authorized"].includes(null==e?void 0:e.transaction_status))return e;if(e){const t={checkout_id:(null===(i=e.checkout)||void 0===i?void 0:i.id)||(null==e?void 0:e.checkout_id)};try{return yield m(this.baseUrl,this.apiKeyTonder,t)}catch(t){this.reportSdkError(t,{feature:"payment",process_id:(null==e?void 0:e.payment_id)||(null===(o=null==e?void 0:e.payment)||void 0===o?void 0:o.id)||(null===(s=null==e?void 0:e.payment)||void 0===s?void 0:s.pk),metadata:{step:"#resumeCheckout",response:e}})}return e}}))},F=function(e){i(this,D,null==e?void 0:e.apm_config,"f")},function(e){e.CARD_NUMBER="card_number",e.CVV="cvv",e.EXPIRATION_MONTH="expiration_month",e.EXPIRATION_YEAR="expiration_year",e.CARDHOLDER_NAME="cardholder_name"}(x||(x={}));const $={type:t.ValidationRuleType.LENGTH_MATCH_RULE,params:{max:70}},H=RegExp("^(?!s*$).+"),z={type:t.ValidationRuleType.REGEX_MATCH_RULE,params:{regex:H,error:"El campo es requerido"}},Q="Titular de la tarjeta",W="Número de tarjeta",X="CVC/CVV",q="Mes",J="Año",G="Fecha de expiración",Z="Nombre como aparece en la tarjeta",ee="1234 1234 1234 1234",te="3-4 dígitos",re="MM",ne="AA",ie={base:{border:"1px solid #e0e0e0",padding:"10px 7px",borderRadius:"5px",color:"#1d1d1d",marginTop:"2px",backgroundColor:"white",fontFamily:'"Inter", sans-serif',fontSize:"16px","&::placeholder":{color:"#ccc"}},complete:{color:"#4caf50"},invalid:{border:"1px solid #f44336"},empty:{},focus:{},global:{"@import":'url("https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;700&display=swap")'}},oe={base:{fontSize:"12px",fontWeight:"500",fontFamily:'"Inter", sans-serif'}},se={base:{fontSize:"12px",fontWeight:"500",fontFamily:'"Inter", sans-serif',color:"#f44336"}};function ae({baseUrl:e,apiKey:n,vault_id:i,vault_url:o,data:s}){return r(this,void 0,void 0,(function*(){const a=t.init({vaultID:i,vaultURL:o,getBearerToken:()=>r(this,void 0,void 0,(function*(){return yield Y(e,n)})),options:{logLevel:t.LogLevel.ERROR,env:t.Env.DEV}}).container(t.ContainerType.COLLECT),d=yield function(e,n){return r(this,void 0,void 0,(function*(){const i=yield function(e,n){return r(this,void 0,void 0,(function*(){return yield Promise.all(Object.keys(e).map((e=>r(this,void 0,void 0,(function*(){return{element:yield n.create({table:"cards",column:e,type:t.ElementType.INPUT_FIELD}),key:e}})))))}))}(e,n);return i?i.map((t=>new Promise((r=>{var n;const i=document.createElement("div");i.hidden=!0,i.id=`id-${t.key}`,null===(n=document.querySelector("body"))||void 0===n||n.appendChild(i),setTimeout((()=>{t.element.mount(`#id-${t.key}`),setInterval((()=>{if(t.element.isMounted()){const n=e[t.key];return t.element.setValue(n),r(t.element.isMounted())}}),120)}),120)})))):[]}))}(s,a);if((yield Promise.all(d)).some((e=>!e)))throw h(Error("Ocurrió un error al montar los campos de la tarjeta"));try{const e=yield a.collect();if(e)return e.records[0].fields;throw h(Error("Por favor, verifica todos los campos de tu tarjeta"))}catch(e){throw h(e)}}))}function de(e){const{element:r,fieldMessage:n="",errorStyles:i={},requiredMessage:o="Campo requerido",invalidMessage:s="Campo no válido",events:a}=e;"on"in r&&(r.on(t.EventName.CHANGE,(e=>{ce({eventName:"onChange",data:e,events:a}),le({element:r,errorStyles:i,color:"transparent"})})),r.on(t.EventName.BLUR,(e=>{if(ce({eventName:"onBlur",data:e,events:a}),!e.isValid){const t=e.isEmpty?o:""!=n?`El campo ${n} no es válido`:s;r.setError(t)}le({element:r,errorStyles:i})})),r.on(t.EventName.FOCUS,(e=>{ce({eventName:"onFocus",data:e,events:a}),le({element:r,errorStyles:i,color:"transparent"}),r.resetError()})))}function le(e){const{element:t,errorStyles:r={},color:n=""}=e;Object.keys(r).length>0&&t.update({errorTextStyles:Object.assign(Object.assign({},r),{base:Object.assign(Object.assign({},r.base&&Object.assign({},r.base)),""!=n&&{color:n})})})}const ce=t=>{const{eventName:r,data:n,events:i}=t;if(i&&r in i){const t=i[r];"function"==typeof t&&t({elementType:e(n,"elementType",""),isEmpty:e(n,"isEmpty",""),isFocused:e(n,"isFocused",""),isValid:e(n,"isValid","")})}};function ue(e){return r(this,void 0,void 0,(function*(){const{element:t,containerId:r,retries:n=2,delay:i=30}=e;for(let e=0;e<=n;e++){if(document.querySelector(r))return void t.mount(r);e<n&&(yield new Promise((e=>setTimeout(e,i))))}console.warn(`[mountCardFields] Container ${r} was not found after ${n+1} attempts`)}))}const he=Object.freeze({SORIANA:"SORIANA",OXXO:"OXXO",OXXOPAY:"OXXOPAY",SPEI:"SPEI",CODI:"CODI",MERCADOPAGO:"MERCADOPAGO",PAYPAL:"PAYPAL",COMERCIALMEXICANA:"COMERCIALMEXICANA",BANCOMER:"BANCOMER",WALMART:"WALMART",BODEGA:"BODEGA",SAMSCLUB:"SAMSCLUB",SUPERAMA:"SUPERAMA",CALIMAX:"CALIMAX",EXTRA:"EXTRA",CIRCULOK:"CIRCULOK",SEVEN11:"7ELEVEN",TELECOMM:"TELECOMM",BANORTE:"BANORTE",BENAVIDES:"BENAVIDES",DELAHORRO:"DELAHORRO",ELASTURIANO:"ELASTURIANO",WALDOS:"WALDOS",ALSUPER:"ALSUPER",KIOSKO:"KIOSKO",STAMARIA:"STAMARIA",LAMASBARATA:"LAMASBARATA",FARMROMA:"FARMROMA",FARMUNION:"FARMUNION",FARMATODO:"FARMATODO",SFDEASIS:"SFDEASIS",FARM911:"FARM911",FARMECONOMICAS:"FARMECONOMICAS",FARMMEDICITY:"FARMMEDICITY",RIANXEIRA:"RIANXEIRA",WESTERNUNION:"WESTERNUNION",ZONAPAGO:"ZONAPAGO",CAJALOSANDES:"CAJALOSANDES",CAJAPAITA:"CAJAPAITA",CAJASANTA:"CAJASANTA",CAJASULLANA:"CAJASULLANA",CAJATRUJILLO:"CAJATRUJILLO",EDPYME:"EDPYME",KASNET:"KASNET",NORANDINO:"NORANDINO",QAPAQ:"QAPAQ",RAIZ:"RAIZ",PAYSER:"PAYSER",WUNION:"WUNION",BANCOCONTINENTAL:"BANCOCONTINENTAL",GMONEY:"GMONEY",GOPAY:"GOPAY",WU:"WU",PUNTOSHEY:"PUNTOSHEY",AMPM:"AMPM",JUMBOMARKET:"JUMBOMARKET",SMELPUEBLO:"SMELPUEBLO",BAM:"BAM",REFACIL:"REFACIL",ACYVALORES:"ACYVALORES"}),pe={[he.SORIANA]:{label:"Soriana",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/soriana.png"},[he.OXXO]:{label:"Oxxo",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/oxxo.png"},[he.CODI]:{label:"CoDi",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/codi.png"},[he.MERCADOPAGO]:{label:"Mercado Pago",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/mercadopago.png"},[he.OXXOPAY]:{label:"Oxxo Pay",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/oxxopay.png"},[he.SPEI]:{label:"SPEI",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/spei.png"},[he.PAYPAL]:{label:"Paypal",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/paypal.png"},[he.COMERCIALMEXICANA]:{label:"Comercial Mexicana",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/comercial_exicana.png"},[he.BANCOMER]:{label:"Bancomer",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/bancomer.png"},[he.WALMART]:{label:"Walmart",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/walmart.png"},[he.BODEGA]:{label:"Bodega Aurrera",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/bodega_aurrera.png"},[he.SAMSCLUB]:{label:"Sam´s Club",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/sams_club.png"},[he.SUPERAMA]:{label:"Superama",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/superama.png"},[he.CALIMAX]:{label:"Calimax",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/calimax.png"},[he.EXTRA]:{label:"Tiendas Extra",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/tiendas_extra.png"},[he.CIRCULOK]:{label:"Círculo K",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/circulo_k.png"},[he.SEVEN11]:{label:"7 Eleven",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/7_eleven.png"},[he.TELECOMM]:{label:"Telecomm",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/telecomm.png"},[he.BANORTE]:{label:"Banorte",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/banorte.png"},[he.BENAVIDES]:{label:"Farmacias Benavides",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_benavides.png"},[he.DELAHORRO]:{label:"Farmacias del Ahorro",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_ahorro.png"},[he.ELASTURIANO]:{label:"El Asturiano",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/asturiano.png"},[he.WALDOS]:{label:"Waldos",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/waldos.png"},[he.ALSUPER]:{label:"Alsuper",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/al_super.png"},[he.KIOSKO]:{label:"Kiosko",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/kiosko.png"},[he.STAMARIA]:{label:"Farmacias Santa María",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_santa_maria.png"},[he.LAMASBARATA]:{label:"Farmacias la más barata",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_barata.png"},[he.FARMROMA]:{label:"Farmacias Roma",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_roma.png"},[he.FARMUNION]:{label:"Pago en Farmacias Unión",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_union.png"},[he.FARMATODO]:{label:"Pago en Farmacias Farmatodo",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_farmatodo.png\t"},[he.SFDEASIS]:{label:"Pago en Farmacias San Francisco de Asís",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_san_francisco.png"},[he.FARM911]:{label:"Farmacias 911",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.FARMECONOMICAS]:{label:"Farmacias Economicas",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.FARMMEDICITY]:{label:"Farmacias Medicity",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.RIANXEIRA]:{label:"Rianxeira",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.WESTERNUNION]:{label:"Western Union",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.ZONAPAGO]:{label:"Zona Pago",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.CAJALOSANDES]:{label:"Caja Los Andes",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.CAJAPAITA]:{label:"Caja Paita",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.CAJASANTA]:{label:"Caja Santa",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.CAJASULLANA]:{label:"Caja Sullana",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.CAJATRUJILLO]:{label:"Caja Trujillo",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.EDPYME]:{label:"Edpyme",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.KASNET]:{label:"KasNet",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.NORANDINO]:{label:"Norandino",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.QAPAQ]:{label:"Qapaq",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.RAIZ]:{label:"Raiz",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.PAYSER]:{label:"Paysera",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.WUNION]:{label:"Western Union",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.BANCOCONTINENTAL]:{label:"Banco Continental",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.GMONEY]:{label:"Go money",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.GOPAY]:{label:"Go pay",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.WU]:{label:"Western Union",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.PUNTOSHEY]:{label:"Puntoshey",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.AMPM]:{label:"Ampm",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.JUMBOMARKET]:{label:"Jumbomarket",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.SMELPUEBLO]:{label:"Smelpueblo",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.BAM]:{label:"Bam",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.REFACIL]:{label:"Refacil",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.ACYVALORES]:{label:"Acyvalores",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"}},_e=e=>{const t=e.toUpperCase().trim().replace(/\s+/g,"");return pe[t]||{icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png",label:""}};class Ee extends B{constructor({apiKey:e,mode:t,returnUrl:r,callBack:n,apiKeyTonder:i,baseUrlTonder:o,customization:s,collectorIds:a,events:d}){super({mode:t,apiKey:e,returnUrl:r,callBack:n,apiKeyTonder:i,baseUrlTonder:o,customization:s,tdsIframeId:a&&"tdsIframe"in a?null==a?void 0:a.tdsIframe:"tdsIframe"}),this.activeAPMs=[],this.mountedElementsByContext=new Map,this.customerCardsCache=null,this.skyflowInstance=null,this.events=d||{}}injectCheckout(){return r(this,void 0,void 0,(function*(){yield this._initializeCheckout()}))}getCustomerCards(){return r(this,void 0,void 0,(function*(){try{yield this._fetchMerchantData();const{auth_token:e}=yield this._getCustomer(),t=yield this._getCustomerCards(e,this.merchantData.business.pk);return this.customerCardsCache=t,Object.assign(Object.assign({},t),{cards:t.cards.map((e=>{return Object.assign(Object.assign({},e),{fields:Object.assign(Object.assign({},e.fields),{subscription_id:this._hasCardOnFileKeys()?e.fields.subscription_id:void 0}),icon:(t=e.fields.card_scheme,"Visa"===t?"https://d35a75syrgujp0.cloudfront.net/cards/visa.png":"Mastercard"===t?"https://d35a75syrgujp0.cloudfront.net/cards/mastercard.png":"American Express"===t?"https://d35a75syrgujp0.cloudfront.net/cards/american_express.png":"https://d35a75syrgujp0.cloudfront.net/cards/default_card.png")});var t}))})}catch(e){throw this.reportSdkError(e,{feature:"get-cards",process_id:this.getCustomerId(),metadata:{step:"getCustomerCards"}}),N({errorCode:a.FETCH_CARDS_ERROR},e)}}))}saveCustomerCard(e){return r(this,void 0,void 0,(function*(){let t=null;try{yield this._fetchMerchantData();const r=yield this._getCustomer(),{auth_token:n,first_name:i="",last_name:o="",email:s=""}=r,{vault_id:l,vault_url:c,business:u}=this.merchantData,h=this._hasCardOnFileKeys(),p={card_number:e.card_number.replace(/\s+/g,""),expiration_month:e.expiration_month.replace(/\s+/g,""),expiration_year:e.expiration_year.replace(/\s+/g,""),cvv:e.cvv.replace(/\s+/g,""),cardholder_name:e.cardholder_name.replace(/\s+/g,"")},_=yield ae({vault_id:l,vault_url:c,data:p,baseUrl:this.baseUrl,apiKey:this.apiKeyTonder}),E=yield this._saveCustomerCard(n,null==u?void 0:u.pk,_,h);if(t=E.skyflow_id,h){const e=E.card_bin;if(!e)throw new Error("Card BIN not returned from save card");const t=yield this._initializeCardOnFile();let r;try{r=yield t.process({cardTokens:{name:_.cardholder_name,number:_.card_number,expiryMonth:_.expiration_month,expiryYear:_.expiration_year,cvv:_.cvv},cardBin:e,contactDetails:{firstName:i||"",lastName:o||"",email:s||""},customerId:n,currency:this.currency||"MXN"})}catch(e){throw N({errorCode:a.SAVE_CARD_ERROR,message:d[a.CARD_ON_FILE_DECLINED]},e)}const l={skyflow_id:_.skyflow_id,subscription_id:r.subscriptionId};yield this._saveCustomerCard(n,null==u?void 0:u.pk,l)}return E}catch(e){throw t&&(yield this.removeCustomerCard(t)),this.reportSdkError(e,{feature:"save-card",process_id:t||this.getCustomerId(),metadata:{step:"saveCustomerCard"}}),N({errorCode:a.SAVE_CARD_ERROR},e)}}))}removeCustomerCard(e){return r(this,void 0,void 0,(function*(){try{yield this._fetchMerchantData();const{auth_token:t}=yield this._getCustomer(),{business:r}=this.merchantData;return yield this._removeCustomerCard(t,null==r?void 0:r.pk,e)}catch(t){throw this.reportSdkError(t,{feature:"remove-card",process_id:e,metadata:{step:"removeCustomerCard"}}),N({errorCode:a.REMOVE_CARD_ERROR},t)}}))}getCustomerPaymentMethods(){return r(this,void 0,void 0,(function*(){try{const e=yield this._fetchCustomerPaymentMethods();return(e&&"results"in e&&e.results.length>0?e.results:[]).filter((e=>"cards"!==e.category.toLowerCase())).map((e=>Object.assign({id:e.pk,payment_method:e.payment_method,priority:e.priority,category:e.category},_e(e.payment_method)))).sort(((e,t)=>e.priority-t.priority))}catch(e){throw this.reportSdkError(e,{feature:"get-payment-methods",metadata:{step:"getCustomerPaymentMethods"}}),N({errorCode:a.FETCH_PAYMENT_METHODS_ERROR},e)}}))}mountCardFields(e){var n;return r(this,void 0,void 0,(function*(){const i=e.card_id?`update:${e.card_id}`:"create",o=null!==(n=e.unmount_context)&&void 0!==n?n:"all";"none"!==o&&("current"===o?this.unmountCardFields(i):this.unmountCardFields(o)),yield this.createSkyflowInstance();const s=yield function(e){var n,i,o,s,a,d,l,c,u,h,p,_,E,m,y,R,v;return r(this,void 0,void 0,(function*(){const{skyflowInstance:r,data:f,customization:A,events:O}=e,T=r.container(t.ContainerType.COLLECT),C=[],g={[x.CVV]:t.ElementType.CVV,[x.CARD_NUMBER]:t.ElementType.CARD_NUMBER,[x.EXPIRATION_MONTH]:t.ElementType.EXPIRATION_MONTH,[x.EXPIRATION_YEAR]:t.ElementType.EXPIRATION_YEAR,[x.CARDHOLDER_NAME]:t.ElementType.CARDHOLDER_NAME},I={[x.CVV]:[z],[x.CARD_NUMBER]:[z],[x.EXPIRATION_MONTH]:[z],[x.EXPIRATION_YEAR]:[z],[x.CARDHOLDER_NAME]:[$,z]},S={errorStyles:(null===(i=null===(n=null==A?void 0:A.styles)||void 0===n?void 0:n.cardForm)||void 0===i?void 0:i.errorStyles)||se,inputStyles:(null===(s=null===(o=null==A?void 0:A.styles)||void 0===o?void 0:o.cardForm)||void 0===s?void 0:s.inputStyles)||ie,labelStyles:(null===(d=null===(a=null==A?void 0:A.styles)||void 0===a?void 0:a.cardForm)||void 0===d?void 0:d.labelStyles)||oe},N={name:(null===(l=null==A?void 0:A.labels)||void 0===l?void 0:l.name)||Q,card_number:(null===(c=null==A?void 0:A.labels)||void 0===c?void 0:c.card_number)||W,cvv:(null===(u=null==A?void 0:A.labels)||void 0===u?void 0:u.cvv)||X,expiration_date:(null===(h=null==A?void 0:A.labels)||void 0===h?void 0:h.expiry_date)||G,expiration_month:(null===(p=null==A?void 0:A.labels)||void 0===p?void 0:p.expiration_month)||q,expiration_year:(null===(_=null==A?void 0:A.labels)||void 0===_?void 0:_.expiration_year)||J},b={name:(null===(E=null==A?void 0:A.placeholders)||void 0===E?void 0:E.name)||Z,card_number:(null===(m=null==A?void 0:A.placeholders)||void 0===m?void 0:m.card_number)||ee,cvv:(null===(y=null==A?void 0:A.placeholders)||void 0===y?void 0:y.cvv)||te,expiration_month:(null===(R=null==A?void 0:A.placeholders)||void 0===R?void 0:R.expiration_month)||re,expiration_year:(null===(v=null==A?void 0:A.placeholders)||void 0===v?void 0:v.expiration_year)||ne},D={[x.CVV]:null==O?void 0:O.cvvEvents,[x.CARD_NUMBER]:null==O?void 0:O.cardNumberEvents,[x.EXPIRATION_MONTH]:null==O?void 0:O.monthEvents,[x.EXPIRATION_YEAR]:null==O?void 0:O.yearEvents,[x.CARDHOLDER_NAME]:null==O?void 0:O.cardHolderEvents};if("fields"in f&&Array.isArray(f.fields))if(f.fields.length>0&&"string"==typeof f.fields[0])for(const e of f.fields){const t=T.create(Object.assign(Object.assign(Object.assign({table:"cards",column:e,type:g[e],validations:I[e]},S),{label:N[e],placeholder:b[e]}),f.card_id?{skyflowID:f.card_id}:{}));de({element:t,errorStyles:S.errorStyles,fieldMessage:[x.CVV,x.EXPIRATION_MONTH,x.EXPIRATION_YEAR].includes(e)?"":N[e],events:D[e]});const r=`#collect_${String(e)}`+(f.card_id?`_${f.card_id}`:"");yield ue({element:t,containerId:r}),C.push({element:t,containerId:r})}else for(const e of f.fields){const t=e.field,r=T.create(Object.assign(Object.assign(Object.assign({table:"cards",column:t,type:g[t],validations:I[t]},S),{label:N[t],placeholder:b[t]}),f.card_id?{skyflowID:f.card_id}:{})),n=e.container_id||`#collect_${String(t)}`+(f.card_id?`_${f.card_id}`:"");yield ue({element:r,containerId:n}),C.push({element:r,containerId:n})}return{elements:C.map((e=>e.element)),container:T}}))}({skyflowInstance:this.skyflowInstance,data:e,customization:this.customization,events:this.events});this.mountedElementsByContext.set(i,{elements:s.elements||[],container:s})}))}getContainerByCardId(e){var t;const r=`update:${e}`,n=this.mountedElementsByContext.get(r);return(null===(t=null==n?void 0:n.container)||void 0===t?void 0:t.container)||null}collectCardTokens(e){var t,n,i;return r(this,void 0,void 0,(function*(){const r=this.getContainerByCardId(e);if(!r)return null;try{const e=yield r.collect();return(null===(n=null===(t=null==e?void 0:e.records)||void 0===t?void 0:t[0])||void 0===n?void 0:n.fields)||null}catch(t){const r=null===(i=null==t?void 0:t.error)||void 0===i?void 0:i.description;throw this.reportSdkError(t,{feature:"collect-card-tokens",process_id:e,metadata:{step:"collectCardTokens"}}),new l({code:a.MOUNT_COLLECT_ERROR,details:{message:r}})}}))}unmountCardFields(e="all"){"all"===e?(this.mountedElementsByContext.forEach(((e,t)=>{this.unmountContext(t)})),this.mountedElementsByContext.clear()):(this.unmountContext(e),this.mountedElementsByContext.delete(e))}unmountContext(e){const t=this.mountedElementsByContext.get(e);if(!t)return;const{elements:r}=t;r&&r.length>0&&r.forEach((t=>{try{t&&"function"==typeof t.unmount&&t.unmount()}catch(t){console.warn(`Error unmounting Skyflow element from context '${e}':`,t),this.reportSdkError(t,{feature:"unmount-card-fields",metadata:{step:"unmountContext",context:e}})}}))}getBusiness(){return r(this,void 0,void 0,(function*(){try{return yield o(this.baseUrl,this.apiKeyTonder,this.abortController.signal)}catch(e){throw this.reportSdkError(e,{feature:"get-business",metadata:{step:"getBusiness"}}),N({errorCode:a.FETCH_BUSINESS_ERROR},e)}}))}createSkyflowInstance(){return r(this,void 0,void 0,(function*(){if(this.skyflowInstance)return this.skyflowInstance;yield this._fetchMerchantData();const{vault_id:e,vault_url:n}=this.merchantData;this.skyflowInstance=yield function({baseUrl:e,apiKey:n,vault_id:i,vault_url:o}){return r(this,void 0,void 0,(function*(){return t.init({vaultID:i,vaultURL:o,getBearerToken:()=>r(this,void 0,void 0,(function*(){return yield Y(e,n)})),options:{logLevel:t.LogLevel.ERROR,env:t.Env.DEV}})}))}({vault_id:e,vault_url:n,baseUrl:this.baseUrl,apiKey:this.apiKeyTonder})}))}getOpenpayDeviceSessionID(e,t,n){return r(this,void 0,void 0,(function*(){try{return yield y(e,t,n)}catch(e){throw this.reportSdkError(e,{feature:"get-openpay-device-session",metadata:{step:"getOpenpayDeviceSessionID"}}),h(e)}}))}getSkyflowTokens({vault_id:e,vault_url:t,data:n}){return r(this,void 0,void 0,(function*(){return yield ae({vault_id:e,vault_url:t,data:n,baseUrl:this.baseUrl,apiKey:this.apiKeyTonder})}))}_setCartTotal(e){this.cartTotal=e}_checkout({card:e,payment_method:t,isSandbox:n,returnUrl:i}){var o,s;return r(this,void 0,void 0,(function*(){yield this._fetchMerchantData();const l=yield this._getCustomer(this.abortController.signal),{vault_id:c,vault_url:u,business:h}=this.merchantData,{auth_token:p,first_name:_="",last_name:E="",email:m=""}=l,y=this._hasCardOnFileKeys();let R,v=null,f=null,A=null,O=!1;const T=()=>r(this,void 0,void 0,(function*(){var e,t;(null===(t=null===(e=this.customerCardsCache)||void 0===e?void 0:e.cards)||void 0===t?void 0:t.length)||(this.customerCardsCache=yield this._getCustomerCards(p,this.merchantData.business.pk))}));if(!t){if("string"==typeof e)if(f=e,R={skyflow_id:e},y){yield T();const t=null===(s=null===(o=this.customerCardsCache)||void 0===o?void 0:o.cards)||void 0===s?void 0:s.find((t=>t.fields.skyflow_id===e));if(!t)throw new Error("Card not found for card-on-file processing");const r=!!t.fields.subscription_id;r||(yield this.collectCardTokens(e)),r&&(v={subscriptionId:t.fields.subscription_id})}else yield this.collectCardTokens(e);else{const t=Object.assign(Object.assign({},e),{card_number:e.card_number.replace(/\s+/g,""),expiration_month:e.expiration_month.replace(/\s+/g,""),expiration_year:e.expiration_year.replace(/\s+/g,""),cvv:e.cvv.replace(/\s+/g,""),cardholder_name:e.cardholder_name.replace(/\s+/g,"")});R=yield ae({vault_id:c,vault_url:u,data:t,baseUrl:this.baseUrl,apiKey:this.apiKeyTonder}),f=R.skyflow_id,y&&(A={name:R.cardholder_name,number:R.card_number,expiryMonth:R.expiration_month,expiryYear:R.expiration_year,cvv:R.cvv},O=!0)}if(O){if(!f||!A)throw new Error("Missing card data for card-on-file processing");let e=null;try{const t=yield this._saveCustomerCard(p,null==h?void 0:h.pk,{skyflow_id:f},!0);e=t.skyflow_id;const r=t.card_bin;if(!r)throw new Error("Card BIN not returned from save card");const n=yield this._initializeCardOnFile();let i;try{i=yield n.process({cardTokens:A,cardBin:r,contactDetails:{firstName:_||"",lastName:E||"",email:m||""},customerId:p,currency:this.currency||"MXN"})}catch(e){throw N({errorCode:a.PAYMENT_PROCESS_ERROR,message:d[a.CARD_ON_FILE_DECLINED]},e)}v={subscriptionId:i.subscriptionId},yield this._saveCustomerCard(p,null==h?void 0:h.pk,{skyflow_id:f,subscription_id:v.subscriptionId})}catch(t){throw e&&(yield this.removeCustomerCard(e)),this.reportSdkError(t,{feature:"payment",process_id:e||this.getCustomerId(),metadata:{step:"card_on_file"}}),t}}}return yield this._handleCheckout({card:R,payment_method:t,customer:l,isSandbox:n,returnUrl:i,enable_card_on_file:!!(null==v?void 0:v.subscriptionId)&&y})}))}customerRegister(e){return r(this,void 0,void 0,(function*(){try{const t=`${this.baseUrl}/api/v1/customer/`,r={email:e},n=yield fetch(t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKeyTonder}`},signal:this.abortController.signal,body:JSON.stringify(r)});if(n.ok)return yield n.json();throw yield p(n)}catch(e){throw this.reportSdkError(e,{feature:"customer-register",metadata:{step:"customerRegister"}}),h(e)}}))}createOrder(e){return r(this,void 0,void 0,(function*(){try{const t=`${this.baseUrl}/api/v1/orders/`,r=e,n=yield fetch(t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKeyTonder}`},body:JSON.stringify(r)});if(n.ok)return yield n.json();throw yield p(n)}catch(e){throw this.reportSdkError(e,{feature:"create-order",metadata:{step:"createOrder"}}),h(e)}}))}createPayment(e){return r(this,void 0,void 0,(function*(){try{const t=`${this.baseUrl}/api/v1/business/${e.business_pk}/payments/`,r=e,n=yield fetch(t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKeyTonder}`},body:JSON.stringify(r)});if(n.ok)return yield n.json();throw yield p(n)}catch(e){throw this.reportSdkError(e,{feature:"create-payment",metadata:{step:"createPayment"}}),h(e)}}))}startCheckoutRouter(e){return r(this,void 0,void 0,(function*(){const t=yield m(this.baseUrl,this.apiKeyTonder,e);if(yield this.init3DSRedirect(t))return t}))}init3DSRedirect(e){return r(this,void 0,void 0,(function*(){return this.process3ds.setPayload(e),yield this._handle3dsRedirect(e)}))}startCheckoutRouterFull(e){return r(this,void 0,void 0,(function*(){try{const{order:t,total:r,customer:n,skyflowTokens:i,return_url:o,isSandbox:a,metadata:d,currency:l,payment_method:u}=e,h=yield this._fetchMerchantData(),p=yield this.customerRegister(n.email);if(!(p&&"auth_token"in p&&h&&"reference"in h))throw new s({code:"500",body:h,name:"Keys error",message:"Merchant or customer reposne errors"});{const e={business:this.apiKeyTonder,client:p.auth_token,billing_address_id:null,shipping_address_id:null,amount:r,reference:h.reference,is_oneclick:!0,items:t.items},_=yield this.createOrder(e),E=(new Date).toISOString();if(!("id"in _&&"id"in p&&"business"in h))throw new s({code:"500",body:_,name:"Keys error",message:"Order response errors"});{const e={business_pk:h.business.pk,amount:r,date:E,order_id:_.id,client_id:p.id},t=yield this.createPayment(e);let s;const{openpay_keys:R,business:v}=h;R.merchant_id&&R.public_key&&(s=yield y(R.merchant_id,R.public_key,a));const f=Object.assign(Object.assign({name:n.name,last_name:n.lastname,email_client:n.email,phone_number:n.phone,return_url:o,id_product:"no_id",quantity_product:1,id_ship:"0",instance_id_ship:"0",amount:r,title_ship:"shipping",description:"transaction",device_session_id:s||null,token_id:"",order_id:"id"in _&&_.id,business_id:v.pk,payment_id:"pk"in t&&t.pk,source:"sdk",metadata:d,browser_info:c(),currency:l},u?{payment_method:u}:{card:i}),"undefined"!=typeof MP_DEVICE_SESSION_ID?{mp_device_session_id:MP_DEVICE_SESSION_ID}:{}),A=yield m(this.baseUrl,this.apiKeyTonder,f);if(yield this.init3DSRedirect(A))return A}}}catch(e){throw this.reportSdkError(e,{feature:"start-checkout-router-full",metadata:{step:"startCheckoutRouterFull"}}),h(e)}}))}registerCustomerCard(e,t,n){return r(this,void 0,void 0,(function*(){try{yield this._fetchMerchantData();const r=yield fetch(`${this.baseUrl}/api/v1/business/${u(this.merchantData)}/cards/`,{method:"POST",headers:{Authorization:`Bearer ${e}`,"User-token":t,"Content-Type":"application/json"},body:JSON.stringify(Object.assign({},n))});if(r.ok)return yield r.json();throw yield p(r)}catch(e){throw this.reportSdkError(e,{feature:"register-customer-card",metadata:{step:"registerCustomerCard"}}),h(e)}}))}deleteCustomerCard(e,t=""){return r(this,void 0,void 0,(function*(){try{yield this._fetchMerchantData();const r=yield fetch(`${this.baseUrl}/api/v1/business/${u(this.merchantData)}/cards/${t}`,{method:"DELETE",headers:{Authorization:`Token ${e}`,"Content-Type":"application/json"},signal:this.abortController.signal});if(r.ok)return!0;throw yield p(r)}catch(e){throw this.reportSdkError(e,{feature:"delete-customer-card",process_id:t,metadata:{step:"deleteCustomerCard"}}),h(e)}}))}getActiveAPMs(){return r(this,void 0,void 0,(function*(){try{const e=yield function(e,t,n="?status=active&page_size=10000&country=México",i=null){return r(this,void 0,void 0,(function*(){try{const r=yield fetch(`${e}/api/v1/payment_methods${n}`,{method:"GET",headers:{Authorization:`Token ${t}`,"Content-Type":"application/json"},signal:i});if(r.ok)return yield r.json();throw yield p(r)}catch(e){throw h(e)}}))}(this.baseUrl,this.apiKeyTonder),t=e&&e.results&&e.results.length>0?e.results:[];return this.activeAPMs=t.filter((e=>"cards"!==e.category.toLowerCase())).map((e=>Object.assign({id:e.pk,payment_method:e.payment_method,priority:e.priority,category:e.category},_e(e.payment_method)))).sort(((e,t)=>e.priority-t.priority)),this.activeAPMs}catch(e){return console.error("Error getting APMS",e),[]}}))}}function me(e){return/^\d{12,19}$/.test(e)&&Ae(e)}function ye(e){return/^([a-zA-Z\\ \\,\\.\\-\\']{2,})$/.test(e)}function Re(e){return/^\d{3,4}$/.test(e)}function ve(e){return/^(0[1-9]|1[0-2])$/.test(e)}function fe(e){if(!/^\d{2}$/.test(e))return!1;const t=(new Date).getFullYear()%100;return parseInt(e,10)>=t}const Ae=e=>{const t=`${e}`.split("").reverse().map((e=>Number.parseInt(e))),r=t.shift();let n=t.reduce(((e,t,r)=>r%2!=0?e+t:e+((t*=2)>9?t-9:t)),0);return n+=r,n%10==0};export{S as AppError,B as BaseInlineCheckout,Ee as LiteCheckout,g as SdkTelemetryClient,Re as validateCVV,me as validateCardNumber,ye as validateCardholderName,ve as validateExpirationMonth,fe as validateExpirationYear};
|
|
1
|
+
import{get as e}from"lodash";import t from"skyflow-js";function r(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{d(n.next(e))}catch(e){o(e)}}function a(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}d((n=n.apply(e,t||[])).next())}))}function n(e,t,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(e):n?n.value:t.get(e)}function i(e,t,r,n,i){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!i)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?i.call(e,r):i?i.value=r:t.set(e,r),r}function o(e,t,n){return r(this,void 0,void 0,(function*(){const r=yield fetch(`${e}/api/v1/payments/business/${t}`,{headers:{Authorization:`Token ${t}`},signal:n});return yield r.json()}))}"function"==typeof SuppressedError&&SuppressedError;class s{constructor({code:e,body:t,name:r,message:n,stack:i}){this.code=e,this.body=t,this.name=r,this.message=n,this.stack=i}}var a;!function(e){e.INIT_ERROR="INIT_ERROR",e.CREATE_ERROR="CREATE_ERROR",e.REMOVE_SDK_ERROR="REMOVE_SDK_ERROR",e.INVALID_TYPE="INVALID_TYPE",e.STATE_ERROR="STATE_ERROR",e.FETCH_BUSINESS_ERROR="FETCH_BUSINESS_ERROR",e.INVALID_CONFIG="INVALID_CONFIG",e.MERCHANT_CREDENTIAL_REQUIRED="MERCHANT_CREDENTIAL_REQUIRED",e.INVALID_PAYMENT_REQUEST="INVALID_PAYMENT_REQUEST",e.INVALID_PAYMENT_REQUEST_CARD_PM="INVALID_PAYMENT_REQUEST_CARD_PM",e.TYPE_SDK_REQUIRED="TYPE_SDK_REQUIRED",e.ENVIRONMENT_REQUIRED="ENVIRONMENT_REQUIRED",e.FETCH_CARDS_ERROR="FETCH_CARDS_ERROR",e.FETCH_TRANSACTION_ERROR="FETCH_TRANSACTION_ERROR",e.CUSTOMER_AUTH_TOKEN_NOT_VALID="CUSTOMER_AUTH_TOKEN_NOT_VALID",e.SAVE_CARD_ERROR="SAVE_CARD_ERROR",e.REMOVE_CARD_ERROR="REMOVE_CARD_ERROR",e.SUMMARY_CARD_ERROR="SUMMARY_CARD_ERROR",e.CREATE_PAYMENT_ERROR="CREATE_PAYMENT_ERROR",e.PAYMENT_PROCESS_ERROR="PAYMENT_PROCESS_ERROR",e.INVALID_CARD_DATA="INVALID_CARD_DATA",e.SAVE_CARD_PROCESS_ERROR="SAVE_CARD_PROCESS_ERROR",e.START_CHECKOUT_ERROR="START_CHECKOUT_ERROR",e.CREATE_ORDER_ERROR="CREATE_ORDER_ERROR",e.BUSINESS_ID_REQUIRED="BUSINESS_ID_REQUIRED",e.CLIENT_ID_REQUIRED="CLIENT_ID_REQUIRED",e.INVALID_AMOUNT="INVALID_AMOUNT",e.INVALID_ITEMS="INVALID_ITEMS",e.CUSTOMER_OPERATION_ERROR="CUSTOMER_OPERATION_ERROR",e.INVALID_EMAIL="INVALID_EMAIL",e.FETCH_PAYMENT_METHODS_ERROR="FETCH_PAYMENT_METHODS_ERROR",e.INVALID_VAULT_TOKEN="INVALID_VAULT_TOKEN",e.VAULT_TOKEN_ERROR="VAULT_TOKEN_ERROR",e.SECURE_TOKEN_ERROR="SECURE_TOKEN_ERROR",e.SECURE_TOKEN_INVALID="SECURE_TOKEN_INVALID",e.INVALID_SECRET_API_KEY="INVALID_SECRET_API_KEY",e.REMOVE_CARD="REMOVE_CARD",e.SKYFLOW_NOT_INITIALIZED="SKYFLOW_NOT_INITIALIZED",e.ERROR_LOAD_PAYMENT_FORM="ERROR_LOAD_PAYMENT_FORM",e.ERROR_LOAD_ENROLLMENT_FORM="ERROR_LOAD_ENROLLMENT_FORM",e.MOUNT_COLLECT_ERROR="MOUNT_COLLECT_ERROR",e.CARD_ON_FILE_DECLINED="CARD_ON_FILE_DECLINED",e.CARD_SAVED_SUCCESSFULLY="CARD_SAVED_SUCCESSFULLY",e.CARD_REMOVED_SUCCESSFULLY="CARD_REMOVED_SUCCESSFULLY",e.REQUEST_ABORTED="REQUEST_ABORTED",e.REQUEST_FAILED="REQUEST_FAILED",e.UNKNOWN_ERROR="UNKNOWN_ERROR",e.THREEDS_REDIRECTION_ERROR="THREEDS_REDIRECTION_ERROR"}(a||(a={}));const d={[a.INIT_ERROR]:"Error initializing the SDK.",[a.INVALID_TYPE]:"SDK Type invalid.",[a.STATE_ERROR]:"Error updating SDK state.",[a.FETCH_BUSINESS_ERROR]:"Error retrieving merchant information.",[a.INVALID_CONFIG]:"Required configuration options.",[a.MERCHANT_CREDENTIAL_REQUIRED]:"Merchant credential required.",[a.INVALID_PAYMENT_REQUEST]:"The payment data must be of type: :::interface:::.",[a.INVALID_PAYMENT_REQUEST_CARD_PM]:"The fields card and payment_method cannot be provided together.",[a.TYPE_SDK_REQUIRED]:"SDK type required.",[a.ENVIRONMENT_REQUIRED]:"Environment required.",[a.FETCH_CARDS_ERROR]:"Error retrieving cards.",[a.CUSTOMER_AUTH_TOKEN_NOT_VALID]:"The customer's auth token is invalid. Please verify that the customer's data was provided when creating the SDK (sdk.create) and try again.",[a.SAVE_CARD_ERROR]:"Error saving the card.",[a.REMOVE_CARD_ERROR]:"Error deleting the card.",[a.CREATE_PAYMENT_ERROR]:"Error creating the payment.",[a.PAYMENT_PROCESS_ERROR]:"There was an issue processing the payment.",[a.CARD_SAVED_SUCCESSFULLY]:"Card saved successfully.",[a.CARD_REMOVED_SUCCESSFULLY]:"Card deleted successfully.",[a.SAVE_CARD_PROCESS_ERROR]:"Error processing card data.",[a.START_CHECKOUT_ERROR]:"Error processing the payment.",[a.CREATE_ORDER_ERROR]:"Error creating the order.",[a.BUSINESS_ID_REQUIRED]:"Business ID is required.",[a.CLIENT_ID_REQUIRED]:"Client ID is required.",[a.INVALID_AMOUNT]:"Invalid amount.",[a.INVALID_ITEMS]:"Invalid items.",[a.CUSTOMER_OPERATION_ERROR]:"Error registering or fetching customer",[a.INVALID_EMAIL]:"Invalid email.",[a.FETCH_PAYMENT_METHODS_ERROR]:"Error retrieving active payment methods.",[a.INVALID_VAULT_TOKEN]:"An invalid vault token response was received.",[a.VAULT_TOKEN_ERROR]:"Error retrieving the vault token.",[a.SECURE_TOKEN_ERROR]:"Error getting secure token.",[a.SECURE_TOKEN_INVALID]:"Invalid secure token.",[a.INVALID_SECRET_API_KEY]:"SECRET API KEY is required.",[a.REMOVE_CARD]:"Card deleted successfully",[a.SKYFLOW_NOT_INITIALIZED]:"Skyflow not initialized.",[a.ERROR_LOAD_PAYMENT_FORM]:"There was an issue loading the payment form.",[a.INVALID_CARD_DATA]:"Invalid card data.",[a.ERROR_LOAD_ENROLLMENT_FORM]:"There was an issue loading the card form.",[a.MOUNT_COLLECT_ERROR]:"Mount failed. Make sure all inputs are complete and valid.",[a.CARD_ON_FILE_DECLINED]:"Transaction declined. Please verify your card details.",[a.REQUEST_ABORTED]:"Requests canceled.",[a.REQUEST_FAILED]:"Request failed.",[a.UNKNOWN_ERROR]:"An unexpected error occurred.",[a.CREATE_ERROR]:"Error creating the SDK.",[a.FETCH_TRANSACTION_ERROR]:"Error retrieving the transaction.",[a.THREEDS_REDIRECTION_ERROR]:"Ocurrió un error durante la redirección de 3DS.",[a.REMOVE_SDK_ERROR]:"Ocurrió un error removiendo la instancia del SDK."};a.INIT_ERROR,a.STATE_ERROR,a.FETCH_BUSINESS_ERROR,a.INVALID_CONFIG,a.TYPE_SDK_REQUIRED,a.ENVIRONMENT_REQUIRED,a.FETCH_CARDS_ERROR,a.SAVE_CARD_ERROR,a.REMOVE_CARD_ERROR,a.CREATE_PAYMENT_ERROR,a.START_CHECKOUT_ERROR,a.CREATE_ORDER_ERROR,a.BUSINESS_ID_REQUIRED,a.CLIENT_ID_REQUIRED,a.INVALID_AMOUNT,a.INVALID_ITEMS,a.CUSTOMER_OPERATION_ERROR,a.INVALID_EMAIL,a.FETCH_PAYMENT_METHODS_ERROR,a.INVALID_VAULT_TOKEN,a.VAULT_TOKEN_ERROR,a.SECURE_TOKEN_ERROR,a.INVALID_SECRET_API_KEY,a.CUSTOMER_AUTH_TOKEN_NOT_VALID,a.SECURE_TOKEN_INVALID,a.REMOVE_CARD,a.SKYFLOW_NOT_INITIALIZED,a.INVALID_TYPE,a.PAYMENT_PROCESS_ERROR,a.INVALID_PAYMENT_REQUEST,a.INVALID_PAYMENT_REQUEST_CARD_PM,a.SAVE_CARD_PROCESS_ERROR,a.ERROR_LOAD_PAYMENT_FORM,a.INVALID_CARD_DATA,a.ERROR_LOAD_ENROLLMENT_FORM,a.MOUNT_COLLECT_ERROR,a.CARD_ON_FILE_DECLINED,a.CARD_SAVED_SUCCESSFULLY,a.CARD_REMOVED_SUCCESSFULLY,a.REQUEST_ABORTED,a.REQUEST_FAILED,a.UNKNOWN_ERROR,a.CREATE_ERROR,a.FETCH_TRANSACTION_ERROR,a.THREEDS_REDIRECTION_ERROR,a.REMOVE_SDK_ERROR;class l extends Error{constructor(e){var t,r;const n=e.message||d[e.code]||"Unknown error";super(n),this.name="TonderError",this.code=e.code,this.details={code:(null===(t=e.details)||void 0===t?void 0:t.code)||e.code,message:(null===(r=e.details)||void 0===r?void 0:r.message)||n}}}const c=()=>({javascript_enabled:!0,time_zone:(new Date).getTimezoneOffset(),language:navigator.language||"en-US",color_depth:window.screen?window.screen.colorDepth:null,screen_width:window.screen?window.screen.width*window.devicePixelRatio||window.screen.width:null,screen_height:window.screen?window.screen.height*window.devicePixelRatio||window.screen.height:null,user_agent:navigator.userAgent}),u=e=>{var t;return e&&"business"in e?null===(t=null==e?void 0:e.business)||void 0===t?void 0:t.pk:""},h=e=>new s({code:(null==e?void 0:e.status)?e.status:e.code,body:null==e?void 0:e.body,name:e?"string"==typeof e?"catch":e.name:"Error",message:e?"string"==typeof e?e:e.message:"Error",stack:"string"==typeof e?void 0:e.stack}),p=(e,t=void 0)=>r(void 0,void 0,void 0,(function*(){let r,n,i="Error";e&&"json"in e&&(r=yield null==e?void 0:e.json()),e&&"status"in e&&(n=e.status.toString()),!r&&e&&"text"in e&&(i=yield e.text()),(null==r?void 0:r.detail)&&(i=r.detail);return new s({code:n,body:r,name:n,message:i,stack:t})}));class _{constructor({payload:e=null,apiKey:t,baseUrl:r,redirectOnComplete:n,tdsIframeId:i,tonderPayButtonId:o,callBack:s}){this.localStorageKey="verify_transaction_status_url",this.setPayload=e=>{this.payload=e},this.baseUrl=r,this.apiKey=t,this.payload=e,this.tdsIframeId=i,this.tonderPayButtonId=o,this.redirectOnComplete=n,this.callBack=s}setStorageItem(e){return localStorage.setItem(this.localStorageKey,JSON.stringify(e))}getStorageItem(){return localStorage.getItem(this.localStorageKey)}removeStorageItem(){return localStorage.removeItem(this.localStorageKey)}saveVerifyTransactionUrl(){var e,t,r,n,i,o;const s=null===(r=null===(t=null===(e=this.payload)||void 0===e?void 0:e.next_action)||void 0===t?void 0:t.redirect_to_url)||void 0===r?void 0:r.verify_transaction_status_url;if(s)this.saveUrlWithExpiration(s);else{const e=null===(o=null===(i=null===(n=this.payload)||void 0===n?void 0:n.next_action)||void 0===i?void 0:i.iframe_resources)||void 0===o?void 0:o.verify_transaction_status_url;e?this.saveUrlWithExpiration(e):console.log("No verify_transaction_status_url found")}}saveUrlWithExpiration(e){try{const t={url:e,expires:(new Date).getTime()+12e5};this.setStorageItem(t)}catch(e){console.log("error: ",e)}}getUrlWithExpiration(){const e=this.getStorageItem();if(e){const t=JSON.parse(e);if(!t)return;return(new Date).getTime()>t.expires?(this.removeVerifyTransactionUrl(),null):t.url}return null}removeVerifyTransactionUrl(){return this.removeStorageItem()}getVerifyTransactionUrl(){return this.getStorageItem()}loadIframe(){var e,t,r;if(null===(r=null===(t=null===(e=this.payload)||void 0===e?void 0:e.next_action)||void 0===t?void 0:t.iframe_resources)||void 0===r?void 0:r.iframe)return new Promise(((e,t)=>{var r,n,i;const o=null===(i=null===(n=null===(r=this.payload)||void 0===r?void 0:r.next_action)||void 0===n?void 0:n.iframe_resources)||void 0===i?void 0:i.iframe;if(o){this.saveVerifyTransactionUrl();const r=document.createElement("div");r.innerHTML=o,document.body.appendChild(r);const n=document.createElement("script");n.textContent='document.getElementById("tdsMmethodForm").submit();',r.appendChild(n);const i=document.getElementById("tdsMmethodTgtFrame");i?i.onload=()=>e(!0):(console.log("No redirection found"),t(!1))}else console.log("No redirection found"),t(!1)}))}getRedirectUrl(){var e,t,r;return null===(r=null===(t=null===(e=this.payload)||void 0===e?void 0:e.next_action)||void 0===t?void 0:t.redirect_to_url)||void 0===r?void 0:r.url}redirectToChallenge(){const e=this.getRedirectUrl();if(e)if(this.saveVerifyTransactionUrl(),this.redirectOnComplete)window.location=e;else{const t=document.querySelector(`#${this.tdsIframeId}`);if(t){t.setAttribute("src",e),t.setAttribute("style","display: block");const n=this,i=e=>r(this,void 0,void 0,(function*(){const e=()=>{try{const e=document.querySelector(`#${this.tonderPayButtonId}`);e&&(e.disabled=!1)}catch(e){}t&&t.setAttribute("style","display: none"),n.callBack&&n.callBack(n.payload),t.removeEventListener("load",i)},o=t=>r(this,void 0,void 0,(function*(){const i=yield new Promise(((e,r)=>e(t)));if(i){if((e=>"Pending"!==(null==e?void 0:e.transaction_status))(i))return e();{const e=setTimeout((()=>r(this,void 0,void 0,(function*(){clearTimeout(e),yield o(n.requestTransactionStatus())}))),7e3)}}}));yield o(n.requestTransactionStatus())}));t.addEventListener("load",i)}else console.log("No iframe found")}else this.callBack&&this.callBack(this.payload)}requestTransactionStatus(){return r(this,void 0,void 0,(function*(){const e=this.getUrlWithExpiration(),t=e.startsWith("https://")?e:`${this.baseUrl}${e}`,r=yield fetch(t,{method:"GET",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKey}`}});if(200!==r.status)return console.error("La verificación de la transacción falló."),null;return yield r.json()}))}getURLParameters(){const e={},t=new URLSearchParams(window.location.search);for(const[r,n]of t)e[r]=n;return e}handleSuccessTransaction(e){return this.removeVerifyTransactionUrl(),e}handleDeclinedTransaction(e){return this.removeVerifyTransactionUrl(),e}handle3dsChallenge(e){return r(this,void 0,void 0,(function*(){const t=document.createElement("form");t.name="frm",t.method="POST",t.action=e.redirect_post_url;const r=document.createElement("input");r.type="hidden",r.name=e.creq,r.value=e.creq,t.appendChild(r);const n=document.createElement("input");n.type="hidden",n.name=e.term_url,n.value=e.TermUrl,t.appendChild(n),document.body.appendChild(t),t.submit(),yield this.verifyTransactionStatus()}))}handleTransactionResponse(e){return r(this,void 0,void 0,(function*(){const t=yield e.json();return"Pending"===t.status&&t.redirect_post_url?yield this.handle3dsChallenge(t):["Success","Authorized"].includes(t.status)?this.handleSuccessTransaction(t):(this.handleDeclinedTransaction(e),t)}))}verifyTransactionStatus(){return r(this,void 0,void 0,(function*(){const e=this.getUrlWithExpiration();if(e){const t=e.startsWith("https://")?e:`${this.baseUrl}${e}`;try{const e=yield fetch(t,{method:"GET",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKey}`}});return 200!==e.status?(console.error("La verificación de la transacción falló."),this.removeVerifyTransactionUrl(),e):yield this.handleTransactionResponse(e)}catch(e){console.error("Error al verificar la transacción:",e),this.removeVerifyTransactionUrl()}}else console.log("No verify_transaction_status_url found")}))}}const E=Object.freeze({production:"https://app.tonder.io",sandbox:"https://sandbox.tonder.io",stage:"https://stage.tonder.io",development:"http://localhost:8000"});function m(e,t,n){return r(this,void 0,void 0,(function*(){try{const r=`${e}/api/v1/checkout-router/`,i=n,o=yield fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${t}`},body:JSON.stringify(Object.assign(Object.assign({},i),"undefined"!=typeof MP_DEVICE_SESSION_ID?{mp_device_session_id:MP_DEVICE_SESSION_ID}:{}))});if(o.status>=200&&o.status<=299)return yield o.json();{const e=yield o.json(),t=new Error("Failed to start checkout router");throw t.details=e,t}}catch(e){throw e}}))}function y(e,t,n=!0,i=null){return r(this,void 0,void 0,(function*(){let r=yield window.OpenPay;return r.setId(e),r.setApiKey(t),r.setSandboxMode(n),yield r.deviceData.setup({signal:i})}))}const R=Object.freeze({production:"https://api.tonder.io",sandbox:"https://api-stage.tonder.io",stage:"https://api-stage.tonder.io",development:"https://api-stage.tonder.io"}),v=Object.freeze({TELEMETRY:"/telemetry/v1/events",ACQ_SUBSCRIPTION_TOKEN:"/acq-kushki/subscription/token",ACQ_SUBSCRIPTION_CREATE:"/acq-kushki/subscription/create"});function f(e="stage"){return`${R[e]}${v.TELEMETRY}`}const A="https://cdn.kushkipagos.com/kushki.min.js";let O=!1,T=null;class C{constructor(e){var t;this.acquirerInstance=null,this.isTestEnvironment=null===(t=e.isTestEnvironment)||void 0===t||t;const r=this.isTestEnvironment?"stage":"production";this.apiUrl=function(e="stage"){return R[e]}(r),this.merchantId=e.merchantId,this.apiKey=e.apiKey}initialize(){return r(this,void 0,void 0,(function*(){yield function(){return r(this,void 0,void 0,(function*(){return O?Promise.resolve():T||(T=new Promise(((e,t)=>{if(document.querySelector(`script[src="${A}"]`))return O=!0,void e();const r=document.createElement("script");r.src=A,r.async=!0,r.onload=()=>{O=!0,e()},r.onerror=()=>{T=null,t(new Error("Failed to load acquirer script"))},document.head.appendChild(r)})),T)}))}(),this.acquirerInstance=function(e,t){if(!window.Kushki)throw new Error("Acquirer script not loaded. Call initialize() first.");return new window.Kushki({merchantId:e,inTestEnvironment:t})}(this.merchantId,this.isTestEnvironment)}))}getAcquirerInstance(){if(!this.acquirerInstance)throw new Error("CardOnFile not initialized. Call initialize() first.");return this.acquirerInstance}getJwt(e){return r(this,void 0,void 0,(function*(){const t=this.getAcquirerInstance();return new Promise(((r,n)=>{t.requestSecureInit({card:{number:e}},(e=>{if("code"in e&&e.code)return void n(new Error(`Error getting JWT: ${e.message}`));const t=e;t.jwt?r(t.jwt):n(new Error("No JWT returned from acquirer"))}))}))}))}generateToken(e){return r(this,void 0,void 0,(function*(){const t=yield fetch(`${this.apiUrl}${v.ACQ_SUBSCRIPTION_TOKEN}`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKey}`},body:JSON.stringify(e)});if(!t.ok){const e=yield t.text();throw new Error(`Failed to generate token: ${t.status} - ${e}`)}return t.json()}))}createSubscription(e){return r(this,void 0,void 0,(function*(){const t=yield fetch(`${this.apiUrl}${v.ACQ_SUBSCRIPTION_CREATE}`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKey}`},body:JSON.stringify(e)});if(!t.ok){const e=yield t.text();throw new Error(`Failed to create subscription: ${t.status} - ${e}`)}return t.json()}))}validate3DS(e,t){return r(this,void 0,void 0,(function*(){const r=this.getAcquirerInstance();return new Promise(((n,i)=>{r.requestValidate3DS({secureId:e,security:t},(e=>{const t=e;t.code&&"3DS000"!==t.code?i(new Error("3DS validation failed}")):!1!==t.isValid?n(!0):i(new Error("3DS validation failed"))}))}))}))}process(e){var t,n;return r(this,void 0,void 0,(function*(){const r=yield this.getJwt(e.cardBin),i=yield this.generateToken({card:e.cardTokens,currency:e.currency,jwt:r}),o=i.secureId||(null===(t=i.details)||void 0===t?void 0:t.secureId),s=i.security||(null===(n=i.details)||void 0===n?void 0:n.security);if(!o||!s)throw new Error("Missing secureId or security in token response");return yield this.validate3DS(o,s),this.createSubscription({token:i.token,contactDetails:e.contactDetails,metadata:{customerId:e.customerId},currency:e.currency})}))}}class g{constructor(e){this.REQUEST_TIMEOUT_MS=1200,this.MAX_MESSAGE_LENGTH=500,this.config=e}captureException(e,t){try{const r=this.buildEvent(e,t||{});this.sendEvent(r)}catch(e){}}extractErrorInfo(e){try{if(e instanceof Error)return{name:e.name||"Error",message:this.truncate(e.message||"Unknown error",this.MAX_MESSAGE_LENGTH),stack:e.stack||void 0};const t=this.safeStringify(e);return{name:"NonErrorException",message:this.truncate(t,this.MAX_MESSAGE_LENGTH),stack:void 0}}catch(e){return{name:"SerializationError",message:"Failed to serialize error",stack:void 0}}}safeStringify(e){try{const t=new WeakSet;return JSON.stringify(e,((e,r)=>{if("object"==typeof r&&null!==r){if(t.has(r))return"[Circular]";t.add(r)}return r}))}catch(t){return String(e)}}buildEvent(e,t){const r=this.extractErrorInfo(e),n=Object.assign({},t.metadata||{});"undefined"!=typeof window&&(n.url=window.location.href);const i={platform:this.config.platform,platform_version:this.config.platform_version,env:this.config.mode,feature:t.feature||"unknown",level:"error",message:r.message,name:r.name,metadata:n};return t.tenant_id&&(i.tenant_id=t.tenant_id),t.process_id&&(i.process_id=t.process_id),t.user_id&&(i.user_id=t.user_id),r.stack&&(i.stack=r.stack),t.error_code&&(i.error_code=t.error_code),t.http_status&&(i.http_status=t.http_status),i}truncate(e,t){return e.length<=t?e:e.substring(0,t)+"..."}sendEvent(e){this.sendHttpRequest(e).then((()=>{})).catch((()=>{}))}sendHttpRequest(e){return r(this,void 0,void 0,(function*(){try{const t=JSON.stringify(e),r=new AbortController,n=setTimeout((()=>r.abort()),this.REQUEST_TIMEOUT_MS);try{const e=yield fetch(this.config.endpoint,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${this.config.apiKey}`},body:t,keepalive:!0,signal:r.signal});return clearTimeout(n),e.ok}catch(e){return clearTimeout(n),!1}}catch(e){return!1}}))}}const I=Object.freeze({name:"@tonder.io/ionic-lite-sdk",version:"0.0.68-beta.DEV-2106.6"});class S extends Error{constructor(e){var t;const r=S.parseStatusCode(e.statusCode);super(S.resolveMessage(e.errorCode,e.message)),this.status="error",Object.setPrototypeOf(this,new.target.prototype),this.name="TonderError",this.code=e.errorCode,this.statusCode=r;const n=Object.assign({},e.details||{});delete n.systemCode;const i=S.extractSystemError(e,n);this.details=Object.assign(Object.assign({},n),{code:e.errorCode,statusCode:r}),this.details.systemError=i,null===(t=Error.captureStackTrace)||void 0===t||t.call(Error,this,S)}static parseStatusCode(e){const t=Number(e);return Number.isFinite(t)?t<100||t>599?500:Math.trunc(t):500}static resolveMessage(e,t){return t||(d[e]||d[a.UNKNOWN_ERROR]||"An unexpected error occurred.")}static isHttpStatusCode(e){const t=Number(e);return Number.isFinite(t)&&t>=100&&t<=599}static resolveSystemError(e){return"string"!=typeof e?null:e.trim()}static extractSystemError(e,t){var r,n,i;const o=null==t?void 0:t.cause,s=[null==t?void 0:t.systemError,null===(r=null==e?void 0:e.details)||void 0===r?void 0:r.systemError,null===(n=null==o?void 0:o.body)||void 0===n?void 0:n.code,null===(i=null==o?void 0:o.details)||void 0===i?void 0:i.code];for(const e of s){const t=S.resolveSystemError(e);if(t)return t}return"APP_INTERNAL_001"}}function N(e,t){var r;if(!(null==e?void 0:e.errorCode))throw new Error("buildPublicAppError requires errorCode");const n=!!e.details&&Object.keys(e.details).length>0,i=e.errorCode!==(null==t?void 0:t.code)||!!e.message||void 0!==e.statusCode||n;if(t instanceof S&&!i)return t;const o=null!==(r=e.statusCode)&&void 0!==r?r:S.isHttpStatusCode(null==t?void 0:t.statusCode)?Number(t.statusCode):S.isHttpStatusCode(null==t?void 0:t.code)?Number(t.code):S.isHttpStatusCode(null==t?void 0:t.status)?Number(t.status):500,s=Object.assign(Object.assign({},(null==t?void 0:t.details)||{}),e.details||{});return void 0===s.cause&&void 0!==t&&(s.cause=t),new S({errorCode:e.errorCode,message:e.message,details:s,statusCode:o})}var b,D,M,U,k,L,w,P,j,V,F,K,x;class B{constructor({mode:e="stage",customization:t,apiKey:r,apiKeyTonder:n,returnUrl:i,tdsIframeId:o,callBack:s=(()=>{}),baseUrlTonder:a,tonderPayButtonId:d,sdkInfo:l}){b.add(this),this.baseUrl="",this.cartTotal="0",this.secureToken="",this.customization={redirectOnComplete:!0},this.metadata={},this.order_reference=null,this.card={},this.currency="",this.cardOnFileInstance=null,D.set(this,void 0),M.set(this,void 0),this.apiKeyTonder=n||r||"",this.returnUrl=i,this.callBack=s,this.mode=e,this.customer={},this.baseUrl=a||E[this.mode]||E.stage,this.abortController=new AbortController,this.customization=Object.assign(Object.assign({},this.customization),t||{}),this.process3ds=new _({apiKey:r,baseUrl:this.baseUrl,redirectOnComplete:this.customization.redirectOnComplete,tdsIframeId:o,tonderPayButtonId:d,callBack:s}),this.tdsIframeId=o;const c=l||I;this.telemetry=new g({endpoint:f(this.mode),apiKey:this.apiKeyTonder,platform:c.name,platform_version:c.version,mode:this.mode||"stage"})}configureCheckout(e){"secureToken"in e&&n(this,b,"m",L).call(this,e.secureToken),n(this,b,"m",U).call(this,e)}getCustomerId(){var e,t;return null===(t=null===(e=n(this,M,"f"))||void 0===e?void 0:e.id)||void 0===t?void 0:t.toString()}reportSdkError(e,t){var r,n,i;try{const o=this.getCustomerId(),s=Object.assign({tenant_id:null===(i=null===(n=null===(r=this.merchantData)||void 0===r?void 0:r.business)||void 0===n?void 0:n.pk)||void 0===i?void 0:i.toString(),user_id:o},t||{});s.user_id||delete s.user_id,s.feature=(null==t?void 0:t.feature)||"unknown",this.telemetry.captureException(e,s)}catch(e){}}verify3dsTransaction(){return r(this,void 0,void 0,(function*(){const e=yield this.process3ds.verifyTransactionStatus(),t=yield n(this,b,"m",F).call(this,e);return this.process3ds.setPayload(t),this._handle3dsRedirect(t)}))}payment(e){return new Promise(((t,i)=>r(this,void 0,void 0,(function*(){var r,o;let s;try{n(this,b,"m",U).call(this,e),s=yield this._checkout(e),this.process3ds.setPayload(s);if(yield this._handle3dsRedirect(s)){try{const e=document.querySelector(`#${this.tonderPayButtonId}`);e&&(e.disabled=!1)}catch(e){}this.callBack&&this.callBack(s),t(s)}}catch(t){this.reportSdkError(t,{feature:"payment",process_id:(null==s?void 0:s.payment_id)||(null===(r=null==s?void 0:s.payment)||void 0===r?void 0:r.id)||(null===(o=null==s?void 0:s.payment)||void 0===o?void 0:o.pk),metadata:{step:"payment",request:e,response:s}}),i(N({errorCode:a.PAYMENT_PROCESS_ERROR},t))}}))))}getSecureToken(e){return r(this,void 0,void 0,(function*(){try{return yield function(e,t,n=null){return r(this,void 0,void 0,(function*(){try{const r=yield fetch(`${e}/api/secure-token/`,{method:"POST",headers:{Authorization:`Token ${t}`,"Content-Type":"application/json"},signal:n});if(r.ok)return yield r.json();throw yield p(r)}catch(e){throw h(e)}}))}(this.baseUrl,e)}catch(e){throw this.reportSdkError(e,{feature:"secure-token",metadata:{step:"getSecureToken"}}),N({errorCode:a.SECURE_TOKEN_ERROR},e)}}))}_initializeCheckout(){return r(this,void 0,void 0,(function*(){const e=yield this._fetchMerchantData();e&&e.mercado_pago&&e.mercado_pago.active&&function(){try{const e=document.createElement("script");e.src="https://www.mercadopago.com/v2/security.js",e.setAttribute("view",""),e.onload=()=>{},e.onerror=e=>{console.error("Error loading Mercado Pago script:",e)},document.head.appendChild(e)}catch(e){console.error("Error attempting to inject Mercado Pago script:",e)}}(),this._hasCardOnFileKeys()&&(yield this._initializeCardOnFile())}))}_checkout(e){return r(this,void 0,void 0,(function*(){throw new Error("The #checkout method should be implement in child classes.")}))}_setCartTotal(e){throw new Error("The #setCartTotal method should be implement in child classes.")}_getCustomer(e=null){return r(this,void 0,void 0,(function*(){return n(this,M,"f")||i(this,M,yield function(e,t,n,i=null){return r(this,void 0,void 0,(function*(){const r=`${e}/api/v1/customer/`,o={email:n.email,first_name:null==n?void 0:n.firstName,last_name:null==n?void 0:n.lastName,phone:null==n?void 0:n.phone},s=yield fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${t}`},signal:i,body:JSON.stringify(o)});if(201===s.status)return yield s.json();throw new Error(`Error: ${s.statusText}`)}))}(this.baseUrl,this.apiKeyTonder,this.customer,e),"f"),n(this,M,"f")}))}_handleCheckout({card:t,payment_method:i,customer:o,isSandbox:s,enable_card_on_file:a,returnUrl:d}){return r(this,void 0,void 0,(function*(){const{openpay_keys:l,reference:u,business:h}=this.merchantData,p=Number(this.cartTotal);let _,E,R;try{let v;!v&&l.merchant_id&&l.public_key&&!i&&(v=yield y(l.merchant_id,l.public_key,s,this.abortController.signal));const{id:f,auth_token:A}=o;_={business:this.apiKeyTonder,client:A,billing_address_id:null,shipping_address_id:null,amount:p,status:"A",reference:u,is_oneclick:!0,items:this.cartItems,currency:this.currency,metadata:this.metadata};const O=yield function(e,t,n){return r(this,void 0,void 0,(function*(){const r=`${e}/api/v1/orders/`,i=n,o=yield fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${t}`},body:JSON.stringify(i)});if(201===o.status)return yield o.json();throw new Error(`Error: ${o.statusText}`)}))}(this.baseUrl,this.apiKeyTonder,_),T=(new Date).toISOString();E={business_pk:h.pk,client_id:f,amount:p,date:T,order_id:O.id,customer_order_reference:this.order_reference?this.order_reference:u,items:this.cartItems,currency:this.currency,metadata:this.metadata};const C=yield function(e,t,n){return r(this,void 0,void 0,(function*(){const r=`${e}/api/v1/business/${n.business_pk}/payments/`,i=n,o=yield fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${t}`},body:JSON.stringify(i)});if(o.status>=200&&o.status<=299)return yield o.json();throw new Error(`Error: ${o.statusText}`)}))}(this.baseUrl,this.apiKeyTonder,E);R=Object.assign(Object.assign(Object.assign(Object.assign({name:e(this.customer,"firstName",e(this.customer,"name","")),last_name:e(this.customer,"lastName",e(this.customer,"lastname","")),email_client:e(this.customer,"email",""),phone_number:e(this.customer,"phone",""),return_url:d||this.returnUrl,id_product:"no_id",quantity_product:1,id_ship:"0",instance_id_ship:"0",amount:p,title_ship:"shipping",description:"transaction",device_session_id:v||null,token_id:"",order_id:O.id,business_id:h.pk,payment_id:C.pk,source:"sdk",items:this.cartItems,metadata:this.metadata,browser_info:c(),currency:this.currency},i?{payment_method:i}:{card:t}),{apm_config:n(this,D,"f")}),this.customer&&"identification"in this.customer?{identification:this.customer.identification}:{}),void 0!==a?{enable_card_on_file:a}:{});const g=yield m(this.baseUrl,this.apiKeyTonder,R);return g||!1}catch(e){throw this.reportSdkError(e,{feature:"payment",process_id:null==R?void 0:R.payment_id,metadata:{step:"_handleCheckout",orderItems:_,paymentItems:E,routerItems:R}}),e}}))}_fetchMerchantData(){return r(this,void 0,void 0,(function*(){try{return this.merchantData||(this.merchantData=yield o(this.baseUrl,this.apiKeyTonder,this.abortController.signal)),this.merchantData}catch(e){return this.reportSdkError(e,{feature:"fetch-merchant-data",metadata:{step:"_fetchMerchantData"}}),this.merchantData}}))}_getCustomerCards(e,t){return r(this,void 0,void 0,(function*(){return yield function(e,t,n,i,o=null){return r(this,void 0,void 0,(function*(){try{const r=`${e}/api/v1/business/${i}/cards/`,s=yield fetch(r,{method:"GET",headers:{Authorization:`Bearer ${n}`,"Content-Type":"application/json","User-token":t},signal:o});if(s.ok)return yield s.json();if(401===s.status)return{user_id:0,cards:[]};throw yield p(s)}catch(e){throw h(e)}}))}(this.baseUrl,e,this.secureToken,t)}))}_saveCustomerCard(e,t,n,i=!1){return r(this,void 0,void 0,(function*(){return yield function(e,t,n,i,o,s=!1){return r(this,void 0,void 0,(function*(){try{const r=`${e}/api/v1/business/${i}/cards/`,a=yield fetch(r,{method:"POST",headers:Object.assign({Authorization:`Bearer ${n}`,"Content-Type":"application/json","User-token":t},s?{"X-App-Origin":"sdk/ionic"}:{}),body:JSON.stringify(o)});if(a.ok)return yield a.json();throw yield p(a)}catch(e){throw h(e)}}))}(this.baseUrl,e,this.secureToken,t,n,i)}))}_removeCustomerCard(e,t,n){return r(this,void 0,void 0,(function*(){return yield function(e,t,n,i="",o){return r(this,void 0,void 0,(function*(){try{const r=`${e}/api/v1/business/${o}/cards/${i}`,s=yield fetch(r,{method:"DELETE",headers:{Authorization:`Bearer ${n}`,"Content-Type":"application/json","User-token":t}});if(204===s.status)return d[a.CARD_REMOVED_SUCCESSFULLY];if(s.ok&&"json"in s)return yield s.json();throw yield p(s)}catch(e){throw h(e)}}))}(this.baseUrl,e,this.secureToken,n,t)}))}_fetchCustomerPaymentMethods(){return r(this,void 0,void 0,(function*(){return yield function(e,t,n={status:"active",pagesize:"10000"},i=null){return r(this,void 0,void 0,(function*(){try{const r=new URLSearchParams(n).toString(),o=yield fetch(`${e}/api/v1/payment_methods?${r}`,{method:"GET",headers:{Authorization:`Token ${t}`,"Content-Type":"application/json"},signal:i});if(o.ok)return yield o.json();throw yield p(o)}catch(e){throw h(e)}}))}(this.baseUrl,this.apiKeyTonder)}))}_hasCardOnFileKeys(){var e,t;return!!(null===(t=null===(e=this.merchantData)||void 0===e?void 0:e.cardonfile_keys)||void 0===t?void 0:t.public_key)}_initializeCardOnFile(){var e;return r(this,void 0,void 0,(function*(){return this.cardOnFileInstance||(this.cardOnFileInstance=new C({merchantId:null===(e=this.merchantData)||void 0===e?void 0:e.cardonfile_keys.public_key,apiKey:this.apiKeyTonder,isTestEnvironment:"production"!==this.mode}),yield this.cardOnFileInstance.initialize()),this.cardOnFileInstance}))}_handle3dsRedirect(e){var t,n;return r(this,void 0,void 0,(function*(){if(e&&"next_action"in e?null===(n=null===(t=null==e?void 0:e.next_action)||void 0===t?void 0:t.iframe_resources)||void 0===n?void 0:n.iframe:null)this.process3ds.loadIframe().then((()=>{this.process3ds.verifyTransactionStatus()})).catch((t=>{console.log("Error loading iframe:",t),this.reportSdkError(t,{feature:"3ds-verification",metadata:{step:"_handle3dsRedirect",response:e}})}));else{if(!this.process3ds.getRedirectUrl())return e;this.process3ds.redirectToChallenge()}}))}}function Y(e,t,n=null){return r(this,void 0,void 0,(function*(){const r=yield fetch(`${e}/api/v1/vault-token/`,{method:"GET",headers:{Authorization:`Token ${t}`},signal:n});if(r.ok){return(yield r.json()).token}throw new Error("Failed to retrieve bearer token")}))}D=new WeakMap,M=new WeakMap,b=new WeakSet,U=function(e){var t,r;!e||e&&0===Object.keys(e).length||(n(this,b,"m",k).call(this,e.customer),this._setCartTotal((null===(t=e.cart)||void 0===t?void 0:t.total)||0),n(this,b,"m",w).call(this,(null===(r=e.cart)||void 0===r?void 0:r.items)||[]),n(this,b,"m",P).call(this,e),n(this,b,"m",j).call(this,e),n(this,b,"m",V).call(this,e),n(this,b,"m",K).call(this,e))},k=function(e){e&&(this.customer=e)},L=function(e){this.secureToken=e},w=function(e){this.cartItems=e},P=function(e){this.metadata=null==e?void 0:e.metadata,this.order_reference=null==e?void 0:e.order_reference},j=function(e){this.currency=null==e?void 0:e.currency},V=function(e){this.card=null==e?void 0:e.card},F=function(e){var t,n,i,o,s;return r(this,void 0,void 0,(function*(){if("Hard"===(null===(t=null==e?void 0:e.decline)||void 0===t?void 0:t.error_type)||(null===(n=null==e?void 0:e.checkout)||void 0===n?void 0:n.is_route_finished)||(null==e?void 0:e.is_route_finished)||["Pending"].includes(null==e?void 0:e.transaction_status))return e;if(["Success","Authorized"].includes(null==e?void 0:e.transaction_status))return e;if(e){const t={checkout_id:(null===(i=e.checkout)||void 0===i?void 0:i.id)||(null==e?void 0:e.checkout_id)};try{return yield m(this.baseUrl,this.apiKeyTonder,t)}catch(t){this.reportSdkError(t,{feature:"payment",process_id:(null==e?void 0:e.payment_id)||(null===(o=null==e?void 0:e.payment)||void 0===o?void 0:o.id)||(null===(s=null==e?void 0:e.payment)||void 0===s?void 0:s.pk),metadata:{step:"#resumeCheckout",response:e}})}return e}}))},K=function(e){i(this,D,null==e?void 0:e.apm_config,"f")},function(e){e.CARD_NUMBER="card_number",e.CVV="cvv",e.EXPIRATION_MONTH="expiration_month",e.EXPIRATION_YEAR="expiration_year",e.CARDHOLDER_NAME="cardholder_name"}(x||(x={}));const $={type:t.ValidationRuleType.LENGTH_MATCH_RULE,params:{max:70}},H=RegExp("^(?!s*$).+"),z={type:t.ValidationRuleType.REGEX_MATCH_RULE,params:{regex:H,error:"El campo es requerido"}},Q="Titular de la tarjeta",W="Número de tarjeta",q="CVC/CVV",X="Mes",J="Año",G="Fecha de expiración",Z="Nombre como aparece en la tarjeta",ee="1234 1234 1234 1234",te="3-4 dígitos",re="MM",ne="AA",ie={base:{border:"1px solid #e0e0e0",padding:"10px 7px",borderRadius:"5px",color:"#1d1d1d",marginTop:"2px",backgroundColor:"white",fontFamily:'"Inter", sans-serif',fontSize:"16px","&::placeholder":{color:"#ccc"}},complete:{color:"#4caf50"},invalid:{border:"1px solid #f44336"},empty:{},focus:{},global:{"@import":'url("https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;700&display=swap")'}},oe={base:{fontSize:"12px",fontWeight:"500",fontFamily:'"Inter", sans-serif'}},se={base:{fontSize:"12px",fontWeight:"500",fontFamily:'"Inter", sans-serif',color:"#f44336"}};function ae({baseUrl:e,apiKey:n,vault_id:i,vault_url:o,data:s}){return r(this,void 0,void 0,(function*(){const a=t.init({vaultID:i,vaultURL:o,getBearerToken:()=>r(this,void 0,void 0,(function*(){return yield Y(e,n)})),options:{logLevel:t.LogLevel.ERROR,env:t.Env.DEV}}).container(t.ContainerType.COLLECT),d=yield function(e,n){return r(this,void 0,void 0,(function*(){const i=yield function(e,n){return r(this,void 0,void 0,(function*(){return yield Promise.all(Object.keys(e).map((e=>r(this,void 0,void 0,(function*(){return{element:yield n.create({table:"cards",column:e,type:t.ElementType.INPUT_FIELD}),key:e}})))))}))}(e,n);return i?i.map((t=>new Promise((r=>{var n;const i=document.createElement("div");i.hidden=!0,i.id=`id-${t.key}`,null===(n=document.querySelector("body"))||void 0===n||n.appendChild(i),setTimeout((()=>{t.element.mount(`#id-${t.key}`),setInterval((()=>{if(t.element.isMounted()){const n=e[t.key];return t.element.setValue(n),r(t.element.isMounted())}}),120)}),120)})))):[]}))}(s,a);if((yield Promise.all(d)).some((e=>!e)))throw h(Error("Ocurrió un error al montar los campos de la tarjeta"));try{const e=yield a.collect();if(e)return e.records[0].fields;throw h(Error("Por favor, verifica todos los campos de tu tarjeta"))}catch(e){throw h(e)}}))}function de(e){const{element:r,fieldMessage:n="",errorStyles:i={},requiredMessage:o="Campo requerido",invalidMessage:s="Campo no válido",events:a}=e;"on"in r&&(r.on(t.EventName.CHANGE,(e=>{ce({eventName:"onChange",data:e,events:a}),le({element:r,errorStyles:i,color:"transparent"})})),r.on(t.EventName.BLUR,(e=>{if(ce({eventName:"onBlur",data:e,events:a}),!e.isValid){const t=e.isEmpty?o:""!=n?`El campo ${n} no es válido`:s;r.setError(t)}le({element:r,errorStyles:i})})),r.on(t.EventName.FOCUS,(e=>{ce({eventName:"onFocus",data:e,events:a}),le({element:r,errorStyles:i,color:"transparent"}),r.resetError()})))}function le(e){const{element:t,errorStyles:r={},color:n=""}=e;Object.keys(r).length>0&&t.update({errorTextStyles:Object.assign(Object.assign({},r),{base:Object.assign(Object.assign({},r.base&&Object.assign({},r.base)),""!=n&&{color:n})})})}const ce=t=>{const{eventName:r,data:n,events:i}=t;if(i&&r in i){const t=i[r];"function"==typeof t&&t({elementType:e(n,"elementType",""),isEmpty:e(n,"isEmpty",""),isFocused:e(n,"isFocused",""),isValid:e(n,"isValid","")})}};function ue(e){return r(this,void 0,void 0,(function*(){const{element:t,containerId:r,retries:n=2,delay:i=30}=e;for(let e=0;e<=n;e++){if(document.querySelector(r))return void t.mount(r);e<n&&(yield new Promise((e=>setTimeout(e,i))))}console.warn(`[mountCardFields] Container ${r} was not found after ${n+1} attempts`)}))}const he=Object.freeze({SORIANA:"SORIANA",OXXO:"OXXO",OXXOPAY:"OXXOPAY",SPEI:"SPEI",CODI:"CODI",MERCADOPAGO:"MERCADOPAGO",PAYPAL:"PAYPAL",COMERCIALMEXICANA:"COMERCIALMEXICANA",BANCOMER:"BANCOMER",WALMART:"WALMART",BODEGA:"BODEGA",SAMSCLUB:"SAMSCLUB",SUPERAMA:"SUPERAMA",CALIMAX:"CALIMAX",EXTRA:"EXTRA",CIRCULOK:"CIRCULOK",SEVEN11:"7ELEVEN",TELECOMM:"TELECOMM",BANORTE:"BANORTE",BENAVIDES:"BENAVIDES",DELAHORRO:"DELAHORRO",ELASTURIANO:"ELASTURIANO",WALDOS:"WALDOS",ALSUPER:"ALSUPER",KIOSKO:"KIOSKO",STAMARIA:"STAMARIA",LAMASBARATA:"LAMASBARATA",FARMROMA:"FARMROMA",FARMUNION:"FARMUNION",FARMATODO:"FARMATODO",SFDEASIS:"SFDEASIS",FARM911:"FARM911",FARMECONOMICAS:"FARMECONOMICAS",FARMMEDICITY:"FARMMEDICITY",RIANXEIRA:"RIANXEIRA",WESTERNUNION:"WESTERNUNION",ZONAPAGO:"ZONAPAGO",CAJALOSANDES:"CAJALOSANDES",CAJAPAITA:"CAJAPAITA",CAJASANTA:"CAJASANTA",CAJASULLANA:"CAJASULLANA",CAJATRUJILLO:"CAJATRUJILLO",EDPYME:"EDPYME",KASNET:"KASNET",NORANDINO:"NORANDINO",QAPAQ:"QAPAQ",RAIZ:"RAIZ",PAYSER:"PAYSER",WUNION:"WUNION",BANCOCONTINENTAL:"BANCOCONTINENTAL",GMONEY:"GMONEY",GOPAY:"GOPAY",WU:"WU",PUNTOSHEY:"PUNTOSHEY",AMPM:"AMPM",JUMBOMARKET:"JUMBOMARKET",SMELPUEBLO:"SMELPUEBLO",BAM:"BAM",REFACIL:"REFACIL",ACYVALORES:"ACYVALORES"}),pe={[he.SORIANA]:{label:"Soriana",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/soriana.png"},[he.OXXO]:{label:"Oxxo",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/oxxo.png"},[he.CODI]:{label:"CoDi",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/codi.png"},[he.MERCADOPAGO]:{label:"Mercado Pago",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/mercadopago.png"},[he.OXXOPAY]:{label:"Oxxo Pay",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/oxxopay.png"},[he.SPEI]:{label:"SPEI",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/spei.png"},[he.PAYPAL]:{label:"Paypal",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/paypal.png"},[he.COMERCIALMEXICANA]:{label:"Comercial Mexicana",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/comercial_exicana.png"},[he.BANCOMER]:{label:"Bancomer",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/bancomer.png"},[he.WALMART]:{label:"Walmart",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/walmart.png"},[he.BODEGA]:{label:"Bodega Aurrera",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/bodega_aurrera.png"},[he.SAMSCLUB]:{label:"Sam´s Club",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/sams_club.png"},[he.SUPERAMA]:{label:"Superama",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/superama.png"},[he.CALIMAX]:{label:"Calimax",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/calimax.png"},[he.EXTRA]:{label:"Tiendas Extra",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/tiendas_extra.png"},[he.CIRCULOK]:{label:"Círculo K",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/circulo_k.png"},[he.SEVEN11]:{label:"7 Eleven",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/7_eleven.png"},[he.TELECOMM]:{label:"Telecomm",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/telecomm.png"},[he.BANORTE]:{label:"Banorte",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/banorte.png"},[he.BENAVIDES]:{label:"Farmacias Benavides",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_benavides.png"},[he.DELAHORRO]:{label:"Farmacias del Ahorro",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_ahorro.png"},[he.ELASTURIANO]:{label:"El Asturiano",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/asturiano.png"},[he.WALDOS]:{label:"Waldos",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/waldos.png"},[he.ALSUPER]:{label:"Alsuper",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/al_super.png"},[he.KIOSKO]:{label:"Kiosko",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/kiosko.png"},[he.STAMARIA]:{label:"Farmacias Santa María",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_santa_maria.png"},[he.LAMASBARATA]:{label:"Farmacias la más barata",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_barata.png"},[he.FARMROMA]:{label:"Farmacias Roma",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_roma.png"},[he.FARMUNION]:{label:"Pago en Farmacias Unión",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_union.png"},[he.FARMATODO]:{label:"Pago en Farmacias Farmatodo",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_farmatodo.png\t"},[he.SFDEASIS]:{label:"Pago en Farmacias San Francisco de Asís",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_san_francisco.png"},[he.FARM911]:{label:"Farmacias 911",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.FARMECONOMICAS]:{label:"Farmacias Economicas",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.FARMMEDICITY]:{label:"Farmacias Medicity",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.RIANXEIRA]:{label:"Rianxeira",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.WESTERNUNION]:{label:"Western Union",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.ZONAPAGO]:{label:"Zona Pago",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.CAJALOSANDES]:{label:"Caja Los Andes",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.CAJAPAITA]:{label:"Caja Paita",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.CAJASANTA]:{label:"Caja Santa",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.CAJASULLANA]:{label:"Caja Sullana",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.CAJATRUJILLO]:{label:"Caja Trujillo",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.EDPYME]:{label:"Edpyme",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.KASNET]:{label:"KasNet",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.NORANDINO]:{label:"Norandino",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.QAPAQ]:{label:"Qapaq",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.RAIZ]:{label:"Raiz",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.PAYSER]:{label:"Paysera",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.WUNION]:{label:"Western Union",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.BANCOCONTINENTAL]:{label:"Banco Continental",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.GMONEY]:{label:"Go money",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.GOPAY]:{label:"Go pay",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.WU]:{label:"Western Union",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.PUNTOSHEY]:{label:"Puntoshey",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.AMPM]:{label:"Ampm",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.JUMBOMARKET]:{label:"Jumbomarket",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.SMELPUEBLO]:{label:"Smelpueblo",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.BAM]:{label:"Bam",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.REFACIL]:{label:"Refacil",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[he.ACYVALORES]:{label:"Acyvalores",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"}},_e=e=>{const t=e.toUpperCase().trim().replace(/\s+/g,"");return pe[t]||{icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png",label:""}};class Ee extends B{constructor({apiKey:e,mode:t,returnUrl:r,callBack:n,apiKeyTonder:i,baseUrlTonder:o,customization:s,collectorIds:a,events:d}){super({mode:t,apiKey:e,returnUrl:r,callBack:n,apiKeyTonder:i,baseUrlTonder:o,customization:s,tdsIframeId:a&&"tdsIframe"in a?null==a?void 0:a.tdsIframe:"tdsIframe",sdkInfo:I}),this.activeAPMs=[],this.mountedElementsByContext=new Map,this.customerCardsCache=null,this.skyflowInstance=null,this.events=d||{}}injectCheckout(){return r(this,void 0,void 0,(function*(){yield this._initializeCheckout()}))}getCustomerCards(){return r(this,void 0,void 0,(function*(){try{yield this._fetchMerchantData();const{auth_token:e}=yield this._getCustomer(),t=yield this._getCustomerCards(e,this.merchantData.business.pk);return this.customerCardsCache=t,Object.assign(Object.assign({},t),{cards:t.cards.map((e=>{return Object.assign(Object.assign({},e),{fields:Object.assign(Object.assign({},e.fields),{subscription_id:this._hasCardOnFileKeys()?e.fields.subscription_id:void 0}),icon:(t=e.fields.card_scheme,"Visa"===t?"https://d35a75syrgujp0.cloudfront.net/cards/visa.png":"Mastercard"===t?"https://d35a75syrgujp0.cloudfront.net/cards/mastercard.png":"American Express"===t?"https://d35a75syrgujp0.cloudfront.net/cards/american_express.png":"https://d35a75syrgujp0.cloudfront.net/cards/default_card.png")});var t}))})}catch(e){throw this.reportSdkError(e,{feature:"get-cards",process_id:this.getCustomerId(),metadata:{step:"getCustomerCards"}}),N({errorCode:a.FETCH_CARDS_ERROR},e)}}))}saveCustomerCard(e){return r(this,void 0,void 0,(function*(){let t=null;try{yield this._fetchMerchantData();const r=yield this._getCustomer(),{auth_token:n,first_name:i="",last_name:o="",email:s=""}=r,{vault_id:l,vault_url:c,business:u}=this.merchantData,h=this._hasCardOnFileKeys(),p={card_number:e.card_number.replace(/\s+/g,""),expiration_month:e.expiration_month.replace(/\s+/g,""),expiration_year:e.expiration_year.replace(/\s+/g,""),cvv:e.cvv.replace(/\s+/g,""),cardholder_name:e.cardholder_name.replace(/\s+/g,"")},_=yield ae({vault_id:l,vault_url:c,data:p,baseUrl:this.baseUrl,apiKey:this.apiKeyTonder}),E=yield this._saveCustomerCard(n,null==u?void 0:u.pk,_,h);if(t=E.skyflow_id,h){const e=E.card_bin;if(!e)throw new Error("Card BIN not returned from save card");const t=yield this._initializeCardOnFile();let r;try{r=yield t.process({cardTokens:{name:_.cardholder_name,number:_.card_number,expiryMonth:_.expiration_month,expiryYear:_.expiration_year,cvv:_.cvv},cardBin:e,contactDetails:{firstName:i||"",lastName:o||"",email:s||""},customerId:n,currency:this.currency||"MXN"})}catch(e){throw N({errorCode:a.SAVE_CARD_ERROR,message:d[a.CARD_ON_FILE_DECLINED]},e)}const l={skyflow_id:_.skyflow_id,subscription_id:r.subscriptionId};yield this._saveCustomerCard(n,null==u?void 0:u.pk,l)}return E}catch(e){throw t&&(yield this.removeCustomerCard(t)),this.reportSdkError(e,{feature:"save-card",process_id:t||this.getCustomerId(),metadata:{step:"saveCustomerCard"}}),N({errorCode:a.SAVE_CARD_ERROR},e)}}))}removeCustomerCard(e){return r(this,void 0,void 0,(function*(){try{yield this._fetchMerchantData();const{auth_token:t}=yield this._getCustomer(),{business:r}=this.merchantData;return yield this._removeCustomerCard(t,null==r?void 0:r.pk,e)}catch(t){throw this.reportSdkError(t,{feature:"remove-card",process_id:e,metadata:{step:"removeCustomerCard"}}),N({errorCode:a.REMOVE_CARD_ERROR},t)}}))}getCustomerPaymentMethods(){return r(this,void 0,void 0,(function*(){try{const e=yield this._fetchCustomerPaymentMethods();return(e&&"results"in e&&e.results.length>0?e.results:[]).filter((e=>"cards"!==e.category.toLowerCase())).map((e=>Object.assign({id:e.pk,payment_method:e.payment_method,priority:e.priority,category:e.category},_e(e.payment_method)))).sort(((e,t)=>e.priority-t.priority))}catch(e){throw this.reportSdkError(e,{feature:"get-payment-methods",metadata:{step:"getCustomerPaymentMethods"}}),N({errorCode:a.FETCH_PAYMENT_METHODS_ERROR},e)}}))}mountCardFields(e){var n;return r(this,void 0,void 0,(function*(){const i=e.card_id?`update:${e.card_id}`:"create",o=null!==(n=e.unmount_context)&&void 0!==n?n:"all";"none"!==o&&("current"===o?this.unmountCardFields(i):this.unmountCardFields(o)),yield this.createSkyflowInstance();const s=yield function(e){var n,i,o,s,a,d,l,c,u,h,p,_,E,m,y,R,v;return r(this,void 0,void 0,(function*(){const{skyflowInstance:r,data:f,customization:A,events:O}=e,T=r.container(t.ContainerType.COLLECT),C=[],g={[x.CVV]:t.ElementType.CVV,[x.CARD_NUMBER]:t.ElementType.CARD_NUMBER,[x.EXPIRATION_MONTH]:t.ElementType.EXPIRATION_MONTH,[x.EXPIRATION_YEAR]:t.ElementType.EXPIRATION_YEAR,[x.CARDHOLDER_NAME]:t.ElementType.CARDHOLDER_NAME},I={[x.CVV]:[z],[x.CARD_NUMBER]:[z],[x.EXPIRATION_MONTH]:[z],[x.EXPIRATION_YEAR]:[z],[x.CARDHOLDER_NAME]:[$,z]},S={errorStyles:(null===(i=null===(n=null==A?void 0:A.styles)||void 0===n?void 0:n.cardForm)||void 0===i?void 0:i.errorStyles)||se,inputStyles:(null===(s=null===(o=null==A?void 0:A.styles)||void 0===o?void 0:o.cardForm)||void 0===s?void 0:s.inputStyles)||ie,labelStyles:(null===(d=null===(a=null==A?void 0:A.styles)||void 0===a?void 0:a.cardForm)||void 0===d?void 0:d.labelStyles)||oe},N={name:(null===(l=null==A?void 0:A.labels)||void 0===l?void 0:l.name)||Q,card_number:(null===(c=null==A?void 0:A.labels)||void 0===c?void 0:c.card_number)||W,cvv:(null===(u=null==A?void 0:A.labels)||void 0===u?void 0:u.cvv)||q,expiration_date:(null===(h=null==A?void 0:A.labels)||void 0===h?void 0:h.expiry_date)||G,expiration_month:(null===(p=null==A?void 0:A.labels)||void 0===p?void 0:p.expiration_month)||X,expiration_year:(null===(_=null==A?void 0:A.labels)||void 0===_?void 0:_.expiration_year)||J},b={name:(null===(E=null==A?void 0:A.placeholders)||void 0===E?void 0:E.name)||Z,card_number:(null===(m=null==A?void 0:A.placeholders)||void 0===m?void 0:m.card_number)||ee,cvv:(null===(y=null==A?void 0:A.placeholders)||void 0===y?void 0:y.cvv)||te,expiration_month:(null===(R=null==A?void 0:A.placeholders)||void 0===R?void 0:R.expiration_month)||re,expiration_year:(null===(v=null==A?void 0:A.placeholders)||void 0===v?void 0:v.expiration_year)||ne},D={[x.CVV]:null==O?void 0:O.cvvEvents,[x.CARD_NUMBER]:null==O?void 0:O.cardNumberEvents,[x.EXPIRATION_MONTH]:null==O?void 0:O.monthEvents,[x.EXPIRATION_YEAR]:null==O?void 0:O.yearEvents,[x.CARDHOLDER_NAME]:null==O?void 0:O.cardHolderEvents};if("fields"in f&&Array.isArray(f.fields))if(f.fields.length>0&&"string"==typeof f.fields[0])for(const e of f.fields){const t=T.create(Object.assign(Object.assign(Object.assign({table:"cards",column:e,type:g[e],validations:I[e]},S),{label:N[e],placeholder:b[e]}),f.card_id?{skyflowID:f.card_id}:{}));de({element:t,errorStyles:S.errorStyles,fieldMessage:[x.CVV,x.EXPIRATION_MONTH,x.EXPIRATION_YEAR].includes(e)?"":N[e],events:D[e]});const r=`#collect_${String(e)}`+(f.card_id?`_${f.card_id}`:"");yield ue({element:t,containerId:r}),C.push({element:t,containerId:r})}else for(const e of f.fields){const t=e.field,r=T.create(Object.assign(Object.assign(Object.assign({table:"cards",column:t,type:g[t],validations:I[t]},S),{label:N[t],placeholder:b[t]}),f.card_id?{skyflowID:f.card_id}:{})),n=e.container_id||`#collect_${String(t)}`+(f.card_id?`_${f.card_id}`:"");yield ue({element:r,containerId:n}),C.push({element:r,containerId:n})}return{elements:C.map((e=>e.element)),container:T}}))}({skyflowInstance:this.skyflowInstance,data:e,customization:this.customization,events:this.events});this.mountedElementsByContext.set(i,{elements:s.elements||[],container:s})}))}getContainerByCardId(e){var t;const r=`update:${e}`,n=this.mountedElementsByContext.get(r);return(null===(t=null==n?void 0:n.container)||void 0===t?void 0:t.container)||null}collectCardTokens(e){var t,n,i;return r(this,void 0,void 0,(function*(){const r=this.getContainerByCardId(e);if(!r)return null;try{const e=yield r.collect();return(null===(n=null===(t=null==e?void 0:e.records)||void 0===t?void 0:t[0])||void 0===n?void 0:n.fields)||null}catch(t){const r=null===(i=null==t?void 0:t.error)||void 0===i?void 0:i.description;throw this.reportSdkError(t,{feature:"collect-card-tokens",process_id:e,metadata:{step:"collectCardTokens"}}),new l({code:a.MOUNT_COLLECT_ERROR,details:{message:r}})}}))}unmountCardFields(e="all"){"all"===e?(this.mountedElementsByContext.forEach(((e,t)=>{this.unmountContext(t)})),this.mountedElementsByContext.clear()):(this.unmountContext(e),this.mountedElementsByContext.delete(e))}unmountContext(e){const t=this.mountedElementsByContext.get(e);if(!t)return;const{elements:r}=t;r&&r.length>0&&r.forEach((t=>{try{t&&"function"==typeof t.unmount&&t.unmount()}catch(t){console.warn(`Error unmounting Skyflow element from context '${e}':`,t),this.reportSdkError(t,{feature:"unmount-card-fields",metadata:{step:"unmountContext",context:e}})}}))}getBusiness(){return r(this,void 0,void 0,(function*(){try{return yield o(this.baseUrl,this.apiKeyTonder,this.abortController.signal)}catch(e){throw this.reportSdkError(e,{feature:"get-business",metadata:{step:"getBusiness"}}),N({errorCode:a.FETCH_BUSINESS_ERROR},e)}}))}createSkyflowInstance(){return r(this,void 0,void 0,(function*(){if(this.skyflowInstance)return this.skyflowInstance;yield this._fetchMerchantData();const{vault_id:e,vault_url:n}=this.merchantData;this.skyflowInstance=yield function({baseUrl:e,apiKey:n,vault_id:i,vault_url:o}){return r(this,void 0,void 0,(function*(){return t.init({vaultID:i,vaultURL:o,getBearerToken:()=>r(this,void 0,void 0,(function*(){return yield Y(e,n)})),options:{logLevel:t.LogLevel.ERROR,env:t.Env.DEV}})}))}({vault_id:e,vault_url:n,baseUrl:this.baseUrl,apiKey:this.apiKeyTonder})}))}getOpenpayDeviceSessionID(e,t,n){return r(this,void 0,void 0,(function*(){try{return yield y(e,t,n)}catch(e){throw this.reportSdkError(e,{feature:"get-openpay-device-session",metadata:{step:"getOpenpayDeviceSessionID"}}),h(e)}}))}getSkyflowTokens({vault_id:e,vault_url:t,data:n}){return r(this,void 0,void 0,(function*(){return yield ae({vault_id:e,vault_url:t,data:n,baseUrl:this.baseUrl,apiKey:this.apiKeyTonder})}))}_setCartTotal(e){this.cartTotal=e}_checkout({card:e,payment_method:t,isSandbox:n,returnUrl:i}){var o,s;return r(this,void 0,void 0,(function*(){yield this._fetchMerchantData();const l=yield this._getCustomer(this.abortController.signal),{vault_id:c,vault_url:u,business:h}=this.merchantData,{auth_token:p,first_name:_="",last_name:E="",email:m=""}=l,y=this._hasCardOnFileKeys();let R,v=null,f=null,A=null,O=!1;const T=()=>r(this,void 0,void 0,(function*(){var e,t;(null===(t=null===(e=this.customerCardsCache)||void 0===e?void 0:e.cards)||void 0===t?void 0:t.length)||(this.customerCardsCache=yield this._getCustomerCards(p,this.merchantData.business.pk))}));if(!t){if("string"==typeof e)if(f=e,R={skyflow_id:e},y){yield T();const t=null===(s=null===(o=this.customerCardsCache)||void 0===o?void 0:o.cards)||void 0===s?void 0:s.find((t=>t.fields.skyflow_id===e));if(!t)throw new Error("Card not found for card-on-file processing");const r=!!t.fields.subscription_id;r||(yield this.collectCardTokens(e)),r&&(v={subscriptionId:t.fields.subscription_id})}else yield this.collectCardTokens(e);else{const t=Object.assign(Object.assign({},e),{card_number:e.card_number.replace(/\s+/g,""),expiration_month:e.expiration_month.replace(/\s+/g,""),expiration_year:e.expiration_year.replace(/\s+/g,""),cvv:e.cvv.replace(/\s+/g,""),cardholder_name:e.cardholder_name.replace(/\s+/g,"")});R=yield ae({vault_id:c,vault_url:u,data:t,baseUrl:this.baseUrl,apiKey:this.apiKeyTonder}),f=R.skyflow_id,y&&(A={name:R.cardholder_name,number:R.card_number,expiryMonth:R.expiration_month,expiryYear:R.expiration_year,cvv:R.cvv},O=!0)}if(O){if(!f||!A)throw new Error("Missing card data for card-on-file processing");let e=null;try{const t=yield this._saveCustomerCard(p,null==h?void 0:h.pk,{skyflow_id:f},!0);e=t.skyflow_id;const r=t.card_bin;if(!r)throw new Error("Card BIN not returned from save card");const n=yield this._initializeCardOnFile();let i;try{i=yield n.process({cardTokens:A,cardBin:r,contactDetails:{firstName:_||"",lastName:E||"",email:m||""},customerId:p,currency:this.currency||"MXN"})}catch(e){throw N({errorCode:a.PAYMENT_PROCESS_ERROR,message:d[a.CARD_ON_FILE_DECLINED]},e)}v={subscriptionId:i.subscriptionId},yield this._saveCustomerCard(p,null==h?void 0:h.pk,{skyflow_id:f,subscription_id:v.subscriptionId})}catch(t){throw e&&(yield this.removeCustomerCard(e)),this.reportSdkError(t,{feature:"payment",process_id:e||this.getCustomerId(),metadata:{step:"card_on_file"}}),t}}}return yield this._handleCheckout({card:R,payment_method:t,customer:l,isSandbox:n,returnUrl:i,enable_card_on_file:!!(null==v?void 0:v.subscriptionId)&&y})}))}customerRegister(e){return r(this,void 0,void 0,(function*(){try{const t=`${this.baseUrl}/api/v1/customer/`,r={email:e},n=yield fetch(t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKeyTonder}`},signal:this.abortController.signal,body:JSON.stringify(r)});if(n.ok)return yield n.json();throw yield p(n)}catch(e){throw this.reportSdkError(e,{feature:"customer-register",metadata:{step:"customerRegister"}}),h(e)}}))}createOrder(e){return r(this,void 0,void 0,(function*(){try{const t=`${this.baseUrl}/api/v1/orders/`,r=e,n=yield fetch(t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKeyTonder}`},body:JSON.stringify(r)});if(n.ok)return yield n.json();throw yield p(n)}catch(e){throw this.reportSdkError(e,{feature:"create-order",metadata:{step:"createOrder"}}),h(e)}}))}createPayment(e){return r(this,void 0,void 0,(function*(){try{const t=`${this.baseUrl}/api/v1/business/${e.business_pk}/payments/`,r=e,n=yield fetch(t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKeyTonder}`},body:JSON.stringify(r)});if(n.ok)return yield n.json();throw yield p(n)}catch(e){throw this.reportSdkError(e,{feature:"create-payment",metadata:{step:"createPayment"}}),h(e)}}))}startCheckoutRouter(e){return r(this,void 0,void 0,(function*(){const t=yield m(this.baseUrl,this.apiKeyTonder,e);if(yield this.init3DSRedirect(t))return t}))}init3DSRedirect(e){return r(this,void 0,void 0,(function*(){return this.process3ds.setPayload(e),yield this._handle3dsRedirect(e)}))}startCheckoutRouterFull(e){return r(this,void 0,void 0,(function*(){try{const{order:t,total:r,customer:n,skyflowTokens:i,return_url:o,isSandbox:a,metadata:d,currency:l,payment_method:u}=e,h=yield this._fetchMerchantData(),p=yield this.customerRegister(n.email);if(!(p&&"auth_token"in p&&h&&"reference"in h))throw new s({code:"500",body:h,name:"Keys error",message:"Merchant or customer reposne errors"});{const e={business:this.apiKeyTonder,client:p.auth_token,billing_address_id:null,shipping_address_id:null,amount:r,reference:h.reference,is_oneclick:!0,items:t.items},_=yield this.createOrder(e),E=(new Date).toISOString();if(!("id"in _&&"id"in p&&"business"in h))throw new s({code:"500",body:_,name:"Keys error",message:"Order response errors"});{const e={business_pk:h.business.pk,amount:r,date:E,order_id:_.id,client_id:p.id},t=yield this.createPayment(e);let s;const{openpay_keys:R,business:v}=h;R.merchant_id&&R.public_key&&(s=yield y(R.merchant_id,R.public_key,a));const f=Object.assign(Object.assign({name:n.name,last_name:n.lastname,email_client:n.email,phone_number:n.phone,return_url:o,id_product:"no_id",quantity_product:1,id_ship:"0",instance_id_ship:"0",amount:r,title_ship:"shipping",description:"transaction",device_session_id:s||null,token_id:"",order_id:"id"in _&&_.id,business_id:v.pk,payment_id:"pk"in t&&t.pk,source:"sdk",metadata:d,browser_info:c(),currency:l},u?{payment_method:u}:{card:i}),"undefined"!=typeof MP_DEVICE_SESSION_ID?{mp_device_session_id:MP_DEVICE_SESSION_ID}:{}),A=yield m(this.baseUrl,this.apiKeyTonder,f);if(yield this.init3DSRedirect(A))return A}}}catch(e){throw this.reportSdkError(e,{feature:"start-checkout-router-full",metadata:{step:"startCheckoutRouterFull"}}),h(e)}}))}registerCustomerCard(e,t,n){return r(this,void 0,void 0,(function*(){try{yield this._fetchMerchantData();const r=yield fetch(`${this.baseUrl}/api/v1/business/${u(this.merchantData)}/cards/`,{method:"POST",headers:{Authorization:`Bearer ${e}`,"User-token":t,"Content-Type":"application/json"},body:JSON.stringify(Object.assign({},n))});if(r.ok)return yield r.json();throw yield p(r)}catch(e){throw this.reportSdkError(e,{feature:"register-customer-card",metadata:{step:"registerCustomerCard"}}),h(e)}}))}deleteCustomerCard(e,t=""){return r(this,void 0,void 0,(function*(){try{yield this._fetchMerchantData();const r=yield fetch(`${this.baseUrl}/api/v1/business/${u(this.merchantData)}/cards/${t}`,{method:"DELETE",headers:{Authorization:`Token ${e}`,"Content-Type":"application/json"},signal:this.abortController.signal});if(r.ok)return!0;throw yield p(r)}catch(e){throw this.reportSdkError(e,{feature:"delete-customer-card",process_id:t,metadata:{step:"deleteCustomerCard"}}),h(e)}}))}getActiveAPMs(){return r(this,void 0,void 0,(function*(){try{const e=yield function(e,t,n="?status=active&page_size=10000&country=México",i=null){return r(this,void 0,void 0,(function*(){try{const r=yield fetch(`${e}/api/v1/payment_methods${n}`,{method:"GET",headers:{Authorization:`Token ${t}`,"Content-Type":"application/json"},signal:i});if(r.ok)return yield r.json();throw yield p(r)}catch(e){throw h(e)}}))}(this.baseUrl,this.apiKeyTonder),t=e&&e.results&&e.results.length>0?e.results:[];return this.activeAPMs=t.filter((e=>"cards"!==e.category.toLowerCase())).map((e=>Object.assign({id:e.pk,payment_method:e.payment_method,priority:e.priority,category:e.category},_e(e.payment_method)))).sort(((e,t)=>e.priority-t.priority)),this.activeAPMs}catch(e){return console.error("Error getting APMS",e),[]}}))}}function me(e){return/^\d{12,19}$/.test(e)&&Ae(e)}function ye(e){return/^([a-zA-Z\\ \\,\\.\\-\\']{2,})$/.test(e)}function Re(e){return/^\d{3,4}$/.test(e)}function ve(e){return/^(0[1-9]|1[0-2])$/.test(e)}function fe(e){if(!/^\d{2}$/.test(e))return!1;const t=(new Date).getFullYear()%100;return parseInt(e,10)>=t}const Ae=e=>{const t=`${e}`.split("").reverse().map((e=>Number.parseInt(e))),r=t.shift();let n=t.reduce(((e,t,r)=>r%2!=0?e+t:e+((t*=2)>9?t-9:t)),0);return n+=r,n%10==0};export{S as AppError,B as BaseInlineCheckout,Ee as LiteCheckout,g as SdkTelemetryClient,Re as validateCVV,me as validateCardNumber,ye as validateCardholderName,ve as validateExpirationMonth,fe as validateExpirationYear};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../node_modules/tslib/tslib.es6.js","../src/data/businessApi.ts","../src/classes/errorResponse.ts","../src/shared/enum/ErrorKeyEnum.ts","../src/shared/constants/messages.ts","../src/shared/utils/errors.ts","../src/helpers/utils.ts","../src/classes/3dsHandler.ts","../src/shared/constants/tonderUrl.ts","../src/data/checkoutApi.ts","../src/data/openPayApi.ts","../src/shared/constants/apiEndpoints.ts","../src/helpers/card_on_file.ts","../src/helpers/SdkTelemetryClient.ts","../src/helpers/sdkInfo.ts","../src/shared/utils/appError.ts","../src/types/card.ts","../src/classes/BaseInlineCheckout.ts","../src/data/tokenApi.ts","../src/helpers/mercadopago.ts","../src/data/customerApi.ts","../src/data/cardApi.ts","../src/data/paymentMethodApi.ts","../src/data/skyflowApi.ts","../src/shared/constants/skyflow.contants.ts","../src/shared/styles/skyflow.styles.ts","../src/helpers/skyflow.ts","../src/shared/constants/paymentMethodAPM.ts","../src/shared/catalog/paymentMethodsCatalog.ts","../src/classes/liteCheckout.ts","../src/data/api.ts","../src/helpers/validations.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","import {GetBusinessResponse} from \"../types/responses\";\n\nexport async function fetchBusiness(\n baseUrl: string,\n apiKey: string,\n signal: AbortSignal,\n): Promise<GetBusinessResponse> {\n const getBusiness = await fetch(\n `${baseUrl}/api/v1/payments/business/${apiKey}`,\n {\n headers: {\n Authorization: `Token ${apiKey}`,\n },\n signal: signal,\n },\n );\n return await getBusiness.json();\n}\n","import {IErrorResponse} from \"../types/responses\";\n\nexport class ErrorResponse implements IErrorResponse {\n code?: string | undefined;\n body?: string | undefined;\n name!: string;\n message!: string;\n stack?: string | undefined;\n\n constructor({ code, body, name, message, stack }: IErrorResponse) {\n this.code = code;\n this.body = body;\n this.name = name;\n this.message = message;\n this.stack = stack;\n }\n}","export enum ErrorKeyEnum {\n INIT_ERROR = 'INIT_ERROR',\n CREATE_ERROR = 'CREATE_ERROR',\n REMOVE_SDK_ERROR = 'REMOVE_SDK_ERROR',\n INVALID_TYPE = 'INVALID_TYPE',\n STATE_ERROR = 'STATE_ERROR',\n FETCH_BUSINESS_ERROR = 'FETCH_BUSINESS_ERROR',\n INVALID_CONFIG = 'INVALID_CONFIG',\n MERCHANT_CREDENTIAL_REQUIRED = 'MERCHANT_CREDENTIAL_REQUIRED',\n INVALID_PAYMENT_REQUEST = 'INVALID_PAYMENT_REQUEST',\n INVALID_PAYMENT_REQUEST_CARD_PM = 'INVALID_PAYMENT_REQUEST_CARD_PM',\n TYPE_SDK_REQUIRED = 'TYPE_SDK_REQUIRED',\n ENVIRONMENT_REQUIRED = 'ENVIRONMENT_REQUIRED',\n FETCH_CARDS_ERROR = 'FETCH_CARDS_ERROR',\n FETCH_TRANSACTION_ERROR = 'FETCH_TRANSACTION_ERROR',\n CUSTOMER_AUTH_TOKEN_NOT_VALID = 'CUSTOMER_AUTH_TOKEN_NOT_VALID',\n SAVE_CARD_ERROR = 'SAVE_CARD_ERROR',\n REMOVE_CARD_ERROR = 'REMOVE_CARD_ERROR',\n SUMMARY_CARD_ERROR = 'SUMMARY_CARD_ERROR',\n CREATE_PAYMENT_ERROR = 'CREATE_PAYMENT_ERROR',\n PAYMENT_PROCESS_ERROR = 'PAYMENT_PROCESS_ERROR',\n INVALID_CARD_DATA = 'INVALID_CARD_DATA',\n SAVE_CARD_PROCESS_ERROR = 'SAVE_CARD_PROCESS_ERROR',\n START_CHECKOUT_ERROR = 'START_CHECKOUT_ERROR',\n CREATE_ORDER_ERROR = 'CREATE_ORDER_ERROR',\n BUSINESS_ID_REQUIRED = 'BUSINESS_ID_REQUIRED',\n CLIENT_ID_REQUIRED = 'CLIENT_ID_REQUIRED',\n INVALID_AMOUNT = 'INVALID_AMOUNT',\n INVALID_ITEMS = 'INVALID_ITEMS',\n CUSTOMER_OPERATION_ERROR = 'CUSTOMER_OPERATION_ERROR',\n INVALID_EMAIL = 'INVALID_EMAIL',\n FETCH_PAYMENT_METHODS_ERROR = 'FETCH_PAYMENT_METHODS_ERROR',\n INVALID_VAULT_TOKEN = 'INVALID_VAULT_TOKEN',\n VAULT_TOKEN_ERROR = 'VAULT_TOKEN_ERROR',\n SECURE_TOKEN_ERROR = 'SECURE_TOKEN_ERROR',\n SECURE_TOKEN_INVALID = 'SECURE_TOKEN_INVALID',\n INVALID_SECRET_API_KEY = 'INVALID_SECRET_API_KEY',\n REMOVE_CARD = 'REMOVE_CARD',\n SKYFLOW_NOT_INITIALIZED = 'SKYFLOW_NOT_INITIALIZED',\n ERROR_LOAD_PAYMENT_FORM = 'ERROR_LOAD_PAYMENT_FORM',\n ERROR_LOAD_ENROLLMENT_FORM = 'ERROR_LOAD_ENROLLMENT_FORM',\n MOUNT_COLLECT_ERROR = 'MOUNT_COLLECT_ERROR',\n CARD_ON_FILE_DECLINED = 'CARD_ON_FILE_DECLINED',\n CARD_SAVED_SUCCESSFULLY = 'CARD_SAVED_SUCCESSFULLY',\n CARD_REMOVED_SUCCESSFULLY = 'CARD_REMOVED_SUCCESSFULLY',\n REQUEST_ABORTED = 'REQUEST_ABORTED',\n REQUEST_FAILED = 'REQUEST_FAILED',\n UNKNOWN_ERROR = 'UNKNOWN_ERROR',\n THREEDS_REDIRECTION_ERROR = 'THREEDS_REDIRECTION_ERROR',\n}\n","import {ErrorKeyEnum} from \"../enum/ErrorKeyEnum\";\n\nexport const MESSAGES = Object.freeze({\n saveCardError: \"Ha ocurrido un error guardando la tarjeta. Inténtalo nuevamente.\",\n removeCardError: \"Ha ocurrido un error eliminado la tarjeta. Inténtalo nuevamente.\",\n getCardsError: \"Ha ocurrido un error obteniendo las tarjetas del customer. Inténtalo nuevamente.\",\n cardExist: \"La tarjeta fue registrada previamente.\",\n removedCard: \"Card deleted successfully\",\n errorCheckout: \"No se ha podido procesar el pago\",\n cardSaved: \"Tarjeta registrada con éxito.\",\n getPaymentMethodsError: \"Ha ocurrido un error obteniendo las métodos de pago del customer. Inténtalo nuevamente.\",\n getBusinessError: \"Ha ocurrido un error obteniendo los datos del comercio. Inténtalo nuevamente.\",\n secureTokenError: \"Ha ocurrido un error obteniendo el token de seguridad.\",\n})\n\n\nexport const MESSAGES_EN: Record<string, string> = {\n [ErrorKeyEnum.INIT_ERROR]: 'Error initializing the SDK.',\n [ErrorKeyEnum.INVALID_TYPE]: 'SDK Type invalid.',\n [ErrorKeyEnum.STATE_ERROR]: 'Error updating SDK state.',\n [ErrorKeyEnum.FETCH_BUSINESS_ERROR]: 'Error retrieving merchant information.',\n [ErrorKeyEnum.INVALID_CONFIG]: 'Required configuration options.',\n [ErrorKeyEnum.MERCHANT_CREDENTIAL_REQUIRED]: 'Merchant credential required.',\n [ErrorKeyEnum.INVALID_PAYMENT_REQUEST]:\n 'The payment data must be of type: :::interface:::.',\n [ErrorKeyEnum.INVALID_PAYMENT_REQUEST_CARD_PM]:\n 'The fields card and payment_method cannot be provided together.',\n [ErrorKeyEnum.TYPE_SDK_REQUIRED]: 'SDK type required.',\n [ErrorKeyEnum.ENVIRONMENT_REQUIRED]: 'Environment required.',\n [ErrorKeyEnum.FETCH_CARDS_ERROR]: 'Error retrieving cards.',\n [ErrorKeyEnum.CUSTOMER_AUTH_TOKEN_NOT_VALID]:\n \"The customer's auth token is invalid. Please verify that the customer's data was provided when creating the SDK (sdk.create) and try again.\",\n [ErrorKeyEnum.SAVE_CARD_ERROR]: 'Error saving the card.',\n [ErrorKeyEnum.REMOVE_CARD_ERROR]: 'Error deleting the card.',\n [ErrorKeyEnum.CREATE_PAYMENT_ERROR]: 'Error creating the payment.',\n [ErrorKeyEnum.PAYMENT_PROCESS_ERROR]:\n 'There was an issue processing the payment.',\n [ErrorKeyEnum.CARD_SAVED_SUCCESSFULLY]: 'Card saved successfully.',\n [ErrorKeyEnum.CARD_REMOVED_SUCCESSFULLY]: 'Card deleted successfully.',\n [ErrorKeyEnum.SAVE_CARD_PROCESS_ERROR]: 'Error processing card data.',\n [ErrorKeyEnum.START_CHECKOUT_ERROR]: 'Error processing the payment.',\n [ErrorKeyEnum.CREATE_ORDER_ERROR]: 'Error creating the order.',\n [ErrorKeyEnum.BUSINESS_ID_REQUIRED]: 'Business ID is required.',\n [ErrorKeyEnum.CLIENT_ID_REQUIRED]: 'Client ID is required.',\n [ErrorKeyEnum.INVALID_AMOUNT]: 'Invalid amount.',\n [ErrorKeyEnum.INVALID_ITEMS]: 'Invalid items.',\n [ErrorKeyEnum.CUSTOMER_OPERATION_ERROR]:\n 'Error registering or fetching customer',\n [ErrorKeyEnum.INVALID_EMAIL]: 'Invalid email.',\n [ErrorKeyEnum.FETCH_PAYMENT_METHODS_ERROR]:\n 'Error retrieving active payment methods.',\n [ErrorKeyEnum.INVALID_VAULT_TOKEN]:\n 'An invalid vault token response was received.',\n [ErrorKeyEnum.VAULT_TOKEN_ERROR]: 'Error retrieving the vault token.',\n [ErrorKeyEnum.SECURE_TOKEN_ERROR]: 'Error getting secure token.',\n [ErrorKeyEnum.SECURE_TOKEN_INVALID]: 'Invalid secure token.',\n [ErrorKeyEnum.INVALID_SECRET_API_KEY]: 'SECRET API KEY is required.',\n [ErrorKeyEnum.REMOVE_CARD]: 'Card deleted successfully',\n [ErrorKeyEnum.SKYFLOW_NOT_INITIALIZED]: 'Skyflow not initialized.',\n [ErrorKeyEnum.ERROR_LOAD_PAYMENT_FORM]:\n 'There was an issue loading the payment form.',\n [ErrorKeyEnum.INVALID_CARD_DATA]: 'Invalid card data.',\n [ErrorKeyEnum.ERROR_LOAD_ENROLLMENT_FORM]:\n 'There was an issue loading the card form.',\n [ErrorKeyEnum.MOUNT_COLLECT_ERROR]:\n 'Mount failed. Make sure all inputs are complete and valid.',\n [ErrorKeyEnum.CARD_ON_FILE_DECLINED]:\n 'Transaction declined. Please verify your card details.',\n [ErrorKeyEnum.REQUEST_ABORTED]: 'Requests canceled.',\n [ErrorKeyEnum.REQUEST_FAILED]: 'Request failed.',\n [ErrorKeyEnum.UNKNOWN_ERROR]: 'An unexpected error occurred.',\n [ErrorKeyEnum.CREATE_ERROR]: 'Error creating the SDK.',\n [ErrorKeyEnum.FETCH_TRANSACTION_ERROR]: 'Error retrieving the transaction.',\n [ErrorKeyEnum.THREEDS_REDIRECTION_ERROR]:\n 'Ocurrió un error durante la redirección de 3DS.',\n [ErrorKeyEnum.REMOVE_SDK_ERROR]:\n 'Ocurrió un error removiendo la instancia del SDK.',\n};\n\nexport const MESSAGES_ES = {\n [ErrorKeyEnum.INIT_ERROR]: 'Error inicializando el SDK',\n [ErrorKeyEnum.STATE_ERROR]: 'Error actualizando el estado del SDK.',\n [ErrorKeyEnum.FETCH_BUSINESS_ERROR]:\n 'Error obteniendo información del comercio',\n [ErrorKeyEnum.INVALID_CONFIG]: 'Opciones de configuración requeridas',\n [ErrorKeyEnum.TYPE_SDK_REQUIRED]: 'Tipo de SDK requerido',\n [ErrorKeyEnum.ENVIRONMENT_REQUIRED]: 'Ambiente requerido',\n [ErrorKeyEnum.FETCH_CARDS_ERROR]: 'Error obteniendo las tarjetas.',\n [ErrorKeyEnum.SAVE_CARD_ERROR]: 'Error guardando la tarjeta',\n [ErrorKeyEnum.REMOVE_CARD_ERROR]: 'Error eliminando la tarjeta.',\n [ErrorKeyEnum.CREATE_PAYMENT_ERROR]: 'Error creando el pago.',\n [ErrorKeyEnum.START_CHECKOUT_ERROR]: 'Error al procesar el pago.',\n [ErrorKeyEnum.CREATE_ORDER_ERROR]: 'Error creando la orden.',\n [ErrorKeyEnum.BUSINESS_ID_REQUIRED]: 'ID de Comercio es requerido',\n [ErrorKeyEnum.CLIENT_ID_REQUIRED]: 'ID de Cliente es requerido.',\n [ErrorKeyEnum.INVALID_AMOUNT]: 'Monto no válido.',\n [ErrorKeyEnum.INVALID_ITEMS]: 'Artículos no válidos.',\n [ErrorKeyEnum.CUSTOMER_OPERATION_ERROR]:\n 'Error registrando u obteniendo el cliente.',\n [ErrorKeyEnum.INVALID_EMAIL]: 'Correo electrónico no válido.',\n [ErrorKeyEnum.FETCH_PAYMENT_METHODS_ERROR]:\n 'Error obteniendo los métodos de pago activos.',\n [ErrorKeyEnum.INVALID_VAULT_TOKEN]:\n 'Se recibió una respuesta de token de bóveda no válida.',\n [ErrorKeyEnum.VAULT_TOKEN_ERROR]: 'Error al obtener el token de la bóveda.',\n [ErrorKeyEnum.SECURE_TOKEN_ERROR]: 'Error obteniendo el token seguro.',\n [ErrorKeyEnum.INVALID_SECRET_API_KEY]: 'SECRET API KEY es requerido.',\n [ErrorKeyEnum.CUSTOMER_AUTH_TOKEN_NOT_VALID]:\n 'El token del cliente no es valido, por favor verifica que se haya proporcionado los datos del cliente al crear el sdk (sdk.create) e intenta nuevamente.',\n [ErrorKeyEnum.SECURE_TOKEN_INVALID]: 'Token de seguridad inválido.',\n [ErrorKeyEnum.REMOVE_CARD]: 'Tarjeta eliminada exitosamente.',\n [ErrorKeyEnum.SKYFLOW_NOT_INITIALIZED]: 'Skyflow no inicializado.',\n [ErrorKeyEnum.INVALID_TYPE]: 'Tipo de SDK inválido.',\n [ErrorKeyEnum.PAYMENT_PROCESS_ERROR]: 'Hubo un problema al procesar el pago.',\n [ErrorKeyEnum.INVALID_PAYMENT_REQUEST]:\n 'Los datos de pago deben ser del tipo: :::interface:::}}.',\n [ErrorKeyEnum.INVALID_PAYMENT_REQUEST_CARD_PM]:\n 'Los datos card y payment_method no se pueden proporcionar juntos.',\n [ErrorKeyEnum.SAVE_CARD_PROCESS_ERROR]:\n 'Error procesando los datos de la tarjeta.',\n [ErrorKeyEnum.ERROR_LOAD_PAYMENT_FORM]:\n 'Hubo un problema cargando el formulario de pago.',\n [ErrorKeyEnum.INVALID_CARD_DATA]: 'Datos de tarjeta no válidos.',\n [ErrorKeyEnum.ERROR_LOAD_ENROLLMENT_FORM]:\n 'Hubo un problema cargando el formulario de tarjeta.',\n [ErrorKeyEnum.MOUNT_COLLECT_ERROR]:\n 'Falló el montaje. Asegúrate de que todos los campos estén completos y sean válidos.',\n [ErrorKeyEnum.CARD_ON_FILE_DECLINED]:\n 'Transaccion declinada. Verique los datos de su tarjeta.',\n [ErrorKeyEnum.CARD_SAVED_SUCCESSFULLY]: 'Tarjeta registrada con éxito.',\n [ErrorKeyEnum.CARD_REMOVED_SUCCESSFULLY]: 'Tarjeta eliminada con éxito.',\n [ErrorKeyEnum.REQUEST_ABORTED]: 'Peticiones canceladas.',\n [ErrorKeyEnum.REQUEST_FAILED]: 'Petición fallida.',\n [ErrorKeyEnum.UNKNOWN_ERROR]: 'Ocurrió un error inesperado.',\n [ErrorKeyEnum.CREATE_ERROR]: 'Error creando el SDK.',\n [ErrorKeyEnum.FETCH_TRANSACTION_ERROR]: 'Error obteniendo la transacción',\n [ErrorKeyEnum.THREEDS_REDIRECTION_ERROR]:\n 'An error occurred during the 3DS redirection.',\n [ErrorKeyEnum.REMOVE_SDK_ERROR]:\n 'An error occurred while removing the SDK instance.',\n};\n","import {MESSAGES_EN} from \"../constants/messages\";\n\nexport interface IParamsTonderError {\n code: string;\n message?: string;\n details?: any;\n}\n\nclass TonderError extends Error {\n public details: { code: string; message: string; [key: string]: any };\n public code: string;\n constructor(params: IParamsTonderError) {\n const resolvedMessage =\n params.message || MESSAGES_EN[params.code] || 'Unknown error';\n super(resolvedMessage);\n this.name = 'TonderError';\n this.code = params.code;\n this.details = {\n code: params.details?.code || params.code,\n message: params.details?.message || resolvedMessage,\n };\n }\n}\n\nexport default TonderError;\n","import { ErrorResponse } from \"../classes/errorResponse\";\nimport {IErrorResponse} from \"../types/responses\";\n\nexport const getBrowserInfo = () => {\n const browserInfo = {\n javascript_enabled: true, // Assumed since JavaScript is running\n time_zone: new Date().getTimezoneOffset(),\n language: navigator.language || \"en-US\", // Fallback to 'en-US'\n color_depth: window.screen ? window.screen.colorDepth : null,\n screen_width: window.screen\n ? window.screen.width * window.devicePixelRatio || window.screen.width\n : null,\n screen_height: window.screen\n ? window.screen.height * window.devicePixelRatio || window.screen.height\n : null,\n user_agent: navigator.userAgent,\n };\n return browserInfo;\n};\n\nexport const getBusinessId = (merchantData: any) => {\n return merchantData && \"business\" in merchantData\n ? merchantData?.business?.pk\n : \"\";\n};\nconst buildErrorResponseFromCatch = (e: any): ErrorResponse => {\n const error = new ErrorResponse({\n code: e?.status ? e.status : e.code,\n body: e?.body,\n name: e ? (typeof e == \"string\" ? \"catch\" : (e as Error).name) : \"Error\",\n message: e ? (typeof e == \"string\" ? e : (e as Error).message) : \"Error\",\n stack: typeof e == \"string\" ? undefined : (e as Error).stack,\n });\n\n return error;\n};\n\nconst buildErrorResponse = async (\n response: Response,\n stack: string | undefined = undefined,\n): Promise<ErrorResponse> => {\n let body,\n status,\n message = \"Error\";\n\n if (response && \"json\" in response) {\n body = await response?.json();\n }\n\n if (response && \"status\" in response) {\n status = response.status.toString();\n }\n\n if (!body && response && \"text\" in response) {\n message = await response.text();\n }\n\n if (body?.detail) {\n message = body.detail;\n }\n const error = new ErrorResponse({\n code: status,\n body: body,\n name: status,\n message: message,\n stack,\n } as IErrorResponse);\n\n return error;\n};\n\nconst clearSpace = (text: string) => {\n return text.trim().replace(/\\s+/g, \"\");\n};\n\nconst getCardType = (scheme: string) => {\n if (scheme === \"Visa\") {\n // Check if visa\n return \"https://d35a75syrgujp0.cloudfront.net/cards/visa.png\";\n } else if (scheme === \"Mastercard\") {\n // Check if master\n return \"https://d35a75syrgujp0.cloudfront.net/cards/mastercard.png\";\n } else if (scheme === \"American Express\") {\n // Check if amex\n return \"https://d35a75syrgujp0.cloudfront.net/cards/american_express.png\";\n } else {\n return \"https://d35a75syrgujp0.cloudfront.net/cards/default_card.png\";\n }\n};\n\nexport {\n buildErrorResponseFromCatch,\n buildErrorResponse,\n getCardType,\n clearSpace,\n};\n","type ThreeDSHandlerContructor = {\n payload?: any,\n apiKey?: string,\n baseUrl?: string,\n redirectOnComplete?: boolean,\n tdsIframeId?: string, \n tonderPayButtonId?: string,\n callBack?: (params: any) => any\n}\n\nexport class ThreeDSHandler {\n\n callBack?: (params: any) => any\n baseUrl?: string\n apiKey?: string\n payload?: any\n localStorageKey: string = \"verify_transaction_status_url\"\n redirectOnComplete?: boolean\n tdsIframeId?: string\n tonderPayButtonId?: string\n\n constructor({\n payload = null,\n apiKey,\n baseUrl,\n redirectOnComplete,\n tdsIframeId,\n tonderPayButtonId,\n callBack\n }: ThreeDSHandlerContructor) {\n this.baseUrl = baseUrl,\n this.apiKey = apiKey,\n this.payload = payload\n this.tdsIframeId = tdsIframeId\n this.tonderPayButtonId = tonderPayButtonId\n this.redirectOnComplete = redirectOnComplete\n this.callBack = callBack\n }\n\n setStorageItem (data: any) {\n return localStorage.setItem(this.localStorageKey, JSON.stringify(data))\n }\n\n getStorageItem () {\n return localStorage.getItem(this.localStorageKey)\n }\n\n removeStorageItem () {\n return localStorage.removeItem(this.localStorageKey)\n }\n\n saveVerifyTransactionUrl() {\n const url = this.payload?.next_action?.redirect_to_url?.verify_transaction_status_url\n if (url) {\n this.saveUrlWithExpiration(url)\n } else {\n const url = this.payload?.next_action?.iframe_resources?.verify_transaction_status_url\n if (url) {\n this.saveUrlWithExpiration(url)\n } else {\n console.log('No verify_transaction_status_url found');\n }\n }\n }\n\n saveUrlWithExpiration(url: string) {\n try {\n const now = new Date()\n const item = {\n url: url,\n // Expires after 20 minutes\n expires: now.getTime() + 20 * 60 * 1000\n }\n this.setStorageItem(item)\n } catch (error) {\n console.log('error: ', error)\n }\n }\n\n getUrlWithExpiration() {\n const status = this.getStorageItem();\n if(status) {\n const item = JSON.parse(status)\n if (!item) return\n const now = new Date()\n if (now.getTime() > item.expires) {\n this.removeVerifyTransactionUrl()\n return null\n } else {\n return item.url\n }\n } else {\n return null\n }\n }\n\n removeVerifyTransactionUrl() {\n return this.removeStorageItem()\n }\n\n getVerifyTransactionUrl() {\n return this.getStorageItem() \n }\n\n loadIframe() {\n const iframe = this.payload?.next_action?.iframe_resources?.iframe\n\n if (iframe) {\n return new Promise((resolve, reject) => {\n const iframe = this.payload?.next_action?.iframe_resources?.iframe\n\n if (iframe) {\n this.saveVerifyTransactionUrl()\n const container = document.createElement('div')\n container.innerHTML = iframe\n document.body.appendChild(container)\n\n // Create and append the script tag manually\n const script = document.createElement('script')\n script.textContent = 'document.getElementById(\"tdsMmethodForm\").submit();'\n container.appendChild(script)\n\n // Resolve the promise when the iframe is loaded\n const iframeElement = document.getElementById('tdsMmethodTgtFrame')\n if(iframeElement) {\n iframeElement.onload = () => resolve(true)\n } else {\n console.log('No redirection found');\n reject(false)\n }\n } else {\n console.log('No redirection found');\n reject(false)\n }\n })\n }\n }\n\n getRedirectUrl() {\n return this.payload?.next_action?.redirect_to_url?.url\n }\n\n redirectToChallenge() {\n const url = this.getRedirectUrl()\n if (url) {\n this.saveVerifyTransactionUrl()\n if(this.redirectOnComplete) {\n window.location = url;\n } else {\n const iframe = document.querySelector(`#${this.tdsIframeId}`)\n if(iframe) {\n \n iframe.setAttribute(\"src\", url);\n iframe.setAttribute(\"style\", \"display: block\");\n \n const self = this;\n \n const listenerHandler = async (event: any) => {\n const checkStatus = (result: any) => result?.transaction_status !== \"Pending\";\n \n const executeAction = () => {\n try {\n const selector: any = document.querySelector(`#${this.tonderPayButtonId}`);\n if(selector) {\n selector.disabled = false;\n }\n } catch {}\n if(iframe) {\n iframe.setAttribute(\"style\", \"display: none\");\n }\n if(self.callBack) self.callBack(self.payload);\n iframe.removeEventListener(\"load\", listenerHandler);\n }\n \n const chainPromises = async (promise: Promise<any>) => {\n const result = await new Promise((resolve, reject) => resolve(promise))\n if(result) {\n if(checkStatus(result)) {\n return executeAction()\n } else {\n const timer = setTimeout(async () => {\n clearTimeout(timer);\n await chainPromises(self.requestTransactionStatus());\n }, 7000)\n }\n }\n }\n \n await chainPromises(self.requestTransactionStatus())\n }\n \n iframe.addEventListener(\"load\", listenerHandler)\n \n } else {\n console.log('No iframe found');\n }\n }\n } else {\n if (this.callBack) this.callBack!(this.payload);\n }\n }\n\n async requestTransactionStatus() {\n\n const verifyUrl = this.getUrlWithExpiration();\n const url = verifyUrl.startsWith(\"https://\") ? verifyUrl : `${this.baseUrl}${verifyUrl}`;\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Token ${this.apiKey}`,\n },\n // body: JSON.stringify(data),\n });\n\n if (response.status !== 200) {\n console.error('La verificación de la transacción falló.');\n return null;\n } else {\n const response_json = await response.json();\n return response_json;\n }\n\n }\n \n // Returns an object\n // https://example.com/?name=John&age=30&city=NewYork\n // { name: \"John\", age: \"30\", city: \"NewYork\" }\n getURLParameters() {\n const parameters: any = {};\n const urlParams: any = new URLSearchParams(window.location.search);\n\n for (const [key, value] of urlParams) {\n parameters[key] = value;\n }\n\n return parameters;\n }\n\n handleSuccessTransaction(response: any) {\n this.removeVerifyTransactionUrl();\n return response;\n }\n\n handleDeclinedTransaction(response: any) {\n this.removeVerifyTransactionUrl();\n return response;\n }\n\n // TODO: the method below needs to be tested with a real 3DS challenge\n // since we couldn't get a test card that works with this feature\n async handle3dsChallenge(response_json: any) {\n // Create the form element:\n const form = document.createElement('form');\n form.name = 'frm';\n form.method = 'POST';\n form.action = response_json.redirect_post_url;\n\n // Add hidden fields:\n const creqInput = document.createElement('input');\n creqInput.type = 'hidden';\n creqInput.name = response_json.creq;\n creqInput.value = response_json.creq;\n form.appendChild(creqInput);\n\n const termUrlInput = document.createElement('input');\n termUrlInput.type = 'hidden';\n termUrlInput.name = response_json.term_url;\n termUrlInput.value = response_json.TermUrl;\n form.appendChild(termUrlInput);\n\n // Append the form to the body:\n document.body.appendChild(form);\n form.submit();\n\n await this.verifyTransactionStatus();\n }\n\n // TODO: This method could be removed\n async handleTransactionResponse(response: any) {\n const response_json = await response.json();\n if (response_json.status === \"Pending\" && response_json.redirect_post_url) {\n return await this.handle3dsChallenge(response_json);\n } else if ([\"Success\", \"Authorized\"].includes(response_json.status)) {\n return this.handleSuccessTransaction(response_json);\n } else {\n this.handleDeclinedTransaction(response);\n return response_json\n }\n }\n\n async verifyTransactionStatus() {\n const verifyUrl = this.getUrlWithExpiration();\n if (verifyUrl) {\n const url = verifyUrl.startsWith(\"https://\") ? verifyUrl : `${this.baseUrl}${verifyUrl}`;\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Token ${this.apiKey}`,\n },\n // body: JSON.stringify(data),\n });\n\n if (response.status !== 200) {\n console.error('La verificación de la transacción falló.');\n this.removeVerifyTransactionUrl();\n return response\n }\n\n return await this.handleTransactionResponse(response);\n } catch (error) {\n console.error('Error al verificar la transacción:', error);\n this.removeVerifyTransactionUrl();\n }\n } else {\n console.log('No verify_transaction_status_url found');\n }\n }\n\n setPayload = (payload: any) => {\n this.payload = payload\n }\n}\n","const TONDER_URL_BY_MODE = Object.freeze({\n production: \"https://app.tonder.io\",\n sandbox: \"https://sandbox.tonder.io\",\n stage: \"https://stage.tonder.io\",\n development: \"http://localhost:8000\",\n});\n\nexport { TONDER_URL_BY_MODE };\n","import {CreateOrderRequest, CreatePaymentRequest} from \"../types/requests\";\nimport {IStartCheckoutIdRequest, IStartCheckoutRequest} from \"../types/checkout\";\n\ndeclare const MP_DEVICE_SESSION_ID: string | undefined;\n\n\nexport async function createOrder(\n baseUrl: string,\n apiKey: string,\n orderItems: CreateOrderRequest,\n) {\n const url = `${baseUrl}/api/v1/orders/`;\n const data = orderItems;\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Token ${apiKey}`,\n },\n body: JSON.stringify(data),\n });\n if (response.status === 201) {\n return await response.json();\n } else {\n throw new Error(`Error: ${response.statusText}`);\n }\n}\n\nexport async function createPayment(\n baseUrl: string,\n apiKey: string,\n paymentItems: CreatePaymentRequest,\n) {\n const url = `${baseUrl}/api/v1/business/${paymentItems.business_pk}/payments/`;\n const data = paymentItems;\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Token ${apiKey}`,\n },\n body: JSON.stringify(data),\n });\n if (response.status >= 200 && response.status <= 299) {\n return await response.json();\n } else {\n throw new Error(`Error: ${response.statusText}`);\n }\n}\n\nexport async function startCheckoutRouter(\n baseUrl: string,\n apiKey: string,\n routerItems: IStartCheckoutRequest | IStartCheckoutIdRequest,\n) {\n try {\n const url = `${baseUrl}/api/v1/checkout-router/`;\n const data = routerItems;\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Token ${apiKey}`,\n },\n body: JSON.stringify({\n ...data,\n ...(typeof MP_DEVICE_SESSION_ID !== \"undefined\"\n ? { mp_device_session_id: MP_DEVICE_SESSION_ID }\n : {}),\n }),\n });\n if (response.status >= 200 && response.status <= 299) {\n return await response.json();\n } else {\n const errorResponse = await response.json();\n const error = new Error(\"Failed to start checkout router\");\n // @ts-ignore\n error.details = errorResponse;\n throw error;\n }\n } catch (error) {\n throw error;\n }\n}\n","export async function getOpenpayDeviceSessionID(\n merchant_id: string,\n public_key: string,\n isSandbox: boolean = true,\n signal: AbortSignal | null = null,\n): Promise<string> {\n let openpay = await window.OpenPay;\n openpay.setId(merchant_id);\n openpay.setApiKey(public_key);\n openpay.setSandboxMode(isSandbox);\n return await openpay.deviceData.setup({ signal });\n}\n","/**\n * Tonder API base URLs by environment mode\n */\nexport const API_BASE_URL_BY_MODE = Object.freeze({\n production: \"https://api.tonder.io\",\n sandbox: \"https://api-stage.tonder.io\",\n stage: \"https://api-stage.tonder.io\",\n development: \"https://api-stage.tonder.io\",\n});\n\n/**\n * API endpoint paths\n */\nexport const API_ENDPOINTS = Object.freeze({\n TELEMETRY: \"/telemetry/v1/events\",\n ACQ_SUBSCRIPTION_TOKEN: \"/acq-kushki/subscription/token\",\n ACQ_SUBSCRIPTION_CREATE: \"/acq-kushki/subscription/create\",\n});\n\n/**\n * Get the full telemetry endpoint URL for a given mode\n */\nexport function getTelemetryEndpoint(\n mode: \"production\" | \"sandbox\" | \"stage\" | \"development\" = \"stage\"\n): string {\n const baseUrl = API_BASE_URL_BY_MODE[mode];\n return `${baseUrl}${API_ENDPOINTS.TELEMETRY}`;\n}\n\n/**\n * Get the API base URL for a given mode\n */\nexport function getApiBaseUrl(\n mode: \"production\" | \"sandbox\" | \"stage\" | \"development\" = \"stage\"\n): string {\n return API_BASE_URL_BY_MODE[mode];\n}\n","import type {\n AcquirerInstance,\n CardOnFileSubscriptionRequest,\n CardOnFileSubscriptionResponse,\n CardOnFileTokenRequest,\n CardOnFileTokenResponse,\n ProcessParams,\n SecureInitResponse,\n SecurityInfo,\n Validate3DSResponse,\n} from \"../types/cardOnFile\";\nimport { getApiBaseUrl, API_ENDPOINTS } from \"../shared/constants/apiEndpoints\";\n\ndeclare global {\n interface Window {\n // External acquirer SDK (Kushki)\n Kushki: new (config: { merchantId: string; inTestEnvironment: boolean }) => AcquirerInstance;\n }\n}\n\n// ============ Helper Functions ============\n\nconst ACQUIRER_SCRIPT_URL = \"https://cdn.kushkipagos.com/kushki.min.js\";\n\nlet acquirerScriptLoaded = false;\nlet acquirerScriptPromise: Promise<void> | null = null;\n\nasync function loadAcquirerScript(): Promise<void> {\n if (acquirerScriptLoaded) {\n return Promise.resolve();\n }\n\n if (acquirerScriptPromise) {\n return acquirerScriptPromise;\n }\n\n acquirerScriptPromise = new Promise((resolve, reject) => {\n const existingScript = document.querySelector(`script[src=\"${ACQUIRER_SCRIPT_URL}\"]`);\n\n if (existingScript) {\n acquirerScriptLoaded = true;\n resolve();\n return;\n }\n\n const script = document.createElement(\"script\");\n script.src = ACQUIRER_SCRIPT_URL;\n script.async = true;\n\n script.onload = () => {\n acquirerScriptLoaded = true;\n resolve();\n };\n\n script.onerror = () => {\n acquirerScriptPromise = null;\n reject(new Error(\"Failed to load acquirer script\"));\n };\n\n document.head.appendChild(script);\n });\n\n return acquirerScriptPromise;\n}\n\nfunction createAcquirerInstance(\n merchantId: string,\n isTestEnvironment: boolean\n): AcquirerInstance {\n if (!window.Kushki) {\n throw new Error(\"Acquirer script not loaded. Call initialize() first.\");\n }\n\n return new window.Kushki({\n merchantId,\n inTestEnvironment: isTestEnvironment,\n });\n}\n\n// ============ CardOnFile Class ============\n\nexport class CardOnFile {\n private readonly apiUrl: string;\n private readonly merchantId: string;\n private readonly apiKey: string;\n private readonly isTestEnvironment: boolean;\n private acquirerInstance: AcquirerInstance | null = null;\n\n constructor(config: {\n merchantId: string;\n apiKey: string;\n isTestEnvironment?: boolean;\n }) {\n this.isTestEnvironment = config.isTestEnvironment ?? true;\n // Use centralized API endpoint constants\n const mode = this.isTestEnvironment ? \"stage\" : \"production\";\n this.apiUrl = getApiBaseUrl(mode);\n this.merchantId = config.merchantId;\n this.apiKey = config.apiKey;\n }\n\n async initialize(): Promise<void> {\n await loadAcquirerScript();\n this.acquirerInstance = createAcquirerInstance(\n this.merchantId,\n this.isTestEnvironment\n );\n }\n\n private getAcquirerInstance(): AcquirerInstance {\n if (!this.acquirerInstance) {\n throw new Error(\"CardOnFile not initialized. Call initialize() first.\");\n }\n return this.acquirerInstance;\n }\n\n /**\n * Get JWT for 3DS authentication\n * @param cardBin - First 8 digits of the card number\n */\n async getJwt(cardBin: string): Promise<string> {\n const acquirer = this.getAcquirerInstance();\n\n return new Promise<string>((resolve, reject) => {\n acquirer.requestSecureInit(\n {\n card: {\n number: cardBin,\n },\n },\n (response) => {\n if (\"code\" in response && response.code) {\n reject(new Error(`Error getting JWT: ${response.message}`));\n return;\n }\n\n const successResponse = response as SecureInitResponse;\n if (!successResponse.jwt) {\n reject(new Error(\"No JWT returned from acquirer\"));\n return;\n }\n\n resolve(successResponse.jwt);\n }\n );\n });\n }\n\n /**\n * Generate a recurring charge token\n */\n async generateToken(request: CardOnFileTokenRequest): Promise<CardOnFileTokenResponse> {\n const response = await fetch(\n `${this.apiUrl}${API_ENDPOINTS.ACQ_SUBSCRIPTION_TOKEN}`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Token ${this.apiKey}`,\n },\n body: JSON.stringify(request),\n }\n );\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`Failed to generate token: ${response.status} - ${errorText}`);\n }\n\n return response.json() as Promise<CardOnFileTokenResponse>;\n }\n\n /**\n * Create a subscription with the generated token\n */\n async createSubscription(request: CardOnFileSubscriptionRequest): Promise<CardOnFileSubscriptionResponse> {\n const response = await fetch(\n `${this.apiUrl}${API_ENDPOINTS.ACQ_SUBSCRIPTION_CREATE}`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Token ${this.apiKey}`,\n },\n body: JSON.stringify(request),\n }\n );\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`Failed to create subscription: ${response.status} - ${errorText}`);\n }\n\n return response.json() as Promise<CardOnFileSubscriptionResponse>;\n }\n\n /**\n * Validate 3DS challenge\n * @returns true if validation passed, throws error otherwise\n */\n async validate3DS(\n secureId: string,\n security: SecurityInfo\n ): Promise<boolean> {\n const acquirer = this.getAcquirerInstance();\n\n return new Promise<boolean>((resolve, reject) => {\n acquirer.requestValidate3DS(\n {\n secureId,\n security,\n },\n (response) => {\n const validResponse = response as Validate3DSResponse;\n // Check for error code\n if (validResponse.code && validResponse.code !== \"3DS000\") {\n reject(new Error(`3DS validation failed}`));\n return;\n }\n\n // Check isValid flag if present\n if (validResponse.isValid === false) {\n reject(new Error(\"3DS validation failed\"));\n return;\n }\n\n resolve(true);\n }\n );\n });\n }\n\n /**\n * Complete flow: JWT → Token → 3DS validation → Subscription\n */\n async process(params: ProcessParams): Promise<CardOnFileSubscriptionResponse> {\n const jwt = await this.getJwt(params.cardBin);\n const tokenResponse = await this.generateToken({\n card: params.cardTokens,\n currency: params.currency,\n jwt,\n });\n // Handle both response structures: root level or nested in details\n const secureId = tokenResponse.secureId || tokenResponse.details?.secureId;\n const security = tokenResponse.security || tokenResponse.details?.security;\n\n // Validate 3DS is required\n if (!secureId || !security) {\n throw new Error(\"Missing secureId or security in token response\");\n }\n\n // Validate 3DS - throws error if validation fails\n await this.validate3DS(secureId, security);\n\n // Only continue to subscription if 3DS validation passed\n return this.createSubscription({\n token: tokenResponse.token,\n contactDetails: params.contactDetails,\n metadata: {\n customerId: params.customerId,\n },\n currency: params.currency,\n });\n }\n}\n","import {\n ITelemetryConfig,\n ITelemetryEvent,\n ITelemetryContext,\n} from \"../types/telemetry\";\n\n/**\n * SdkTelemetryClient - Internal SDK error reporting (Simplified)\n *\n * Features:\n * - Immediate send (no batching or buffer)\n * - Non-blocking (never throws)\n * - Sanitization (truncate message/stack)\n * - Fire-and-forget with timeout\n */\nexport class SdkTelemetryClient {\n private config: ITelemetryConfig;\n private readonly REQUEST_TIMEOUT_MS = 1200;\n private readonly MAX_MESSAGE_LENGTH = 500;\n\n constructor(config: ITelemetryConfig) {\n this.config = config;\n }\n\n /**\n * Capture an exception and send immediately\n * @param error - Error object or any thrown value\n * @param context - Additional context (tenant_id, feature, process_id, user_id, metadata, etc.)\n */\n public captureException(error: unknown, context?: ITelemetryContext): void {\n try {\n const event = this.buildEvent(error, context || {});\n\n // Send immediately (fire-and-forget)\n this.sendEvent(event);\n } catch (e) {\n // Silent failure - never throw\n }\n }\n\n /**\n * Extract error information from error object\n */\n private extractErrorInfo(error: unknown): { name: string; message: string; stack?: string } {\n try {\n if (error instanceof Error) {\n return {\n name: error.name || \"Error\",\n message: this.truncate(error.message || \"Unknown error\", this.MAX_MESSAGE_LENGTH),\n stack: error.stack || undefined,\n };\n }\n\n // Handle non-Error objects\n const stringified = this.safeStringify(error);\n return {\n name: \"NonErrorException\",\n message: this.truncate(stringified, this.MAX_MESSAGE_LENGTH),\n stack: undefined,\n };\n } catch (e) {\n return {\n name: \"SerializationError\",\n message: \"Failed to serialize error\",\n stack: undefined,\n };\n }\n }\n\n /**\n * Safe stringify with circular reference protection\n */\n private safeStringify(obj: unknown): string {\n try {\n const seen = new WeakSet();\n return JSON.stringify(obj, (key, value) => {\n if (typeof value === \"object\" && value !== null) {\n if (seen.has(value)) {\n return \"[Circular]\";\n }\n seen.add(value);\n }\n return value;\n });\n } catch (e) {\n return String(obj);\n }\n }\n\n /**\n * Build telemetry event with API format\n */\n private buildEvent(error: unknown, context: ITelemetryContext): ITelemetryEvent {\n const errorInfo = this.extractErrorInfo(error);\n\n // Build metadata from context.metadata and additional fields\n const metadata: Record<string, any> = {\n ...(context.metadata || {}),\n };\n\n // Add url if available\n if (typeof window !== \"undefined\") {\n metadata.url = window.location.href;\n }\n\n // Build the event payload matching the API format\n const event: ITelemetryEvent = {\n platform: this.config.platform,\n platform_version: this.config.platform_version,\n env: this.config.mode,\n feature: context.feature || \"unknown\",\n level: \"error\",\n message: errorInfo.message,\n name: errorInfo.name,\n metadata,\n };\n\n // Add optional fields if present\n if (context.tenant_id) event.tenant_id = context.tenant_id;\n if (context.process_id) event.process_id = context.process_id;\n if (context.user_id) event.user_id = context.user_id;\n if (errorInfo.stack) event.stack = errorInfo.stack;\n if (context.error_code) event.error_code = context.error_code;\n if (context.http_status) event.http_status = context.http_status;\n\n return event;\n }\n\n /**\n * Truncate string to max length\n */\n private truncate(str: string, maxLength: number): string {\n if (str.length <= maxLength) return str;\n return str.substring(0, maxLength) + \"...\";\n }\n\n /**\n * Send event immediately (fire-and-forget)\n */\n private sendEvent(event: ITelemetryEvent): void {\n // Fire-and-forget: don't wait for the promise\n this.sendHttpRequest(event)\n .then(() => {})\n .catch(() => {\n // Silent failure - never throw\n });\n }\n\n /**\n * Send HTTP request to telemetry endpoint\n */\n private async sendHttpRequest(event: ITelemetryEvent): Promise<boolean> {\n try {\n const payload = JSON.stringify(event);\n\n // // Try sendBeacon first (best for page unload scenarios)\n // if (typeof navigator !== \"undefined\" && navigator.sendBeacon) {\n // const blob = new Blob([payload], { type: \"application/json\" });\n // const sent = navigator.sendBeacon(this.config.endpoint, blob);\n // if (sent) return true;\n // }\n\n // Fallback to fetch with keepalive and timeout\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.REQUEST_TIMEOUT_MS);\n\n try {\n const response = await fetch(this.config.endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Token ${this.config.apiKey}`,\n },\n body: payload,\n keepalive: true,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n return response.ok;\n } catch (fetchError) {\n clearTimeout(timeoutId);\n return false;\n }\n } catch (e) {\n return false;\n }\n }\n\n}\n","/**\n * SDK information injected from package.json at build time\n * Values are replaced by Rollup's replace plugin\n */\ndeclare const __SDK_NAME__: string;\ndeclare const __SDK_VERSION__: string;\n\nexport const SDK_INFO = Object.freeze({\n name: __SDK_NAME__,\n version: __SDK_VERSION__,\n});\n","import { MESSAGES_EN } from '../constants/messages';\nimport { ErrorKeyEnum } from '../enum/ErrorKeyEnum';\n\nconst DEFAULT_SYSTEM_ERROR = 'APP_INTERNAL_001';\n\nexport interface IAppErrorInput {\n errorCode: string;\n message?: string;\n details?: Record<string, unknown>;\n statusCode?: number;\n}\n\nexport class AppError extends Error {\n public readonly status: 'error' = 'error';\n public readonly code: string;\n public readonly statusCode: number;\n public details: Record<string, unknown>;\n\n constructor(error: IAppErrorInput) {\n const resolvedStatusCode = AppError.parseStatusCode(error.statusCode);\n const resolvedMessage = AppError.resolveMessage(\n error.errorCode,\n error.message,\n );\n\n super(resolvedMessage);\n\n Object.setPrototypeOf(this, new.target.prototype);\n\n this.name = 'TonderError';\n this.code = error.errorCode;\n this.statusCode = resolvedStatusCode;\n const baseDetails = {\n ...(error.details || {}),\n };\n delete baseDetails.systemCode;\n const resolvedSystemError = AppError.extractSystemError(error, baseDetails);\n this.details = {\n ...baseDetails,\n code: error.errorCode,\n statusCode: resolvedStatusCode,\n };\n this.details.systemError = resolvedSystemError;\n\n Error.captureStackTrace?.(this, AppError);\n }\n\n public static parseStatusCode(code: unknown): number {\n const parsed = Number(code);\n if (!Number.isFinite(parsed)) return 500;\n if (parsed < 100 || parsed > 599) return 500;\n return Math.trunc(parsed);\n }\n\n public static resolveMessage(errorCode: string, message?: string): string {\n if (message) return message;\n return (\n MESSAGES_EN[errorCode] ||\n MESSAGES_EN[ErrorKeyEnum.UNKNOWN_ERROR] ||\n 'An unexpected error occurred.'\n );\n }\n\n public static isHttpStatusCode(value: unknown): boolean {\n const parsed = Number(value);\n return Number.isFinite(parsed) && parsed >= 100 && parsed <= 599;\n }\n\n public static resolveSystemError(value: unknown): string | null {\n if (typeof value !== 'string') return null;\n return value.trim();\n }\n\n public static extractSystemError(\n appErrorInput: IAppErrorInput,\n details: Record<string, unknown>,\n ): string | null {\n const cause = details?.cause as any;\n const candidates: unknown[] = [\n details?.systemError,\n appErrorInput?.details?.systemError,\n cause?.body?.code,\n cause?.details?.code,\n ];\n\n for (const candidate of candidates) {\n const resolved = AppError.resolveSystemError(candidate);\n if (resolved) return resolved;\n }\n\n return DEFAULT_SYSTEM_ERROR;\n }\n}\n\nexport interface IBuildPublicAppErrorInput {\n errorCode: string;\n message?: string;\n details?: Record<string, unknown>;\n statusCode?: number;\n}\n\nexport function buildPublicAppError(\n data: IBuildPublicAppErrorInput,\n error?: any,\n): AppError {\n if (!data?.errorCode) {\n throw new Error('buildPublicAppError requires errorCode');\n }\n\n const hasDataDetails = !!data.details && Object.keys(data.details).length > 0;\n const hasOverrides =\n data.errorCode !== error?.code ||\n !!data.message ||\n data.statusCode !== undefined ||\n hasDataDetails;\n\n if (error instanceof AppError && !hasOverrides) {\n return error;\n }\n\n const resolvedStatusCode =\n data.statusCode ??\n (AppError.isHttpStatusCode(error?.statusCode)\n ? Number(error.statusCode)\n : AppError.isHttpStatusCode(error?.code)\n ? Number(error.code)\n : AppError.isHttpStatusCode(error?.status)\n ? Number(error.status)\n : 500);\n\n const resolvedDetails: Record<string, unknown> = {\n ...(error?.details || {}),\n ...(data.details || {}),\n };\n\n if (resolvedDetails.cause === undefined && error !== undefined) {\n resolvedDetails.cause = error;\n }\n\n return new AppError({\n errorCode: data.errorCode,\n message: data.message,\n details: resolvedDetails,\n statusCode: resolvedStatusCode,\n });\n}\n","export interface ICard {\n fields: ICardSkyflowFields;\n icon?: string;\n}\n\nexport interface ICardSkyflowFields {\n card_number: string;\n expiration_month: string;\n expiration_year: string;\n skyflow_id: string;\n card_scheme: string;\n cardholder_name: string;\n subscription_id?: string;\n}\n\nexport interface ICustomerCardsResponse {\n user_id: number;\n cards: ICard[];\n}\n\nexport interface ISaveCardResponse {\n skyflow_id: string;\n user_id: number;\n}\n\nexport interface ISaveCardInternalResponse {\n skyflow_id: string;\n user_id: number;\n card_bin?: string;\n}\n\nexport interface ISaveCardSkyflowRequest {\n skyflow_id: string;\n subscription_id?: string;\n}\n\nexport interface ISaveCardRequest {\n card_number: string;\n cvv: string;\n expiration_month: string;\n expiration_year: string;\n cardholder_name: string;\n}\nexport enum CardFieldEnum {\n CARD_NUMBER = 'card_number',\n CVV = 'cvv',\n EXPIRATION_MONTH = 'expiration_month',\n EXPIRATION_YEAR = 'expiration_year',\n CARDHOLDER_NAME = 'cardholder_name',\n}\nexport type CardField = \"cvv\" | \"card_number\" | \"expiration_month\" | \"expiration_year\" | \"cardholder_name\";\n\nexport interface IMountCardFieldsRequest {\n fields: (CardField | { container_id?: string; field: CardField })[];\n card_id?: string;\n unmount_context?: 'all' | 'current' | 'create' | string;\n}\n","import { ThreeDSHandler } from \"./3dsHandler\";\nimport { fetchBusiness } from \"../data/businessApi\";\nimport { injectMercadoPagoSecurity } from \"../helpers/mercadopago\";\nimport { TONDER_URL_BY_MODE } from \"../shared/constants/tonderUrl\";\nimport {\n createOrder,\n createPayment,\n startCheckoutRouter,\n} from \"../data/checkoutApi\";\nimport { getOpenpayDeviceSessionID } from \"../data/openPayApi\";\nimport {\n getBrowserInfo\n} from \"../helpers/utils\";\nimport { registerOrFetchCustomer } from \"../data/customerApi\";\nimport { get } from \"lodash\";\nimport {\n fetchCustomerCards,\n removeCustomerCard,\n saveCustomerCard,\n} from \"../data/cardApi\";\nimport { fetchCustomerPaymentMethods } from \"../data/paymentMethodApi\";\nimport {\n Business,\n IConfigureCheckout,\n IInlineCheckoutBaseOptions,\n CustomizationOptions,\n} from \"../types/commons\";\nimport {ICustomer} from \"../types/customer\";\nimport {ICardFields, IItem, IProcessPaymentRequest, IStartCheckoutResponse} from \"../types/checkout\";\nimport {ICustomerCardsResponse, ISaveCardInternalResponse, ISaveCardSkyflowRequest} from \"../types/card\";\nimport {IPaymentMethodResponse} from \"../types/paymentMethod\";\nimport {ITransaction} from \"../types/transaction\";\nimport {GetSecureTokenResponse} from \"../types/responses\";\nimport {getSecureToken} from \"../data/tokenApi\";\nimport {ErrorKeyEnum} from \"../shared/enum/ErrorKeyEnum\";\nimport { IMPConfigRequest } from \"../types/mercadoPago\";\nimport { CardOnFile } from \"../helpers/card_on_file\";\nimport { SdkTelemetryClient } from \"../helpers/SdkTelemetryClient\";\nimport { getTelemetryEndpoint } from \"../shared/constants/apiEndpoints\";\nimport { SDK_INFO } from \"../helpers/sdkInfo\";\nimport { buildPublicAppError } from \"../shared/utils/appError\";\nexport class BaseInlineCheckout<T extends CustomizationOptions = CustomizationOptions> {\n baseUrl = \"\";\n cartTotal: string | number = \"0\";\n process3ds: ThreeDSHandler;\n mode?: \"production\" | \"sandbox\" | \"stage\" | \"development\" | undefined;\n apiKeyTonder: string;\n returnUrl?: string;\n tdsIframeId?: string;\n tonderPayButtonId?: string;\n callBack?: ((response: IStartCheckoutResponse | Record<string, any>) => void) | undefined;\n merchantData?: Business;\n abortController: AbortController;\n secureToken: string = \"\";\n customer?: ICustomer | { email: string };\n customization: T = {\n redirectOnComplete: true\n } as T;\n\n cartItems?: IItem[];\n metadata = {};\n order_reference?: string | null = null;\n card? = {};\n currency?: string = \"\";\n protected cardOnFileInstance: CardOnFile | null = null;\n protected telemetry: SdkTelemetryClient;\n #apm_config?:IMPConfigRequest | Record<string, any>\n #customerData?: Record<string, any>;\n\n constructor({\n mode = \"stage\",\n customization,\n apiKey,\n apiKeyTonder,\n returnUrl,\n tdsIframeId,\n callBack = () => {},\n baseUrlTonder,\n tonderPayButtonId,\n sdkInfo,\n }: IInlineCheckoutBaseOptions) {\n this.apiKeyTonder = apiKeyTonder || apiKey || \"\";\n this.returnUrl = returnUrl;\n this.callBack = callBack;\n this.mode = mode;\n this.customer = {} as ICustomer\n this.baseUrl = baseUrlTonder || TONDER_URL_BY_MODE[this.mode] || TONDER_URL_BY_MODE[\"stage\"];\n this.abortController = new AbortController();\n this.customization = {\n ...this.customization,\n ...(customization || {}),\n }\n\n this.process3ds = new ThreeDSHandler({\n apiKey: apiKey,\n baseUrl: this.baseUrl,\n redirectOnComplete: this.customization.redirectOnComplete,\n tdsIframeId: tdsIframeId,\n tonderPayButtonId: tonderPayButtonId,\n callBack: callBack\n });\n this.tdsIframeId = tdsIframeId;\n\n const resolvedSdkInfo = sdkInfo || SDK_INFO;\n\n // Initialize telemetry\n this.telemetry = new SdkTelemetryClient({\n endpoint: getTelemetryEndpoint(this.mode),\n apiKey: this.apiKeyTonder,\n platform: resolvedSdkInfo.name,\n platform_version: resolvedSdkInfo.version,\n mode: this.mode || \"stage\",\n });\n }\n\n configureCheckout(data: IConfigureCheckout) {\n if (\"secureToken\" in data) this.#setSecureToken(data[\"secureToken\"]);\n this.#setCheckoutData(data)\n }\n\n /**\n * Get customer ID for telemetry (if available)\n */\n protected getCustomerId(): string | undefined {\n return this.#customerData?.id?.toString();\n }\n\n /**\n * Report SDK errors to telemetry endpoint\n * NEVER throws - completely silent on failure\n */\n protected reportSdkError(err: unknown, extra?: Record<string, any>): void {\n try {\n const defaultUserId = this.getCustomerId();\n const context: Record<string, any> = {\n tenant_id: this.merchantData?.business?.pk?.toString(),\n user_id: defaultUserId,\n ...(extra || {}),\n };\n\n if (!context.user_id) delete context.user_id;\n context.feature = extra?.feature || \"unknown\";\n\n this.telemetry.captureException(err, context);\n } catch (e) {\n // Silent - never throw\n }\n }\n\n async verify3dsTransaction(): Promise<ITransaction | IStartCheckoutResponse | void> {\n const result3ds = await this.process3ds.verifyTransactionStatus();\n const resultCheckout = await this.#resumeCheckout(result3ds);\n this.process3ds.setPayload(resultCheckout);\n return this._handle3dsRedirect(resultCheckout);\n }\n\n payment(data: IProcessPaymentRequest): Promise<IStartCheckoutResponse> {\n return new Promise(async (resolve, reject) => {\n let response;\n try {\n this.#setCheckoutData(data)\n response = await this._checkout(data);\n this.process3ds.setPayload(response);\n const payload = await this._handle3dsRedirect(response);\n if (payload) {\n try {\n const selector: any = document.querySelector(`#${this.tonderPayButtonId}`);\n if(selector) {\n selector.disabled = false;\n }\n } catch {}\n if (this.callBack) this.callBack!(response);\n resolve(response);\n }\n } catch (error) {\n this.reportSdkError(error, {\n feature: \"payment\",\n process_id: response?.payment_id || response?.payment?.id || response?.payment?.pk,\n metadata: {\n step: \"payment\",\n request: data,\n response\n },\n });\n reject(\n buildPublicAppError(\n {\n errorCode: ErrorKeyEnum.PAYMENT_PROCESS_ERROR,\n },\n error,\n ),\n );\n }\n });\n }\n\n async getSecureToken(secretApikey: string): Promise<GetSecureTokenResponse> {\n try {\n return await getSecureToken(this.baseUrl, secretApikey)\n } catch (error) {\n this.reportSdkError(error, {\n feature: \"secure-token\",\n metadata: {\n step: \"getSecureToken\",\n },\n });\n throw buildPublicAppError(\n {\n errorCode: ErrorKeyEnum.SECURE_TOKEN_ERROR,\n },\n error,\n );\n }\n }\n\n async _initializeCheckout() {\n const business_response = await this._fetchMerchantData();\n\n if (\n !!business_response &&\n !!business_response.mercado_pago &&\n business_response.mercado_pago.active\n ) {\n injectMercadoPagoSecurity();\n }\n\n if (this._hasCardOnFileKeys()) {\n await this._initializeCardOnFile();\n }\n }\n\n async _checkout(data: any): Promise<any> {\n throw new Error(\n \"The #checkout method should be implement in child classes.\",\n );\n }\n\n _setCartTotal(total: string | number) {\n throw new Error(\n \"The #setCartTotal method should be implement in child classes.\",\n );\n }\n\n async _getCustomer(signal: AbortSignal | null = null) {\n if (!!this.#customerData) return this.#customerData!;\n\n this.#customerData = await registerOrFetchCustomer(\n this.baseUrl,\n this.apiKeyTonder,\n this.customer!,\n signal,\n );\n return this.#customerData!;\n }\n\n async _handleCheckout({\n card,\n payment_method,\n customer,\n isSandbox,\n enable_card_on_file,\n // TODO: DEPRECATED\n returnUrl: returnUrlData\n }: {\n card?: Record<string, any>;\n payment_method?: string;\n customer: Record<string, any>;\n isSandbox?: boolean;\n returnUrl?: string;\n enable_card_on_file?: boolean;\n }) {\n const { openpay_keys, reference, business } = this.merchantData!;\n const total = Number(this.cartTotal);\n let orderItems;\n let paymentItems;\n let routerItems\n try {\n let deviceSessionIdTonder;\n if (\n !deviceSessionIdTonder &&\n openpay_keys.merchant_id &&\n openpay_keys.public_key &&\n !payment_method\n ) {\n deviceSessionIdTonder = await getOpenpayDeviceSessionID(\n openpay_keys.merchant_id,\n openpay_keys.public_key,\n isSandbox,\n this.abortController.signal,\n );\n }\n\n const { id, auth_token } = customer;\n\n orderItems = {\n business: this.apiKeyTonder,\n client: auth_token,\n billing_address_id: null,\n shipping_address_id: null,\n amount: total,\n status: \"A\",\n reference: reference,\n is_oneclick: true,\n items: this.cartItems!,\n currency: this.currency,\n metadata: this.metadata,\n };\n const jsonResponseOrder = await createOrder(\n this.baseUrl,\n this.apiKeyTonder,\n orderItems,\n );\n\n // Create payment\n const now = new Date();\n const dateString = now.toISOString();\n\n paymentItems = {\n business_pk: business.pk,\n client_id: id,\n amount: total,\n date: dateString,\n order_id: jsonResponseOrder.id,\n customer_order_reference: this.order_reference ? this.order_reference : reference,\n items: this.cartItems,\n currency: this.currency,\n metadata: this.metadata,\n };\n const jsonResponsePayment = await createPayment(\n this.baseUrl,\n this.apiKeyTonder,\n paymentItems,\n );\n\n // Checkout router\n routerItems = {\n name: get(this.customer, \"firstName\", get(this.customer, \"name\", \"\")),\n last_name: get(\n this.customer,\n \"lastName\",\n get(this.customer, \"lastname\", \"\"),\n ),\n email_client: get(this.customer, \"email\", \"\"),\n phone_number: get(this.customer, \"phone\", \"\"),\n return_url: returnUrlData || this.returnUrl,\n id_product: \"no_id\",\n quantity_product: 1,\n id_ship: \"0\",\n instance_id_ship: \"0\",\n amount: total,\n title_ship: \"shipping\",\n description: \"transaction\",\n device_session_id: deviceSessionIdTonder ? deviceSessionIdTonder : null,\n token_id: \"\",\n order_id: jsonResponseOrder.id,\n business_id: business.pk,\n payment_id: jsonResponsePayment.pk,\n source: \"sdk\",\n items: this.cartItems,\n metadata: this.metadata,\n browser_info: getBrowserInfo(),\n currency: this.currency!,\n ...(!!payment_method ? { payment_method } : { card }),\n apm_config: this.#apm_config,\n ...(this.customer && \"identification\" in this.customer ? { identification: this.customer.identification } : {}),\n ...(enable_card_on_file !== undefined ? { enable_card_on_file } : {}),\n };\n\n const jsonResponseRouter = await startCheckoutRouter(\n this.baseUrl,\n this.apiKeyTonder,\n routerItems,\n );\n\n if (jsonResponseRouter) {\n return jsonResponseRouter;\n } else {\n return false;\n }\n } catch (error) {\n this.reportSdkError(error, {\n feature: \"payment\",\n process_id: routerItems?.payment_id,\n metadata: {\n step: \"_handleCheckout\",\n orderItems,\n paymentItems,\n routerItems\n },\n });\n throw error;\n }\n }\n\n #setCheckoutData(data: IConfigureCheckout | IProcessPaymentRequest){\n if(!data || (data && Object.keys(data).length === 0)) return;\n this.#handleCustomer(data.customer);\n this._setCartTotal(data.cart?.total || 0);\n this.#setCartItems(data.cart?.items || []);\n this.#handleMetadata(data);\n this.#handleCurrency(data);\n this.#handleCard(data);\n this.#handleApmConfig(data);\n }\n\n async _fetchMerchantData() {\n try {\n if (!this.merchantData) {\n this.merchantData = await fetchBusiness(\n this.baseUrl,\n this.apiKeyTonder,\n this.abortController.signal,\n );\n }\n return this.merchantData;\n } catch (e) {\n this.reportSdkError(e, {\n feature: \"fetch-merchant-data\",\n metadata: {\n step: \"_fetchMerchantData\",\n },\n });\n return this.merchantData;\n }\n }\n\n async _getCustomerCards(\n authToken: string,\n businessId: string | number,\n ): Promise<ICustomerCardsResponse> {\n return await fetchCustomerCards(this.baseUrl, authToken, this.secureToken, businessId);\n }\n\n async _saveCustomerCard(\n authToken: string,\n businessId: string | number,\n skyflowTokens: ISaveCardSkyflowRequest,\n appOrigin: boolean = false,\n ): Promise<ISaveCardInternalResponse> {\n return await saveCustomerCard(\n this.baseUrl,\n authToken,\n this.secureToken,\n businessId,\n skyflowTokens,\n appOrigin\n );\n }\n\n async _removeCustomerCard(\n authToken: string,\n businessId: string | number,\n skyflowId: string,\n ): Promise<string> {\n return await removeCustomerCard(\n this.baseUrl,\n authToken,\n this.secureToken,\n skyflowId,\n businessId,\n );\n }\n async _fetchCustomerPaymentMethods(): Promise<IPaymentMethodResponse> {\n return await fetchCustomerPaymentMethods(this.baseUrl, this.apiKeyTonder);\n }\n\n protected _hasCardOnFileKeys(): boolean {\n return !!this.merchantData?.cardonfile_keys?.public_key;\n }\n\n protected async _initializeCardOnFile(): Promise<CardOnFile> {\n if (!this.cardOnFileInstance) {\n this.cardOnFileInstance = new CardOnFile({\n merchantId: this.merchantData?.cardonfile_keys!.public_key!,\n apiKey: this.apiKeyTonder,\n isTestEnvironment: this.mode !== \"production\",\n });\n await this.cardOnFileInstance.initialize();\n }\n\n return this.cardOnFileInstance;\n }\n\n #handleCustomer(customer: ICustomer | { email: string }) {\n if (!customer) return;\n\n this.customer = customer;\n }\n\n #setSecureToken(token: string) {\n this.secureToken = token;\n }\n\n #setCartItems(items: IItem[]) {\n this.cartItems = items;\n }\n\n #handleMetadata(data: { metadata?: any; order_reference?: string | null }) {\n this.metadata = data?.metadata;\n this.order_reference = data?.order_reference;\n }\n\n #handleCurrency(data: { currency?: string }) {\n this.currency = data?.currency;\n }\n\n #handleCard(data: { card?: ICardFields | string }) {\n this.card = data?.card;\n }\n\n // TODO: Make private after remove deprecated functions of liteCheckout\n async _handle3dsRedirect(\n response: ITransaction | IStartCheckoutResponse | void,\n ) {\n const iframe =\n response && \"next_action\" in response\n ? response?.next_action?.iframe_resources?.iframe\n : null;\n\n if (iframe) {\n this.process3ds\n .loadIframe()!\n .then(() => {\n //TODO: Check if this will be necessary on the frontend side\n // after some the tests in production, since the 3DS process\n // doesn't works properly on the sandbox environment\n // setTimeout(() => {\n // process3ds.verifyTransactionStatus();\n // }, 10000);\n this.process3ds.verifyTransactionStatus();\n })\n .catch((error) => {\n console.log(\"Error loading iframe:\", error);\n this.reportSdkError(error, {\n feature: \"3ds-verification\",\n metadata: {\n step: \"_handle3dsRedirect\",\n response,\n },\n });\n });\n } else {\n const redirectUrl = this.process3ds.getRedirectUrl();\n if (redirectUrl) {\n this.process3ds.redirectToChallenge();\n } else {\n return response;\n }\n }\n }\n\n async #resumeCheckout(response: any) {\n // Stop the routing process if the transaction is either hard declined or successful\n if (response?.decline?.error_type === \"Hard\" || \n !!response?.checkout?.is_route_finished ||\n !!response?.is_route_finished ||\n [\"Pending\"].includes(response?.transaction_status)) {\n return response;\n }\n\n if ([\"Success\", \"Authorized\"].includes(response?.transaction_status)) {\n return response;\n }\n\n if (response) {\n const routerItems = {\n checkout_id: response.checkout?.id || response?.checkout_id,\n };\n\n try {\n return await startCheckoutRouter(\n this.baseUrl,\n this.apiKeyTonder,\n routerItems,\n );\n } catch (error) {\n this.reportSdkError(error, {\n feature: \"payment\",\n process_id: response?.payment_id || response?.payment?.id || response?.payment?.pk,\n metadata: {\n step: \"#resumeCheckout\",\n response\n },\n });\n // throw error\n }\n return response;\n }\n }\n #handleApmConfig(data: {apm_config?: IMPConfigRequest | Record<string, any>;}) {\n this.#apm_config = data?.apm_config;\n }\n}\n","import { GetSecureTokenResponse } from \"../types/responses\";\nimport {\n buildErrorResponse,\n buildErrorResponseFromCatch,\n} from \"../helpers/utils\";\n\nexport async function getSecureToken(\n baseUrl: string,\n token: string,\n signal = null,\n): Promise<GetSecureTokenResponse> {\n try {\n const response = await fetch(`${baseUrl}/api/secure-token/`, {\n method: \"POST\",\n headers: {\n Authorization: `Token ${token}`,\n \"Content-Type\": \"application/json\",\n },\n signal,\n });\n\n if (response.ok) return (await response.json()) as GetSecureTokenResponse;\n throw await buildErrorResponse(response);\n } catch (error) {\n throw buildErrorResponseFromCatch(error);\n }\n}\n","export function injectMercadoPagoSecurity() {\n try {\n const script = document.createElement(\"script\");\n script.src = \"https://www.mercadopago.com/v2/security.js\";\n script.setAttribute(\"view\", \"\");\n script.onload = () => {};\n script.onerror = (error) => {\n console.error(\"Error loading Mercado Pago script:\", error);\n };\n document.head.appendChild(script);\n } catch (error) {\n console.error(\"Error attempting to inject Mercado Pago script:\", error);\n }\n}","import {CustomerRegisterResponse} from \"../types/responses\";\n\nexport async function registerOrFetchCustomer(\n baseUrl: string,\n apiKey: string,\n customer: Record<string, any>,\n signal: AbortSignal | null = null,\n): Promise<CustomerRegisterResponse> {\n const url = `${baseUrl}/api/v1/customer/`;\n const data = {\n email: customer.email,\n first_name: customer?.firstName,\n last_name: customer?.lastName,\n phone: customer?.phone,\n };\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Token ${apiKey}`,\n },\n signal: signal,\n body: JSON.stringify(data),\n });\n\n if (response.status === 201) {\n return await response.json();\n } else {\n throw new Error(`Error: ${response.statusText}`);\n }\n}\n","import {\n buildErrorResponse,\n buildErrorResponseFromCatch,\n} from \"../helpers/utils\";\nimport { MESSAGES_EN } from \"../shared/constants/messages\";\nimport { ErrorKeyEnum } from \"../shared/enum/ErrorKeyEnum\";\nimport {ICustomerCardsResponse, ISaveCardInternalResponse, ISaveCardSkyflowRequest} from \"../types/card\";\n\nexport async function fetchCustomerCards(\n baseUrl: string,\n customerToken: string,\n secureToken: string,\n businessId: string | number,\n signal = null,\n): Promise<ICustomerCardsResponse> {\n try {\n const url = `${baseUrl}/api/v1/business/${businessId}/cards/`;\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${secureToken}`,\n \"Content-Type\": \"application/json\",\n 'User-token': customerToken,\n },\n signal,\n });\n if (response.ok) return await response.json();\n if (response.status === 401) {\n return {\n user_id: 0,\n cards: [],\n };\n }\n\n throw await buildErrorResponse(response);\n } catch (error) {\n throw buildErrorResponseFromCatch(error);\n }\n}\n\nexport async function saveCustomerCard(\n baseUrl: string,\n customerToken: string,\n secureToken: string,\n businessId: string | number,\n data: ISaveCardSkyflowRequest,\n appOrigin: boolean = false,\n): Promise<ISaveCardInternalResponse> {\n try {\n const url = `${baseUrl}/api/v1/business/${businessId}/cards/`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${secureToken}`,\n \"Content-Type\": \"application/json\",\n 'User-token': customerToken,\n ...(appOrigin ? { 'X-App-Origin': 'sdk/ionic' } : {}),\n },\n body: JSON.stringify(data),\n });\n\n if (response.ok) return await response.json();\n\n throw await buildErrorResponse(response);\n } catch (error) {\n throw buildErrorResponseFromCatch(error);\n }\n}\n\nexport async function removeCustomerCard(\n baseUrl: string,\n customerToken: string,\n secureToken: string,\n skyflowId = \"\",\n businessId: string | number,\n): Promise<string> {\n try {\n const url = `${baseUrl}/api/v1/business/${businessId}/cards/${skyflowId}`;\n\n const response = await fetch(url, {\n method: \"DELETE\",\n headers: {\n Authorization: `Bearer ${secureToken}`,\n \"Content-Type\": \"application/json\",\n 'User-token': customerToken,\n },\n });\n\n if (response.status === 204) return MESSAGES_EN[ErrorKeyEnum.CARD_REMOVED_SUCCESSFULLY];\n if (response.ok && \"json\" in response) return await response.json();\n\n throw await buildErrorResponse(response);\n } catch (error) {\n throw buildErrorResponseFromCatch(error);\n }\n}\n","import {\n buildErrorResponse,\n buildErrorResponseFromCatch,\n} from \"../helpers/utils\";\nimport {IPaymentMethodResponse} from \"../types/paymentMethod\";\n\nexport async function fetchCustomerPaymentMethods(\n baseUrl: string,\n apiKey: string,\n params = {\n status: \"active\",\n pagesize: \"10000\",\n },\n signal = null,\n): Promise<IPaymentMethodResponse> {\n try {\n const queryString = new URLSearchParams(params).toString();\n\n const response = await fetch(\n `${baseUrl}/api/v1/payment_methods?${queryString}`,\n {\n method: \"GET\",\n headers: {\n Authorization: `Token ${apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n signal,\n },\n );\n\n if (response.ok) return await response.json();\n throw await buildErrorResponse(response);\n } catch (error) {\n throw buildErrorResponseFromCatch(error);\n }\n}\n","export async function getVaultToken(\n baseUrl: string,\n apiKey: string,\n signal = null,\n) {\n const response = await fetch(`${baseUrl}/api/v1/vault-token/`, {\n method: \"GET\",\n headers: {\n Authorization: `Token ${apiKey}`,\n },\n signal: signal,\n });\n\n if (response.ok) {\n const responseBody = await response.json();\n return responseBody.token;\n } else {\n throw new Error(\"Failed to retrieve bearer token\");\n }\n}\n","import Skyflow from \"skyflow-js\";\n\nconst lengthMatchRule = {\n type: Skyflow.ValidationRuleType.LENGTH_MATCH_RULE,\n params: {\n max: 70,\n },\n};\nconst regexEmpty = RegExp('^(?!s*$).+');\n\nconst regexMatchRule = {\n type: Skyflow.ValidationRuleType.REGEX_MATCH_RULE,\n params: {\n regex: regexEmpty,\n error: 'El campo es requerido', // Optional, default error is 'VALIDATION FAILED'.\n },\n};\n\n\n\nconst getErrorField = (\n event: {\n elementType?: string;\n isEmpty?: boolean;\n isFocused?: boolean;\n isValid?: boolean;\n value?: string;\n },\n field: string\n) => {\n if (event.isEmpty) {\n return 'El campo es requerido';\n } else if (!event.isValid && !event.isEmpty) {\n return `El campo ${field} es inválido`;\n } else {\n return '';\n }\n};\n\nconst DEFAULT_SKYFLOW_lABELS = {\n name: 'Titular de la tarjeta',\n card_number: 'Número de tarjeta',\n cvv: 'CVC/CVV',\n expiration_month: 'Mes',\n expiration_year: 'Año',\n expiration_date: 'Fecha de expiración',\n};\n\nconst DEFAULT_SKYFLOW_PLACEHOLDERS = {\n name: 'Nombre como aparece en la tarjeta',\n card_number: '1234 1234 1234 1234',\n cvv: '3-4 dígitos',\n expiration_month: 'MM',\n expiration_year: 'AA',\n};\n\nexport {\n lengthMatchRule,\n regexMatchRule,\n getErrorField,\n DEFAULT_SKYFLOW_lABELS,\n DEFAULT_SKYFLOW_PLACEHOLDERS,\n};\n","import {CollectInputStylesVariant, CollectLabelStylesVariant} from \"../../types/commons\";\nimport {LabelStyles} from \"skyflow-js/types/utils/common\";\n\nconst DEFAULT_SKYFLOW_INPUT_STYLES: CollectInputStylesVariant = {\n base: {\n border: \"1px solid #e0e0e0\",\n padding: \"10px 7px\",\n borderRadius: \"5px\",\n color: \"#1d1d1d\",\n marginTop: \"2px\",\n backgroundColor: \"white\",\n fontFamily: '\"Inter\", sans-serif',\n fontSize: \"16px\",\n \"&::placeholder\": {\n color: \"#ccc\",\n },\n },\n complete: {\n color: \"#4caf50\",\n },\n invalid: {\n border: \"1px solid #f44336\",\n },\n empty: {},\n focus: {},\n global: {\n \"@import\":\n 'url(\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;700&display=swap\")',\n },\n};\n\nconst DEFAULT_SKYFLOW_lABEL_STYLES: LabelStyles = {\n base: {\n fontSize: \"12px\",\n fontWeight: \"500\",\n fontFamily: '\"Inter\", sans-serif'\n },\n};\n\nconst DEFAULT_SKYFLOW_ERROR_TEXT_STYLES: CollectLabelStylesVariant = {\n base: {\n fontSize: '12px',\n fontWeight: '500',\n fontFamily: '\"Inter\", sans-serif',\n color: \"#f44336\",\n },\n}\n\nconst SKYFLOW_HIDDEN_ERROR_TEXT_STYLES = {\n base: {\n fontSize: '12px',\n fontWeight: '500',\n color: \"#f44336\",\n fontFamily: '\"Inter\", sans-serif'\n },\n};\n\nexport {\n DEFAULT_SKYFLOW_INPUT_STYLES,\n DEFAULT_SKYFLOW_lABEL_STYLES,\n DEFAULT_SKYFLOW_ERROR_TEXT_STYLES,\n SKYFLOW_HIDDEN_ERROR_TEXT_STYLES,\n};\n","import { ErrorResponse } from \"../classes/errorResponse\";\nimport Skyflow from \"skyflow-js\";\nimport CollectContainer from \"skyflow-js/types/core/external/collect/collect-container\";\nimport { buildErrorResponseFromCatch } from \"./utils\";\nimport CollectElement from \"skyflow-js/types/core/external/collect/collect-element\";\nimport { getVaultToken } from \"../data/skyflowApi\";\nimport { TokensSkyflowRequest } from \"../types/requests\";\nimport { CardFieldEnum, IMountCardFieldsRequest } from \"../types/card\";\nimport {\n IEvents,\n IInputEvents,\n ILiteCustomizationOptions,\n StylesBaseVariant,\n} from \"../types/commons\";\nimport {\n DEFAULT_SKYFLOW_lABELS,\n DEFAULT_SKYFLOW_PLACEHOLDERS,\n lengthMatchRule,\n regexMatchRule,\n} from \"../shared/constants/skyflow.contants\";\nimport {\n DEFAULT_SKYFLOW_ERROR_TEXT_STYLES,\n DEFAULT_SKYFLOW_INPUT_STYLES,\n DEFAULT_SKYFLOW_lABEL_STYLES,\n} from \"../shared/styles/skyflow.styles\";\nimport { get } from \"lodash\";\n\n/**\n * [DEPRECATION WARNING]\n * This function should be deprecated in favor of using mountSkyflowFields for security,\n * to prevent users from creating their own inputs.\n */\nexport async function getSkyflowTokens({\n baseUrl,\n apiKey,\n vault_id,\n vault_url,\n data,\n}: TokensSkyflowRequest): Promise<any | ErrorResponse> {\n const skyflow = Skyflow.init({\n vaultID: vault_id,\n vaultURL: vault_url,\n getBearerToken: async () => await getVaultToken(baseUrl, apiKey),\n options: {\n logLevel: Skyflow.LogLevel.ERROR,\n env: Skyflow.Env.DEV, // ⚠️ This should be Env.PROD, but currently it cannot be changed because getSkyflowTokens must be deprecated first, since .setValue does not work in PROD.\n },\n });\n\n const collectContainer: CollectContainer = skyflow.container(\n Skyflow.ContainerType.COLLECT,\n ) as CollectContainer;\n\n const fieldPromises = await getFieldsPromise(data, collectContainer);\n\n const result = await Promise.all(fieldPromises);\n\n const mountFail = result.some((item: boolean) => !item);\n\n if (mountFail) {\n throw buildErrorResponseFromCatch(\n Error(\"Ocurrió un error al montar los campos de la tarjeta\"),\n );\n } else {\n try {\n const collectResponseSkyflowTonder =\n (await collectContainer.collect()) as any;\n if (collectResponseSkyflowTonder)\n return collectResponseSkyflowTonder[\"records\"][0][\"fields\"];\n throw buildErrorResponseFromCatch(\n Error(\"Por favor, verifica todos los campos de tu tarjeta\"),\n );\n } catch (error) {\n throw buildErrorResponseFromCatch(error);\n }\n }\n}\n\nasync function getFieldsPromise(\n data: any,\n collectContainer: CollectContainer,\n): Promise<Promise<boolean>[]> {\n const fields = await getFields(data, collectContainer);\n if (!fields) return [];\n\n return fields.map((field: { element: CollectElement; key: string }) => {\n return new Promise((resolve) => {\n const div = document.createElement(\"div\");\n div.hidden = true;\n div.id = `id-${field.key}`;\n document.querySelector(`body`)?.appendChild(div);\n setTimeout(() => {\n field.element.mount(`#id-${field.key}`);\n setInterval(() => {\n if (field.element.isMounted()) {\n const value = data[field.key];\n field.element.setValue(value);\n return resolve(field.element.isMounted());\n }\n }, 120);\n }, 120);\n });\n });\n}\n\nasync function getFields(\n data: any,\n collectContainer: CollectContainer,\n): Promise<{ element: CollectElement; key: string }[]> {\n return await Promise.all(\n Object.keys(data).map(async (key) => {\n const cardHolderNameElement = await collectContainer.create({\n table: \"cards\",\n column: key,\n type: Skyflow.ElementType.INPUT_FIELD,\n });\n return { element: cardHolderNameElement, key: key };\n }),\n );\n}\n\nexport async function initSkyflowInstance({\n baseUrl,\n apiKey,\n vault_id,\n vault_url,\n}: TokensSkyflowRequest): Promise<Skyflow> {\n return Skyflow.init({\n vaultID: vault_id,\n vaultURL: vault_url,\n getBearerToken: async () => await getVaultToken(baseUrl, apiKey),\n options: {\n logLevel: Skyflow.LogLevel.ERROR,\n env: Skyflow.Env.DEV,\n },\n });\n}\n\nexport async function mountSkyflowFields(event: {\n skyflowInstance: Skyflow;\n data: IMountCardFieldsRequest;\n customization?: ILiteCustomizationOptions;\n events?: IEvents;\n}): Promise<{ elements: CollectElement[]; container: CollectContainer }> {\n const { skyflowInstance, data, customization, events } = event;\n const collectContainer: CollectContainer = skyflowInstance.container(\n Skyflow.ContainerType.COLLECT,\n ) as CollectContainer;\n const elements: { element: CollectElement; containerId: string }[] = [];\n const typeByField: Record<\n CardFieldEnum,\n (typeof Skyflow.ElementType)[keyof typeof Skyflow.ElementType]\n > = {\n [CardFieldEnum.CVV]: Skyflow.ElementType.CVV,\n [CardFieldEnum.CARD_NUMBER]: Skyflow.ElementType.CARD_NUMBER,\n [CardFieldEnum.EXPIRATION_MONTH]: Skyflow.ElementType.EXPIRATION_MONTH,\n [CardFieldEnum.EXPIRATION_YEAR]: Skyflow.ElementType.EXPIRATION_YEAR,\n [CardFieldEnum.CARDHOLDER_NAME]: Skyflow.ElementType.CARDHOLDER_NAME,\n };\n\n const validationsByField = {\n [CardFieldEnum.CVV]: [regexMatchRule],\n [CardFieldEnum.CARD_NUMBER]: [regexMatchRule],\n [CardFieldEnum.EXPIRATION_MONTH]: [regexMatchRule],\n [CardFieldEnum.EXPIRATION_YEAR]: [regexMatchRule],\n [CardFieldEnum.CARDHOLDER_NAME]: [lengthMatchRule, regexMatchRule],\n };\n const customStyles = {\n errorStyles:\n customization?.styles?.cardForm?.errorStyles ||\n DEFAULT_SKYFLOW_ERROR_TEXT_STYLES,\n inputStyles:\n customization?.styles?.cardForm?.inputStyles ||\n DEFAULT_SKYFLOW_INPUT_STYLES,\n labelStyles:\n customization?.styles?.cardForm?.labelStyles ||\n DEFAULT_SKYFLOW_lABEL_STYLES,\n };\n const labels: Record<string, string> = {\n name: customization?.labels?.name || DEFAULT_SKYFLOW_lABELS.name,\n card_number:\n customization?.labels?.card_number || DEFAULT_SKYFLOW_lABELS.card_number,\n cvv: customization?.labels?.cvv || DEFAULT_SKYFLOW_lABELS.cvv,\n expiration_date:\n customization?.labels?.expiry_date ||\n DEFAULT_SKYFLOW_lABELS.expiration_date,\n expiration_month:\n customization?.labels?.expiration_month ||\n DEFAULT_SKYFLOW_lABELS.expiration_month,\n expiration_year:\n customization?.labels?.expiration_year ||\n DEFAULT_SKYFLOW_lABELS.expiration_year,\n };\n const placeholders: Record<string, string> = {\n name:\n customization?.placeholders?.name || DEFAULT_SKYFLOW_PLACEHOLDERS.name,\n card_number:\n customization?.placeholders?.card_number ||\n DEFAULT_SKYFLOW_PLACEHOLDERS.card_number,\n cvv: customization?.placeholders?.cvv || DEFAULT_SKYFLOW_PLACEHOLDERS.cvv,\n expiration_month:\n customization?.placeholders?.expiration_month ||\n DEFAULT_SKYFLOW_PLACEHOLDERS.expiration_month,\n expiration_year:\n customization?.placeholders?.expiration_year ||\n DEFAULT_SKYFLOW_PLACEHOLDERS.expiration_year,\n };\n const eventsByField: Record<CardFieldEnum, IInputEvents | undefined> = {\n [CardFieldEnum.CVV]: events?.cvvEvents,\n [CardFieldEnum.CARD_NUMBER]: events?.cardNumberEvents,\n [CardFieldEnum.EXPIRATION_MONTH]: events?.monthEvents,\n [CardFieldEnum.EXPIRATION_YEAR]: events?.yearEvents,\n [CardFieldEnum.CARDHOLDER_NAME]: events?.cardHolderEvents,\n };\n\n if (\"fields\" in data && Array.isArray(data.fields)) {\n if (data.fields.length > 0 && typeof data.fields[0] === \"string\") {\n for (const field of data.fields as CardFieldEnum[]) {\n const element = collectContainer.create({\n table: \"cards\",\n column: field,\n type: typeByField[field],\n validations: validationsByField[field],\n ...customStyles,\n label: labels[field],\n placeholder: placeholders[field],\n ...(data.card_id ? { skyflowID: data.card_id } : {}),\n });\n handleSkyflowElementEvents({\n element,\n errorStyles: customStyles.errorStyles,\n fieldMessage: [\n CardFieldEnum.CVV,\n CardFieldEnum.EXPIRATION_MONTH,\n CardFieldEnum.EXPIRATION_YEAR,\n ].includes(field)\n ? \"\"\n : labels[field],\n events: eventsByField[field],\n });\n const containerId =\n `#collect_${String(field)}` +\n (data.card_id ? `_${data.card_id}` : \"\");\n await tryMountElement({element, containerId});\n elements.push({ element, containerId });\n }\n } else {\n for (const fieldObj of data.fields as {\n container_id?: string;\n field: CardFieldEnum;\n }[]) {\n const key = fieldObj.field;\n const element = collectContainer.create({\n table: \"cards\",\n column: key,\n type: typeByField[key],\n validations: validationsByField[key],\n ...customStyles,\n label: labels[key],\n placeholder: placeholders[key],\n ...(data.card_id ? { skyflowID: data.card_id } : {}),\n });\n const containerId =\n fieldObj.container_id ||\n `#collect_${String(key)}` + (data.card_id ? `_${data.card_id}` : \"\");\n await tryMountElement({element, containerId});\n elements.push({ element, containerId });\n }\n }\n }\n\n return {\n elements: elements.map((e) => e.element),\n container: collectContainer,\n };\n}\n\nfunction handleSkyflowElementEvents(event: {\n element: CollectElement;\n fieldMessage?: string;\n errorStyles?: StylesBaseVariant;\n requiredMessage?: string;\n invalidMessage?: string;\n events?: IInputEvents;\n}) {\n const {\n element,\n fieldMessage = \"\",\n errorStyles = {},\n requiredMessage = \"Campo requerido\",\n invalidMessage = \"Campo no válido\",\n events,\n } = event;\n if (\"on\" in element) {\n element.on(Skyflow.EventName.CHANGE, (state: any) => {\n executeEvent({ eventName: \"onChange\", data: state, events });\n updateErrorLabel({\n element,\n errorStyles,\n color: \"transparent\",\n });\n });\n\n element.on(Skyflow.EventName.BLUR, (state: any) => {\n executeEvent({ eventName: \"onBlur\", data: state, events });\n if (!state.isValid) {\n const msj_error = state.isEmpty\n ? requiredMessage\n : fieldMessage != \"\"\n ? `El campo ${fieldMessage} no es válido`\n : invalidMessage;\n element.setError(msj_error);\n }\n updateErrorLabel({\n element,\n errorStyles,\n });\n });\n\n element.on(Skyflow.EventName.FOCUS, (state: any) => {\n executeEvent({ eventName: \"onFocus\", data: state, events });\n updateErrorLabel({\n element,\n errorStyles,\n color: \"transparent\",\n });\n element.resetError();\n });\n }\n}\n\nfunction updateErrorLabel(event: {\n element: CollectElement;\n errorStyles?: StylesBaseVariant;\n color?: string;\n}) {\n const { element, errorStyles = {}, color = \"\" } = event;\n if (Object.keys(errorStyles).length > 0) {\n element.update({\n errorTextStyles: {\n ...errorStyles,\n base: {\n // @ts-ignore\n ...(errorStyles.base && { ...errorStyles.base }),\n ...(color != \"\" && { color }),\n },\n },\n });\n }\n}\n\nconst executeEvent = (event: {\n eventName: \"onChange\" | \"onBlur\" | \"onFocus\";\n data: any;\n events?: IInputEvents;\n}) => {\n const { eventName, data, events } = event;\n if (events && eventName in events) {\n const eventHandler = events[eventName];\n if (typeof eventHandler === \"function\") {\n eventHandler({\n elementType: get(data, \"elementType\", \"\"),\n isEmpty: get(data, \"isEmpty\", \"\"),\n isFocused: get(data, \"isFocused\", \"\"),\n isValid: get(data, \"isValid\", \"\"),\n });\n }\n }\n};\n\nasync function tryMountElement(event: {\n element: any;\n containerId: string;\n retries?: number;\n delay?: number;\n}): Promise<void> {\n const { element, containerId, retries = 2, delay = 30 } = event;\n for (let i = 0; i <= retries; i++) {\n const el = document.querySelector(containerId);\n if (el) {\n element.mount(containerId);\n return;\n }\n if (i < retries) {\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n console.warn(\n `[mountCardFields] Container ${containerId} was not found after ${retries + 1} attempts`,\n );\n}\n","const PAYMENT_METHOD_APM = Object.freeze({\n SORIANA: \"SORIANA\",\n OXXO: \"OXXO\",\n OXXOPAY: \"OXXOPAY\",\n SPEI: \"SPEI\",\n CODI: \"CODI\",\n MERCADOPAGO: \"MERCADOPAGO\",\n PAYPAL: \"PAYPAL\",\n COMERCIALMEXICANA: \"COMERCIALMEXICANA\",\n BANCOMER: \"BANCOMER\",\n WALMART: \"WALMART\",\n BODEGA: \"BODEGA\",\n SAMSCLUB: \"SAMSCLUB\",\n SUPERAMA: \"SUPERAMA\",\n CALIMAX: \"CALIMAX\",\n EXTRA: \"EXTRA\",\n CIRCULOK: \"CIRCULOK\",\n SEVEN11: \"7ELEVEN\",\n TELECOMM: \"TELECOMM\",\n BANORTE: \"BANORTE\",\n BENAVIDES: \"BENAVIDES\",\n DELAHORRO: \"DELAHORRO\",\n ELASTURIANO: \"ELASTURIANO\",\n WALDOS: \"WALDOS\",\n ALSUPER: \"ALSUPER\",\n KIOSKO: \"KIOSKO\",\n STAMARIA: \"STAMARIA\",\n LAMASBARATA: \"LAMASBARATA\",\n FARMROMA: \"FARMROMA\",\n FARMUNION: \"FARMUNION\",\n FARMATODO: \"FARMATODO\",\n SFDEASIS: \"SFDEASIS\",\n FARM911: \"FARM911\",\n FARMECONOMICAS: \"FARMECONOMICAS\",\n FARMMEDICITY: \"FARMMEDICITY\",\n RIANXEIRA: \"RIANXEIRA\",\n WESTERNUNION: \"WESTERNUNION\",\n ZONAPAGO: \"ZONAPAGO\",\n CAJALOSANDES: \"CAJALOSANDES\",\n CAJAPAITA: \"CAJAPAITA\",\n CAJASANTA: \"CAJASANTA\",\n CAJASULLANA: \"CAJASULLANA\",\n CAJATRUJILLO: \"CAJATRUJILLO\",\n EDPYME: \"EDPYME\",\n KASNET: \"KASNET\",\n NORANDINO: \"NORANDINO\",\n QAPAQ: \"QAPAQ\",\n RAIZ: \"RAIZ\",\n PAYSER: \"PAYSER\",\n WUNION: \"WUNION\",\n BANCOCONTINENTAL: \"BANCOCONTINENTAL\",\n GMONEY: \"GMONEY\",\n GOPAY: \"GOPAY\",\n WU: \"WU\",\n PUNTOSHEY: \"PUNTOSHEY\",\n AMPM: \"AMPM\",\n JUMBOMARKET: \"JUMBOMARKET\",\n SMELPUEBLO: \"SMELPUEBLO\",\n BAM: \"BAM\",\n REFACIL: \"REFACIL\",\n ACYVALORES: \"ACYVALORES\",\n});\n\nexport { PAYMENT_METHOD_APM };\n","import {clearSpace} from \"../../helpers/utils\";\nimport {PAYMENT_METHOD_APM} from \"../constants/paymentMethodAPM\";\n\nconst PAYMENT_METHODS_CATALOG = {\n [PAYMENT_METHOD_APM.SORIANA]: {\n label: \"Soriana\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/soriana.png\",\n },\n [PAYMENT_METHOD_APM.OXXO]: {\n label: \"Oxxo\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/oxxo.png\",\n },\n [PAYMENT_METHOD_APM.CODI]: {\n label: \"CoDi\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/codi.png\",\n },\n [PAYMENT_METHOD_APM.MERCADOPAGO]: {\n label: \"Mercado Pago\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/mercadopago.png\",\n },\n [PAYMENT_METHOD_APM.OXXOPAY]: {\n label: \"Oxxo Pay\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/oxxopay.png\",\n },\n [PAYMENT_METHOD_APM.SPEI]: {\n label: \"SPEI\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/spei.png\",\n },\n [PAYMENT_METHOD_APM.PAYPAL]: {\n label: \"Paypal\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/paypal.png\",\n },\n [PAYMENT_METHOD_APM.COMERCIALMEXICANA]: {\n label: \"Comercial Mexicana\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/comercial_exicana.png\",\n },\n [PAYMENT_METHOD_APM.BANCOMER]: {\n label: \"Bancomer\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/bancomer.png\",\n },\n [PAYMENT_METHOD_APM.WALMART]: {\n label: \"Walmart\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/walmart.png\",\n },\n [PAYMENT_METHOD_APM.BODEGA]: {\n label: \"Bodega Aurrera\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/bodega_aurrera.png\",\n },\n [PAYMENT_METHOD_APM.SAMSCLUB]: {\n label: \"Sam´s Club\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/sams_club.png\",\n },\n [PAYMENT_METHOD_APM.SUPERAMA]: {\n label: \"Superama\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/superama.png\",\n },\n [PAYMENT_METHOD_APM.CALIMAX]: {\n label: \"Calimax\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/calimax.png\",\n },\n [PAYMENT_METHOD_APM.EXTRA]: {\n label: \"Tiendas Extra\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/tiendas_extra.png\",\n },\n [PAYMENT_METHOD_APM.CIRCULOK]: {\n label: \"Círculo K\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/circulo_k.png\",\n },\n [PAYMENT_METHOD_APM.SEVEN11]: {\n label: \"7 Eleven\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/7_eleven.png\",\n },\n [PAYMENT_METHOD_APM.TELECOMM]: {\n label: \"Telecomm\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/telecomm.png\",\n },\n [PAYMENT_METHOD_APM.BANORTE]: {\n label: \"Banorte\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/banorte.png\",\n },\n [PAYMENT_METHOD_APM.BENAVIDES]: {\n label: \"Farmacias Benavides\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_benavides.png\",\n },\n [PAYMENT_METHOD_APM.DELAHORRO]: {\n label: \"Farmacias del Ahorro\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_ahorro.png\",\n },\n [PAYMENT_METHOD_APM.ELASTURIANO]: {\n label: \"El Asturiano\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/asturiano.png\",\n },\n [PAYMENT_METHOD_APM.WALDOS]: {\n label: \"Waldos\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/waldos.png\",\n },\n [PAYMENT_METHOD_APM.ALSUPER]: {\n label: \"Alsuper\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/al_super.png\",\n },\n [PAYMENT_METHOD_APM.KIOSKO]: {\n label: \"Kiosko\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/kiosko.png\",\n },\n [PAYMENT_METHOD_APM.STAMARIA]: {\n label: \"Farmacias Santa María\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_santa_maria.png\",\n },\n [PAYMENT_METHOD_APM.LAMASBARATA]: {\n label: \"Farmacias la más barata\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_barata.png\",\n },\n [PAYMENT_METHOD_APM.FARMROMA]: {\n label: \"Farmacias Roma\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_roma.png\",\n },\n [PAYMENT_METHOD_APM.FARMUNION]: {\n label: \"Pago en Farmacias Unión\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_union.png\",\n },\n [PAYMENT_METHOD_APM.FARMATODO]: {\n label: \"Pago en Farmacias Farmatodo\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_farmatodo.png\t\",\n },\n [PAYMENT_METHOD_APM.SFDEASIS]: {\n label: \"Pago en Farmacias San Francisco de Asís\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_san_francisco.png\",\n },\n [PAYMENT_METHOD_APM.FARM911]: {\n label: \"Farmacias 911\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.FARMECONOMICAS]: {\n label: \"Farmacias Economicas\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.FARMMEDICITY]: {\n label: \"Farmacias Medicity\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.RIANXEIRA]: {\n label: \"Rianxeira\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.WESTERNUNION]: {\n label: \"Western Union\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.ZONAPAGO]: {\n label: \"Zona Pago\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.CAJALOSANDES]: {\n label: \"Caja Los Andes\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.CAJAPAITA]: {\n label: \"Caja Paita\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.CAJASANTA]: {\n label: \"Caja Santa\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.CAJASULLANA]: {\n label: \"Caja Sullana\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.CAJATRUJILLO]: {\n label: \"Caja Trujillo\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.EDPYME]: {\n label: \"Edpyme\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.KASNET]: {\n label: \"KasNet\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.NORANDINO]: {\n label: \"Norandino\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.QAPAQ]: {\n label: \"Qapaq\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.RAIZ]: {\n label: \"Raiz\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.PAYSER]: {\n label: \"Paysera\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.WUNION]: {\n label: \"Western Union\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.BANCOCONTINENTAL]: {\n label: \"Banco Continental\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.GMONEY]: {\n label: \"Go money\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.GOPAY]: {\n label: \"Go pay\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.WU]: {\n label: \"Western Union\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.PUNTOSHEY]: {\n label: \"Puntoshey\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.AMPM]: {\n label: \"Ampm\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.JUMBOMARKET]: {\n label: \"Jumbomarket\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.SMELPUEBLO]: {\n label: \"Smelpueblo\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.BAM]: {\n label: \"Bam\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.REFACIL]: {\n label: \"Refacil\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n [PAYMENT_METHOD_APM.ACYVALORES]: {\n label: \"Acyvalores\",\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n },\n};\n\n\nexport const getPaymentMethodDetails = (scheme_data: string) => {\n const scheme: string = clearSpace(scheme_data.toUpperCase());\n const _default = {\n icon: \"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png\",\n label: \"\",\n };\n // @ts-ignore\n return PAYMENT_METHODS_CATALOG[scheme] || _default;\n};","import {fetchBusiness} from \"../data/businessApi\";\nimport {ErrorResponse} from \"./errorResponse\";\nimport TonderError from \"../shared/utils/errors\";\nimport {ErrorKeyEnum} from \"../shared/enum/ErrorKeyEnum\";\nimport {\n buildErrorResponse,\n buildErrorResponseFromCatch,\n getBrowserInfo,\n getBusinessId,\n getCardType,\n} from \"../helpers/utils\";\nimport {getCustomerAPMs} from \"../data/api\";\nimport {BaseInlineCheckout} from \"./BaseInlineCheckout\";\nimport {getSkyflowTokens, initSkyflowInstance, mountSkyflowFields} from \"../helpers/skyflow\";\nimport {startCheckoutRouter} from \"../data/checkoutApi\";\nimport {getOpenpayDeviceSessionID} from \"../data/openPayApi\";\nimport {getPaymentMethodDetails} from \"../shared/catalog/paymentMethodsCatalog\";\nimport {APM, IEvents, IInlineLiteCheckoutOptions, InCollectorContainer, TonderAPM} from \"../types/commons\";\nimport {\n ICustomerCardsResponse,\n IMountCardFieldsRequest,\n ISaveCardRequest,\n ISaveCardResponse,\n ISaveCardSkyflowRequest\n} from \"../types/card\";\nimport {IPaymentMethod} from \"../types/paymentMethod\";\nimport {\n CreateOrderResponse,\n CreatePaymentResponse,\n CustomerRegisterResponse,\n GetBusinessResponse,\n IErrorResponse,\n RegisterCustomerCardResponse,\n StartCheckoutResponse\n} from \"../types/responses\";\nimport {\n CreateOrderRequest,\n CreatePaymentRequest,\n RegisterCustomerCardRequest,\n StartCheckoutFullRequest,\n StartCheckoutIdRequest,\n StartCheckoutRequest,\n TokensRequest\n} from \"../types/requests\";\nimport {ICardFields, IStartCheckoutResponse} from \"../types/checkout\";\nimport {ILiteCheckout} from \"../types/liteInlineCheckout\";\nimport CollectorContainer from \"skyflow-js/types/core/external/collect/collect-container\";\nimport Skyflow from \"skyflow-js\";\nimport { buildPublicAppError } from \"../shared/utils/appError\";\nimport { MESSAGES_EN } from \"../shared/constants/messages\";\nimport { SDK_INFO } from \"../helpers/sdkInfo\";\n\ndeclare const MP_DEVICE_SESSION_ID: string | undefined;\n\ndeclare global {\n interface Window {\n OpenPay: any;\n }\n}\n\nexport class LiteCheckout extends BaseInlineCheckout implements ILiteCheckout{\n activeAPMs: APM[] = [];\n private skyflowInstance: Skyflow | null;\n private readonly events: IEvents\n // Store mounted elements by context: 'create' or 'update:card_id'\n private mountedElementsByContext: Map<string, { elements: any[], container: InCollectorContainer | null }> = new Map();\n private customerCardsCache: ICustomerCardsResponse | null = null;\n\n constructor({ apiKey, mode, returnUrl, callBack, apiKeyTonder, baseUrlTonder, customization, collectorIds, events }: IInlineLiteCheckoutOptions) {\n super({\n mode,\n apiKey,\n returnUrl,\n callBack,\n apiKeyTonder,\n baseUrlTonder,\n customization,\n tdsIframeId: collectorIds && 'tdsIframe' in collectorIds ? collectorIds?.tdsIframe : \"tdsIframe\",\n sdkInfo: SDK_INFO,\n });\n this.skyflowInstance = null;\n this.events = events || {}\n }\n\n public async injectCheckout() {\n await this._initializeCheckout();\n }\n\n public async getCustomerCards(): Promise<ICustomerCardsResponse> {\n try {\n await this._fetchMerchantData();\n const { auth_token } = await this._getCustomer();\n const response = await this._getCustomerCards(\n auth_token,\n this.merchantData!.business.pk,\n );\n this.customerCardsCache = response;\n\n return {\n ...response,\n cards: response.cards.map((ic) => ({\n ...ic,\n fields:{\n ...ic.fields,\n subscription_id: this._hasCardOnFileKeys() ? ic.fields.subscription_id : undefined,\n },\n icon: getCardType(ic.fields.card_scheme),\n })),\n };\n } catch (error) {\n this.reportSdkError(error, {\n feature: \"get-cards\",\n process_id: this.getCustomerId(),\n metadata: {\n step: \"getCustomerCards\"\n },\n });\n throw buildPublicAppError(\n {\n errorCode: ErrorKeyEnum.FETCH_CARDS_ERROR,\n },\n error,\n );\n }\n }\n\n public async saveCustomerCard(\n card: ISaveCardRequest,\n ): Promise<ISaveCardResponse> {\n let cardId: string | null = null;\n try {\n await this._fetchMerchantData();\n const customerResponse = await this._getCustomer() as CustomerRegisterResponse;\n const { auth_token, first_name = \"\", last_name = \"\", email = \"\" } = customerResponse;\n const { vault_id, vault_url, business } = this.merchantData!;\n const cardOnFileEnabled = this._hasCardOnFileKeys();\n\n const sanitizedCard = {\n card_number: card.card_number.replace(/\\s+/g, \"\"),\n expiration_month: card.expiration_month.replace(/\\s+/g, \"\"),\n expiration_year: card.expiration_year.replace(/\\s+/g, \"\"),\n cvv: card.cvv.replace(/\\s+/g, \"\"),\n cardholder_name: card.cardholder_name.replace(/\\s+/g, \"\"),\n };\n\n const skyflowTokens: any = await getSkyflowTokens({\n vault_id: vault_id,\n vault_url: vault_url,\n data: sanitizedCard,\n baseUrl: this.baseUrl,\n apiKey: this.apiKeyTonder,\n });\n\n const saveResponse = await this._saveCustomerCard(\n auth_token,\n business?.pk,\n skyflowTokens,\n cardOnFileEnabled,\n );\n cardId = saveResponse.skyflow_id;\n\n if (cardOnFileEnabled) {\n const cardBin = saveResponse.card_bin;\n if (!cardBin) {\n throw new Error(\"Card BIN not returned from save card\");\n }\n\n const cardOnFile = await this._initializeCardOnFile();\n let result;\n try {\n result = await cardOnFile.process({\n cardTokens: {\n name: skyflowTokens.cardholder_name,\n number: skyflowTokens.card_number,\n expiryMonth: skyflowTokens.expiration_month,\n expiryYear: skyflowTokens.expiration_year,\n cvv: skyflowTokens.cvv,\n },\n cardBin,\n contactDetails: {\n firstName: first_name || \"\",\n lastName: last_name || \"\",\n email: email || \"\",\n },\n customerId: auth_token,\n currency: this.currency || \"MXN\",\n });\n } catch (processError) {\n throw buildPublicAppError(\n {\n errorCode: ErrorKeyEnum.SAVE_CARD_ERROR,\n message: MESSAGES_EN[ErrorKeyEnum.CARD_ON_FILE_DECLINED],\n },\n processError,\n );\n }\n\n const updatePayload: ISaveCardSkyflowRequest = {\n skyflow_id: skyflowTokens.skyflow_id,\n subscription_id: result.subscriptionId,\n };\n await this._saveCustomerCard(\n auth_token,\n business?.pk,\n updatePayload,\n );\n }\n\n return saveResponse;\n } catch (error) {\n if(cardId){\n await this.removeCustomerCard(cardId);\n }\n this.reportSdkError(error, {\n feature: \"save-card\",\n process_id: cardId || this.getCustomerId(),\n metadata: {\n step: \"saveCustomerCard\",\n },\n });\n throw buildPublicAppError(\n {\n errorCode: ErrorKeyEnum.SAVE_CARD_ERROR,\n },\n error,\n );\n }\n }\n\n public async removeCustomerCard(skyflowId: string): Promise<string> {\n try {\n await this._fetchMerchantData();\n const { auth_token } = await this._getCustomer();\n const { business } = this.merchantData!;\n\n return await this._removeCustomerCard(\n auth_token,\n business?.pk,\n skyflowId,\n );\n } catch (error) {\n this.reportSdkError(error, {\n feature: \"remove-card\",\n process_id: skyflowId,\n metadata: {\n step: \"removeCustomerCard\"\n },\n });\n throw buildPublicAppError(\n {\n errorCode: ErrorKeyEnum.REMOVE_CARD_ERROR,\n },\n error,\n );\n }\n }\n\n public async getCustomerPaymentMethods(): Promise<IPaymentMethod[]> {\n try {\n const response = await this._fetchCustomerPaymentMethods();\n\n const apms_results =\n response && \"results\" in response && response[\"results\"].length > 0\n ? response[\"results\"]\n : [];\n\n return apms_results\n .filter((apmItem) => apmItem.category.toLowerCase() !== \"cards\")\n .map((apmItem) => {\n const apm = {\n id: apmItem.pk,\n payment_method: apmItem.payment_method,\n priority: apmItem.priority,\n category: apmItem.category,\n ...getPaymentMethodDetails(apmItem.payment_method),\n };\n return apm;\n })\n .sort((a, b) => a.priority - b.priority);\n } catch (error) {\n this.reportSdkError(error, {\n feature: \"get-payment-methods\",\n metadata: {\n step: \"getCustomerPaymentMethods\",\n },\n });\n throw buildPublicAppError(\n {\n errorCode: ErrorKeyEnum.FETCH_PAYMENT_METHODS_ERROR,\n },\n error,\n );\n }\n }\n public async mountCardFields(event: IMountCardFieldsRequest): Promise<void> {\n // Determine the context: 'create' or 'update:card_id'\n const context = event.card_id ? `update:${event.card_id}` : 'create';\n\n const unmountContext: string = event.unmount_context ?? 'all';\n\n if (unmountContext !== 'none') {\n if (unmountContext === 'current') {\n // Unmount only the current context\n this.unmountCardFields(context);\n } else {\n // Unmount specified context ('all', 'create', 'update:card_id', etc.)\n this.unmountCardFields(unmountContext);\n }\n }\n\n await this.createSkyflowInstance();\n const containerData = await mountSkyflowFields({\n skyflowInstance: this.skyflowInstance!,\n data: event,\n customization: this.customization,\n events: this.events,\n });\n\n // Store elements by context for future cleanup\n this.mountedElementsByContext.set(context, {\n elements: containerData.elements || [],\n container: containerData\n });\n }\n\n\n private getContainerByCardId(cardId: string): CollectorContainer | null {\n const context = `update:${cardId}`;\n const contextData = this.mountedElementsByContext.get(context);\n return (contextData?.container?.container as CollectorContainer) || null;\n }\n\n private async collectCardTokens(cardId: string): Promise<Record<string, any> | null> {\n const container = this.getContainerByCardId(cardId);\n if (!container) {\n return null;\n }\n\n try {\n const collectResponse: any = await container.collect();\n return collectResponse?.records?.[0]?.fields || null;\n } catch (e: any) {\n const errorDescription = e?.error?.description;\n this.reportSdkError(e, {\n feature: \"collect-card-tokens\",\n process_id: cardId,\n metadata: {\n step: \"collectCardTokens\",\n },\n });\n throw new TonderError({\n code: ErrorKeyEnum.MOUNT_COLLECT_ERROR,\n details: {\n message: errorDescription\n }\n });\n }\n }\n\n public unmountCardFields(context: string = 'all'): void {\n if (context === 'all') {\n this.mountedElementsByContext.forEach((contextData, ctx) => {\n this.unmountContext(ctx);\n });\n this.mountedElementsByContext.clear();\n } else {\n this.unmountContext(context);\n this.mountedElementsByContext.delete(context);\n }\n }\n\n /**\n * Internal helper to unmount elements from a specific context\n * @private\n */\n private unmountContext(context: string): void {\n const contextData = this.mountedElementsByContext.get(context);\n if (!contextData) return;\n\n const { elements } = contextData;\n if (elements && elements.length > 0) {\n elements.forEach((element) => {\n try {\n if (element && typeof element.unmount === 'function') {\n element.unmount();\n }\n } catch (error) {\n console.warn(`Error unmounting Skyflow element from context '${context}':`, error);\n this.reportSdkError(error, {\n feature: \"unmount-card-fields\",\n metadata: {\n step: \"unmountContext\",\n context,\n },\n });\n }\n });\n }\n }\n\n public async getBusiness(): Promise<GetBusinessResponse> {\n try {\n return await fetchBusiness(\n this.baseUrl,\n this.apiKeyTonder,\n this.abortController.signal,\n );\n } catch (e) {\n this.reportSdkError(e, {\n feature: \"get-business\",\n metadata: {\n step: \"getBusiness\",\n },\n });\n throw buildPublicAppError(\n {\n errorCode: ErrorKeyEnum.FETCH_BUSINESS_ERROR,\n },\n e,\n );\n }\n }\n\n\n private async createSkyflowInstance() {\n if(this.skyflowInstance) return this.skyflowInstance\n await this._fetchMerchantData();\n const { vault_id, vault_url } = this.merchantData!;\n this.skyflowInstance = await initSkyflowInstance({\n vault_id: vault_id,\n vault_url: vault_url,\n baseUrl: this.baseUrl,\n apiKey: this.apiKeyTonder,\n })\n }\n\n // TODO: DEPRECATED\n async getOpenpayDeviceSessionID(\n merchant_id: string,\n public_key: string,\n is_sandbox: boolean,\n ): Promise<string | ErrorResponse> {\n try {\n return await getOpenpayDeviceSessionID(\n merchant_id,\n public_key,\n is_sandbox,\n );\n } catch (e) {\n this.reportSdkError(e, {\n feature: \"get-openpay-device-session\",\n metadata: {\n step: \"getOpenpayDeviceSessionID\",\n },\n });\n throw buildErrorResponseFromCatch(e);\n }\n }\n\n // TODO: DEPRECATED\n async getSkyflowTokens({\n vault_id,\n vault_url,\n data,\n }: TokensRequest): Promise<any | ErrorResponse> {\n return await getSkyflowTokens({\n vault_id: vault_id,\n vault_url: vault_url,\n data,\n baseUrl: this.baseUrl,\n apiKey: this.apiKeyTonder,\n });\n }\n\n _setCartTotal(total: string) {\n this.cartTotal = total;\n }\n\n async _checkout({\n card,\n payment_method,\n isSandbox,\n // TODO: DEPRECATED\n returnUrl: returnUrlData\n }: {\n card?: ICardFields | string;\n payment_method?: string;\n isSandbox?: boolean;\n returnUrl?: string;\n }) {\n await this._fetchMerchantData();\n const customer = await this._getCustomer(this.abortController.signal) as CustomerRegisterResponse;\n const { vault_id, vault_url, business } = this.merchantData!;\n const { auth_token, first_name = \"\", last_name = \"\", email = \"\" } = customer;\n const cardOnFileEnabled = this._hasCardOnFileKeys();\n let skyflowTokens;\n let subscriptionCard: { subscriptionId: string } | null = null;\n let skyflowId: string | null = null;\n let cardTokensForCardOnFile: { name: string; number: string; expiryMonth: string; expiryYear: string; cvv: string } | null = null;\n let shouldProcessCardOnFile = false;\n\n const ensureCustomerCards = async () => {\n if (!this.customerCardsCache?.cards?.length) {\n this.customerCardsCache = await this._getCustomerCards(\n auth_token,\n this.merchantData!.business.pk,\n );\n }\n };\n\n if (!payment_method) {\n if (typeof card === \"string\") {\n skyflowId = card;\n skyflowTokens = {\n skyflow_id: card,\n };\n\n if (cardOnFileEnabled) {\n await ensureCustomerCards();\n const selectedCard = this.customerCardsCache?.cards?.find(\n (item) => item.fields.skyflow_id === card,\n );\n if (!selectedCard) {\n throw new Error(\"Card not found for card-on-file processing\");\n }\n const hasSubscriptionId = !!selectedCard.fields.subscription_id;\n\n if (!hasSubscriptionId) {\n await this.collectCardTokens(card);\n }\n\n if (hasSubscriptionId) {\n subscriptionCard = { subscriptionId: selectedCard.fields.subscription_id! };\n }\n } else {\n await this.collectCardTokens(card);\n }\n } else {\n const sanitizedCard = {\n ...card!,\n card_number: card!.card_number.replace(/\\s+/g, \"\"),\n expiration_month: card!.expiration_month.replace(/\\s+/g, \"\"),\n expiration_year: card!.expiration_year.replace(/\\s+/g, \"\"),\n cvv: card!.cvv.replace(/\\s+/g, \"\"),\n cardholder_name: card!.cardholder_name.replace(/\\s+/g, \"\"),\n };\n skyflowTokens = await getSkyflowTokens({\n vault_id: vault_id,\n vault_url: vault_url,\n data: sanitizedCard,\n baseUrl: this.baseUrl,\n apiKey: this.apiKeyTonder,\n });\n skyflowId = skyflowTokens.skyflow_id;\n\n if (cardOnFileEnabled) {\n cardTokensForCardOnFile = {\n name: skyflowTokens.cardholder_name,\n number: skyflowTokens.card_number,\n expiryMonth: skyflowTokens.expiration_month,\n expiryYear: skyflowTokens.expiration_year,\n cvv: skyflowTokens.cvv,\n };\n shouldProcessCardOnFile = true;\n }\n }\n\n if (shouldProcessCardOnFile) {\n if (!skyflowId || !cardTokensForCardOnFile) {\n throw new Error(\"Missing card data for card-on-file processing\");\n }\n let cardId: string | null = null;\n try {\n const saveResponse = await this._saveCustomerCard(\n auth_token,\n business?.pk,\n { skyflow_id: skyflowId },\n true,\n );\n cardId = saveResponse.skyflow_id;\n const cardBin = saveResponse.card_bin;\n if (!cardBin) {\n throw new Error(\"Card BIN not returned from save card\");\n }\n\n const cardOnFile = await this._initializeCardOnFile();\n let result;\n try {\n result = await cardOnFile.process({\n cardTokens: cardTokensForCardOnFile,\n cardBin,\n contactDetails: {\n firstName: first_name || \"\",\n lastName: last_name || \"\",\n email: email || \"\",\n },\n customerId: auth_token,\n currency: this.currency || \"MXN\",\n });\n } catch (processError) {\n throw buildPublicAppError(\n {\n errorCode: ErrorKeyEnum.PAYMENT_PROCESS_ERROR,\n message: MESSAGES_EN[ErrorKeyEnum.CARD_ON_FILE_DECLINED],\n },\n processError,\n );\n }\n subscriptionCard = { subscriptionId: result.subscriptionId };\n\n await this._saveCustomerCard(\n auth_token,\n business?.pk,\n {\n skyflow_id: skyflowId,\n subscription_id: subscriptionCard.subscriptionId,\n },\n );\n }catch (error) {\n if(cardId){\n await this.removeCustomerCard(cardId)\n }\n this.reportSdkError(error, {\n feature: \"payment\",\n process_id: cardId || this.getCustomerId(),\n metadata: {\n step: \"card_on_file\",\n },\n });\n throw error;\n }\n }\n }\n\n return await this._handleCheckout({\n card: skyflowTokens,\n payment_method,\n customer,\n isSandbox,\n returnUrl: returnUrlData,\n enable_card_on_file: !!subscriptionCard?.subscriptionId && cardOnFileEnabled,\n });\n }\n\n // TODO: DEPRECATED\n async customerRegister(\n email: string,\n ): Promise<CustomerRegisterResponse | ErrorResponse> {\n try {\n const url = `${this.baseUrl}/api/v1/customer/`;\n const data = { email: email };\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Token ${this.apiKeyTonder}`,\n },\n signal: this.abortController.signal,\n body: JSON.stringify(data),\n });\n\n if (response.ok)\n return (await response.json()) as CustomerRegisterResponse;\n throw await buildErrorResponse(response);\n } catch (e) {\n this.reportSdkError(e, {\n feature: \"customer-register\",\n metadata: {\n step: \"customerRegister\",\n },\n });\n throw buildErrorResponseFromCatch(e);\n }\n }\n\n // TODO: DEPRECATED\n async createOrder(\n orderItems: CreateOrderRequest,\n ): Promise<CreateOrderResponse | ErrorResponse> {\n try {\n const url = `${this.baseUrl}/api/v1/orders/`;\n const data = orderItems;\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Token ${this.apiKeyTonder}`,\n },\n body: JSON.stringify(data),\n });\n if (response.ok) return (await response.json()) as CreateOrderResponse;\n throw await buildErrorResponse(response);\n } catch (e) {\n this.reportSdkError(e, {\n feature: \"create-order\",\n metadata: {\n step: \"createOrder\",\n },\n });\n throw buildErrorResponseFromCatch(e);\n }\n }\n\n // TODO: DEPRECATED\n async createPayment(\n paymentItems: CreatePaymentRequest,\n ): Promise<CreatePaymentResponse | ErrorResponse> {\n try {\n const url = `${this.baseUrl}/api/v1/business/${paymentItems.business_pk}/payments/`;\n const data = paymentItems;\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Token ${this.apiKeyTonder}`,\n },\n body: JSON.stringify(data),\n });\n if (response.ok) return (await response.json()) as CreatePaymentResponse;\n throw await buildErrorResponse(response);\n } catch (e) {\n this.reportSdkError(e, {\n feature: \"create-payment\",\n metadata: {\n step: \"createPayment\",\n },\n });\n throw buildErrorResponseFromCatch(e);\n }\n }\n\n // TODO: DEPRECATED\n async startCheckoutRouter(\n routerData: StartCheckoutRequest | StartCheckoutIdRequest,\n ): Promise<StartCheckoutResponse | ErrorResponse | undefined> {\n const checkoutResult = await startCheckoutRouter(\n this.baseUrl,\n this.apiKeyTonder,\n routerData,\n );\n const payload = await this.init3DSRedirect(checkoutResult);\n if (payload) return checkoutResult;\n }\n\n // TODO: DEPRECATED\n async init3DSRedirect(checkoutResult: IStartCheckoutResponse) {\n this.process3ds.setPayload(checkoutResult);\n return await this._handle3dsRedirect(checkoutResult);\n }\n\n // TODO: DEPRECATED\n async startCheckoutRouterFull(\n routerFullData: StartCheckoutFullRequest,\n ): Promise<StartCheckoutResponse | ErrorResponse | undefined> {\n try {\n const {\n order,\n total,\n customer,\n skyflowTokens,\n return_url,\n isSandbox,\n metadata,\n currency,\n payment_method,\n } = routerFullData;\n\n const merchantResult = await this._fetchMerchantData();\n\n const customerResult: CustomerRegisterResponse | ErrorResponse =\n await this.customerRegister(customer.email);\n\n if (\n customerResult &&\n \"auth_token\" in customerResult &&\n merchantResult &&\n \"reference\" in merchantResult\n ) {\n const orderData: CreateOrderRequest = {\n business: this.apiKeyTonder,\n client: customerResult.auth_token,\n billing_address_id: null,\n shipping_address_id: null,\n amount: total,\n reference: merchantResult.reference,\n is_oneclick: true,\n items: order.items,\n };\n\n const orderResult = await this.createOrder(orderData);\n\n const now = new Date();\n\n const dateString = now.toISOString();\n\n if (\n \"id\" in orderResult &&\n \"id\" in customerResult &&\n \"business\" in merchantResult\n ) {\n const paymentItems: CreatePaymentRequest = {\n business_pk: merchantResult.business.pk,\n amount: total,\n date: dateString,\n order_id: orderResult.id,\n client_id: customerResult.id,\n };\n\n const paymentResult = await this.createPayment(paymentItems);\n\n let deviceSessionIdTonder: any;\n\n const { openpay_keys, business } = merchantResult;\n\n if (openpay_keys.merchant_id && openpay_keys.public_key) {\n deviceSessionIdTonder = await getOpenpayDeviceSessionID(\n openpay_keys.merchant_id,\n openpay_keys.public_key,\n isSandbox,\n );\n }\n\n const routerItems: StartCheckoutRequest = {\n name: customer.name,\n last_name: customer.lastname,\n email_client: customer.email,\n phone_number: customer.phone,\n return_url: return_url,\n id_product: \"no_id\",\n quantity_product: 1,\n id_ship: \"0\",\n instance_id_ship: \"0\",\n amount: total,\n title_ship: \"shipping\",\n description: \"transaction\",\n device_session_id: deviceSessionIdTonder\n ? deviceSessionIdTonder\n : null,\n token_id: \"\",\n order_id: \"id\" in orderResult && orderResult.id,\n business_id: business.pk,\n payment_id: \"pk\" in paymentResult && paymentResult.pk,\n source: \"sdk\",\n metadata: metadata,\n browser_info: getBrowserInfo(),\n currency: currency,\n ...(!!payment_method\n ? { payment_method }\n : { card: skyflowTokens }),\n ...(typeof MP_DEVICE_SESSION_ID !== \"undefined\"\n ? { mp_device_session_id: MP_DEVICE_SESSION_ID }\n : {}),\n };\n\n const checkoutResult = await startCheckoutRouter(\n this.baseUrl,\n this.apiKeyTonder,\n routerItems,\n );\n const payload = await this.init3DSRedirect(checkoutResult);\n if (payload) return checkoutResult;\n } else {\n throw new ErrorResponse({\n code: \"500\",\n body: orderResult as any,\n name: \"Keys error\",\n message: \"Order response errors\",\n } as IErrorResponse);\n }\n } else {\n throw new ErrorResponse({\n code: \"500\",\n body: merchantResult as any,\n name: \"Keys error\",\n message: \"Merchant or customer reposne errors\",\n } as IErrorResponse);\n }\n } catch (e) {\n this.reportSdkError(e, {\n feature: \"start-checkout-router-full\",\n metadata: {\n step: \"startCheckoutRouterFull\",\n },\n });\n throw buildErrorResponseFromCatch(e);\n }\n }\n\n // TODO: DEPRECATED\n async registerCustomerCard(\n secureToken: string,\n customerToken: string,\n data: RegisterCustomerCardRequest,\n ): Promise<RegisterCustomerCardResponse | ErrorResponse> {\n try {\n await this._fetchMerchantData();\n\n const response = await fetch(\n `${this.baseUrl}/api/v1/business/${getBusinessId(this.merchantData)}/cards/`,\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${secureToken}`,\n \"User-token\": customerToken,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ ...data }),\n },\n );\n\n if (response.ok)\n return (await response.json()) as RegisterCustomerCardResponse;\n throw await buildErrorResponse(response);\n } catch (error) {\n this.reportSdkError(error, {\n feature: \"register-customer-card\",\n metadata: {\n step: \"registerCustomerCard\",\n },\n });\n throw buildErrorResponseFromCatch(error);\n }\n }\n\n // TODO: DEPRECATED\n async deleteCustomerCard(\n customerToken: string,\n skyflowId: string = \"\",\n ): Promise<Boolean | ErrorResponse> {\n try {\n await this._fetchMerchantData();\n const response = await fetch(\n `${this.baseUrl}/api/v1/business/${getBusinessId(this.merchantData)}/cards/${skyflowId}`,\n {\n method: \"DELETE\",\n headers: {\n Authorization: `Token ${customerToken}`,\n \"Content-Type\": \"application/json\",\n },\n signal: this.abortController.signal,\n },\n );\n\n if (response.ok) return true;\n throw await buildErrorResponse(response);\n } catch (error) {\n this.reportSdkError(error, {\n feature: \"delete-customer-card\",\n process_id: skyflowId,\n metadata: {\n step: \"deleteCustomerCard\",\n },\n });\n throw buildErrorResponseFromCatch(error);\n }\n }\n\n // TODO: DEPRECATED\n async getActiveAPMs(): Promise<APM[]> {\n try {\n const apms_response = await getCustomerAPMs(\n this.baseUrl,\n this.apiKeyTonder,\n );\n const apms_results =\n apms_response &&\n apms_response[\"results\"] &&\n apms_response[\"results\"].length > 0\n ? apms_response[\"results\"]\n : [];\n this.activeAPMs = apms_results\n .filter(\n (apmItem: TonderAPM) => apmItem.category.toLowerCase() !== \"cards\",\n )\n .map((apmItem: TonderAPM) => {\n const apm: APM = {\n id: apmItem.pk,\n payment_method: apmItem.payment_method,\n priority: apmItem.priority,\n category: apmItem.category,\n ...getPaymentMethodDetails(apmItem.payment_method),\n };\n return apm;\n })\n .sort((a: APM, b: APM) => a.priority - b.priority);\n\n return this.activeAPMs;\n } catch (e) {\n console.error(\"Error getting APMS\", e);\n return [];\n }\n }\n}\n","import { buildErrorResponse, buildErrorResponseFromCatch } from \"../helpers/utils\";\n\nexport async function getCustomerAPMs(baseUrlTonder: string, publicApiKeyTonder: string, query: string = \"?status=active&page_size=10000&country=México\", signal: AbortSignal | null | undefined = null) {\n try {\n const response = await fetch(\n `${baseUrlTonder}/api/v1/payment_methods${query}`,\n {\n method: 'GET',\n headers: {\n Authorization: `Token ${publicApiKeyTonder}`,\n 'Content-Type': 'application/json'\n },\n signal\n });\n\n if (response.ok) return await response.json();\n throw await buildErrorResponse(response);\n } catch (error) {\n throw buildErrorResponseFromCatch(error);\n }\n}","export function validateCardNumber(cardNumber: string) {\n const regex = /^\\d{12,19}$/;\n return regex.test(cardNumber) && luhnCheck(cardNumber);\n}\n\nexport function validateCardholderName(name: string) {\n const regex = /^([a-zA-Z\\\\ \\\\,\\\\.\\\\-\\\\']{2,})$/;\n return regex.test(name);\n}\n\nexport function validateCVV(cvv: string) {\n const regex = /^\\d{3,4}$/;\n return regex.test(cvv);\n}\n\nexport function validateExpirationDate(expirationDate: string) {\n const regex = /^(0[1-9]|1[0-2])\\/\\d{2}$/;\n if (!regex.test(expirationDate)) {\n return false;\n }\n const [month, year] = expirationDate.split(\"/\");\n const currentDate = new Date();\n // @ts-ignore\n const expiration = new Date(`20${year}`, month - 1);\n return expiration >= currentDate;\n}\n\nexport function validateExpirationMonth(month: string) {\n const regex = /^(0[1-9]|1[0-2])$/;\n return regex.test(month);\n}\n\nexport function validateExpirationYear(year: string) {\n const regex = /^\\d{2}$/;\n if (!regex.test(year)) {\n return false;\n }\n const currentYear = new Date().getFullYear() % 100;\n return parseInt(year, 10) >= currentYear;\n}\n\nconst luhnCheck = (num: number | string) => {\n const arr = `${num}`\n .split(\"\")\n .reverse()\n .map((x) => Number.parseInt(x));\n const lastDigit = arr.shift();\n let sum = arr.reduce(\n (acc, val, i) =>\n i % 2 !== 0 ? acc + val : acc + ((val *= 2) > 9 ? val - 9 : val),\n 0,\n );\n sum += lastDigit!;\n return sum % 10 === 0;\n};\n"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__classPrivateFieldGet","receiver","state","kind","f","TypeError","has","call","get","__classPrivateFieldSet","set","fetchBusiness","baseUrl","apiKey","signal","getBusiness","fetch","headers","Authorization","json","SuppressedError","ErrorResponse","constructor","code","body","name","message","stack","this","ErrorKeyEnum","MESSAGES_EN","INIT_ERROR","INVALID_TYPE","STATE_ERROR","FETCH_BUSINESS_ERROR","INVALID_CONFIG","MERCHANT_CREDENTIAL_REQUIRED","INVALID_PAYMENT_REQUEST","INVALID_PAYMENT_REQUEST_CARD_PM","TYPE_SDK_REQUIRED","ENVIRONMENT_REQUIRED","FETCH_CARDS_ERROR","CUSTOMER_AUTH_TOKEN_NOT_VALID","SAVE_CARD_ERROR","REMOVE_CARD_ERROR","CREATE_PAYMENT_ERROR","PAYMENT_PROCESS_ERROR","CARD_SAVED_SUCCESSFULLY","CARD_REMOVED_SUCCESSFULLY","SAVE_CARD_PROCESS_ERROR","START_CHECKOUT_ERROR","CREATE_ORDER_ERROR","BUSINESS_ID_REQUIRED","CLIENT_ID_REQUIRED","INVALID_AMOUNT","INVALID_ITEMS","CUSTOMER_OPERATION_ERROR","INVALID_EMAIL","FETCH_PAYMENT_METHODS_ERROR","INVALID_VAULT_TOKEN","VAULT_TOKEN_ERROR","SECURE_TOKEN_ERROR","SECURE_TOKEN_INVALID","INVALID_SECRET_API_KEY","REMOVE_CARD","SKYFLOW_NOT_INITIALIZED","ERROR_LOAD_PAYMENT_FORM","INVALID_CARD_DATA","ERROR_LOAD_ENROLLMENT_FORM","MOUNT_COLLECT_ERROR","CARD_ON_FILE_DECLINED","REQUEST_ABORTED","REQUEST_FAILED","UNKNOWN_ERROR","CREATE_ERROR","FETCH_TRANSACTION_ERROR","THREEDS_REDIRECTION_ERROR","REMOVE_SDK_ERROR","TonderError","Error","params","resolvedMessage","super","details","_a","_b","getBrowserInfo","javascript_enabled","time_zone","Date","getTimezoneOffset","language","navigator","color_depth","window","screen","colorDepth","screen_width","width","devicePixelRatio","screen_height","height","user_agent","userAgent","getBusinessId","merchantData","business","pk","buildErrorResponseFromCatch","status","undefined","buildErrorResponse","response","toString","text","detail","ThreeDSHandler","payload","redirectOnComplete","tdsIframeId","tonderPayButtonId","callBack","localStorageKey","setPayload","setStorageItem","data","localStorage","setItem","JSON","stringify","getStorageItem","getItem","removeStorageItem","removeItem","saveVerifyTransactionUrl","url","_c","next_action","redirect_to_url","verify_transaction_status_url","saveUrlWithExpiration","_f","_e","_d","iframe_resources","console","log","item","expires","getTime","error","getUrlWithExpiration","parse","removeVerifyTransactionUrl","getVerifyTransactionUrl","loadIframe","iframe","container","document","createElement","innerHTML","appendChild","script","textContent","iframeElement","getElementById","onload","getRedirectUrl","redirectToChallenge","location","querySelector","setAttribute","self","listenerHandler","event","executeAction","selector","disabled","removeEventListener","chainPromises","promise","transaction_status","checkStatus","timer","setTimeout","clearTimeout","requestTransactionStatus","addEventListener","verifyUrl","startsWith","method","getURLParameters","parameters","urlParams","URLSearchParams","search","key","handleSuccessTransaction","handleDeclinedTransaction","handle3dsChallenge","response_json","form","action","redirect_post_url","creqInput","type","creq","termUrlInput","term_url","TermUrl","submit","verifyTransactionStatus","handleTransactionResponse","includes","TONDER_URL_BY_MODE","Object","freeze","production","sandbox","stage","development","startCheckoutRouter","routerItems","assign","MP_DEVICE_SESSION_ID","mp_device_session_id","errorResponse","getOpenpayDeviceSessionID","merchant_id","public_key","isSandbox","openpay","OpenPay","setId","setApiKey","setSandboxMode","deviceData","setup","API_BASE_URL_BY_MODE","API_ENDPOINTS","TELEMETRY","ACQ_SUBSCRIPTION_TOKEN","ACQ_SUBSCRIPTION_CREATE","getTelemetryEndpoint","mode","ACQUIRER_SCRIPT_URL","acquirerScriptLoaded","acquirerScriptPromise","CardOnFile","config","acquirerInstance","isTestEnvironment","apiUrl","getApiBaseUrl","merchantId","initialize","src","async","onerror","head","loadAcquirerScript","Kushki","inTestEnvironment","createAcquirerInstance","getAcquirerInstance","getJwt","cardBin","acquirer","requestSecureInit","card","number","successResponse","jwt","generateToken","request","ok","errorText","createSubscription","validate3DS","secureId","security","requestValidate3DS","validResponse","isValid","process","tokenResponse","cardTokens","currency","token","contactDetails","metadata","customerId","SdkTelemetryClient","REQUEST_TIMEOUT_MS","MAX_MESSAGE_LENGTH","captureException","context","buildEvent","sendEvent","extractErrorInfo","truncate","stringified","safeStringify","obj","seen","WeakSet","add","String","errorInfo","href","platform","platform_version","env","feature","level","tenant_id","process_id","user_id","error_code","http_status","str","maxLength","length","substring","sendHttpRequest","catch","controller","AbortController","timeoutId","abort","endpoint","keepalive","fetchError","SDK_INFO","version","AppError","resolvedStatusCode","parseStatusCode","statusCode","resolveMessage","errorCode","setPrototypeOf","prototype","baseDetails","systemCode","resolvedSystemError","extractSystemError","systemError","captureStackTrace","parsed","Number","isFinite","Math","trunc","isHttpStatusCode","resolveSystemError","trim","appErrorInput","cause","candidates","candidate","resolved","buildPublicAppError","hasDataDetails","keys","hasOverrides","resolvedDetails","CardFieldEnum","BaseInlineCheckout","customization","apiKeyTonder","returnUrl","baseUrlTonder","sdkInfo","cartTotal","secureToken","order_reference","cardOnFileInstance","_BaseInlineCheckout_apm_config","_BaseInlineCheckout_customerData","customer","abortController","process3ds","resolvedSdkInfo","telemetry","configureCheckout","_BaseInlineCheckout_instances","_BaseInlineCheckout_setSecureToken","_BaseInlineCheckout_setCheckoutData","getCustomerId","id","reportSdkError","err","extra","defaultUserId","verify3dsTransaction","result3ds","resultCheckout","_BaseInlineCheckout_resumeCheckout","_handle3dsRedirect","payment","_checkout","payment_id","getSecureToken","secretApikey","_initializeCheckout","business_response","_fetchMerchantData","mercado_pago","active","injectMercadoPagoSecurity","_hasCardOnFileKeys","_initializeCardOnFile","_setCartTotal","total","_getCustomer","email","first_name","firstName","last_name","lastName","phone","statusText","registerOrFetchCustomer","_handleCheckout","payment_method","enable_card_on_file","returnUrlData","openpay_keys","reference","orderItems","paymentItems","deviceSessionIdTonder","auth_token","client","billing_address_id","shipping_address_id","amount","is_oneclick","items","cartItems","jsonResponseOrder","createOrder","dateString","toISOString","business_pk","client_id","date","order_id","customer_order_reference","jsonResponsePayment","createPayment","email_client","phone_number","return_url","id_product","quantity_product","id_ship","instance_id_ship","title_ship","description","device_session_id","token_id","business_id","source","browser_info","apm_config","identification","jsonResponseRouter","_getCustomerCards","authToken","businessId","customerToken","cards","fetchCustomerCards","_saveCustomerCard","skyflowTokens","appOrigin","saveCustomerCard","_removeCustomerCard","skyflowId","removeCustomerCard","_fetchCustomerPaymentMethods","pagesize","queryString","fetchCustomerPaymentMethods","cardonfile_keys","getVaultToken","cart","_BaseInlineCheckout_setCartItems","_BaseInlineCheckout_handleMetadata","_BaseInlineCheckout_handleCurrency","_BaseInlineCheckout_handleCard","_BaseInlineCheckout_handleApmConfig","decline","error_type","checkout","is_route_finished","checkout_id","lengthMatchRule","Skyflow","ValidationRuleType","LENGTH_MATCH_RULE","max","regexEmpty","RegExp","regexMatchRule","REGEX_MATCH_RULE","regex","DEFAULT_SKYFLOW_lABELS","DEFAULT_SKYFLOW_PLACEHOLDERS","DEFAULT_SKYFLOW_INPUT_STYLES","base","border","padding","borderRadius","color","marginTop","backgroundColor","fontFamily","fontSize","complete","invalid","empty","focus","global","DEFAULT_SKYFLOW_lABEL_STYLES","fontWeight","DEFAULT_SKYFLOW_ERROR_TEXT_STYLES","getSkyflowTokens","vault_id","vault_url","collectContainer","init","vaultID","vaultURL","getBearerToken","options","logLevel","LogLevel","ERROR","Env","DEV","ContainerType","COLLECT","fieldPromises","fields","all","map","element","create","table","column","ElementType","INPUT_FIELD","getFields","field","div","hidden","mount","setInterval","isMounted","setValue","getFieldsPromise","some","collectResponseSkyflowTonder","collect","handleSkyflowElementEvents","fieldMessage","errorStyles","requiredMessage","invalidMessage","events","on","EventName","CHANGE","executeEvent","eventName","updateErrorLabel","BLUR","msj_error","isEmpty","setError","FOCUS","resetError","update","errorTextStyles","eventHandler","elementType","isFocused","tryMountElement","containerId","retries","delay","i","warn","PAYMENT_METHOD_APM","SORIANA","OXXO","OXXOPAY","SPEI","CODI","MERCADOPAGO","PAYPAL","COMERCIALMEXICANA","BANCOMER","WALMART","BODEGA","SAMSCLUB","SUPERAMA","CALIMAX","EXTRA","CIRCULOK","SEVEN11","TELECOMM","BANORTE","BENAVIDES","DELAHORRO","ELASTURIANO","WALDOS","ALSUPER","KIOSKO","STAMARIA","LAMASBARATA","FARMROMA","FARMUNION","FARMATODO","SFDEASIS","FARM911","FARMECONOMICAS","FARMMEDICITY","RIANXEIRA","WESTERNUNION","ZONAPAGO","CAJALOSANDES","CAJAPAITA","CAJASANTA","CAJASULLANA","CAJATRUJILLO","EDPYME","KASNET","NORANDINO","QAPAQ","RAIZ","PAYSER","WUNION","BANCOCONTINENTAL","GMONEY","GOPAY","WU","PUNTOSHEY","AMPM","JUMBOMARKET","SMELPUEBLO","BAM","REFACIL","ACYVALORES","PAYMENT_METHODS_CATALOG","label","icon","getPaymentMethodDetails","scheme_data","scheme","toUpperCase","replace","LiteCheckout","collectorIds","tdsIframe","activeAPMs","mountedElementsByContext","Map","customerCardsCache","skyflowInstance","injectCheckout","getCustomerCards","ic","subscription_id","card_scheme","cardId","customerResponse","cardOnFileEnabled","sanitizedCard","card_number","expiration_month","expiration_year","cvv","cardholder_name","saveResponse","skyflow_id","card_bin","cardOnFile","expiryMonth","expiryYear","processError","updatePayload","subscriptionId","getCustomerPaymentMethods","filter","apmItem","category","toLowerCase","priority","sort","a","b","mountCardFields","card_id","unmountContext","unmount_context","unmountCardFields","createSkyflowInstance","containerData","elements","typeByField","CVV","CARD_NUMBER","EXPIRATION_MONTH","EXPIRATION_YEAR","CARDHOLDER_NAME","validationsByField","customStyles","styles","cardForm","inputStyles","labelStyles","labels","_g","_h","_j","expiration_date","_k","expiry_date","_l","_m","placeholders","_o","_p","_q","_r","_s","eventsByField","cvvEvents","cardNumberEvents","monthEvents","yearEvents","cardHolderEvents","Array","isArray","validations","placeholder","skyflowID","push","fieldObj","container_id","mountSkyflowFields","getContainerByCardId","contextData","collectCardTokens","collectResponse","records","errorDescription","forEach","ctx","clear","delete","unmount","initSkyflowInstance","is_sandbox","subscriptionCard","cardTokensForCardOnFile","shouldProcessCardOnFile","ensureCustomerCards","selectedCard","find","hasSubscriptionId","customerRegister","routerData","checkoutResult","init3DSRedirect","startCheckoutRouterFull","routerFullData","order","merchantResult","customerResult","orderData","orderResult","paymentResult","lastname","registerCustomerCard","deleteCustomerCard","getActiveAPMs","apms_response","publicApiKeyTonder","query","getCustomerAPMs","apms_results","validateCardNumber","cardNumber","test","luhnCheck","validateCardholderName","validateCVV","validateExpirationMonth","month","validateExpirationYear","year","currentYear","getFullYear","parseInt","num","arr","split","reverse","x","lastDigit","shift","sum","reduce","acc","val"],"mappings":"uDAkHO,SAASA,EAAUC,EAASC,EAAYC,EAAGC,GAE9C,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAUC,GAAS,IAAMC,EAAKN,EAAUO,KAAKF,GAAQ,CAAG,MAAOG,GAAKL,EAAOK,GAAO,CAC3F,SAASC,EAASJ,GAAS,IAAMC,EAAKN,EAAiB,MAAEK,GAAU,CAAC,MAAOG,GAAKL,EAAOK,GAAO,CAC9F,SAASF,EAAKI,GAJlB,IAAeL,EAIaK,EAAOC,KAAOT,EAAQQ,EAAOL,QAJ1CA,EAIyDK,EAAOL,MAJhDA,aAAiBN,EAAIM,EAAQ,IAAIN,GAAE,SAAUG,GAAWA,EAAQG,EAAO,KAIhBO,KAAKR,EAAWK,EAAY,CAC9GH,GAAMN,EAAYA,EAAUa,MAAMhB,EAASC,GAAc,KAAKS,OACtE,GACA,CA0JO,SAASO,EAAuBC,EAAUC,EAAOC,EAAMC,GAC1D,GAAa,MAATD,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,4EACvG,MAAgB,MAATF,EAAeC,EAAa,MAATD,EAAeC,EAAEG,KAAKN,GAAYG,EAAIA,EAAEb,MAAQW,EAAMM,IAAIP,EACxF,CAEO,SAASQ,EAAuBR,EAAUC,EAAOX,EAAOY,EAAMC,GACjE,GAAa,MAATD,EAAc,MAAM,IAAIE,UAAU,kCACtC,GAAa,MAATF,IAAiBC,EAAG,MAAM,IAAIC,UAAU,iDAC5C,GAAqB,mBAAVH,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMI,IAAIL,GAAW,MAAM,IAAII,UAAU,2EACvG,MAAiB,MAATF,EAAeC,EAAEG,KAAKN,EAAUV,GAASa,EAAIA,EAAEb,MAAQA,EAAQW,EAAMQ,IAAIT,EAAUV,GAASA,CACxG,UC7RsBoB,EACpBC,EACAC,EACAC,4CAEA,MAAMC,QAAoBC,MACxB,GAAGJ,8BAAoCC,IACvC,CACEI,QAAS,CACPC,cAAe,SAASL,KAE1BC,OAAQA,IAGZ,aAAaC,EAAYI,SAC1B,CD0SiD,mBAApBC,iBAAiCA,sBEzTlDC,EAOT,WAAAC,EAAYC,KAAEA,EAAIC,KAAEA,EAAIC,KAAEA,EAAIC,QAAEA,EAAOC,MAAEA,IACrCC,KAAKL,KAAOA,EACZK,KAAKJ,KAAOA,EACZI,KAAKH,KAAOA,EACZG,KAAKF,QAAUA,EACfE,KAAKD,MAAQA,CAChB,ECfL,IAAYE,GAAZ,SAAYA,GACVA,EAAA,WAAA,aACAA,EAAA,aAAA,eACAA,EAAA,iBAAA,mBACAA,EAAA,aAAA,eACAA,EAAA,YAAA,cACAA,EAAA,qBAAA,uBACAA,EAAA,eAAA,iBACAA,EAAA,6BAAA,+BACAA,EAAA,wBAAA,0BACAA,EAAA,gCAAA,kCACAA,EAAA,kBAAA,oBACAA,EAAA,qBAAA,uBACAA,EAAA,kBAAA,oBACAA,EAAA,wBAAA,0BACAA,EAAA,8BAAA,gCACAA,EAAA,gBAAA,kBACAA,EAAA,kBAAA,oBACAA,EAAA,mBAAA,qBACAA,EAAA,qBAAA,uBACAA,EAAA,sBAAA,wBACAA,EAAA,kBAAA,oBACAA,EAAA,wBAAA,0BACAA,EAAA,qBAAA,uBACAA,EAAA,mBAAA,qBACAA,EAAA,qBAAA,uBACAA,EAAA,mBAAA,qBACAA,EAAA,eAAA,iBACAA,EAAA,cAAA,gBACAA,EAAA,yBAAA,2BACAA,EAAA,cAAA,gBACAA,EAAA,4BAAA,8BACAA,EAAA,oBAAA,sBACAA,EAAA,kBAAA,oBACAA,EAAA,mBAAA,qBACAA,EAAA,qBAAA,uBACAA,EAAA,uBAAA,yBACAA,EAAA,YAAA,cACAA,EAAA,wBAAA,0BACAA,EAAA,wBAAA,0BACAA,EAAA,2BAAA,6BACAA,EAAA,oBAAA,sBACAA,EAAA,sBAAA,wBACAA,EAAA,wBAAA,0BACAA,EAAA,0BAAA,4BACAA,EAAA,gBAAA,kBACAA,EAAA,eAAA,iBACAA,EAAA,cAAA,gBACAA,EAAA,0BAAA,2BACD,CAjDD,CAAYA,IAAAA,EAiDX,CAAA,ICjCM,MAAMC,EAAsC,CAC/C,CAACD,EAAaE,YAAa,8BAC3B,CAACF,EAAaG,cAAe,oBAC7B,CAACH,EAAaI,aAAc,4BAC5B,CAACJ,EAAaK,sBAAuB,yCACrC,CAACL,EAAaM,gBAAiB,kCAC/B,CAACN,EAAaO,8BAA+B,gCAC7C,CAACP,EAAaQ,yBACV,qDACJ,CAACR,EAAaS,iCACV,kEACJ,CAACT,EAAaU,mBAAoB,qBAClC,CAACV,EAAaW,sBAAuB,wBACrC,CAACX,EAAaY,mBAAoB,0BAClC,CAACZ,EAAaa,+BACV,8IACJ,CAACb,EAAac,iBAAkB,yBAChC,CAACd,EAAae,mBAAoB,2BAClC,CAACf,EAAagB,sBAAuB,8BACrC,CAAChB,EAAaiB,uBACV,6CACJ,CAACjB,EAAakB,yBAA0B,2BACxC,CAAClB,EAAamB,2BAA4B,6BAC1C,CAACnB,EAAaoB,yBAA0B,8BACxC,CAACpB,EAAaqB,sBAAuB,gCACrC,CAACrB,EAAasB,oBAAqB,4BACnC,CAACtB,EAAauB,sBAAuB,2BACrC,CAACvB,EAAawB,oBAAqB,yBACnC,CAACxB,EAAayB,gBAAiB,kBAC/B,CAACzB,EAAa0B,eAAgB,iBAC9B,CAAC1B,EAAa2B,0BACV,yCACJ,CAAC3B,EAAa4B,eAAgB,iBAC9B,CAAC5B,EAAa6B,6BACV,2CACJ,CAAC7B,EAAa8B,qBACV,gDACJ,CAAC9B,EAAa+B,mBAAoB,oCAClC,CAAC/B,EAAagC,oBAAqB,8BACnC,CAAChC,EAAaiC,sBAAuB,wBACrC,CAACjC,EAAakC,wBAAyB,8BACvC,CAAClC,EAAamC,aAAc,4BAC5B,CAACnC,EAAaoC,yBAA0B,2BACxC,CAACpC,EAAaqC,yBACV,+CACJ,CAACrC,EAAasC,mBAAoB,qBAClC,CAACtC,EAAauC,4BACV,4CACJ,CAACvC,EAAawC,qBACV,6DACJ,CAACxC,EAAayC,uBACV,yDACJ,CAACzC,EAAa0C,iBAAkB,qBAChC,CAAC1C,EAAa2C,gBAAiB,kBAC/B,CAAC3C,EAAa4C,eAAgB,gCAC9B,CAAC5C,EAAa6C,cAAe,0BAC7B,CAAC7C,EAAa8C,yBAA0B,oCACxC,CAAC9C,EAAa+C,2BACV,kDACJ,CAAC/C,EAAagD,kBACV,qDAIHhD,EAAaE,WACbF,EAAaI,YACbJ,EAAaK,qBAEbL,EAAaM,eACbN,EAAaU,kBACbV,EAAaW,qBACbX,EAAaY,kBACbZ,EAAac,gBACbd,EAAae,kBACbf,EAAagB,qBACbhB,EAAaqB,qBACbrB,EAAasB,mBACbtB,EAAauB,qBACbvB,EAAawB,mBACbxB,EAAayB,eACbzB,EAAa0B,cACb1B,EAAa2B,yBAEb3B,EAAa4B,cACb5B,EAAa6B,4BAEb7B,EAAa8B,oBAEb9B,EAAa+B,kBACb/B,EAAagC,mBACbhC,EAAakC,uBACblC,EAAaa,8BAEbb,EAAaiC,qBACbjC,EAAamC,YACbnC,EAAaoC,wBACbpC,EAAaG,aACbH,EAAaiB,sBACbjB,EAAaQ,wBAEbR,EAAaS,gCAEbT,EAAaoB,wBAEbpB,EAAaqC,wBAEbrC,EAAasC,kBACbtC,EAAauC,2BAEbvC,EAAawC,oBAEbxC,EAAayC,sBAEbzC,EAAakB,wBACblB,EAAamB,0BACbnB,EAAa0C,gBACb1C,EAAa2C,eACb3C,EAAa4C,cACb5C,EAAa6C,aACb7C,EAAa8C,wBACb9C,EAAa+C,0BAEb/C,EAAagD,iBClIlB,MAAMC,UAAoBC,MAGtB,WAAAzD,CAAY0D,WACR,MAAMC,EACFD,EAAOtD,SAAWI,EAAYkD,EAAOzD,OAAS,gBAClD2D,MAAMD,GACNrD,KAAKH,KAAO,cACZG,KAAKL,KAAOyD,EAAOzD,KACnBK,KAAKuD,QAAU,CACX5D,MAAoB,QAAd6D,EAAAJ,EAAOG,eAAO,IAAAC,OAAA,EAAAA,EAAE7D,OAAQyD,EAAOzD,KACrCG,SAAuB,QAAd2D,EAAAL,EAAOG,eAAO,IAAAE,OAAA,EAAAA,EAAE3D,UAAWuD,EAE3C,EClBE,MAAMK,EAAiB,KACR,CAClBC,oBAAoB,EACpBC,WAAW,IAAIC,MAAOC,oBACtBC,SAAUC,UAAUD,UAAY,QAChCE,YAAaC,OAAOC,OAASD,OAAOC,OAAOC,WAAa,KACxDC,aAAcH,OAAOC,OACjBD,OAAOC,OAAOG,MAAQJ,OAAOK,kBAAoBL,OAAOC,OAAOG,MAC/D,KACJE,cAAeN,OAAOC,OAClBD,OAAOC,OAAOM,OAASP,OAAOK,kBAAoBL,OAAOC,OAAOM,OAChE,KACJC,WAAYV,UAAUW,YAKbC,EAAiBC,UAC5B,OAAOA,GAAgB,aAAcA,EACX,QAAtBrB,EAAAqB,eAAAA,EAAcC,gBAAQ,IAAAtB,OAAA,EAAAA,EAAEuB,GACxB,EAAE,EAEFC,EAA+BlH,GACrB,IAAI2B,EAAc,CAC9BE,MAAM7B,aAAA,EAAAA,EAAGmH,QAASnH,EAAEmH,OAASnH,EAAE6B,KAC/BC,KAAM9B,aAAA,EAAAA,EAAG8B,KACTC,KAAM/B,EAAiB,iBAALA,EAAgB,QAAWA,EAAY+B,KAAQ,QACjEC,QAAShC,EAAiB,iBAALA,EAAgBA,EAAKA,EAAYgC,QAAW,QACjEC,MAAmB,iBAALjC,OAAgBoH,EAAapH,EAAYiC,QAMrDoF,EAAqB,CACzBC,EACArF,OAA4BmF,IACFhI,OAAA,OAAA,OAAA,GAAA,YAC1B,IAAI0C,EACFqF,EACAnF,EAAU,QAERsF,GAAY,SAAUA,IACxBxF,QAAawF,aAAA,EAAAA,EAAU7F,QAGrB6F,GAAY,WAAYA,IAC1BH,EAASG,EAASH,OAAOI,aAGtBzF,GAAQwF,GAAY,SAAUA,IACjCtF,QAAgBsF,EAASE,SAGvB1F,aAAI,EAAJA,EAAM2F,UACRzF,EAAUF,EAAK2F,QAUjB,OARc,IAAI9F,EAAc,CAC9BE,KAAMsF,EACNrF,KAAMA,EACNC,KAAMoF,EACNnF,QAASA,EACTC,SAIJ,UC3DayF,EAWX,WAAA9F,EAAY+F,QACVA,EAAU,KAAIxG,OACdA,EAAMD,QACNA,EAAO0G,mBACPA,EAAkBC,YAClBA,EAAWC,kBACXA,EAAiBC,SACjBA,IAZF7F,KAAe8F,gBAAW,gCAiT1B9F,KAAA+F,WAAcN,IACZzF,KAAKyF,QAAUA,CAAO,EApStBzF,KAAKhB,QAAUA,EACfgB,KAAKf,OAASA,EACde,KAAKyF,QAAUA,EACfzF,KAAK2F,YAAcA,EACnB3F,KAAK4F,kBAAoBA,EACzB5F,KAAK0F,mBAAqBA,EAC1B1F,KAAK6F,SAAWA,CACjB,CAED,cAAAG,CAAgBC,GACd,OAAOC,aAAaC,QAAQnG,KAAK8F,gBAAiBM,KAAKC,UAAUJ,GAClE,CAED,cAAAK,GACE,OAAOJ,aAAaK,QAAQvG,KAAK8F,gBAClC,CAED,iBAAAU,GACE,OAAON,aAAaO,WAAWzG,KAAK8F,gBACrC,CAED,wBAAAY,mBACE,MAAMC,EAAgD,QAA1CC,EAAyB,QAAzBnD,EAAY,UAAZzD,KAAKyF,eAAO,IAAAjC,OAAA,EAAAA,EAAEqD,mBAAW,IAAApD,OAAA,EAAAA,EAAEqD,uBAAe,IAAAF,OAAA,EAAAA,EAAEG,8BACxD,GAAIJ,EACF3G,KAAKgH,sBAAsBL,OACtB,CACL,MAAMA,EAAiD,QAA3CM,EAAyB,QAAzBC,EAAY,UAAZlH,KAAKyF,eAAO,IAAA0B,OAAA,EAAAA,EAAEN,mBAAW,IAAAK,OAAA,EAAAA,EAAEE,wBAAgB,IAAAH,OAAA,EAAAA,EAAEF,8BACrDJ,EACF3G,KAAKgH,sBAAsBL,GAE3BU,QAAQC,IAAI,yCAEf,CACF,CAED,qBAAAN,CAAsBL,GACpB,IACE,MACMY,EAAO,CACXZ,IAAKA,EAELa,SAJU,IAAI3D,MAID4D,UAAY,MAE3BzH,KAAKgG,eAAeuB,EACrB,CAAC,MAAOG,GACRL,QAAQC,IAAI,UAAWI,EACvB,CACF,CAED,oBAAAC,GACE,MAAM1C,EAASjF,KAAKsG,iBACpB,GAAGrB,EAAQ,CACT,MAAMsC,EAAOnB,KAAKwB,MAAM3C,GACtB,IAAKsC,EAAM,OAEX,OADY,IAAI1D,MACR4D,UAAYF,EAAKC,SACvBxH,KAAK6H,6BACE,MAEAN,EAAKZ,GAEjB,CACC,OAAO,IAEV,CAED,0BAAAkB,GACE,OAAO7H,KAAKwG,mBACb,CAED,uBAAAsB,GACE,OAAO9H,KAAKsG,gBACb,CAED,UAAAyB,aAGE,GAF0D,QAA3CnB,EAAyB,QAAzBnD,EAAY,UAAZzD,KAAKyF,eAAO,IAAAjC,OAAA,EAAAA,EAAEqD,mBAAW,IAAApD,OAAA,EAAAA,EAAE2D,wBAAgB,IAAAR,OAAA,EAAAA,EAAEoB,OAG1D,OAAO,IAAIzK,SAAQ,CAACC,EAASC,eAC3B,MAAMuK,EAAoD,QAA3CpB,EAAyB,QAAzBnD,EAAY,UAAZzD,KAAKyF,eAAO,IAAAjC,OAAA,EAAAA,EAAEqD,mBAAW,IAAApD,OAAA,EAAAA,EAAE2D,wBAAgB,IAAAR,OAAA,EAAAA,EAAEoB,OAE5D,GAAIA,EAAQ,CACVhI,KAAK0G,2BACL,MAAMuB,EAAYC,SAASC,cAAc,OACzCF,EAAUG,UAAYJ,EACtBE,SAAStI,KAAKyI,YAAYJ,GAG1B,MAAMK,EAASJ,SAASC,cAAc,UACtCG,EAAOC,YAAc,sDACrBN,EAAUI,YAAYC,GAGtB,MAAME,EAAgBN,SAASO,eAAe,sBAC3CD,EACDA,EAAcE,OAAS,IAAMlL,GAAQ,IAErC6J,QAAQC,IAAI,wBACZ7J,GAAO,GAEV,MACC4J,QAAQC,IAAI,wBACZ7J,GAAO,EACR,GAGN,CAED,cAAAkL,aACE,OAAmD,QAA5C/B,EAA2B,QAA3BnD,EAAc,QAAdD,EAAAxD,KAAKyF,eAAS,IAAAjC,OAAA,EAAAA,EAAAqD,mBAAa,IAAApD,OAAA,EAAAA,EAAAqD,uBAAiB,IAAAF,OAAA,EAAAA,EAAAD,GACpD,CAED,mBAAAiC,GACE,MAAMjC,EAAM3G,KAAK2I,iBACjB,GAAIhC,EAEA,GADF3G,KAAK0G,2BACA1G,KAAK0F,mBACNxB,OAAO2E,SAAWlC,MACb,CACL,MAAMqB,EAASE,SAASY,cAAc,IAAI9I,KAAK2F,eAC/C,GAAGqC,EAAQ,CAETA,EAAOe,aAAa,MAAOpC,GAC3BqB,EAAOe,aAAa,QAAS,kBAE7B,MAAMC,EAAOhJ,KAEPiJ,EAAyBC,GAAchM,EAAA8C,UAAA,OAAA,GAAA,YAC3C,MAEMmJ,EAAgB,KACpB,IACE,MAAMC,EAAgBlB,SAASY,cAAc,IAAI9I,KAAK4F,qBACnDwD,IACDA,EAASC,UAAW,EAEvB,CAAC,MAAM7F,GAAE,CACPwE,GACDA,EAAOe,aAAa,QAAS,iBAE5BC,EAAKnD,UAAUmD,EAAKnD,SAASmD,EAAKvD,SACrCuC,EAAOsB,oBAAoB,OAAQL,EAAgB,EAG/CM,EAAuBC,GAAyBtM,EAAA8C,UAAA,OAAA,GAAA,YACpD,MAAMhC,QAAe,IAAIT,SAAQ,CAACC,EAASC,IAAWD,EAAQgM,KAC9D,GAAGxL,EAAQ,CACT,GAnBgB,CAACA,GAA+C,aAA/BA,aAAA,EAAAA,EAAQyL,oBAmBtCC,CAAY1L,GACb,OAAOmL,IACF,CACL,MAAMQ,EAAQC,YAAW,IAAW1M,EAAA8C,UAAA,OAAA,GAAA,YAClC6J,aAAaF,SACPJ,EAAcP,EAAKc,2BAC3B,KAAG,IACJ,CACF,CACH,UAEMP,EAAcP,EAAKc,2BAC3B,IAEA9B,EAAO+B,iBAAiB,OAAQd,EAEjC,MACC5B,QAAQC,IAAI,kBAEf,MAECtH,KAAK6F,UAAU7F,KAAK6F,SAAU7F,KAAKyF,QAE1C,CAEK,wBAAAqE,4CAEJ,MAAME,EAAYhK,KAAK2H,uBACjBhB,EAAMqD,EAAUC,WAAW,YAAcD,EAAY,GAAGhK,KAAKhB,UAAUgL,IACvE5E,QAAiBhG,MAAMuH,EAAK,CAChCuD,OAAQ,MACR7K,QAAS,CACP,eAAgB,mBAChBC,cAAe,SAASU,KAAKf,YAKjC,GAAwB,MAApBmG,EAASH,OAEX,OADAoC,QAAQK,MAAM,4CACP,KAGP,aAD4BtC,EAAS7F,SAIxC,CAKD,gBAAA4K,GACE,MAAMC,EAAkB,CAAA,EAClBC,EAAiB,IAAIC,gBAAgBpG,OAAO2E,SAAS0B,QAE3D,IAAK,MAAOC,EAAK7M,KAAU0M,EACzBD,EAAWI,GAAO7M,EAGpB,OAAOyM,CACR,CAED,wBAAAK,CAAyBrF,GAEvB,OADApF,KAAK6H,6BACEzC,CACR,CAED,yBAAAsF,CAA0BtF,GAExB,OADApF,KAAK6H,6BACEzC,CACR,CAIK,kBAAAuF,CAAmBC,4CAEvB,MAAMC,EAAO3C,SAASC,cAAc,QACpC0C,EAAKhL,KAAO,MACZgL,EAAKX,OAAS,OACdW,EAAKC,OAASF,EAAcG,kBAG5B,MAAMC,EAAY9C,SAASC,cAAc,SACzC6C,EAAUC,KAAO,SACjBD,EAAUnL,KAAO+K,EAAcM,KAC/BF,EAAUrN,MAAQiN,EAAcM,KAChCL,EAAKxC,YAAY2C,GAEjB,MAAMG,EAAejD,SAASC,cAAc,SAC5CgD,EAAaF,KAAO,SACpBE,EAAatL,KAAQ+K,EAAcQ,SACnCD,EAAaxN,MAAQiN,EAAcS,QACnCR,EAAKxC,YAAY8C,GAGjBjD,SAAStI,KAAKyI,YAAYwC,GAC1BA,EAAKS,eAECtL,KAAKuL,4BACZ,CAGK,yBAAAC,CAA0BpG,4CAC9B,MAAMwF,QAAsBxF,EAAS7F,OACrC,MAA6B,YAAzBqL,EAAc3F,QAAyB2F,EAAcG,wBAC1C/K,KAAK2K,mBAAmBC,GAC5B,CAAC,UAAW,cAAca,SAASb,EAAc3F,QACnDjF,KAAKyK,yBAAyBG,IAErC5K,KAAK0K,0BAA0BtF,GACxBwF,KAEV,CAEK,uBAAAW,4CACJ,MAAMvB,EAAYhK,KAAK2H,uBACvB,GAAIqC,EAAW,CACb,MAAMrD,EAAMqD,EAAUC,WAAW,YAAcD,EAAY,GAAGhK,KAAKhB,UAAUgL,IAC7E,IACE,MAAM5E,QAAiBhG,MAAMuH,EAAK,CAChCuD,OAAQ,MACR7K,QAAS,CACP,eAAgB,mBAChBC,cAAe,SAASU,KAAKf,YAKjC,OAAwB,MAApBmG,EAASH,QACXoC,QAAQK,MAAM,4CACd1H,KAAK6H,6BACEzC,SAGIpF,KAAKwL,0BAA0BpG,EAC7C,CAAC,MAAOsC,GACPL,QAAQK,MAAM,qCAAsCA,GACpD1H,KAAK6H,4BACN,CACF,MACCR,QAAQC,IAAI,4CAEf,EC/TH,MAAMoE,EAAqBC,OAAOC,OAAO,CACvCC,WAAY,wBACZC,QAAS,4BACTC,MAAO,0BACPC,YAAa,mCC8COC,EACpBjN,EACAC,EACAiN,4CAEA,IACE,MAAMvF,EAAM,GAAG3H,4BACTiH,EAAOiG,EACP9G,QAAiBhG,MAAMuH,EAAK,CAChCuD,OAAQ,OACR7K,QAAS,CACP,eAAgB,mBAChBC,cAAe,SAASL,KAE1BW,KAAMwG,KAAKC,UAASsF,OAAAQ,OAAAR,OAAAQ,OAAA,GACflG,GACiC,oBAAzBmG,qBACP,CAAEC,qBAAsBD,sBACxB,CAAA,MAGR,GAAIhH,EAASH,QAAU,KAAOG,EAASH,QAAU,IAC/C,aAAaG,EAAS7F,OACjB,CACL,MAAM+M,QAAsBlH,EAAS7F,OAC/BmI,EAAQ,IAAIvE,MAAM,mCAGxB,MADAuE,EAAMnE,QAAU+I,EACV5E,CACP,CACF,CAAC,MAAOA,GACP,MAAMA,CACP,IACF,CCnFK,SAAgB6E,EACpBC,EACAC,EACAC,GAAqB,EACrBxN,EAA6B,+CAE7B,IAAIyN,QAAgBzI,OAAO0I,QAI3B,OAHAD,EAAQE,MAAML,GACdG,EAAQG,UAAUL,GAClBE,EAAQI,eAAeL,SACVC,EAAQK,WAAWC,MAAM,CAAE/N,aACzC,CCRM,MAAMgO,EAAuBvB,OAAOC,OAAO,CAChDC,WAAY,wBACZC,QAAS,8BACTC,MAAO,8BACPC,YAAa,gCAMFmB,EAAgBxB,OAAOC,OAAO,CACzCwB,UAAW,uBACXC,uBAAwB,iCACxBC,wBAAyB,oCAMX,SAAAC,EACdC,EAA2D,SAG3D,MAAO,GADSN,EAAqBM,KACjBL,EAAcC,WACpC,CCLA,MAAMK,EAAsB,4CAE5B,IAAIC,GAAuB,EACvBC,EAA8C,WAwDrCC,EAOX,WAAAlO,CAAYmO,SAFJ7N,KAAgB8N,iBAA4B,KAOlD9N,KAAK+N,kBAAgD,QAA5BvK,EAAAqK,EAAOE,yBAAqB,IAAAvK,GAAAA,EAErD,MAAMgK,EAAOxN,KAAK+N,kBAAoB,QAAU,aAChD/N,KAAKgO,ODhEO,SACdR,EAA2D,SAE3D,OAAON,EAAqBM,EAC9B,CC4DkBS,CAAcT,GAC5BxN,KAAKkO,WAAaL,EAAOK,WACzBlO,KAAKf,OAAS4O,EAAO5O,MACtB,CAEK,UAAAkP,kDA1ER,oDACE,OAAIT,EACKnQ,QAAQC,UAGbmQ,IAIJA,EAAwB,IAAIpQ,SAAQ,CAACC,EAASC,KAG5C,GAFuByK,SAASY,cAAc,eAAe2E,OAK3D,OAFAC,GAAuB,OACvBlQ,IAIF,MAAM8K,EAASJ,SAASC,cAAc,UACtCG,EAAO8F,IAAMX,EACbnF,EAAO+F,OAAQ,EAEf/F,EAAOI,OAAS,KACdgF,GAAuB,EACvBlQ,GAAS,EAGX8K,EAAOgG,QAAU,KACfX,EAAwB,KACxBlQ,EAAO,IAAI0F,MAAM,kCAAkC,EAGrD+E,SAASqG,KAAKlG,YAAYC,EAAO,IAG5BqF,KACR,CAuCSa,GACNxO,KAAK8N,iBAtCT,SACEI,EACAH,GAEA,IAAK7J,OAAOuK,OACV,MAAM,IAAItL,MAAM,wDAGlB,OAAO,IAAIe,OAAOuK,OAAO,CACvBP,aACAQ,kBAAmBX,GAEvB,CA0B4BY,CACtB3O,KAAKkO,WACLlO,KAAK+N,qBAER,CAEO,mBAAAa,GACN,IAAK5O,KAAK8N,iBACR,MAAM,IAAI3K,MAAM,wDAElB,OAAOnD,KAAK8N,gBACb,CAMK,MAAAe,CAAOC,4CACX,MAAMC,EAAW/O,KAAK4O,sBAEtB,OAAO,IAAIrR,SAAgB,CAACC,EAASC,KACnCsR,EAASC,kBACP,CACEC,KAAM,CACJC,OAAQJ,KAGX1J,IACC,GAAI,SAAUA,GAAYA,EAASzF,KAEjC,YADAlC,EAAO,IAAI0F,MAAM,sBAAsBiC,EAAStF,YAIlD,MAAMqP,EAAkB/J,EACnB+J,EAAgBC,IAKrB5R,EAAQ2R,EAAgBC,KAJtB3R,EAAO,IAAI0F,MAAM,iCAIS,GAE/B,MAEJ,CAKK,aAAAkM,CAAcC,4CAClB,MAAMlK,QAAiBhG,MACrB,GAAGY,KAAKgO,SAASb,EAAcE,yBAC/B,CACEnD,OAAQ,OACR7K,QAAS,CACP,eAAgB,mBAChBC,cAAe,SAASU,KAAKf,UAE/BW,KAAMwG,KAAKC,UAAUiJ,KAIzB,IAAKlK,EAASmK,GAAI,CAChB,MAAMC,QAAkBpK,EAASE,OACjC,MAAM,IAAInC,MAAM,6BAA6BiC,EAASH,YAAYuK,IACnE,CAED,OAAOpK,EAAS7F,SACjB,CAKK,kBAAAkQ,CAAmBH,4CACvB,MAAMlK,QAAiBhG,MACrB,GAAGY,KAAKgO,SAASb,EAAcG,0BAC/B,CACEpD,OAAQ,OACR7K,QAAS,CACP,eAAgB,mBAChBC,cAAe,SAASU,KAAKf,UAE/BW,KAAMwG,KAAKC,UAAUiJ,KAIzB,IAAKlK,EAASmK,GAAI,CAChB,MAAMC,QAAkBpK,EAASE,OACjC,MAAM,IAAInC,MAAM,kCAAkCiC,EAASH,YAAYuK,IACxE,CAED,OAAOpK,EAAS7F,SACjB,CAMK,WAAAmQ,CACJC,EACAC,4CAEA,MAAMb,EAAW/O,KAAK4O,sBAEtB,OAAO,IAAIrR,SAAiB,CAACC,EAASC,KACpCsR,EAASc,mBACP,CACEF,WACAC,aAEDxK,IACC,MAAM0K,EAAgB1K,EAElB0K,EAAcnQ,MAA+B,WAAvBmQ,EAAcnQ,KACtClC,EAAO,IAAI0F,MAAM,4BAKW,IAA1B2M,EAAcC,QAKlBvS,GAAQ,GAJNC,EAAO,IAAI0F,MAAM,yBAIN,GAEhB,MAEJ,CAKK,OAAA6M,CAAQ5M,oDACZ,MAAMgM,QAAYpP,KAAK6O,OAAOzL,EAAO0L,SAC/BmB,QAAsBjQ,KAAKqP,cAAc,CAC7CJ,KAAM7L,EAAO8M,WACbC,SAAU/M,EAAO+M,SACjBf,QAGIO,EAAWM,EAAcN,WAAmC,QAAvBnM,EAAAyM,EAAc1M,eAAS,IAAAC,OAAA,EAAAA,EAAAmM,UAC5DC,EAAWK,EAAcL,WAAmC,QAAvBnM,EAAAwM,EAAc1M,eAAS,IAAAE,OAAA,EAAAA,EAAAmM,UAGlE,IAAKD,IAAaC,EAChB,MAAM,IAAIzM,MAAM,kDAOlB,aAHMnD,KAAK0P,YAAYC,EAAUC,GAG1B5P,KAAKyP,mBAAmB,CAC7BW,MAAOH,EAAcG,MACrBC,eAAgBjN,EAAOiN,eACvBC,SAAU,CACRC,WAAYnN,EAAOmN,YAErBJ,SAAU/M,EAAO+M,aAEpB,QCxPUK,EAKX,WAAA9Q,CAAYmO,GAHK7N,KAAkByQ,mBAAG,KACrBzQ,KAAkB0Q,mBAAG,IAGpC1Q,KAAK6N,OAASA,CACf,CAOM,gBAAA8C,CAAiBjJ,EAAgBkJ,GACtC,IACE,MAAM1H,EAAQlJ,KAAK6Q,WAAWnJ,EAAOkJ,GAAW,CAAA,GAGhD5Q,KAAK8Q,UAAU5H,EAChB,CAAC,MAAOpL,GAER,CACF,CAKO,gBAAAiT,CAAiBrJ,GACvB,IACE,GAAIA,aAAiBvE,MACnB,MAAO,CACLtD,KAAM6H,EAAM7H,MAAQ,QACpBC,QAASE,KAAKgR,SAAStJ,EAAM5H,SAAW,gBAAiBE,KAAK0Q,oBAC9D3Q,MAAO2H,EAAM3H,YAASmF,GAK1B,MAAM+L,EAAcjR,KAAKkR,cAAcxJ,GACvC,MAAO,CACL7H,KAAM,oBACNC,QAASE,KAAKgR,SAASC,EAAajR,KAAK0Q,oBACzC3Q,WAAOmF,EAEV,CAAC,MAAOpH,GACP,MAAO,CACL+B,KAAM,qBACNC,QAAS,4BACTC,WAAOmF,EAEV,CACF,CAKO,aAAAgM,CAAcC,GACpB,IACE,MAAMC,EAAO,IAAIC,QACjB,OAAOjL,KAAKC,UAAU8K,GAAK,CAAC3G,EAAK7M,KAC/B,GAAqB,iBAAVA,GAAgC,OAAVA,EAAgB,CAC/C,GAAIyT,EAAK1S,IAAIf,GACX,MAAO,aAETyT,EAAKE,IAAI3T,EACV,CACD,OAAOA,CAAK,GAEf,CAAC,MAAOG,GACP,OAAOyT,OAAOJ,EACf,CACF,CAKO,UAAAN,CAAWnJ,EAAgBkJ,GACjC,MAAMY,EAAYxR,KAAK+Q,iBAAiBrJ,GAGlC4I,EACD3E,OAAAQ,OAAA,CAAA,EAACyE,EAAQN,UAAY,CAAA,GAIJ,oBAAXpM,SACToM,EAAS3J,IAAMzC,OAAO2E,SAAS4I,MAIjC,MAAMvI,EAAyB,CAC7BwI,SAAU1R,KAAK6N,OAAO6D,SACtBC,iBAAkB3R,KAAK6N,OAAO8D,iBAC9BC,IAAK5R,KAAK6N,OAAOL,KACjBqE,QAASjB,EAAQiB,SAAW,UAC5BC,MAAO,QACPhS,QAAS0R,EAAU1R,QACnBD,KAAM2R,EAAU3R,KAChByQ,YAWF,OAPIM,EAAQmB,YAAW7I,EAAM6I,UAAYnB,EAAQmB,WAC7CnB,EAAQoB,aAAY9I,EAAM8I,WAAapB,EAAQoB,YAC/CpB,EAAQqB,UAAS/I,EAAM+I,QAAUrB,EAAQqB,SACzCT,EAAUzR,QAAOmJ,EAAMnJ,MAAQyR,EAAUzR,OACzC6Q,EAAQsB,aAAYhJ,EAAMgJ,WAAatB,EAAQsB,YAC/CtB,EAAQuB,cAAajJ,EAAMiJ,YAAcvB,EAAQuB,aAE9CjJ,CACR,CAKO,QAAA8H,CAASoB,EAAaC,GAC5B,OAAID,EAAIE,QAAUD,EAAkBD,EAC7BA,EAAIG,UAAU,EAAGF,GAAa,KACtC,CAKO,SAAAvB,CAAU5H,GAEhBlJ,KAAKwS,gBAAgBtJ,GAClBhL,MAAK,SACLuU,OAAM,QAGV,CAKa,eAAAD,CAAgBtJ,4CAC5B,IACE,MAAMzD,EAAUW,KAAKC,UAAU6C,GAUzBwJ,EAAa,IAAIC,gBACjBC,EAAYhJ,YAAW,IAAM8I,EAAWG,SAAS7S,KAAKyQ,oBAE5D,IACE,MAAMrL,QAAiBhG,MAAMY,KAAK6N,OAAOiF,SAAU,CACjD5I,OAAQ,OACR7K,QAAS,CACP,eAAgB,mBAChBC,cAAe,SAASU,KAAK6N,OAAO5O,UAEtCW,KAAM6F,EACNsN,WAAW,EACX7T,OAAQwT,EAAWxT,SAIrB,OADA2K,aAAa+I,GACNxN,EAASmK,EACjB,CAAC,MAAOyD,GAEP,OADAnJ,aAAa+I,IACN,CACR,CACF,CAAC,MAAO9U,GACP,OAAO,CACR,IACF,ECpLI,MAAMmV,EAAWtH,OAAOC,OAAO,CACpC/L,KAAM,4BACNqT,QAAS,2BCGL,MAAOC,UAAiBhQ,MAM1B,WAAAzD,CAAYgI,SACR,MAAM0L,EAAqBD,EAASE,gBAAgB3L,EAAM4L,YAM1DhQ,MALwB6P,EAASI,eAC7B7L,EAAM8L,UACN9L,EAAM5H,UATEE,KAAMiF,OAAY,QAc9B0G,OAAO8H,eAAezT,gBAAiB0T,WAEvC1T,KAAKH,KAAO,cACZG,KAAKL,KAAO+H,EAAM8L,UAClBxT,KAAKsT,WAAaF,EAClB,MAAMO,EACChI,OAAAQ,OAAA,CAAA,EAACzE,EAAMnE,SAAW,CAAA,UAElBoQ,EAAYC,WACnB,MAAMC,EAAsBV,EAASW,mBAAmBpM,EAAOiM,GAC/D3T,KAAKuD,QACEoI,OAAAQ,OAAAR,OAAAQ,OAAA,CAAA,EAAAwH,IACHhU,KAAM+H,EAAM8L,UACZF,WAAYF,IAEhBpT,KAAKuD,QAAQwQ,YAAcF,EAEJ,QAAvBrQ,EAAAL,MAAM6Q,yBAAiB,IAAAxQ,GAAAA,EAAA7E,KAAAwE,MAAGnD,KAAMmT,EACnC,CAEM,sBAAOE,CAAgB1T,GAC1B,MAAMsU,EAASC,OAAOvU,GACtB,OAAKuU,OAAOC,SAASF,GACjBA,EAAS,KAAOA,EAAS,IAAY,IAClCG,KAAKC,MAAMJ,GAFmB,GAGxC,CAEM,qBAAOV,CAAeC,EAAmB1T,GAC5C,OAAIA,IAEAI,EAAYsT,IACZtT,EAAYD,EAAa4C,gBACzB,gCAEP,CAEM,uBAAOyR,CAAiB3W,GAC3B,MAAMsW,EAASC,OAAOvW,GACtB,OAAOuW,OAAOC,SAASF,IAAWA,GAAU,KAAOA,GAAU,GAChE,CAEM,yBAAOM,CAAmB5W,GAC7B,MAAqB,iBAAVA,EAA2B,KAC/BA,EAAM6W,MAChB,CAEM,yBAAOV,CACVW,EACAlR,aAEA,MAAMmR,EAAQnR,aAAA,EAAAA,EAASmR,MACjBC,EAAwB,CAC1BpR,aAAA,EAAAA,EAASwQ,oBACTvQ,EAAAiR,aAAa,EAAbA,EAAelR,8BAASwQ,oBACxBtQ,EAAAiR,aAAK,EAALA,EAAO9U,2BAAMD,aACbiH,EAAA8N,aAAK,EAALA,EAAOnR,8BAAS5D,MAGpB,IAAK,MAAMiV,KAAaD,EAAY,CAChC,MAAME,EAAW1B,EAASoB,mBAAmBK,GAC7C,GAAIC,EAAU,OAAOA,CACxB,CAED,MAvFqB,kBAwFxB,EAUW,SAAAC,EACZ7O,EACAyB,SAEA,KAAKzB,aAAA,EAAAA,EAAMuN,WACP,MAAM,IAAIrQ,MAAM,0CAGpB,MAAM4R,IAAmB9O,EAAK1C,SAAWoI,OAAOqJ,KAAK/O,EAAK1C,SAAS+O,OAAS,EACtE2C,EACFhP,EAAKuN,aAAc9L,aAAK,EAALA,EAAO/H,SACxBsG,EAAKnG,cACaoF,IAApBe,EAAKqN,YACLyB,EAEJ,GAAIrN,aAAiByL,IAAa8B,EAC9B,OAAOvN,EAGX,MAAM0L,UACF5P,EAAAyC,EAAKqN,0BACJH,EAASmB,iBAAiB5M,eAAAA,EAAO4L,YAC5BY,OAAOxM,EAAM4L,YACbH,EAASmB,iBAAiB5M,aAAA,EAAAA,EAAO/H,MAC7BuU,OAAOxM,EAAM/H,MACbwT,EAASmB,iBAAiB5M,aAAA,EAAAA,EAAOzC,QAC7BiP,OAAOxM,EAAMzC,QACb,IAEZiQ,kCACExN,aAAA,EAAAA,EAAOnE,UAAW,CAAE,GACpB0C,EAAK1C,SAAW,CAAA,GAOxB,YAJ8B2B,IAA1BgQ,EAAgBR,YAAiCxP,IAAVwC,IACvCwN,EAAgBR,MAAQhN,GAGrB,IAAIyL,EAAS,CAChBK,UAAWvN,EAAKuN,UAChB1T,QAASmG,EAAKnG,QACdyD,QAAS2R,EACT5B,WAAYF,GAEpB,6BCtGY+B,QCFCC,EA4BX,WAAA1V,EAAY8N,KACVA,EAAO,QAAO6H,cACdA,EAAapW,OACbA,EAAMqW,aACNA,EAAYC,UACZA,EAAS5P,YACTA,EAAWE,SACXA,EAAW,SAAQ2P,cACnBA,EAAa5P,kBACbA,EAAiB6P,QACjBA,gBArCFzV,KAAOhB,QAAG,GACVgB,KAAS0V,UAAoB,IAU7B1V,KAAW2V,YAAW,GAEtB3V,KAAAqV,cAAoB,CAClB3P,oBAAoB,GAItB1F,KAAQsQ,SAAG,GACXtQ,KAAe4V,gBAAmB,KAClC5V,KAAIiP,KAAI,GACRjP,KAAQmQ,SAAY,GACVnQ,KAAkB6V,mBAAsB,KAElDC,EAAmDhX,IAAAkB,UAAA,GACnD+V,EAAoCjX,IAAAkB,UAAA,GAclCA,KAAKsV,aAAeA,GAAgBrW,GAAU,GAC9Ce,KAAKuV,UAAYA,EACjBvV,KAAK6F,SAAWA,EAChB7F,KAAKwN,KAAOA,EACZxN,KAAKgW,SAAW,GAChBhW,KAAKhB,QAAUwW,GAAiB9J,EAAmB1L,KAAKwN,OAAS9B,EAA0B,MAC3F1L,KAAKiW,gBAAkB,IAAItD,gBAC3B3S,KAAKqV,cACA1J,OAAAQ,OAAAR,OAAAQ,OAAA,CAAA,EAAAnM,KAAKqV,eACJA,GAAiB,CAAE,GAGzBrV,KAAKkW,WAAa,IAAI1Q,EAAe,CACnCvG,OAAQA,EACRD,QAASgB,KAAKhB,QACd0G,mBAAoB1F,KAAKqV,cAAc3P,mBACvCC,YAAaA,EACbC,kBAAmBA,EACnBC,SAAUA,IAEZ7F,KAAK2F,YAAcA,EAEnB,MAAMwQ,EAAkBV,GAAWxC,EAGnCjT,KAAKoW,UAAY,IAAI5F,EAAmB,CACtCsC,SAAUvF,EAAqBvN,KAAKwN,MACpCvO,OAAQe,KAAKsV,aACb5D,SAAUyE,EAAgBtW,KAC1B8R,iBAAkBwE,EAAgBjD,QAClC1F,KAAMxN,KAAKwN,MAAQ,SAEtB,CAED,iBAAA6I,CAAkBpQ,GACZ,gBAAiBA,GAAM7H,EAAA4B,KAAoBsW,EAAA,IAAAC,GAAA5X,KAApBqB,KAAqBiG,EAAkB,aAClE7H,EAAA4B,KAAqBsW,EAAA,IAAAE,GAAA7X,KAArBqB,KAAsBiG,EACvB,CAKS,aAAAwQ,WACR,OAA6B,QAAtBhT,UAAAD,EAAApF,EAAA4B,KAAI+V,EAAA,2BAAgBW,UAAE,IAAAjT,OAAA,EAAAA,EAAE4B,UAChC,CAMS,cAAAsR,CAAeC,EAAcC,aACrC,IACE,MAAMC,EAAgB9W,KAAKyW,gBACrB7F,EAAOjF,OAAAQ,OAAA,CACX4F,UAA4C,QAAjCnL,EAA6B,QAA7BnD,EAAmB,QAAnBD,EAAAxD,KAAK6E,oBAAc,IAAArB,OAAA,EAAAA,EAAAsB,gBAAU,IAAArB,OAAA,EAAAA,EAAAsB,UAAI,IAAA6B,OAAA,EAAAA,EAAAvB,WAC5C4M,QAAS6E,GACLD,GAAS,CAAA,GAGVjG,EAAQqB,gBAAgBrB,EAAQqB,QACrCrB,EAAQiB,SAAUgF,aAAK,EAALA,EAAOhF,UAAW,UAEpC7R,KAAKoW,UAAUzF,iBAAiBiG,EAAKhG,EACtC,CAAC,MAAO9S,GAER,CACF,CAEK,oBAAAiZ,4CACJ,MAAMC,QAAkBhX,KAAKkW,WAAW3K,0BAClC0L,QAAuB7Y,EAAA4B,KAAoBsW,EAAA,IAAAY,GAAAvY,KAApBqB,KAAqBgX,GAElD,OADAhX,KAAKkW,WAAWnQ,WAAWkR,GACpBjX,KAAKmX,mBAAmBF,KAChC,CAED,OAAAG,CAAQnR,GACN,OAAO,IAAI1I,SAAQ,CAAOC,EAASC,IAAUP,EAAA8C,UAAA,OAAA,GAAA,oBAC3C,IAAIoF,EACJ,IACEhH,EAAA4B,KAAqBsW,EAAA,IAAAE,GAAA7X,KAArBqB,KAAsBiG,GACtBb,QAAiBpF,KAAKqX,UAAUpR,GAChCjG,KAAKkW,WAAWnQ,WAAWX,GAE3B,SADsBpF,KAAKmX,mBAAmB/R,GACjC,CACX,IACE,MAAMgE,EAAgBlB,SAASY,cAAc,IAAI9I,KAAK4F,qBACnDwD,IACDA,EAASC,UAAW,EAEvB,CAAC,MAAMzC,GAAE,CACN5G,KAAK6F,UAAU7F,KAAK6F,SAAUT,GAClC5H,EAAQ4H,EACT,CACF,CAAC,MAAOsC,GACP1H,KAAK2W,eAAejP,EAAO,CACzBmK,QAAS,UACTG,YAAY5M,aAAA,EAAAA,EAAUkS,cAAkC,QAAnB9T,EAAA4B,aAAA,EAAAA,EAAUgS,eAAS,IAAA5T,OAAA,EAAAA,EAAAkT,MAAuB,UAAjBtR,aAAQ,EAARA,EAAUgS,eAAO,IAAA3T,OAAA,EAAAA,EAAEsB,IACjFuL,SAAU,CACR1S,KAAM,UACN0R,QAASrJ,EACTb,cAGJ3H,EACEqX,EACE,CACEtB,UAAWvT,EAAaiB,uBAE1BwG,GAGL,CACF,KACF,CAEK,cAAA6P,CAAeC,4CACnB,IACE,aChMA,SACJxY,EACAoR,EACAlR,EAAS,+CAET,IACE,MAAMkG,QAAiBhG,MAAM,GAAGJ,sBAA6B,CAC3DkL,OAAQ,OACR7K,QAAS,CACPC,cAAe,SAAS8Q,IACxB,eAAgB,oBAElBlR,WAGF,GAAIkG,EAASmK,GAAI,aAAcnK,EAAS7F,OACxC,YAAY4F,EAAmBC,EAChC,CAAC,MAAOsC,GACP,MAAM1C,EAA4B0C,EACnC,IACF,CD4KkB6P,CAAevX,KAAKhB,QAASwY,EAC3C,CAAC,MAAO9P,GAOP,MANA1H,KAAK2W,eAAejP,EAAO,CACzBmK,QAAS,eACTvB,SAAU,CACR1S,KAAM,oBAGJkX,EACJ,CACEtB,UAAWvT,EAAagC,oBAE1ByF,EAEH,IACF,CAEK,mBAAA+P,4CACJ,MAAMC,QAA0B1X,KAAK2X,qBAGjCD,GACAA,EAAkBE,cACpBF,EAAkBE,aAAaC,mBE5NnC,IACE,MAAMvP,EAASJ,SAASC,cAAc,UACtCG,EAAO8F,IAAM,6CACb9F,EAAOS,aAAa,OAAQ,IAC5BT,EAAOI,OAAS,OAChBJ,EAAOgG,QAAW5G,IAChBL,QAAQK,MAAM,qCAAsCA,EAAM,EAE5DQ,SAASqG,KAAKlG,YAAYC,EAC3B,CAAC,MAAOZ,GACPL,QAAQK,MAAM,kDAAmDA,EAClE,CACH,CFkNMoQ,GAGE9X,KAAK+X,6BACD/X,KAAKgY,2BAEd,CAEK,SAAAX,CAAUpR,4CACd,MAAM,IAAI9C,MACR,gEAEH,CAED,aAAA8U,CAAcC,GACZ,MAAM,IAAI/U,MACR,iEAEH,CAEK,YAAAgV,CAAajZ,EAA6B,+CAC9C,OAAMd,EAAA4B,KAAkB+V,EAAA,MAExBlX,EAAAmB,aGpPE,SACJhB,EACAC,EACA+W,EACA9W,EAA6B,+CAE7B,MAAMyH,EAAM,GAAG3H,qBACTiH,EAAO,CACXmS,MAAOpC,EAASoC,MAChBC,WAAYrC,aAAA,EAAAA,EAAUsC,UACtBC,UAAWvC,aAAA,EAAAA,EAAUwC,SACrBC,MAAOzC,aAAA,EAAAA,EAAUyC,OAEbrT,QAAiBhG,MAAMuH,EAAK,CAChCuD,OAAQ,OACR7K,QAAS,CACP,eAAgB,mBAChBC,cAAe,SAASL,KAE1BC,OAAQA,EACRU,KAAMwG,KAAKC,UAAUJ,KAGvB,GAAwB,MAApBb,EAASH,OACX,aAAaG,EAAS7F,OAEtB,MAAM,IAAI4D,MAAM,UAAUiC,EAASsT,gBAEtC,CHwN8BC,CACzB3Y,KAAKhB,QACLgB,KAAKsV,aACLtV,KAAKgW,SACL9W,QAN+Bd,EAAA4B,KAAI+V,EAAA,OAStC,CAEK,eAAA6C,EAAgB3J,KACpBA,EAAI4J,eACJA,EAAc7C,SACdA,EAAQtJ,UACRA,EAASoM,oBACTA,EAEAvD,UAAWwD,6CASX,MAAMC,aAAEA,EAAYC,UAAEA,EAASnU,SAAEA,GAAa9E,KAAK6E,aAC7CqT,EAAQhE,OAAOlU,KAAK0V,WAC1B,IAAIwD,EACAC,EACAjN,EACJ,IACE,IAAIkN,GAEDA,GACDJ,EAAaxM,aACbwM,EAAavM,aACZoM,IAEDO,QAA8B7M,EAC5ByM,EAAaxM,YACbwM,EAAavM,WACbC,EACA1M,KAAKiW,gBAAgB/W,SAIzB,MAAMwX,GAAEA,EAAE2C,WAAEA,GAAerD,EAE3BkD,EAAa,CACXpU,SAAU9E,KAAKsV,aACfgE,OAAQD,EACRE,mBAAoB,KACpBC,oBAAqB,KACrBC,OAAQvB,EACRjT,OAAQ,IACRgU,UAAWA,EACXS,aAAa,EACbC,MAAO3Z,KAAK4Z,UACZzJ,SAAUnQ,KAAKmQ,SACfG,SAAUtQ,KAAKsQ,UAEjB,MAAMuJ,iBR5SV7a,EACAC,EACAia,4CAEA,MAAMvS,EAAM,GAAG3H,mBACTiH,EAAOiT,EACP9T,QAAiBhG,MAAMuH,EAAK,CAChCuD,OAAQ,OACR7K,QAAS,CACP,eAAgB,mBAChBC,cAAe,SAASL,KAE1BW,KAAMwG,KAAKC,UAAUJ,KAEvB,GAAwB,MAApBb,EAASH,OACX,aAAaG,EAAS7F,OAEtB,MAAM,IAAI4D,MAAM,UAAUiC,EAASsT,gBAEtC,CQyRqCoB,CAC9B9Z,KAAKhB,QACLgB,KAAKsV,aACL4D,GAKIa,GADM,IAAIlW,MACOmW,cAEvBb,EAAe,CACbc,YAAanV,EAASC,GACtBmV,UAAWxD,EACX+C,OAAQvB,EACRiC,KAAMJ,EACNK,SAAUP,EAAkBnD,GAC5B2D,yBAA0Bra,KAAK4V,gBAAkB5V,KAAK4V,gBAAkBqD,EACxEU,MAAO3Z,KAAK4Z,UACZzJ,SAAUnQ,KAAKmQ,SACfG,SAAUtQ,KAAKsQ,UAEjB,MAAMgK,iBR3SVtb,EACAC,EACAka,4CAEA,MAAMxS,EAAM,GAAG3H,qBAA2Bma,EAAac,wBACjDhU,EAAOkT,EACP/T,QAAiBhG,MAAMuH,EAAK,CAChCuD,OAAQ,OACR7K,QAAS,CACP,eAAgB,mBAChBC,cAAe,SAASL,KAE1BW,KAAMwG,KAAKC,UAAUJ,KAEvB,GAAIb,EAASH,QAAU,KAAOG,EAASH,QAAU,IAC/C,aAAaG,EAAS7F,OAEtB,MAAM,IAAI4D,MAAM,UAAUiC,EAASsT,gBAEtC,CQwRuC6B,CAChCva,KAAKhB,QACLgB,KAAKsV,aACL6D,GAIFjN,EAAWP,OAAAQ,OAAAR,OAAAQ,OAAAR,OAAAQ,OAAAR,OAAAQ,OAAA,CACTtM,KAAMjB,EAAIoB,KAAKgW,SAAU,YAAapX,EAAIoB,KAAKgW,SAAU,OAAQ,KACjEuC,UAAW3Z,EACToB,KAAKgW,SACL,WACApX,EAAIoB,KAAKgW,SAAU,WAAY,KAEjCwE,aAAc5b,EAAIoB,KAAKgW,SAAU,QAAS,IAC1CyE,aAAc7b,EAAIoB,KAAKgW,SAAU,QAAS,IAC1C0E,WAAY3B,GAAiB/Y,KAAKuV,UAClCoF,WAAY,QACZC,iBAAkB,EAClBC,QAAS,IACTC,iBAAkB,IAClBrB,OAAQvB,EACR6C,WAAY,WACZC,YAAa,cACbC,kBAAmB7B,GAAgD,KACnE8B,SAAU,GACVd,SAAUP,EAAkBnD,GAC5ByE,YAAarW,EAASC,GACtBuS,WAAYgD,EAAoBvV,GAChCqW,OAAQ,MACRzB,MAAO3Z,KAAK4Z,UACZtJ,SAAUtQ,KAAKsQ,SACf+K,aAAc3X,IACdyM,SAAUnQ,KAAKmQ,UACT0I,EAAiB,CAAEA,kBAAmB,CAAE5J,SAC9C,CAAAqM,WAAYld,EAAA4B,KAAI8V,EAAA,OACZ9V,KAAKgW,UAAY,mBAAoBhW,KAAKgW,SAAW,CAAEuF,eAAgBvb,KAAKgW,SAASuF,gBAAmB,CAAA,QAChFrW,IAAxB4T,EAAoC,CAAEA,uBAAwB,CAAE,GAGtE,MAAM0C,QAA2BvP,EAC/BjM,KAAKhB,QACLgB,KAAKsV,aACLpJ,GAGF,OAAIsP,IAGK,CAEV,CAAC,MAAO9T,GAWP,MAVA1H,KAAK2W,eAAejP,EAAO,CACzBmK,QAAS,UACTG,WAAY9F,aAAA,EAAAA,EAAaoL,WACzBhH,SAAU,CACR1S,KAAM,kBACNsb,aACAC,eACAjN,iBAGExE,CACP,IACF,CAaK,kBAAAiQ,4CACJ,IAQE,OAPK3X,KAAK6E,eACR7E,KAAK6E,mBAAqB9F,EACxBiB,KAAKhB,QACLgB,KAAKsV,aACLtV,KAAKiW,gBAAgB/W,SAGlBc,KAAK6E,YACb,CAAC,MAAO/G,GAOP,OANAkC,KAAK2W,eAAe7Y,EAAG,CACrB+T,QAAS,sBACTvB,SAAU,CACR1S,KAAM,wBAGHoC,KAAK6E,YACb,IACF,CAEK,iBAAA4W,CACJC,EACAC,4CAEA,aItakB,SACpB3c,EACA4c,EACAjG,EACAgG,EACAzc,EAAS,+CAET,IACE,MAAMyH,EAAM,GAAG3H,qBAA2B2c,WACpCvW,QAAiBhG,MAAMuH,EAAK,CAChCuD,OAAQ,MACR7K,QAAS,CACPC,cAAe,UAAUqW,IACzB,eAAgB,mBAChB,aAAciG,GAEhB1c,WAEF,GAAIkG,EAASmK,GAAI,aAAanK,EAAS7F,OACvC,GAAwB,MAApB6F,EAASH,OACX,MAAO,CACLgN,QAAS,EACT4J,MAAO,IAIX,YAAY1W,EAAmBC,EAChC,CAAC,MAAOsC,GACP,MAAM1C,EAA4B0C,EACnC,IACF,CJwYgBoU,CAAmB9b,KAAKhB,QAAS0c,EAAW1b,KAAK2V,YAAagG,KAC5E,CAEK,iBAAAI,CACJL,EACAC,EACAK,EACAC,GAAqB,4CAErB,aI/YkB,SACpBjd,EACA4c,EACAjG,EACAgG,EACA1V,EACAgW,GAAqB,4CAErB,IACE,MAAMtV,EAAM,GAAG3H,qBAA2B2c,WACpCvW,QAAiBhG,MAAMuH,EAAK,CAChCuD,OAAQ,OACR7K,QACEsM,OAAAQ,OAAA,CAAA7M,cAAe,UAAUqW,IACzB,eAAgB,mBAChB,aAAciG,GACVK,EAAY,CAAE,eAAgB,aAAgB,IAEpDrc,KAAMwG,KAAKC,UAAUJ,KAGvB,GAAIb,EAASmK,GAAI,aAAanK,EAAS7F,OAEvC,YAAY4F,EAAmBC,EAChC,CAAC,MAAOsC,GACP,MAAM1C,EAA4B0C,EACnC,IACF,CJoXgBwU,CACXlc,KAAKhB,QACL0c,EACA1b,KAAK2V,YACLgG,EACAK,EACAC,KAEH,CAEK,mBAAAE,CACJT,EACAC,EACAS,4CAEA,aIjYkB,SACpBpd,EACA4c,EACAjG,EACAyG,EAAY,GACZT,4CAEA,IACE,MAAMhV,EAAM,GAAG3H,qBAA2B2c,WAAoBS,IAExDhX,QAAiBhG,MAAMuH,EAAK,CAChCuD,OAAQ,SACR7K,QAAS,CACPC,cAAe,UAAUqW,IACzB,eAAgB,mBAChB,aAAciG,KAIlB,GAAwB,MAApBxW,EAASH,OAAgB,OAAO/E,EAAYD,EAAamB,2BAC7D,GAAIgE,EAASmK,IAAM,SAAUnK,EAAU,aAAaA,EAAS7F,OAE7D,YAAY4F,EAAmBC,EAChC,CAAC,MAAOsC,GACP,MAAM1C,EAA4B0C,EACnC,IACF,CJuWgB2U,CACXrc,KAAKhB,QACL0c,EACA1b,KAAK2V,YACLyG,EACAT,KAEH,CACK,4BAAAW,4CACJ,aKzcE,SACJtd,EACAC,EACAmE,EAAS,CACP6B,OAAQ,SACRsX,SAAU,SAEZrd,EAAS,+CAET,IACE,MAAMsd,EAAc,IAAIlS,gBAAgBlH,GAAQiC,WAE1CD,QAAiBhG,MACrB,GAAGJ,4BAAkCwd,IACrC,CACEtS,OAAQ,MACR7K,QAAS,CACPC,cAAe,SAASL,IACxB,eAAgB,oBAElBC,WAIJ,GAAIkG,EAASmK,GAAI,aAAanK,EAAS7F,OACvC,YAAY4F,EAAmBC,EAChC,CAAC,MAAOsC,GACP,MAAM1C,EAA4B0C,EACnC,IACF,CL4agB+U,CAA4Bzc,KAAKhB,QAASgB,KAAKsV,gBAC7D,CAES,kBAAAyC,WACR,SAA6C,QAApCtU,EAAmB,QAAnBD,EAAAxD,KAAK6E,oBAAc,IAAArB,OAAA,EAAAA,EAAAkZ,uBAAiB,IAAAjZ,OAAA,EAAAA,EAAAgJ,WAC9C,CAEe,qBAAAuL,kDAUd,OATKhY,KAAK6V,qBACR7V,KAAK6V,mBAAqB,IAAIjI,EAAW,CACvCM,WAA+B,UAAnBlO,KAAK6E,oBAAc,IAAArB,OAAA,EAAAA,EAAAkZ,gBAAiBjQ,WAChDxN,OAAQe,KAAKsV,aACbvH,kBAAiC,eAAd/N,KAAKwN,aAEpBxN,KAAK6V,mBAAmB1H,cAGzBnO,KAAK6V,qBACb,CA8BK,kBAAAsB,CACJ/R,oDAOA,GAJEA,GAAY,gBAAiBA,UACzB3B,EAAuB,QAAvBD,EAAA4B,aAAA,EAAAA,EAAUyB,mBAAa,IAAArD,OAAA,EAAAA,EAAA4D,uCAAkBY,OACzC,KAGJhI,KAAKkW,WACFnO,aACA7J,MAAK,KAOJ8B,KAAKkW,WAAW3K,yBAAyB,IAE1CkH,OAAO/K,IACNL,QAAQC,IAAI,wBAAyBI,GACrC1H,KAAK2W,eAAejP,EAAO,CACzBmK,QAAS,mBACTvB,SAAU,CACR1S,KAAM,qBACNwH,aAEF,QAED,CAEL,IADoBpF,KAAKkW,WAAWvN,iBAIlC,OAAOvD,EAFPpF,KAAKkW,WAAWtN,qBAInB,IACF,EMriBG,SAAgB+T,EACpB3d,EACAC,EACAC,EAAS,+CAET,MAAMkG,QAAiBhG,MAAM,GAAGJ,wBAA+B,CAC7DkL,OAAQ,MACR7K,QAAS,CACPC,cAAe,SAASL,KAE1BC,OAAQA,IAGV,GAAIkG,EAASmK,GAAI,CAEf,aAD2BnK,EAAS7F,QAChB6Q,KACrB,CACC,MAAM,IAAIjN,MAAM,qCAEnB,sDNuXkB8C,YACXA,GAASA,GAAqC,IAA7B0F,OAAOqJ,KAAK/O,GAAMqM,SACvClU,EAAA4B,cAAArB,KAAAqB,KAAqBiG,EAAK+P,UAC1BhW,KAAKiY,eAAyB,QAAXzU,EAAAyC,EAAK2W,YAAM,IAAApZ,OAAA,EAAAA,EAAA0U,QAAS,GACvC9Z,EAAA4B,KAAIsW,EAAA,IAAAuG,GAAJle,KAAAqB,MAA8B,QAAXyD,EAAAwC,EAAK2W,YAAM,IAAAnZ,OAAA,EAAAA,EAAAkW,QAAS,IACvCvb,EAAA4B,KAAoBsW,EAAA,IAAAwG,GAAAne,KAApBqB,KAAqBiG,GACrB7H,EAAA4B,KAAoBsW,EAAA,IAAAyG,GAAApe,KAApBqB,KAAqBiG,GACrB7H,EAAA4B,KAAgBsW,EAAA,IAAA0G,GAAAre,KAAhBqB,KAAiBiG,GACjB7H,EAAA4B,KAAqBsW,EAAA,IAAA2G,GAAAte,KAArBqB,KAAsBiG,GACxB,aAgFgB+P,GACTA,IAELhW,KAAKgW,SAAWA,EAClB,aAEgB5F,GACdpQ,KAAK2V,YAAcvF,CACrB,aAEcuJ,GACZ3Z,KAAK4Z,UAAYD,CACnB,aAEgB1T,GACdjG,KAAKsQ,SAAWrK,aAAA,EAAAA,EAAMqK,SACtBtQ,KAAK4V,gBAAkB3P,aAAA,EAAAA,EAAM2P,eAC/B,aAEgB3P,GACdjG,KAAKmQ,SAAWlK,aAAA,EAAAA,EAAMkK,QACxB,aAEYlK,GACVjG,KAAKiP,KAAOhJ,aAAA,EAAAA,EAAMgJ,IACpB,aA2CsB7J,0DAEpB,GAAsC,UAAjB,QAAjB5B,EAAA4B,aAAQ,EAARA,EAAU8X,eAAO,IAAA1Z,OAAA,EAAAA,EAAE2Z,cACE,QAApB1Z,EAAA2B,aAAA,EAAAA,EAAUgY,gBAAU,IAAA3Z,OAAA,EAAAA,EAAA4Z,qBACrBjY,aAAA,EAAAA,EAAUiY,oBACZ,CAAC,WAAW5R,SAASrG,aAAQ,EAARA,EAAUqE,oBAC/B,OAAOrE,EAGT,GAAI,CAAC,UAAW,cAAcqG,SAASrG,aAAA,EAAAA,EAAUqE,oBAC/C,OAAOrE,EAGT,GAAIA,EAAU,CACZ,MAAM8G,EAAc,CAClBoR,aAAgC,QAAnB1W,EAAAxB,EAASgY,gBAAU,IAAAxW,OAAA,EAAAA,EAAA8P,MAAMtR,aAAQ,EAARA,EAAUkY,cAGlD,IACE,aAAarR,EACXjM,KAAKhB,QACLgB,KAAKsV,aACLpJ,EAEH,CAAC,MAAOxE,GACP1H,KAAK2W,eAAejP,EAAO,CACzBmK,QAAS,UACTG,YAAY5M,aAAA,EAAAA,EAAUkS,cAAkC,QAAnBnQ,EAAA/B,aAAA,EAAAA,EAAUgS,eAAS,IAAAjQ,OAAA,EAAAA,EAAAuP,MAAuB,UAAjBtR,aAAQ,EAARA,EAAUgS,eAAO,IAAAlQ,OAAA,EAAAA,EAAEnC,IACjFuL,SAAU,CACR1S,KAAM,kBACNwH,aAIL,CACD,OAAOA,CACR,iBAEca,GACfpH,EAAAmB,KAAmB8V,EAAA7P,eAAAA,EAAMqV,WAAU,IACrC,EDpiBF,SAAYnG,GACRA,EAAA,YAAA,cACAA,EAAA,IAAA,MACAA,EAAA,iBAAA,mBACAA,EAAA,gBAAA,kBACAA,EAAA,gBAAA,iBACH,CAND,CAAYA,IAAAA,EAMX,CAAA,IQ/CD,MAAMoI,EAAkB,CACpBtS,KAAMuS,EAAQC,mBAAmBC,kBACjCta,OAAQ,CACJua,IAAK,KAGPC,EAAaC,OAAO,cAEpBC,EAAiB,CACnB7S,KAAMuS,EAAQC,mBAAmBM,iBACjC3a,OAAQ,CACJ4a,MAAOJ,EACPlW,MAAO,0BAyBTuW,EACI,wBADJA,EAEW,oBAFXA,EAGG,UAHHA,EAIgB,MAJhBA,EAKe,MALfA,EAMe,sBAGfC,EACI,oCADJA,GAEW,sBAFXA,GAGG,cAHHA,GAIgB,KAJhBA,GAKe,KClDfC,GAA0D,CAC9DC,KAAM,CACJC,OAAQ,oBACRC,QAAS,WACTC,aAAc,MACdC,MAAO,UACPC,UAAW,MACXC,gBAAiB,QACjBC,WAAY,sBACZC,SAAU,OACV,iBAAkB,CAChBJ,MAAO,SAGXK,SAAU,CACRL,MAAO,WAETM,QAAS,CACPT,OAAQ,qBAEVU,MAAO,CAAE,EACTC,MAAO,CAAE,EACTC,OAAQ,CACN,UACE,4FAIAC,GAA4C,CAChDd,KAAM,CACJQ,SAAU,OACVO,WAAY,MACZR,WAAY,wBAIVS,GAA+D,CACnEhB,KAAM,CACFQ,SAAU,OACVO,WAAY,MACZR,WAAY,sBACZH,MAAO,YCZS,SAAAa,IAAiBrgB,QACrCA,EAAOC,OACPA,EAAMqgB,SACNA,EAAQC,UACRA,EAAStZ,KACTA,6CAEA,MAUMuZ,EAVUhC,EAAQiC,KAAK,CAC3BC,QAASJ,EACTK,SAAUJ,EACVK,eAAgB,IAAW1iB,EAAA8C,UAAA,OAAA,GAAA,YAAC,aAAM2c,EAAc3d,EAASC,EAAO,IAChE4gB,QAAS,CACPC,SAAUtC,EAAQuC,SAASC,MAC3BpO,IAAK4L,EAAQyC,IAAIC,OAI8BjY,UACjDuV,EAAQ2C,cAAcC,SAGlBC,QAyBR,SACEpa,EACAuZ,4CAEA,MAAMc,QAuBR,SACEra,EACAuZ,4CAEA,aAAajiB,QAAQgjB,IACnB5U,OAAOqJ,KAAK/O,GAAMua,KAAWhW,GAAOtN,EAAA8C,UAAA,OAAA,GAAA,YAMlC,MAAO,CAAEygB,cAL2BjB,EAAiBkB,OAAO,CAC1DC,MAAO,QACPC,OAAQpW,EACRS,KAAMuS,EAAQqD,YAAYC,cAEatW,IAAKA,EAC/C,SAEJ,CArCsBuW,CAAU9a,EAAMuZ,GACrC,OAAKc,EAEEA,EAAOE,KAAKQ,GACV,IAAIzjB,SAASC,UAClB,MAAMyjB,EAAM/Y,SAASC,cAAc,OACnC8Y,EAAIC,QAAS,EACbD,EAAIvK,GAAK,MAAMsK,EAAMxW,MACS,QAA9BhH,EAAA0E,SAASY,cAAc,eAAO,IAAAtF,GAAAA,EAAE6E,YAAY4Y,GAC5CrX,YAAW,KACToX,EAAMP,QAAQU,MAAM,OAAOH,EAAMxW,OACjC4W,aAAY,KACV,GAAIJ,EAAMP,QAAQY,YAAa,CAC7B,MAAM1jB,EAAQsI,EAAK+a,EAAMxW,KAEzB,OADAwW,EAAMP,QAAQa,SAAS3jB,GAChBH,EAAQwjB,EAAMP,QAAQY,YAC9B,IACA,IAAI,GACN,IAAI,MAjBS,KAoBrB,CAlD6BE,CAAiBtb,EAAMuZ,GAMnD,UAJqBjiB,QAAQgjB,IAAIF,IAERmB,MAAMja,IAAmBA,IAGhD,MAAMvC,EACJ7B,MAAM,wDAGR,IACE,MAAMse,QACGjC,EAAiBkC,UAC1B,GAAID,EACF,OAAOA,EAAsC,QAAE,GAAW,OAC5D,MAAMzc,EACJ7B,MAAM,sDAET,CAAC,MAAOuE,GACP,MAAM1C,EAA4B0C,EACnC,IAEJ,CAyMD,SAASia,GAA2BzY,GAQlC,MAAMuX,QACJA,EAAOmB,aACPA,EAAe,GAAEC,YACjBA,EAAc,CAAE,EAAAC,gBAChBA,EAAkB,kBAAiBC,eACnCA,EAAiB,kBAAiBC,OAClCA,GACE9Y,EACA,OAAQuX,IACVA,EAAQwB,GAAGzE,EAAQ0E,UAAUC,QAAS7jB,IACpC8jB,GAAa,CAAEC,UAAW,WAAYpc,KAAM3H,EAAO0jB,WACnDM,GAAiB,CACf7B,UACAoB,cACArD,MAAO,eACP,IAGJiC,EAAQwB,GAAGzE,EAAQ0E,UAAUK,MAAOjkB,IAElC,GADA8jB,GAAa,CAAEC,UAAW,SAAUpc,KAAM3H,EAAO0jB,YAC5C1jB,EAAMyR,QAAS,CAClB,MAAMyS,EAAYlkB,EAAMmkB,QACpBX,EACgB,IAAhBF,EACE,YAAYA,iBACZG,EACNtB,EAAQiC,SAASF,EAClB,CACDF,GAAiB,CACf7B,UACAoB,eACA,IAGJpB,EAAQwB,GAAGzE,EAAQ0E,UAAUS,OAAQrkB,IACnC8jB,GAAa,CAAEC,UAAW,UAAWpc,KAAM3H,EAAO0jB,WAClDM,GAAiB,CACf7B,UACAoB,cACArD,MAAO,gBAETiC,EAAQmC,YAAY,IAG1B,CAEA,SAASN,GAAiBpZ,GAKxB,MAAMuX,QAAEA,EAAOoB,YAAEA,EAAc,CAAA,EAAErD,MAAEA,EAAQ,IAAOtV,EAC9CyC,OAAOqJ,KAAK6M,GAAavP,OAAS,GACpCmO,EAAQoC,OAAO,CACbC,gBAAenX,OAAAQ,OAAAR,OAAAQ,OAAA,CAAA,EACV0V,GAAW,CACdzD,KAAIzS,OAAAQ,OAAAR,OAAAQ,OAAA,GAEE0V,EAAYzD,MAAIzS,OAAAQ,OAAA,CAAA,EAAS0V,EAAYzD,OAC5B,IAATI,GAAe,CAAEA,aAK/B,CAEA,MAAM4D,GAAgBlZ,IAKpB,MAAMmZ,UAAEA,EAASpc,KAAEA,EAAI+b,OAAEA,GAAW9Y,EACpC,GAAI8Y,GAAUK,KAAaL,EAAQ,CACjC,MAAMe,EAAef,EAAOK,GACA,mBAAjBU,GACTA,EAAa,CACXC,YAAapkB,EAAIqH,EAAM,cAAe,IACtCwc,QAAS7jB,EAAIqH,EAAM,UAAW,IAC9Bgd,UAAWrkB,EAAIqH,EAAM,YAAa,IAClC8J,QAASnR,EAAIqH,EAAM,UAAW,KAGnC,GAGH,SAAeid,GAAgBha,4CAM7B,MAAMuX,QAAEA,EAAO0C,YAAEA,EAAWC,QAAEA,EAAU,EAACC,MAAEA,EAAQ,IAAOna,EAC1D,IAAK,IAAIoa,EAAI,EAAGA,GAAKF,EAASE,IAAK,CAEjC,GADWpb,SAASY,cAAcqa,GAGhC,YADA1C,EAAQU,MAAMgC,GAGZG,EAAIF,UACA,IAAI7lB,SAASC,GAAYoM,WAAWpM,EAAS6lB,KAEtD,CACDhc,QAAQkc,KACN,+BAA+BJ,yBAAmCC,EAAU,gBAE/E,CCtYD,MAAMI,GAAqB7X,OAAOC,OAAO,CACvC6X,QAAS,UACTC,KAAM,OACNC,QAAS,UACTC,KAAM,OACNC,KAAM,OACNC,YAAa,cACbC,OAAQ,SACRC,kBAAmB,oBACnBC,SAAU,WACVC,QAAS,UACTC,OAAQ,SACRC,SAAU,WACVC,SAAU,WACVC,QAAS,UACTC,MAAO,QACPC,SAAU,WACVC,QAAS,UACTC,SAAU,WACVC,QAAS,UACTC,UAAW,YACXC,UAAW,YACXC,YAAa,cACbC,OAAQ,SACRC,QAAS,UACTC,OAAQ,SACRC,SAAU,WACVC,YAAa,cACbC,SAAU,WACVC,UAAW,YACXC,UAAW,YACXC,SAAU,WACVC,QAAS,UACTC,eAAgB,iBAChBC,aAAc,eACdC,UAAW,YACXC,aAAc,eACdC,SAAU,WACVC,aAAc,eACdC,UAAW,YACXC,UAAW,YACXC,YAAa,cACbC,aAAc,eACdC,OAAQ,SACRC,OAAQ,SACRC,UAAW,YACXC,MAAO,QACPC,KAAM,OACNC,OAAQ,SACRC,OAAQ,SACRC,iBAAkB,mBAClBC,OAAQ,SACRC,MAAO,QACPC,GAAI,KACJC,UAAW,YACXC,KAAM,OACNC,YAAa,cACbC,WAAY,aACZC,IAAK,MACLC,QAAS,UACTC,WAAY,eCzDRC,GAA0B,CAC5B,CAAC7D,GAAmBC,SAAU,CAC1B6D,MAAO,UACPC,KAAM,qEAEV,CAAC/D,GAAmBE,MAAO,CACvB4D,MAAO,OACPC,KAAM,kEAEV,CAAC/D,GAAmBK,MAAO,CACvByD,MAAO,OACPC,KAAM,kEAEV,CAAC/D,GAAmBM,aAAc,CAC9BwD,MAAO,eACPC,KAAM,yEAEV,CAAC/D,GAAmBG,SAAU,CAC1B2D,MAAO,WACPC,KAAM,qEAEV,CAAC/D,GAAmBI,MAAO,CACvB0D,MAAO,OACPC,KAAM,kEAEV,CAAC/D,GAAmBO,QAAS,CACzBuD,MAAO,SACPC,KAAM,oEAEV,CAAC/D,GAAmBQ,mBAAoB,CACpCsD,MAAO,qBACPC,KAAM,+EAEV,CAAC/D,GAAmBS,UAAW,CAC3BqD,MAAO,WACPC,KAAM,sEAEV,CAAC/D,GAAmBU,SAAU,CAC1BoD,MAAO,UACPC,KAAM,qEAEV,CAAC/D,GAAmBW,QAAS,CACzBmD,MAAO,iBACPC,KAAM,4EAEV,CAAC/D,GAAmBY,UAAW,CAC3BkD,MAAO,aACPC,KAAM,uEAEV,CAAC/D,GAAmBa,UAAW,CAC3BiD,MAAO,WACPC,KAAM,sEAEV,CAAC/D,GAAmBc,SAAU,CAC1BgD,MAAO,UACPC,KAAM,qEAEV,CAAC/D,GAAmBe,OAAQ,CACxB+C,MAAO,gBACPC,KAAM,2EAEV,CAAC/D,GAAmBgB,UAAW,CAC3B8C,MAAO,YACPC,KAAM,uEAEV,CAAC/D,GAAmBiB,SAAU,CAC1B6C,MAAO,WACPC,KAAM,sEAEV,CAAC/D,GAAmBkB,UAAW,CAC3B4C,MAAO,WACPC,KAAM,sEAEV,CAAC/D,GAAmBmB,SAAU,CAC1B2C,MAAO,UACPC,KAAM,qEAEV,CAAC/D,GAAmBoB,WAAY,CAC5B0C,MAAO,sBACPC,KAAM,iFAEV,CAAC/D,GAAmBqB,WAAY,CAC5ByC,MAAO,uBACPC,KAAM,8EAEV,CAAC/D,GAAmBsB,aAAc,CAC9BwC,MAAO,eACPC,KAAM,uEAEV,CAAC/D,GAAmBuB,QAAS,CACzBuC,MAAO,SACPC,KAAM,oEAEV,CAAC/D,GAAmBwB,SAAU,CAC1BsC,MAAO,UACPC,KAAM,sEAEV,CAAC/D,GAAmByB,QAAS,CACzBqC,MAAO,SACPC,KAAM,oEAEV,CAAC/D,GAAmB0B,UAAW,CAC3BoC,MAAO,wBACPC,KAAM,mFAEV,CAAC/D,GAAmB2B,aAAc,CAC9BmC,MAAO,0BACPC,KAAM,8EAEV,CAAC/D,GAAmB4B,UAAW,CAC3BkC,MAAO,iBACPC,KAAM,4EAEV,CAAC/D,GAAmB6B,WAAY,CAC5BiC,MAAO,0BACPC,KAAM,6EAEV,CAAC/D,GAAmB8B,WAAY,CAC5BgC,MAAO,8BACPC,KAAM,mFAEV,CAAC/D,GAAmB+B,UAAW,CAC3B+B,MAAO,0CACPC,KAAM,qFAEV,CAAC/D,GAAmBgC,SAAU,CAC1B8B,MAAO,gBACPC,KAAM,mEAEV,CAAC/D,GAAmBiC,gBAAiB,CACjC6B,MAAO,uBACPC,KAAM,mEAEV,CAAC/D,GAAmBkC,cAAe,CAC/B4B,MAAO,qBACPC,KAAM,mEAEV,CAAC/D,GAAmBmC,WAAY,CAC5B2B,MAAO,YACPC,KAAM,mEAEV,CAAC/D,GAAmBoC,cAAe,CAC/B0B,MAAO,gBACPC,KAAM,mEAEV,CAAC/D,GAAmBqC,UAAW,CAC3ByB,MAAO,YACPC,KAAM,mEAEV,CAAC/D,GAAmBsC,cAAe,CAC/BwB,MAAO,iBACPC,KAAM,mEAEV,CAAC/D,GAAmBuC,WAAY,CAC5BuB,MAAO,aACPC,KAAM,mEAEV,CAAC/D,GAAmBwC,WAAY,CAC5BsB,MAAO,aACPC,KAAM,mEAEV,CAAC/D,GAAmByC,aAAc,CAC9BqB,MAAO,eACPC,KAAM,mEAEV,CAAC/D,GAAmB0C,cAAe,CAC/BoB,MAAO,gBACPC,KAAM,mEAEV,CAAC/D,GAAmB2C,QAAS,CACzBmB,MAAO,SACPC,KAAM,mEAEV,CAAC/D,GAAmB4C,QAAS,CACzBkB,MAAO,SACPC,KAAM,mEAEV,CAAC/D,GAAmB6C,WAAY,CAC5BiB,MAAO,YACPC,KAAM,mEAEV,CAAC/D,GAAmB8C,OAAQ,CACxBgB,MAAO,QACPC,KAAM,mEAEV,CAAC/D,GAAmB+C,MAAO,CACvBe,MAAO,OACPC,KAAM,mEAEV,CAAC/D,GAAmBgD,QAAS,CACzBc,MAAO,UACPC,KAAM,mEAEV,CAAC/D,GAAmBiD,QAAS,CACzBa,MAAO,gBACPC,KAAM,mEAEV,CAAC/D,GAAmBkD,kBAAmB,CACnCY,MAAO,oBACPC,KAAM,mEAEV,CAAC/D,GAAmBmD,QAAS,CACzBW,MAAO,WACPC,KAAM,mEAEV,CAAC/D,GAAmBoD,OAAQ,CACxBU,MAAO,SACPC,KAAM,mEAEV,CAAC/D,GAAmBqD,IAAK,CACrBS,MAAO,gBACPC,KAAM,mEAEV,CAAC/D,GAAmBsD,WAAY,CAC5BQ,MAAO,YACPC,KAAM,mEAEV,CAAC/D,GAAmBuD,MAAO,CACvBO,MAAO,OACPC,KAAM,mEAEV,CAAC/D,GAAmBwD,aAAc,CAC9BM,MAAO,cACPC,KAAM,mEAEV,CAAC/D,GAAmByD,YAAa,CAC7BK,MAAO,aACPC,KAAM,mEAEV,CAAC/D,GAAmB0D,KAAM,CACtBI,MAAO,MACPC,KAAM,mEAEV,CAAC/D,GAAmB2D,SAAU,CAC1BG,MAAO,UACPC,KAAM,mEAEV,CAAC/D,GAAmB4D,YAAa,CAC7BE,MAAO,aACPC,KAAM,oEAKDC,GAA2BC,IACtC,MAAMC,EAA4BD,EAAYE,ctBhLlCnT,OAAOoT,QAAQ,OAAQ,IsBsLnC,OAAOP,GAAwBK,IALd,CACfH,KAAM,kEACND,MAAO,GAGyC,EClM9C,MAAOO,WAAqBzS,EAQhC,WAAA1V,EAAYT,OAAEA,EAAMuO,KAAEA,EAAI+H,UAAEA,EAAS1P,SAAEA,EAAQyP,aAAEA,EAAYE,cAAEA,EAAaH,cAAEA,EAAayS,aAAEA,EAAY9F,OAAEA,IACzG1e,MAAM,CACJkK,OACAvO,SACAsW,YACA1P,WACAyP,eACAE,gBACAH,gBACA1P,YAAamiB,GAAgB,cAAeA,EAAeA,eAAAA,EAAcC,UAAY,YACrFtS,QAASxC,IAjBbjT,KAAUgoB,WAAU,GAIZhoB,KAAAioB,yBAAqG,IAAIC,IACzGloB,KAAkBmoB,mBAAkC,KAc1DnoB,KAAKooB,gBAAkB,KACvBpoB,KAAKgiB,OAASA,GAAU,EACzB,CAEY,cAAAqG,kDACLroB,KAAKyX,wBACZ,CAEY,gBAAA6Q,4CACX,UACQtoB,KAAK2X,qBACX,MAAM0B,WAAEA,SAAqBrZ,KAAKmY,eAC5B/S,QAAiBpF,KAAKyb,kBAC1BpC,EACArZ,KAAK6E,aAAcC,SAASC,IAI9B,OAFA/E,KAAKmoB,mBAAqB/iB,EAGnBuG,OAAAQ,OAAAR,OAAAQ,OAAA,GAAA/G,GACH,CAAAyW,MAAOzW,EAASyW,MAAM2E,KAAK+H,IACpB,OAAA5c,OAAAQ,OAAAR,OAAAQ,OAAA,CAAA,EAAAoc,GACH,CAAAjI,OACO3U,OAAAQ,OAAAR,OAAAQ,OAAA,CAAA,EAAAoc,EAAGjI,QACN,CAAAkI,gBAAiBxoB,KAAK+X,qBAAuBwQ,EAAGjI,OAAOkI,qBAAkBtjB,IAE7EqiB,MvB/BOG,EuB+BWa,EAAGjI,OAAOmI,YvB9BzB,SAAXf,EAEK,uDACa,eAAXA,EAEF,6DACa,qBAAXA,EAEF,mEAEA,kEAXS,IAACA,CuBgCT,KAEP,CAAC,MAAOhgB,GAQP,MAPA1H,KAAK2W,eAAejP,EAAO,CACzBmK,QAAS,YACTG,WAAYhS,KAAKyW,gBACjBnG,SAAU,CACR1S,KAAM,sBAGJkX,EACJ,CACEtB,UAAWvT,EAAaY,mBAE1B6G,EAEH,IACF,CAEY,gBAAAwU,CACXjN,4CAEA,IAAIyZ,EAAwB,KAC5B,UACQ1oB,KAAK2X,qBACX,MAAMgR,QAAyB3oB,KAAKmY,gBAC9BkB,WAAEA,EAAUhB,WAAEA,EAAa,GAAEE,UAAEA,EAAY,GAAEH,MAAEA,EAAQ,IAAOuQ,GAC9DrJ,SAAEA,EAAQC,UAAEA,EAASza,SAAEA,GAAa9E,KAAK6E,aACzC+jB,EAAoB5oB,KAAK+X,qBAEzB8Q,EAAgB,CACpBC,YAAa7Z,EAAK6Z,YAAYlB,QAAQ,OAAQ,IAC9CmB,iBAAkB9Z,EAAK8Z,iBAAiBnB,QAAQ,OAAQ,IACxDoB,gBAAiB/Z,EAAK+Z,gBAAgBpB,QAAQ,OAAQ,IACtDqB,IAAKha,EAAKga,IAAIrB,QAAQ,OAAQ,IAC9BsB,gBAAiBja,EAAKia,gBAAgBtB,QAAQ,OAAQ,KAGlD5L,QAA2BqD,GAAiB,CAChDC,SAAUA,EACVC,UAAWA,EACXtZ,KAAM4iB,EACN7pB,QAASgB,KAAKhB,QACdC,OAAQe,KAAKsV,eAGT6T,QAAqBnpB,KAAK+b,kBAC9B1C,EACAvU,aAAQ,EAARA,EAAUC,GACViX,EACA4M,GAIF,GAFAF,EAASS,EAAaC,WAElBR,EAAmB,CACrB,MAAM9Z,EAAUqa,EAAaE,SAC7B,IAAKva,EACH,MAAM,IAAI3L,MAAM,wCAGlB,MAAMmmB,QAAmBtpB,KAAKgY,wBAC9B,IAAIha,EACJ,IACEA,QAAesrB,EAAWtZ,QAAQ,CAChCE,WAAY,CACRrQ,KAAMmc,EAAckN,gBACpBha,OAAQ8M,EAAc8M,YACtBS,YAAavN,EAAc+M,iBAC3BS,WAAYxN,EAAcgN,gBAC1BC,IAAKjN,EAAciN,KAEvBna,UACAuB,eAAgB,CACdiI,UAAWD,GAAc,GACzBG,SAAUD,GAAa,GACvBH,MAAOA,GAAS,IAElB7H,WAAY8I,EACZlJ,SAAUnQ,KAAKmQ,UAAY,OAE9B,CAAC,MAAOsZ,GACP,MAAM3U,EACJ,CACEtB,UAAWvT,EAAac,gBACxBjB,QAASI,EAAYD,EAAayC,wBAEpC+mB,EAEH,CAED,MAAMC,EAA0C,CAC9CN,WAAYpN,EAAcoN,WAC1BZ,gBAAiBxqB,EAAO2rB,sBAEpB3pB,KAAK+b,kBACT1C,EACAvU,aAAQ,EAARA,EAAUC,GACV2kB,EAEH,CAED,OAAOP,CACR,CAAC,MAAOzhB,GAWP,MAVGghB,UACO1oB,KAAKqc,mBAAmBqM,IAElC1oB,KAAK2W,eAAejP,EAAO,CACzBmK,QAAS,YACTG,WAAY0W,GAAU1oB,KAAKyW,gBAC3BnG,SAAU,CACR1S,KAAM,sBAGJkX,EACJ,CACEtB,UAAWvT,EAAac,iBAE1B2G,EAEH,IACF,CAEY,kBAAA2U,CAAmBD,4CAC9B,UACQpc,KAAK2X,qBACX,MAAM0B,WAAEA,SAAqBrZ,KAAKmY,gBAC5BrT,SAAEA,GAAa9E,KAAK6E,aAE1B,aAAa7E,KAAKmc,oBAChB9C,EACAvU,eAAAA,EAAUC,GACVqX,EAEH,CAAC,MAAO1U,GAQP,MAPA1H,KAAK2W,eAAejP,EAAO,CACzBmK,QAAS,cACTG,WAAYoK,EACZ9L,SAAU,CACR1S,KAAM,wBAGJkX,EACJ,CACEtB,UAAWvT,EAAae,mBAE1B0G,EAEH,IACF,CAEY,yBAAAkiB,4CACX,IACE,MAAMxkB,QAAiBpF,KAAKsc,+BAO5B,OAJElX,GAAY,YAAaA,GAAYA,EAAkB,QAAEkN,OAAS,EAC9DlN,EAAkB,QAClB,IAGHykB,QAAQC,GAA+C,UAAnCA,EAAQC,SAASC,gBACrCxJ,KAAKsJ,GACKne,OAAAQ,OAAA,CACPuK,GAAIoT,EAAQ/kB,GACZ8T,eAAgBiR,EAAQjR,eACxBoR,SAAUH,EAAQG,SAClBF,SAAUD,EAAQC,UACfvC,GAAwBsC,EAAQjR,mBAItCqR,MAAK,CAACC,EAAGC,IAAMD,EAAEF,SAAWG,EAAEH,UAClC,CAAC,MAAOviB,GAOP,MANA1H,KAAK2W,eAAejP,EAAO,CACzBmK,QAAS,sBACTvB,SAAU,CACR1S,KAAM,+BAGJkX,EACJ,CACEtB,UAAWvT,EAAa6B,6BAE1B4F,EAEH,IACF,CACY,eAAA2iB,CAAgBnhB,kDAE3B,MAAM0H,EAAU1H,EAAMohB,QAAU,UAAUphB,EAAMohB,UAAY,SAEtDC,EAA8C,QAArB/mB,EAAA0F,EAAMshB,uBAAe,IAAAhnB,EAAAA,EAAI,MAEjC,SAAnB+mB,IACqB,YAAnBA,EAEFvqB,KAAKyqB,kBAAkB7Z,GAGvB5Q,KAAKyqB,kBAAkBF,UAIrBvqB,KAAK0qB,wBACX,MAAMC,QH7KJ,SAAmCzhB,kFAMvC,MAAMkf,gBAAEA,EAAeniB,KAAEA,EAAIoP,cAAEA,EAAa2M,OAAEA,GAAW9Y,EACnDsW,EAAqC4I,EAAgBngB,UACzDuV,EAAQ2C,cAAcC,SAElBwK,EAA+D,GAC/DC,EAGF,CACF,CAAC1V,EAAc2V,KAAMtN,EAAQqD,YAAYiK,IACzC,CAAC3V,EAAc4V,aAAcvN,EAAQqD,YAAYkK,YACjD,CAAC5V,EAAc6V,kBAAmBxN,EAAQqD,YAAYmK,iBACtD,CAAC7V,EAAc8V,iBAAkBzN,EAAQqD,YAAYoK,gBACrD,CAAC9V,EAAc+V,iBAAkB1N,EAAQqD,YAAYqK,iBAGjDC,EAAqB,CACzB,CAAChW,EAAc2V,KAAM,CAAChN,GACtB,CAAC3I,EAAc4V,aAAc,CAACjN,GAC9B,CAAC3I,EAAc6V,kBAAmB,CAAClN,GACnC,CAAC3I,EAAc8V,iBAAkB,CAACnN,GAClC,CAAC3I,EAAc+V,iBAAkB,CAAC3N,EAAiBO,IAE/CsN,EAAe,CACnBvJ,qBACEpe,EAAuB,QAAvBD,EAAA6R,aAAA,EAAAA,EAAegW,cAAQ,IAAA7nB,OAAA,EAAAA,EAAA8nB,+BAAUzJ,cACjCzC,GACFmM,qBACEpkB,EAAuB,QAAvBP,EAAAyO,aAAA,EAAAA,EAAegW,cAAQ,IAAAzkB,OAAA,EAAAA,EAAA0kB,+BAAUC,cACjCpN,GACFqN,qBACEvkB,EAAuB,QAAvBC,EAAAmO,aAAA,EAAAA,EAAegW,cAAQ,IAAAnkB,OAAA,EAAAA,EAAAokB,+BAAUE,cACjCtM,IAEEuM,EAAiC,CACrC5rB,MAA6B,QAAvB6rB,EAAArW,aAAa,EAAbA,EAAeoW,cAAQ,IAAAC,OAAA,EAAAA,EAAA7rB,OAAQoe,EACrC6K,aACyB,QAAvB6C,EAAAtW,aAAa,EAAbA,EAAeoW,cAAQ,IAAAE,OAAA,EAAAA,EAAA7C,cAAe7K,EACxCgL,KAA4B,QAAvB2C,EAAAvW,aAAa,EAAbA,EAAeoW,cAAQ,IAAAG,OAAA,EAAAA,EAAA3C,MAAOhL,EACnC4N,iBACuB,QAArBC,EAAAzW,aAAa,EAAbA,EAAeoW,cAAM,IAAAK,OAAA,EAAAA,EAAEC,cACvB9N,EACF8K,kBACuB,QAArBiD,EAAA3W,aAAa,EAAbA,EAAeoW,cAAM,IAAAO,OAAA,EAAAA,EAAEjD,mBACvB9K,EACF+K,iBACuB,QAArBiD,EAAA5W,aAAa,EAAbA,EAAeoW,cAAM,IAAAQ,OAAA,EAAAA,EAAEjD,kBACvB/K,GAEEiO,EAAuC,CAC3CrsB,MAC+B,QAA7BssB,EAAA9W,aAAa,EAAbA,EAAe6W,oBAAc,IAAAC,OAAA,EAAAA,EAAAtsB,OAAQqe,EACvC4K,aAC6B,QAA3BsD,EAAA/W,aAAa,EAAbA,EAAe6W,oBAAY,IAAAE,OAAA,EAAAA,EAAEtD,cAC7B5K,GACF+K,KAAkC,QAA7BoD,EAAAhX,aAAa,EAAbA,EAAe6W,oBAAc,IAAAG,OAAA,EAAAA,EAAApD,MAAO/K,GACzC6K,kBAC6B,QAA3BuD,EAAAjX,aAAa,EAAbA,EAAe6W,oBAAY,IAAAI,OAAA,EAAAA,EAAEvD,mBAC7B7K,GACF8K,iBAC6B,QAA3BuD,EAAAlX,aAAa,EAAbA,EAAe6W,oBAAY,IAAAK,OAAA,EAAAA,EAAEvD,kBAC7B9K,IAEEsO,EAAiE,CACrE,CAACrX,EAAc2V,KAAM9I,aAAM,EAANA,EAAQyK,UAC7B,CAACtX,EAAc4V,aAAc/I,aAAM,EAANA,EAAQ0K,iBACrC,CAACvX,EAAc6V,kBAAmBhJ,aAAM,EAANA,EAAQ2K,YAC1C,CAACxX,EAAc8V,iBAAkBjJ,aAAM,EAANA,EAAQ4K,WACzC,CAACzX,EAAc+V,iBAAkBlJ,aAAM,EAANA,EAAQ6K,kBAG3C,GAAI,WAAY5mB,GAAQ6mB,MAAMC,QAAQ9mB,EAAKqa,QACzC,GAAIra,EAAKqa,OAAOhO,OAAS,GAA+B,iBAAnBrM,EAAKqa,OAAO,GAC/C,IAAK,MAAMU,KAAS/a,EAAKqa,OAA2B,CAClD,MAAMG,EAAUjB,EAAiBkB,OAAM/U,OAAAQ,OAAAR,OAAAQ,OAAAR,OAAAQ,OAAA,CACrCwU,MAAO,QACPC,OAAQI,EACR/V,KAAM4f,EAAY7J,GAClBgM,YAAa7B,EAAmBnK,IAC7BoK,IACH9D,MAAOmE,EAAOzK,GACdiM,YAAaf,EAAalL,KACtB/a,EAAKqkB,QAAU,CAAE4C,UAAWjnB,EAAKqkB,SAAY,CAAE,IAErD3I,GAA2B,CACzBlB,UACAoB,YAAauJ,EAAavJ,YAC1BD,aAAc,CACZzM,EAAc2V,IACd3V,EAAc6V,iBACd7V,EAAc8V,iBACdxf,SAASuV,GACP,GACAyK,EAAOzK,GACXgB,OAAQwK,EAAcxL,KAExB,MAAMmC,EACJ,YAAY5R,OAAOyP,MAClB/a,EAAKqkB,QAAU,IAAIrkB,EAAKqkB,UAAY,UACjCpH,GAAgB,CAACzC,UAAS0C,gBAChCyH,EAASuC,KAAK,CAAE1M,UAAS0C,eAC1B,MAED,IAAK,MAAMiK,KAAYnnB,EAAKqa,OAGvB,CACH,MAAM9V,EAAM4iB,EAASpM,MACfP,EAAUjB,EAAiBkB,OAAM/U,OAAAQ,OAAAR,OAAAQ,OAAAR,OAAAQ,OAAA,CACrCwU,MAAO,QACPC,OAAQpW,EACRS,KAAM4f,EAAYrgB,GAClBwiB,YAAa7B,EAAmB3gB,IAC7B4gB,IACH9D,MAAOmE,EAAOjhB,GACdyiB,YAAaf,EAAa1hB,KACtBvE,EAAKqkB,QAAU,CAAE4C,UAAWjnB,EAAKqkB,SAAY,CAAE,IAE/CnH,EACJiK,EAASC,cACT,YAAY9b,OAAO/G,MAAUvE,EAAKqkB,QAAU,IAAIrkB,EAAKqkB,UAAY,UAC7DpH,GAAgB,CAACzC,UAAS0C,gBAChCyH,EAASuC,KAAK,CAAE1M,UAAS0C,eAC1B,CAIL,MAAO,CACLyH,SAAUA,EAASpK,KAAK1iB,GAAMA,EAAE2iB,UAChCxY,UAAWuX,KAEd,CGoC+B8N,CAAmB,CAC3ClF,gBAAiBpoB,KAAKooB,gBACtBniB,KAAMiD,EACNmM,cAAerV,KAAKqV,cACpB2M,OAAQhiB,KAAKgiB,SAIjBhiB,KAAKioB,yBAAyBnpB,IAAI8R,EAAS,CACzCga,SAAUD,EAAcC,UAAY,GACpC3iB,UAAW0iB,MAEd,CAGO,oBAAA4C,CAAqB7E,SAC3B,MAAM9X,EAAU,UAAU8X,IACpB8E,EAAcxtB,KAAKioB,yBAAyBrpB,IAAIgS,GACtD,OAA8B,QAAtBpN,EAAAgqB,aAAW,EAAXA,EAAavlB,iBAAS,IAAAzE,OAAA,EAAAA,EAAEyE,YAAoC,IACrE,CAEa,iBAAAwlB,CAAkB/E,sDAC9B,MAAMzgB,EAAYjI,KAAKutB,qBAAqB7E,GAC5C,IAAKzgB,EACH,OAAO,KAGT,IACE,MAAMylB,QAA6BzlB,EAAUyZ,UAC7C,eAAOje,UAAAD,EAAAkqB,aAAA,EAAAA,EAAiBC,8BAAU,yBAAIrN,SAAU,IACjD,CAAC,MAAOxiB,GACP,MAAM8vB,EAA6B,QAAVhnB,EAAA9I,aAAA,EAAAA,EAAG4J,aAAO,IAAAd,OAAA,EAAAA,EAAAoU,YAQnC,MAPAhb,KAAK2W,eAAe7Y,EAAG,CACrB+T,QAAS,sBACTG,WAAY0W,EACZpY,SAAU,CACR1S,KAAM,uBAGJ,IAAIsF,EAAY,CACpBvD,KAAMM,EAAawC,oBACnBc,QAAS,CACPzD,QAAS8tB,IAGd,IACF,CAEM,iBAAAnD,CAAkB7Z,EAAkB,OACzB,QAAZA,GACF5Q,KAAKioB,yBAAyB4F,SAAQ,CAACL,EAAaM,KAClD9tB,KAAKuqB,eAAeuD,EAAI,IAE1B9tB,KAAKioB,yBAAyB8F,UAE9B/tB,KAAKuqB,eAAe3Z,GACpB5Q,KAAKioB,yBAAyB+F,OAAOpd,GAExC,CAMO,cAAA2Z,CAAe3Z,GACrB,MAAM4c,EAAcxtB,KAAKioB,yBAAyBrpB,IAAIgS,GACtD,IAAK4c,EAAa,OAElB,MAAM5C,SAAEA,GAAa4C,EACjB5C,GAAYA,EAAStY,OAAS,GAChCsY,EAASiD,SAASpN,IAChB,IACMA,GAAsC,mBAApBA,EAAQwN,SAC5BxN,EAAQwN,SAEX,CAAC,MAAOvmB,GACPL,QAAQkc,KAAK,kDAAkD3S,MAAalJ,GAC5E1H,KAAK2W,eAAejP,EAAO,CACzBmK,QAAS,sBACTvB,SAAU,CACR1S,KAAM,iBACNgT,YAGL,IAGN,CAEY,WAAAzR,4CACX,IACE,aAAaJ,EACXiB,KAAKhB,QACLgB,KAAKsV,aACLtV,KAAKiW,gBAAgB/W,OAExB,CAAC,MAAOpB,GAOP,MANAkC,KAAK2W,eAAe7Y,EAAG,CACrB+T,QAAS,eACTvB,SAAU,CACR1S,KAAM,iBAGJkX,EACJ,CACEtB,UAAWvT,EAAaK,sBAE1BxC,EAEH,IACF,CAGa,qBAAA4sB,4CACZ,GAAG1qB,KAAKooB,gBAAiB,OAAOpoB,KAAKooB,sBAC/BpoB,KAAK2X,qBACX,MAAM2H,SAAEA,EAAQC,UAAEA,GAAcvf,KAAK6E,aACrC7E,KAAKooB,sBHnTH,UAAoCppB,QACxCA,EAAOC,OACPA,EAAMqgB,SACNA,EAAQC,UACRA,6CAEA,OAAO/B,EAAQiC,KAAK,CAClBC,QAASJ,EACTK,SAAUJ,EACVK,eAAgB,IAAW1iB,EAAA8C,UAAA,OAAA,GAAA,YAAC,aAAM2c,EAAc3d,EAASC,EAAO,IAChE4gB,QAAS,CACPC,SAAUtC,EAAQuC,SAASC,MAC3BpO,IAAK4L,EAAQyC,IAAIC,SAGtB,CGoSgCgO,CAAoB,CAC/C5O,SAAUA,EACVC,UAAWA,EACXvgB,QAASgB,KAAKhB,QACdC,OAAQe,KAAKsV,iBAEhB,CAGK,yBAAA/I,CACJC,EACAC,EACA0hB,4CAEA,IACE,aAAa5hB,EACXC,EACAC,EACA0hB,EAEH,CAAC,MAAOrwB,GAOP,MANAkC,KAAK2W,eAAe7Y,EAAG,CACrB+T,QAAS,6BACTvB,SAAU,CACR1S,KAAM,+BAGJoH,EAA4BlH,EACnC,IACF,CAGK,gBAAAuhB,EAAiBC,SACrBA,EAAQC,UACRA,EAAStZ,KACTA,6CAEA,aAAaoZ,GAAiB,CAC5BC,SAAUA,EACVC,UAAWA,EACXtZ,OACAjH,QAASgB,KAAKhB,QACdC,OAAQe,KAAKsV,iBAEhB,CAED,aAAA2C,CAAcC,GACZlY,KAAK0V,UAAYwC,CAClB,CAEK,SAAAb,EAAUpI,KACdA,EAAI4J,eACJA,EAAcnM,UACdA,EAEA6I,UAAWwD,2DAOL/Y,KAAK2X,qBACX,MAAM3B,QAAiBhW,KAAKmY,aAAanY,KAAKiW,gBAAgB/W,SACxDogB,SAAEA,EAAQC,UAAEA,EAASza,SAAEA,GAAa9E,KAAK6E,cACzCwU,WAAEA,EAAUhB,WAAEA,EAAa,GAAEE,UAAEA,EAAY,GAAEH,MAAEA,EAAQ,IAAOpC,EAC9D4S,EAAoB5oB,KAAK+X,qBAC/B,IAAIiE,EACAoS,EAAsD,KACtDhS,EAA2B,KAC3BiS,EAAyH,KACzHC,GAA0B,EAE9B,MAAMC,EAAsB,IAAWrxB,EAAA8C,UAAA,OAAA,GAAA,qBACF,QAA9BmH,EAAuB,QAAvBP,EAAA5G,KAAKmoB,0BAAkB,IAAAvhB,OAAA,EAAAA,EAAEiV,aAAK,IAAA1U,OAAA,EAAAA,EAAEmL,UACjCtS,KAAKmoB,yBAA2BnoB,KAAKyb,kBACrCpC,EACArZ,KAAK6E,aAAcC,SAASC,IAGlC,IAEA,IAAK8T,EAAgB,CACnB,GAAoB,iBAAT5J,EAMT,GALAmN,EAAYnN,EACZ+M,EAAgB,CACdoN,WAAYna,GAGV2Z,EAAmB,OACf2F,IACN,MAAMC,EAA6C,QAA9B/qB,EAAuB,QAAvBD,EAAAxD,KAAKmoB,0BAAkB,IAAA3kB,OAAA,EAAAA,EAAEqY,aAAK,IAAApY,OAAA,EAAAA,EAAEgrB,MAClDlnB,GAASA,EAAK+Y,OAAO8I,aAAena,IAEvC,IAAKuf,EACH,MAAM,IAAIrrB,MAAM,8CAElB,MAAMurB,IAAsBF,EAAalO,OAAOkI,gBAE3CkG,UACG1uB,KAAKytB,kBAAkBxe,IAG3Byf,IACFN,EAAmB,CAAEzE,eAAgB6E,EAAalO,OAAOkI,iBAE5D,YACOxoB,KAAKytB,kBAAkBxe,OAE1B,CACL,MAAM4Z,EAAald,OAAAQ,OAAAR,OAAAQ,OAAA,CAAA,EACd8C,GAAK,CACR6Z,YAAa7Z,EAAM6Z,YAAYlB,QAAQ,OAAQ,IAC/CmB,iBAAkB9Z,EAAM8Z,iBAAiBnB,QAAQ,OAAQ,IACzDoB,gBAAiB/Z,EAAM+Z,gBAAgBpB,QAAQ,OAAQ,IACvDqB,IAAKha,EAAMga,IAAIrB,QAAQ,OAAQ,IAC/BsB,gBAAiBja,EAAMia,gBAAgBtB,QAAQ,OAAQ,MAEzD5L,QAAsBqD,GAAiB,CACrCC,SAAUA,EACVC,UAAWA,EACXtZ,KAAM4iB,EACN7pB,QAASgB,KAAKhB,QACdC,OAAQe,KAAKsV,eAEf8G,EAAYJ,EAAcoN,WAEtBR,IACFyF,EAA0B,CACxBxuB,KAAMmc,EAAckN,gBACpBha,OAAQ8M,EAAc8M,YACtBS,YAAavN,EAAc+M,iBAC3BS,WAAYxN,EAAcgN,gBAC1BC,IAAKjN,EAAciN,KAErBqF,GAA0B,EAE7B,CAED,GAAIA,EAAyB,CAC3B,IAAKlS,IAAciS,EACjB,MAAM,IAAIlrB,MAAM,iDAElB,IAAIulB,EAAwB,KAC5B,IACI,MAAMS,QAAqBnpB,KAAK+b,kBAC5B1C,EACAvU,eAAAA,EAAUC,GACV,CAAEqkB,WAAYhN,IACd,GAEJsM,EAASS,EAAaC,WACtB,MAAMta,EAAUqa,EAAaE,SAC7B,IAAKva,EACD,MAAM,IAAI3L,MAAM,wCAGpB,MAAMmmB,QAAmBtpB,KAAKgY,wBAC9B,IAAIha,EACJ,IACIA,QAAesrB,EAAWtZ,QAAQ,CAC9BE,WAAYme,EACZvf,UACAuB,eAAgB,CACZiI,UAAWD,GAAc,GACzBG,SAAUD,GAAa,GACvBH,MAAOA,GAAS,IAEpB7H,WAAY8I,EACZlJ,SAAUnQ,KAAKmQ,UAAY,OAElC,CAAC,MAAOsZ,GACL,MAAM3U,EACF,CACItB,UAAWvT,EAAaiB,sBACxBpB,QAASI,EAAYD,EAAayC,wBAEtC+mB,EAEP,CACD2E,EAAmB,CAAEzE,eAAgB3rB,EAAO2rB,sBAEtC3pB,KAAK+b,kBACP1C,EACAvU,aAAQ,EAARA,EAAUC,GACV,CACIqkB,WAAYhN,EACZoM,gBAAiB4F,EAAiBzE,gBAG7C,CAAA,MAAOjiB,GAWJ,MAVGghB,UACO1oB,KAAKqc,mBAAmBqM,IAElC1oB,KAAK2W,eAAejP,EAAO,CACzBmK,QAAS,UACTG,WAAY0W,GAAU1oB,KAAKyW,gBAC3BnG,SAAU,CACR1S,KAAM,kBAGJ8J,CACT,CACF,CACF,CAED,aAAa1H,KAAK4Y,gBAAgB,CAChC3J,KAAM+M,EACNnD,iBACA7C,WACAtJ,YACA6I,UAAWwD,EACXD,uBAAuBsV,aAAgB,EAAhBA,EAAkBzE,iBAAkBf,MAE9D,CAGK,gBAAA+F,CACJvW,4CAEA,IACE,MAAMzR,EAAM,GAAG3G,KAAKhB,2BACdiH,EAAO,CAAEmS,MAAOA,GAChBhT,QAAiBhG,MAAMuH,EAAK,CAChCuD,OAAQ,OACR7K,QAAS,CACP,eAAgB,mBAChBC,cAAe,SAASU,KAAKsV,gBAE/BpW,OAAQc,KAAKiW,gBAAgB/W,OAC7BU,KAAMwG,KAAKC,UAAUJ,KAGvB,GAAIb,EAASmK,GACX,aAAcnK,EAAS7F,OACzB,YAAY4F,EAAmBC,EAChC,CAAC,MAAOtH,GAOP,MANAkC,KAAK2W,eAAe7Y,EAAG,CACrB+T,QAAS,oBACTvB,SAAU,CACR1S,KAAM,sBAGJoH,EAA4BlH,EACnC,IACF,CAGK,WAAAgc,CACJZ,4CAEA,IACE,MAAMvS,EAAM,GAAG3G,KAAKhB,yBACdiH,EAAOiT,EACP9T,QAAiBhG,MAAMuH,EAAK,CAChCuD,OAAQ,OACR7K,QAAS,CACP,eAAgB,mBAChBC,cAAe,SAASU,KAAKsV,gBAE/B1V,KAAMwG,KAAKC,UAAUJ,KAEvB,GAAIb,EAASmK,GAAI,aAAcnK,EAAS7F,OACxC,YAAY4F,EAAmBC,EAChC,CAAC,MAAOtH,GAOP,MANAkC,KAAK2W,eAAe7Y,EAAG,CACrB+T,QAAS,eACTvB,SAAU,CACR1S,KAAM,iBAGJoH,EAA4BlH,EACnC,IACF,CAGK,aAAAyc,CACJpB,4CAEA,IACE,MAAMxS,EAAM,GAAG3G,KAAKhB,2BAA2Bma,EAAac,wBACtDhU,EAAOkT,EACP/T,QAAiBhG,MAAMuH,EAAK,CAChCuD,OAAQ,OACR7K,QAAS,CACP,eAAgB,mBAChBC,cAAe,SAASU,KAAKsV,gBAE/B1V,KAAMwG,KAAKC,UAAUJ,KAEvB,GAAIb,EAASmK,GAAI,aAAcnK,EAAS7F,OACxC,YAAY4F,EAAmBC,EAChC,CAAC,MAAOtH,GAOP,MANAkC,KAAK2W,eAAe7Y,EAAG,CACrB+T,QAAS,iBACTvB,SAAU,CACR1S,KAAM,mBAGJoH,EAA4BlH,EACnC,IACF,CAGK,mBAAAmO,CACJ2iB,4CAEA,MAAMC,QAAuB5iB,EAC3BjM,KAAKhB,QACLgB,KAAKsV,aACLsZ,GAGF,SADsB5uB,KAAK8uB,gBAAgBD,GAC9B,OAAOA,IACrB,CAGK,eAAAC,CAAgBD,4CAEpB,OADA7uB,KAAKkW,WAAWnQ,WAAW8oB,SACd7uB,KAAKmX,mBAAmB0X,KACtC,CAGK,uBAAAE,CACJC,4CAEA,IACE,MAAMC,MACJA,EAAK/W,MACLA,EAAKlC,SACLA,EAAQgG,cACRA,EAAatB,WACbA,EAAUhO,UACVA,EAAS4D,SACTA,EAAQH,SACRA,EAAQ0I,eACRA,GACEmW,EAEEE,QAAuBlvB,KAAK2X,qBAE5BwX,QACEnvB,KAAK2uB,iBAAiB3Y,EAASoC,OAEvC,KACE+W,GACA,eAAgBA,GAChBD,GACA,cAAeA,GA8Ff,MAAM,IAAIzvB,EAAc,CACtBE,KAAM,MACNC,KAAMsvB,EACNrvB,KAAM,aACNC,QAAS,wCAjGX,CACA,MAAMsvB,EAAgC,CACpCtqB,SAAU9E,KAAKsV,aACfgE,OAAQ6V,EAAe9V,WACvBE,mBAAoB,KACpBC,oBAAqB,KACrBC,OAAQvB,EACRe,UAAWiW,EAAejW,UAC1BS,aAAa,EACbC,MAAOsV,EAAMtV,OAGT0V,QAAoBrvB,KAAK8Z,YAAYsV,GAIrCrV,GAFM,IAAIlW,MAEOmW,cAEvB,KACE,OAAQqV,GACR,OAAQF,GACR,aAAcD,GAgEd,MAAM,IAAIzvB,EAAc,CACtBE,KAAM,MACNC,KAAMyvB,EACNxvB,KAAM,aACNC,QAAS,0BAnEX,CACA,MAAMqZ,EAAqC,CACzCc,YAAaiV,EAAepqB,SAASC,GACrC0U,OAAQvB,EACRiC,KAAMJ,EACNK,SAAUiV,EAAY3Y,GACtBwD,UAAWiV,EAAezY,IAGtB4Y,QAAsBtvB,KAAKua,cAAcpB,GAE/C,IAAIC,EAEJ,MAAMJ,aAAEA,EAAYlU,SAAEA,GAAaoqB,EAE/BlW,EAAaxM,aAAewM,EAAavM,aAC3C2M,QAA8B7M,EAC5ByM,EAAaxM,YACbwM,EAAavM,WACbC,IAIJ,MAAMR,EAAWP,OAAAQ,OAAAR,OAAAQ,OAAA,CACftM,KAAMmW,EAASnW,KACf0Y,UAAWvC,EAASuZ,SACpB/U,aAAcxE,EAASoC,MACvBqC,aAAczE,EAASyC,MACvBiC,WAAYA,EACZC,WAAY,QACZC,iBAAkB,EAClBC,QAAS,IACTC,iBAAkB,IAClBrB,OAAQvB,EACR6C,WAAY,WACZC,YAAa,cACbC,kBAAmB7B,GAEf,KACJ8B,SAAU,GACVd,SAAU,OAAQiV,GAAeA,EAAY3Y,GAC7CyE,YAAarW,EAASC,GACtBuS,WAAY,OAAQgY,GAAiBA,EAAcvqB,GACnDqW,OAAQ,MACR9K,SAAUA,EACV+K,aAAc3X,IACdyM,SAAUA,GACJ0I,EACF,CAAEA,kBACF,CAAE5J,KAAM+M,IACwB,oBAAzB5P,qBACP,CAAEC,qBAAsBD,sBACxB,CAAA,GAGAyiB,QAAuB5iB,EAC3BjM,KAAKhB,QACLgB,KAAKsV,aACLpJ,GAGF,SADsBlM,KAAK8uB,gBAAgBD,GAC9B,OAAOA,CACrB,CAQF,CAQF,CAAC,MAAO/wB,GAOP,MANAkC,KAAK2W,eAAe7Y,EAAG,CACrB+T,QAAS,6BACTvB,SAAU,CACR1S,KAAM,6BAGJoH,EAA4BlH,EACnC,IACF,CAGK,oBAAA0xB,CACJ7Z,EACAiG,EACA3V,4CAEA,UACQjG,KAAK2X,qBAEX,MAAMvS,QAAiBhG,MACrB,GAAGY,KAAKhB,2BAA2B4F,EAAc5E,KAAK6E,uBACtD,CACEqF,OAAQ,OACR7K,QAAS,CACPC,cAAe,UAAUqW,IACzB,aAAciG,EACd,eAAgB,oBAElBhc,KAAMwG,KAAKC,UAASsF,OAAAQ,OAAA,CAAA,EAAMlG,MAI9B,GAAIb,EAASmK,GACX,aAAcnK,EAAS7F,OACzB,YAAY4F,EAAmBC,EAChC,CAAC,MAAOsC,GAOP,MANA1H,KAAK2W,eAAejP,EAAO,CACzBmK,QAAS,yBACTvB,SAAU,CACR1S,KAAM,0BAGJoH,EAA4B0C,EACnC,IACF,CAGK,kBAAA+nB,CACJ7T,EACAQ,EAAoB,6CAEpB,UACQpc,KAAK2X,qBACX,MAAMvS,QAAiBhG,MACrB,GAAGY,KAAKhB,2BAA2B4F,EAAc5E,KAAK6E,uBAAuBuX,IAC7E,CACElS,OAAQ,SACR7K,QAAS,CACPC,cAAe,SAASsc,IACxB,eAAgB,oBAElB1c,OAAQc,KAAKiW,gBAAgB/W,SAIjC,GAAIkG,EAASmK,GAAI,OAAO,EACxB,YAAYpK,EAAmBC,EAChC,CAAC,MAAOsC,GAQP,MAPA1H,KAAK2W,eAAejP,EAAO,CACzBmK,QAAS,uBACTG,WAAYoK,EACZ9L,SAAU,CACR1S,KAAM,wBAGJoH,EAA4B0C,EACnC,IACF,CAGK,aAAAgoB,4CACJ,IACE,MAAMC,QC97BN,SAAgCna,EAAuBoa,EAA4BC,EAAgB,gDAAiD3wB,EAA0C,+CAChM,IACI,MAAMkG,QAAiBhG,MACnB,GAAGoW,2BAAuCqa,IAC1C,CACI3lB,OAAQ,MACR7K,QAAS,CACLC,cAAe,SAASswB,IACxB,eAAgB,oBAEpB1wB,WAGR,GAAIkG,EAASmK,GAAI,aAAanK,EAAS7F,OACvC,YAAY4F,EAAmBC,EAClC,CAAC,MAAOsC,GACL,MAAM1C,EAA4B0C,EACrC,IACJ,CD46BiCooB,CAC1B9vB,KAAKhB,QACLgB,KAAKsV,cAEDya,EACJJ,GACAA,EAAuB,SACvBA,EAAuB,QAAErd,OAAS,EAC9Bqd,EAAuB,QACvB,GAiBN,OAhBA3vB,KAAKgoB,WAAa+H,EACflG,QACEC,GAA0D,UAAnCA,EAAQC,SAASC,gBAE1CxJ,KAAKsJ,GACKne,OAAAQ,OAAA,CACPuK,GAAIoT,EAAQ/kB,GACZ8T,eAAgBiR,EAAQjR,eACxBoR,SAAUH,EAAQG,SAClBF,SAAUD,EAAQC,UACfvC,GAAwBsC,EAAQjR,mBAItCqR,MAAK,CAACC,EAAQC,IAAWD,EAAEF,SAAWG,EAAEH,WAEpCjqB,KAAKgoB,UACb,CAAC,MAAOlqB,GAEP,OADAuJ,QAAQK,MAAM,qBAAsB5J,GAC7B,EACR,IACF,EE/9BG,SAAUkyB,GAAmBC,GAEjC,MADc,cACDC,KAAKD,IAAeE,GAAUF,EAC7C,CAEM,SAAUG,GAAuBvwB,GAErC,MADc,kCACDqwB,KAAKrwB,EACpB,CAEM,SAAUwwB,GAAYpH,GAE1B,MADc,YACDiH,KAAKjH,EACpB,CAcM,SAAUqH,GAAwBC,GAEtC,MADc,oBACDL,KAAKK,EACpB,CAEM,SAAUC,GAAuBC,GAErC,IADc,UACHP,KAAKO,GACd,OAAO,EAET,MAAMC,GAAc,IAAI7sB,MAAO8sB,cAAgB,IAC/C,OAAOC,SAASH,EAAM,KAAOC,CAC/B,CAEA,MAAMP,GAAaU,IACjB,MAAMC,EAAM,GAAGD,IACZE,MAAM,IACNC,UACAxQ,KAAKyQ,GAAM/c,OAAO0c,SAASK,KACxBC,EAAYJ,EAAIK,QACtB,IAAIC,EAAMN,EAAIO,QACZ,CAACC,EAAKC,EAAKjO,IACTA,EAAI,GAAM,EAAIgO,EAAMC,EAAMD,IAAQC,GAAO,GAAK,EAAIA,EAAM,EAAIA,IAC9D,GAGF,OADAH,GAAOF,EACAE,EAAM,IAAO,CAAC","x_google_ignoreList":[0]}
|
package/dist/types/commons.d.ts
CHANGED
|
@@ -119,6 +119,10 @@ export interface IInlineCheckoutBaseOptions<T extends CustomizationOptions = Cus
|
|
|
119
119
|
customization?: T;
|
|
120
120
|
tdsIframeId?: string;
|
|
121
121
|
tonderPayButtonId?: string;
|
|
122
|
+
sdkInfo?: {
|
|
123
|
+
name: string;
|
|
124
|
+
version: string;
|
|
125
|
+
};
|
|
122
126
|
}
|
|
123
127
|
export interface IInlineLiteCheckoutOptions extends IInlineCheckoutBaseOptions {
|
|
124
128
|
collectorIds?: {
|
package/package.json
CHANGED
package/rollup.config.js
CHANGED
|
@@ -76,7 +76,8 @@ export class BaseInlineCheckout<T extends CustomizationOptions = CustomizationOp
|
|
|
76
76
|
tdsIframeId,
|
|
77
77
|
callBack = () => {},
|
|
78
78
|
baseUrlTonder,
|
|
79
|
-
tonderPayButtonId
|
|
79
|
+
tonderPayButtonId,
|
|
80
|
+
sdkInfo,
|
|
80
81
|
}: IInlineCheckoutBaseOptions) {
|
|
81
82
|
this.apiKeyTonder = apiKeyTonder || apiKey || "";
|
|
82
83
|
this.returnUrl = returnUrl;
|
|
@@ -100,12 +101,14 @@ export class BaseInlineCheckout<T extends CustomizationOptions = CustomizationOp
|
|
|
100
101
|
});
|
|
101
102
|
this.tdsIframeId = tdsIframeId;
|
|
102
103
|
|
|
104
|
+
const resolvedSdkInfo = sdkInfo || SDK_INFO;
|
|
105
|
+
|
|
103
106
|
// Initialize telemetry
|
|
104
107
|
this.telemetry = new SdkTelemetryClient({
|
|
105
108
|
endpoint: getTelemetryEndpoint(this.mode),
|
|
106
109
|
apiKey: this.apiKeyTonder,
|
|
107
|
-
platform:
|
|
108
|
-
platform_version:
|
|
110
|
+
platform: resolvedSdkInfo.name,
|
|
111
|
+
platform_version: resolvedSdkInfo.version,
|
|
109
112
|
mode: this.mode || "stage",
|
|
110
113
|
});
|
|
111
114
|
}
|
|
@@ -48,6 +48,7 @@ import CollectorContainer from "skyflow-js/types/core/external/collect/collect-c
|
|
|
48
48
|
import Skyflow from "skyflow-js";
|
|
49
49
|
import { buildPublicAppError } from "../shared/utils/appError";
|
|
50
50
|
import { MESSAGES_EN } from "../shared/constants/messages";
|
|
51
|
+
import { SDK_INFO } from "../helpers/sdkInfo";
|
|
51
52
|
|
|
52
53
|
declare const MP_DEVICE_SESSION_ID: string | undefined;
|
|
53
54
|
|
|
@@ -66,7 +67,17 @@ export class LiteCheckout extends BaseInlineCheckout implements ILiteCheckout{
|
|
|
66
67
|
private customerCardsCache: ICustomerCardsResponse | null = null;
|
|
67
68
|
|
|
68
69
|
constructor({ apiKey, mode, returnUrl, callBack, apiKeyTonder, baseUrlTonder, customization, collectorIds, events }: IInlineLiteCheckoutOptions) {
|
|
69
|
-
super({
|
|
70
|
+
super({
|
|
71
|
+
mode,
|
|
72
|
+
apiKey,
|
|
73
|
+
returnUrl,
|
|
74
|
+
callBack,
|
|
75
|
+
apiKeyTonder,
|
|
76
|
+
baseUrlTonder,
|
|
77
|
+
customization,
|
|
78
|
+
tdsIframeId: collectorIds && 'tdsIframe' in collectorIds ? collectorIds?.tdsIframe : "tdsIframe",
|
|
79
|
+
sdkInfo: SDK_INFO,
|
|
80
|
+
});
|
|
70
81
|
this.skyflowInstance = null;
|
|
71
82
|
this.events = events || {}
|
|
72
83
|
}
|
|
@@ -17,7 +17,6 @@ export class SdkTelemetryClient {
|
|
|
17
17
|
private config: ITelemetryConfig;
|
|
18
18
|
private readonly REQUEST_TIMEOUT_MS = 1200;
|
|
19
19
|
private readonly MAX_MESSAGE_LENGTH = 500;
|
|
20
|
-
private readonly MAX_STACK_LENGTH = 15000;
|
|
21
20
|
|
|
22
21
|
constructor(config: ITelemetryConfig) {
|
|
23
22
|
this.config = config;
|
|
@@ -48,7 +47,7 @@ export class SdkTelemetryClient {
|
|
|
48
47
|
return {
|
|
49
48
|
name: error.name || "Error",
|
|
50
49
|
message: this.truncate(error.message || "Unknown error", this.MAX_MESSAGE_LENGTH),
|
|
51
|
-
stack: error.stack
|
|
50
|
+
stack: error.stack || undefined,
|
|
52
51
|
};
|
|
53
52
|
}
|
|
54
53
|
|
package/src/types/commons.ts
CHANGED
|
@@ -126,6 +126,10 @@ export interface IInlineCheckoutBaseOptions<T extends CustomizationOptions = Cus
|
|
|
126
126
|
customization?: T;
|
|
127
127
|
tdsIframeId?: string,
|
|
128
128
|
tonderPayButtonId?: string
|
|
129
|
+
sdkInfo?: {
|
|
130
|
+
name: string;
|
|
131
|
+
version: string;
|
|
132
|
+
}
|
|
129
133
|
}
|
|
130
134
|
|
|
131
135
|
export interface IInlineLiteCheckoutOptions
|
package/tsconfig.json
CHANGED
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
"resolveJsonModule": true, /* Enable importing .json files. */
|
|
11
11
|
/* Emit */
|
|
12
12
|
"declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
|
|
13
|
+
"sourceMap": true, /* Generate source map files for emitted JavaScript. */
|
|
14
|
+
"inlineSources": true, /* Include source content inside source maps. */
|
|
13
15
|
"outDir": "./dist", /* Specify an output folder for all emitted files. */
|
|
14
16
|
"esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
|
|
15
17
|
"forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
|