@tonder.io/ionic-lite-sdk 0.0.68-beta.DEV-2106.11 → 0.0.68

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/README.md CHANGED
@@ -382,14 +382,15 @@ Public SDK methods that fail due to API/SDK execution return an `AppError` (with
382
382
  Notes:
383
383
  - `statusCode` comes from HTTP response when available; otherwise defaults to `500`.
384
384
  - `details.systemError` comes from backend error code when available; otherwise defaults to `APP_INTERNAL_001`.
385
+ - In card-on-file flow failures, the SDK returns `CARD_ON_FILE_DECLINED`.
385
386
 
386
387
  ### Public method error mapping
387
388
 
388
389
  | Method | Returned `error.code` |
389
390
  |---|---|
390
- | `payment(data)` | `PAYMENT_PROCESS_ERROR` |
391
+ | `payment(data)` | `PAYMENT_PROCESS_ERROR` or `CARD_ON_FILE_DECLINED` |
391
392
  | `getCustomerCards()` | `FETCH_CARDS_ERROR` |
392
- | `saveCustomerCard(cardData)` | `SAVE_CARD_ERROR` |
393
+ | `saveCustomerCard(cardData)` | `SAVE_CARD_ERROR` or `CARD_ON_FILE_DECLINED` |
393
394
  | `removeCustomerCard(cardId)` | `REMOVE_CARD_ERROR` |
394
395
  | `getCustomerPaymentMethods()` | `FETCH_PAYMENT_METHODS_ERROR` |
395
396
 
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{get as e}from"lodash";import t from"skyflow-js";function r(e,t,r,o){return new(r||(r=Promise))((function(n,i){function s(e){try{d(o.next(e))}catch(e){i(e)}}function a(e){try{d(o.throw(e))}catch(e){i(e)}}function d(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}d((o=o.apply(e,t||[])).next())}))}function o(e,t,r,o){if("a"===r&&!o)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!o:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?o:"a"===r?o.call(e):o?o.value:t.get(e)}function n(e,t,r,o,n){if("m"===o)throw new TypeError("Private method is not writable");if("a"===o&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===o?n.call(e,r):n?n.value=r:t.set(e,r),r}function i(e,t,o){return r(this,void 0,void 0,(function*(){const r=yield fetch(`${e}/api/v1/payments/business/${t}`,{headers:{Authorization:`Token ${t}`},signal:o});return yield r.json()}))}var s;"function"==typeof SuppressedError&&SuppressedError,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"}(s||(s={}));const a={[s.INIT_ERROR]:"Error initializing the SDK.",[s.INVALID_TYPE]:"SDK Type invalid.",[s.STATE_ERROR]:"Error updating SDK state.",[s.FETCH_BUSINESS_ERROR]:"Error retrieving merchant information.",[s.INVALID_CONFIG]:"Required configuration options.",[s.MERCHANT_CREDENTIAL_REQUIRED]:"Merchant credential required.",[s.INVALID_PAYMENT_REQUEST]:"The payment data must be of type: :::interface:::.",[s.INVALID_PAYMENT_REQUEST_CARD_PM]:"The fields card and payment_method cannot be provided together.",[s.TYPE_SDK_REQUIRED]:"SDK type required.",[s.ENVIRONMENT_REQUIRED]:"Environment required.",[s.FETCH_CARDS_ERROR]:"Error retrieving cards.",[s.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.",[s.SAVE_CARD_ERROR]:"Error saving the card.",[s.REMOVE_CARD_ERROR]:"Error deleting the card.",[s.CREATE_PAYMENT_ERROR]:"Error creating the payment.",[s.PAYMENT_PROCESS_ERROR]:"There was an issue processing the payment.",[s.CARD_SAVED_SUCCESSFULLY]:"Card saved successfully.",[s.CARD_REMOVED_SUCCESSFULLY]:"Card deleted successfully.",[s.SAVE_CARD_PROCESS_ERROR]:"Error processing card data.",[s.START_CHECKOUT_ERROR]:"Error processing the payment.",[s.CREATE_ORDER_ERROR]:"Error creating the order.",[s.BUSINESS_ID_REQUIRED]:"Business ID is required.",[s.CLIENT_ID_REQUIRED]:"Client ID is required.",[s.INVALID_AMOUNT]:"Invalid amount.",[s.INVALID_ITEMS]:"Invalid items.",[s.CUSTOMER_OPERATION_ERROR]:"Error registering or fetching customer",[s.INVALID_EMAIL]:"Invalid email.",[s.FETCH_PAYMENT_METHODS_ERROR]:"Error retrieving active payment methods.",[s.INVALID_VAULT_TOKEN]:"An invalid vault token response was received.",[s.VAULT_TOKEN_ERROR]:"Error retrieving the vault token.",[s.SECURE_TOKEN_ERROR]:"Error getting secure token.",[s.SECURE_TOKEN_INVALID]:"Invalid secure token.",[s.INVALID_SECRET_API_KEY]:"SECRET API KEY is required.",[s.REMOVE_CARD]:"Card deleted successfully",[s.SKYFLOW_NOT_INITIALIZED]:"Skyflow not initialized.",[s.ERROR_LOAD_PAYMENT_FORM]:"There was an issue loading the payment form.",[s.INVALID_CARD_DATA]:"Invalid card data.",[s.ERROR_LOAD_ENROLLMENT_FORM]:"There was an issue loading the card form.",[s.MOUNT_COLLECT_ERROR]:"Mount failed. Make sure all inputs are complete and valid.",[s.CARD_ON_FILE_DECLINED]:"Transaction declined. Please verify your card details.",[s.REQUEST_ABORTED]:"Requests canceled.",[s.REQUEST_FAILED]:"Request failed.",[s.UNKNOWN_ERROR]:"An unexpected error occurred.",[s.CREATE_ERROR]:"Error creating the SDK.",[s.FETCH_TRANSACTION_ERROR]:"Error retrieving the transaction.",[s.THREEDS_REDIRECTION_ERROR]:"Ocurrió un error durante la redirección de 3DS.",[s.REMOVE_SDK_ERROR]:"Ocurrió un error removiendo la instancia del SDK."};s.INIT_ERROR,s.STATE_ERROR,s.FETCH_BUSINESS_ERROR,s.INVALID_CONFIG,s.TYPE_SDK_REQUIRED,s.ENVIRONMENT_REQUIRED,s.FETCH_CARDS_ERROR,s.SAVE_CARD_ERROR,s.REMOVE_CARD_ERROR,s.CREATE_PAYMENT_ERROR,s.START_CHECKOUT_ERROR,s.CREATE_ORDER_ERROR,s.BUSINESS_ID_REQUIRED,s.CLIENT_ID_REQUIRED,s.INVALID_AMOUNT,s.INVALID_ITEMS,s.CUSTOMER_OPERATION_ERROR,s.INVALID_EMAIL,s.FETCH_PAYMENT_METHODS_ERROR,s.INVALID_VAULT_TOKEN,s.VAULT_TOKEN_ERROR,s.SECURE_TOKEN_ERROR,s.INVALID_SECRET_API_KEY,s.CUSTOMER_AUTH_TOKEN_NOT_VALID,s.SECURE_TOKEN_INVALID,s.REMOVE_CARD,s.SKYFLOW_NOT_INITIALIZED,s.INVALID_TYPE,s.PAYMENT_PROCESS_ERROR,s.INVALID_PAYMENT_REQUEST,s.INVALID_PAYMENT_REQUEST_CARD_PM,s.SAVE_CARD_PROCESS_ERROR,s.ERROR_LOAD_PAYMENT_FORM,s.INVALID_CARD_DATA,s.ERROR_LOAD_ENROLLMENT_FORM,s.MOUNT_COLLECT_ERROR,s.CARD_ON_FILE_DECLINED,s.CARD_SAVED_SUCCESSFULLY,s.CARD_REMOVED_SUCCESSFULLY,s.REQUEST_ABORTED,s.REQUEST_FAILED,s.UNKNOWN_ERROR,s.CREATE_ERROR,s.FETCH_TRANSACTION_ERROR,s.THREEDS_REDIRECTION_ERROR,s.REMOVE_SDK_ERROR;class d extends Error{constructor(e){var t,r;const o=e.message||a[e.code]||"Unknown error";super(o),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)||o}}}const l=()=>({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}),c=e=>{var t;return e&&"business"in e?null===(t=null==e?void 0:e.business)||void 0===t?void 0:t.pk:""},u="__tonderLockErrorCode__";function h(e){return"object"==typeof e&&null!==e}class E extends Error{constructor(e){var t,r;const o=E.resolveStatusCode(e.statusCode,e.originalError),n=E.resolveMessage(e.errorCode,e.message),i=E.resolveSystemError(null===(t=e.details)||void 0===t?void 0:t.systemError,e.originalError);super(n),this.status="error",Object.setPrototypeOf(this,new.target.prototype),this.name="TonderError",this.code=e.errorCode,this.statusCode=o,this.originalError=e.originalError,this.details={code:e.errorCode,statusCode:o,systemError:i},e.lockErrorCode&&Object.defineProperty(this,u,{value:!0,enumerable:!1,configurable:!0}),null===(r=Error.captureStackTrace)||void 0===r||r.call(Error,this,E)}static isRecord(e){return"object"==typeof e&&null!==e}static parseStatusCode(e){const t=Number(e);return Number.isFinite(t)?t<100||t>599?500:Math.trunc(t):500}static resolveStatusCode(e,t){const r=[e];if(E.isRecord(t)){r.push(t.statusCode,t.status);const e=E.isRecord(t.body)?t.body:null;e&&r.push(e.statusCode,e.status)}for(const e of r)if(E.isHttpStatusCode(e))return Math.trunc(Number(e));return 500}static resolveMessage(e,t){return t||(a[e]||a[s.UNKNOWN_ERROR]||"An unexpected error occurred.")}static isHttpStatusCode(e){const t=Number(e);return Number.isFinite(t)&&t>=100&&t<=599}static normalizeSystemError(e){if("string"!=typeof e)return null;return e.trim()||null}static resolveSystemError(e,t){const r=[e];if(E.isRecord(t)){const e=E.isRecord(t.details)?t.details:null,o=E.isRecord(t.body)?t.body:null,n=o&&E.isRecord(o.details)?o.details:null;r.push(t.systemError,t.code,null==e?void 0:e.systemError,null==e?void 0:e.code,null==o?void 0:o.systemError,null==o?void 0:o.code,null==n?void 0:n.systemError,null==n?void 0:n.code)}for(const e of r){const t=E.normalizeSystemError(e);if(t)return t}return"APP_INTERNAL_001"}}function _(e){return h(e)&&!0===e[u]}function p(e){return e instanceof E&&void 0!==e.originalError?e.originalError:e}function m(e,t){var r;if(!(null==e?void 0:e.errorCode))throw new Error("buildPublicAppError requires errorCode");const o=null===(r=e.details)||void 0===r?void 0:r.systemError,n=!!e.message||void 0!==e.statusCode||void 0!==o;return!function(e){return h(e)&&"TonderError"===e.name&&"string"==typeof e.code}(t)||(e.lockErrorCode&&function(e){Object.defineProperty(e,u,{value:!0,enumerable:!1,configurable:!0})}(t),n||e.errorCode!==t.code&&!_(t))?new E({errorCode:e.errorCode,message:e.message,statusCode:e.statusCode,details:void 0!==o?{systemError:o}:void 0,originalError:p(t),lockErrorCode:e.lockErrorCode||_(t)}):t}function R(e){var t,o;return r(this,void 0,void 0,(function*(){const n=yield function(e){return r(this,void 0,void 0,(function*(){try{return yield e.clone().json()}catch(e){}try{return(yield e.text())||void 0}catch(e){return}}))}(e.response),i={status:e.response.status};return e.response.statusText&&(i.statusText=e.response.statusText),void 0!==n&&(i.body=n),new E({errorCode:e.errorCode,message:e.message,statusCode:null!==(t=e.statusCode)&&void 0!==t?t:e.response.status,details:void 0!==(null===(o=e.details)||void 0===o?void 0:o.systemError)?{systemError:e.details.systemError}:void 0,originalError:i,lockErrorCode:e.lockErrorCode})}))}function y(e,t){return(null==e?void 0:e.response)?R(e):m(e,t)}class v{constructor({payload:e=null,apiKey:t,baseUrl:r,redirectOnComplete:o,tdsIframeId:n,tonderPayButtonId:i,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=n,this.tonderPayButtonId=i,this.redirectOnComplete=o,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,o,n,i;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===(i=null===(n=null===(o=this.payload)||void 0===o?void 0:o.next_action)||void 0===n?void 0:n.iframe_resources)||void 0===i?void 0:i.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,o,n;const i=null===(n=null===(o=null===(r=this.payload)||void 0===r?void 0:r.next_action)||void 0===o?void 0:o.iframe_resources)||void 0===n?void 0:n.iframe;if(i){this.saveVerifyTransactionUrl();const r=document.createElement("div");r.innerHTML=i,document.body.appendChild(r);const o=document.createElement("script");o.textContent='document.getElementById("tdsMmethodForm").submit();',r.appendChild(o);const n=document.getElementById("tdsMmethodTgtFrame");n?n.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 o=this,n=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"),o.callBack&&o.callBack(o.payload),t.removeEventListener("load",n)},i=t=>r(this,void 0,void 0,(function*(){const n=yield new Promise(((e,r)=>e(t)));if(n){if((e=>"Pending"!==(null==e?void 0:e.transaction_status))(n))return e();{const e=setTimeout((()=>r(this,void 0,void 0,(function*(){clearTimeout(e),yield i(o.requestTransactionStatus())}))),7e3)}}}));yield i(o.requestTransactionStatus())}));t.addEventListener("load",n)}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,o]of t)e[r]=o;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 o=document.createElement("input");o.type="hidden",o.name=e.term_url,o.value=e.TermUrl,t.appendChild(o),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 f=Object.freeze({production:"https://app.tonder.io",sandbox:"https://sandbox.tonder.io",stage:"https://stage.tonder.io",development:"http://localhost:8000"});function A(e,t,o){return r(this,void 0,void 0,(function*(){const r=`${e}/api/v1/checkout-router/`,n=o,i=yield fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${t}`},body:JSON.stringify(Object.assign(Object.assign({},n),"undefined"!=typeof MP_DEVICE_SESSION_ID?{mp_device_session_id:MP_DEVICE_SESSION_ID}:{}))});if(i.ok)return yield i.json();throw yield y({response:i,errorCode:s.START_CHECKOUT_ERROR})}))}function C(e,t,o=!0,n=null){return r(this,void 0,void 0,(function*(){let r=yield window.OpenPay;return r.setId(e),r.setApiKey(t),r.setSandboxMode(o),yield r.deviceData.setup({signal:n})}))}const O=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"}),T=Object.freeze({TELEMETRY:"/telemetry/v1/events",ACQ_SUBSCRIPTION_TOKEN:"/acq-kushki/subscription/token",ACQ_SUBSCRIPTION_CREATE:"/acq-kushki/subscription/create"});function g(e="stage"){return`${O[e]}${T.TELEMETRY}`}const I="https://cdn.kushkipagos.com/kushki.min.js",S=s.CARD_ON_FILE_DECLINED;let N=!1,D=null;class b{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 O[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 N?Promise.resolve():D||(D=new Promise(((e,t)=>{if(document.querySelector(`script[src="${I}"]`))return N=!0,void e();const r=document.createElement("script");r.src=I,r.async=!0,r.onload=()=>{N=!0,e()},r.onerror=()=>{D=null,t(y({errorCode:S,lockErrorCode:!0,details:{step:"load_acquirer_script",message:"Failed to load acquirer script"}}))},document.head.appendChild(r)})),D)}))}(),this.acquirerInstance=function(e,t){if(!window.Kushki)throw y({errorCode:S,lockErrorCode:!0,details:{step:"create_acquirer_instance",message:"Acquirer script not loaded. Call initialize() first."}});return new window.Kushki({merchantId:e,inTestEnvironment:t})}(this.merchantId,this.isTestEnvironment)}))}getAcquirerInstance(){if(!this.acquirerInstance)throw y({errorCode:S,lockErrorCode:!0,details:{step:"get_acquirer_instance",message:"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,o)=>{t.requestSecureInit({card:{number:e}},(e=>{if("code"in e&&e.code)return void o(y({errorCode:S,lockErrorCode:!0,details:{step:"get_jwt",acquirerResponse:e}}));const t=e;t.jwt?r(t.jwt):o(y({errorCode:S,lockErrorCode:!0,details:{step:"get_jwt",message:"No JWT returned from acquirer",acquirerResponse:t}}))}))}))}))}generateToken(e){return r(this,void 0,void 0,(function*(){const t=yield fetch(`${this.apiUrl}${T.ACQ_SUBSCRIPTION_TOKEN}`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKey}`},body:JSON.stringify(e)});if(!t.ok)throw yield y({response:t,errorCode:S,lockErrorCode:!0,details:{step:"generate_token"}});return t.json()}))}createSubscription(e){return r(this,void 0,void 0,(function*(){const t=yield fetch(`${this.apiUrl}${T.ACQ_SUBSCRIPTION_CREATE}`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKey}`},body:JSON.stringify(e)});if(!t.ok)throw yield y({response:t,errorCode:S,lockErrorCode:!0,details:{step:"create_subscription"}});return t.json()}))}validate3DS(e,t){return r(this,void 0,void 0,(function*(){const r=this.getAcquirerInstance();return new Promise(((o,n)=>{r.requestValidate3DS({secureId:e,security:t},(e=>{const t=e;t.code&&"3DS000"!==t.code?n(y({errorCode:S,lockErrorCode:!0,details:{step:"validate_3ds",message:"3DS validation failed",acquirerResponse:t}})):!1!==t.isValid?o(!0):n(y({errorCode:S,lockErrorCode:!0,details:{step:"validate_3ds",message:"3DS validation failed",acquirerResponse:t}}))}))}))}))}process(e){var t,o;return r(this,void 0,void 0,(function*(){const r=yield this.getJwt(e.cardBin),n=yield this.generateToken({card:e.cardTokens,currency:e.currency,jwt:r}),i=n.secureId||(null===(t=n.details)||void 0===t?void 0:t.secureId),s=n.security||(null===(o=n.details)||void 0===o?void 0:o.security);if(!i||!s)throw y({errorCode:S,lockErrorCode:!0,details:{step:"process",message:"Missing secureId or security in token response",tokenResponse:n}});return yield this.validate3DS(i,s),this.createSubscription({token:"123",contactDetails:e.contactDetails,metadata:{customerId:e.customerId},currency:e.currency})}))}}class M{constructor(e){this.REQUEST_TIMEOUT_MS=5e3,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),o=Object.assign({},t.metadata||{});void 0===o.error&&(o.error=e),"undefined"!=typeof window&&(o.url=window.location.href);const n={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:o};return t.tenant_id&&(n.tenant_id=t.tenant_id),t.request_id&&(n.request_id=t.request_id),t.process_id&&(n.process_id=t.process_id),t.user_id&&(n.user_id=t.user_id),r.stack&&(n.stack=r.stack),t.error_code&&(n.error_code=t.error_code),t.http_status&&(n.http_status=t.http_status),n}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,o=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(o),e.ok}catch(e){return clearTimeout(o),!1}}catch(e){return!1}}))}}const k=Object.freeze({name:"@tonder.io/ionic-lite-sdk",version:"0.0.68-beta.DEV-2106.11"});var U,L,P,w,j,V,K,F,x,B,Y,$,H;class z{constructor({mode:e="stage",customization:t,apiKey:r,apiKeyTonder:o,returnUrl:n,tdsIframeId:i,callBack:s=(()=>{}),baseUrlTonder:a,tonderPayButtonId:d,sdkInfo:l}){U.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,L.set(this,void 0),P.set(this,void 0),this.apiKeyTonder=o||r||"",this.returnUrl=n,this.callBack=s,this.mode=e,this.customer={},this.baseUrl=a||f[this.mode]||f.stage,this.abortController=new AbortController,this.requestId=this.generateRequestId(),this.customization=Object.assign(Object.assign({},this.customization),t||{}),this.process3ds=new v({apiKey:r,baseUrl:this.baseUrl,redirectOnComplete:this.customization.redirectOnComplete,tdsIframeId:i,tonderPayButtonId:d,callBack:s}),this.tdsIframeId=i;const c=l||k;this.telemetry=new M({endpoint:g(this.mode),apiKey:this.apiKeyTonder,platform:c.name,platform_version:c.version,mode:this.mode||"stage"})}configureCheckout(e){"secureToken"in e&&o(this,U,"m",V).call(this,e.secureToken),o(this,U,"m",w).call(this,e)}getCustomerId(){var e,t;return null===(t=null===(e=o(this,P,"f"))||void 0===e?void 0:e.id)||void 0===t?void 0:t.toString()}reportSdkError(e,t){var r,o,n,i;try{const s=this.getCustomerId(),a=e instanceof E&&void 0!==e.originalError?e.originalError:e,d=Object.assign(Object.assign({},(null==t?void 0:t.metadata)||{}),void 0===(null===(r=null==t?void 0:t.metadata)||void 0===r?void 0:r.error)?{error:a}:{}),l=Object.assign(Object.assign({tenant_id:null===(i=null===(n=null===(o=this.merchantData)||void 0===o?void 0:o.business)||void 0===n?void 0:n.pk)||void 0===i?void 0:i.toString(),user_id:s},t||{}),{metadata:d,request_id:this.requestId});l.user_id||delete l.user_id,l.feature=(null==t?void 0:t.feature)||"unknown",this.telemetry.captureException(e,l)}catch(e){}}generateRequestId(){return`req_${Date.now()}_${Math.random().toString(36).slice(2,10)}`}verify3dsTransaction(){return r(this,void 0,void 0,(function*(){const e=yield this.process3ds.verifyTransactionStatus(),t=yield o(this,U,"m",Y).call(this,e);return this.process3ds.setPayload(t),this._handle3dsRedirect(t)}))}payment(e){return new Promise(((t,n)=>r(this,void 0,void 0,(function*(){var r,i;let a;try{o(this,U,"m",w).call(this,e),a=yield this._checkout(e),this.process3ds.setPayload(a);if(yield this._handle3dsRedirect(a)){try{const e=document.querySelector(`#${this.tonderPayButtonId}`);e&&(e.disabled=!1)}catch(e){}this.callBack&&this.callBack(a),t(a)}}catch(t){this.reportSdkError(t,{feature:"payment",process_id:(null==a?void 0:a.payment_id)||(null===(r=null==a?void 0:a.payment)||void 0===r?void 0:r.id)||(null===(i=null==a?void 0:a.payment)||void 0===i?void 0:i.pk),metadata:{step:"payment",request:e,response:a}}),n(y({errorCode:s.PAYMENT_PROCESS_ERROR},t))}}))))}getSecureToken(e){return r(this,void 0,void 0,(function*(){try{return yield function(e,t,o=null){return r(this,void 0,void 0,(function*(){const r=yield fetch(`${e}/api/secure-token/`,{method:"POST",headers:{Authorization:`Token ${t}`,"Content-Type":"application/json"},signal:o});if(r.ok)return yield r.json();throw yield y({response:r,errorCode:s.SECURE_TOKEN_ERROR})}))}(this.baseUrl,e)}catch(e){throw this.reportSdkError(e,{feature:"secure-token",metadata:{step:"getSecureToken"}}),y({errorCode:s.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 o(this,P,"f")||n(this,P,yield function(e,t,o,n=null){return r(this,void 0,void 0,(function*(){const r=`${e}/api/v1/customer/`,i={email:o.email,first_name:null==o?void 0:o.firstName,last_name:null==o?void 0:o.lastName,phone:null==o?void 0:o.phone},a=yield fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${t}`},signal:n,body:JSON.stringify(i)});if(a.ok)return yield a.json();throw yield y({response:a,errorCode:s.CUSTOMER_OPERATION_ERROR})}))}(this.baseUrl,this.apiKeyTonder,this.customer,e),"f"),o(this,P,"f")}))}_handleCheckout({card:t,payment_method:n,customer:i,isSandbox:a,enable_card_on_file:d,returnUrl:c}){return r(this,void 0,void 0,(function*(){const{openpay_keys:u,reference:h,business:E}=this.merchantData,_=Number(this.cartTotal);let p,m,R;try{let v;!v&&u.merchant_id&&u.public_key&&!n&&(v=yield C(u.merchant_id,u.public_key,a,this.abortController.signal));const{id:f,auth_token:O}=i;p={business:this.apiKeyTonder,client:O,billing_address_id:null,shipping_address_id:null,amount:_,status:"A",reference:h,is_oneclick:!0,items:this.cartItems,currency:this.currency,metadata:this.metadata};const T=yield function(e,t,o){return r(this,void 0,void 0,(function*(){const r=`${e}/api/v1/orders/`,n=o,i=yield fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${t}`},body:JSON.stringify(n)});if(i.ok)return yield i.json();throw yield y({response:i,errorCode:s.CREATE_ORDER_ERROR})}))}(this.baseUrl,this.apiKeyTonder,p),g=(new Date).toISOString();m={business_pk:E.pk,client_id:f,amount:_,date:g,order_id:T.id,customer_order_reference:this.order_reference?this.order_reference:h,items:this.cartItems,currency:this.currency,metadata:this.metadata};const I=yield function(e,t,o){return r(this,void 0,void 0,(function*(){const r=`${e}/api/v1/business/${o.business_pk}/payments/`,n=o,i=yield fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${t}`},body:JSON.stringify(n)});if(i.ok)return yield i.json();throw yield y({response:i,errorCode:s.CREATE_PAYMENT_ERROR})}))}(this.baseUrl,this.apiKeyTonder,m);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:c||this.returnUrl,id_product:"no_id",quantity_product:1,id_ship:"0",instance_id_ship:"0",amount:_,title_ship:"shipping",description:"transaction",device_session_id:v||null,token_id:"",order_id:T.id,business_id:E.pk,payment_id:I.pk,source:"sdk",items:this.cartItems,metadata:this.metadata,browser_info:l(),currency:this.currency},n?{payment_method:n}:{card:t}),{apm_config:o(this,L,"f")}),this.customer&&"identification"in this.customer?{identification:this.customer.identification}:{}),void 0!==d?{enable_card_on_file:d}:{});const S=yield A(this.baseUrl,this.apiKeyTonder,R);return S||!1}catch(e){throw this.reportSdkError(e,{feature:"payment",process_id:null==R?void 0:R.payment_id,metadata:{step:"_handleCheckout",orderItems:p,paymentItems:m,routerItems:R}}),e}}))}_fetchMerchantData(){return r(this,void 0,void 0,(function*(){try{return this.merchantData||(this.merchantData=yield i(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,o,n,i=null){return r(this,void 0,void 0,(function*(){const r=`${e}/api/v1/business/${n}/cards/`,a=yield fetch(r,{method:"GET",headers:{Authorization:`Bearer ${o}`,"Content-Type":"application/json","User-token":t},signal:i});if(a.ok)return yield a.json();if(401===a.status)return{user_id:0,cards:[]};throw yield y({response:a,errorCode:s.FETCH_CARDS_ERROR})}))}(this.baseUrl,e,this.secureToken,t)}))}_saveCustomerCard(e,t,o,n=!1){return r(this,void 0,void 0,(function*(){return yield function(e,t,o,n,i,a=!1){return r(this,void 0,void 0,(function*(){const r=`${e}/api/v1/business/${n}/cards/`,d=yield fetch(r,{method:"POST",headers:Object.assign({Authorization:`Bearer ${o}`,"Content-Type":"application/json","User-token":t},a?{"X-App-Origin":"sdk/ionic"}:{}),body:JSON.stringify(i)});if(d.ok)return yield d.json();throw yield y({response:d,errorCode:s.SAVE_CARD_ERROR})}))}(this.baseUrl,e,this.secureToken,t,o,n)}))}_removeCustomerCard(e,t,o){return r(this,void 0,void 0,(function*(){return yield function(e,t,o,n="",i){return r(this,void 0,void 0,(function*(){const r=`${e}/api/v1/business/${i}/cards/${n}`,d=yield fetch(r,{method:"DELETE",headers:{Authorization:`Bearer ${o}`,"Content-Type":"application/json","User-token":t}});if(204===d.status)return a[s.CARD_REMOVED_SUCCESSFULLY];if(d.ok&&"json"in d)return yield d.json();throw yield y({response:d,errorCode:s.REMOVE_CARD_ERROR})}))}(this.baseUrl,e,this.secureToken,o,t)}))}_fetchCustomerPaymentMethods(){return r(this,void 0,void 0,(function*(){return yield function(e,t,o={status:"active",pagesize:"10000"},n=null){return r(this,void 0,void 0,(function*(){const r=new URLSearchParams(o).toString(),i=yield fetch(`${e}/api/v1/payment_methods?${r}`,{method:"GET",headers:{Authorization:`Token ${t}`,"Content-Type":"application/json"},signal:n});if(i.ok)return yield i.json();throw yield y({response:i,errorCode:s.FETCH_PAYMENT_METHODS_ERROR})}))}(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 b({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,o;return r(this,void 0,void 0,(function*(){if(e&&"next_action"in e?null===(o=null===(t=null==e?void 0:e.next_action)||void 0===t?void 0:t.iframe_resources)||void 0===o?void 0:o.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 q(e,t,o=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:o});if(r.ok){return(yield r.json()).token}throw yield y({response:r,errorCode:s.VAULT_TOKEN_ERROR})}))}L=new WeakMap,P=new WeakMap,U=new WeakSet,w=function(e){var t,r;!e||e&&0===Object.keys(e).length||(o(this,U,"m",j).call(this,e.customer),this._setCartTotal((null===(t=e.cart)||void 0===t?void 0:t.total)||0),o(this,U,"m",K).call(this,(null===(r=e.cart)||void 0===r?void 0:r.items)||[]),o(this,U,"m",F).call(this,e),o(this,U,"m",x).call(this,e),o(this,U,"m",B).call(this,e),o(this,U,"m",$).call(this,e))},j=function(e){e&&(this.customer=e)},V=function(e){this.secureToken=e},K=function(e){this.cartItems=e},F=function(e){this.metadata=null==e?void 0:e.metadata,this.order_reference=null==e?void 0:e.order_reference},x=function(e){this.currency=null==e?void 0:e.currency},B=function(e){this.card=null==e?void 0:e.card},Y=function(e){var t,o,n,i,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===(o=null==e?void 0:e.checkout)||void 0===o?void 0:o.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===(n=e.checkout)||void 0===n?void 0:n.id)||(null==e?void 0:e.checkout_id)};try{return yield A(this.baseUrl,this.apiKeyTonder,t)}catch(t){this.reportSdkError(t,{feature:"payment",process_id:(null==e?void 0:e.payment_id)||(null===(i=null==e?void 0:e.payment)||void 0===i?void 0:i.id)||(null===(s=null==e?void 0:e.payment)||void 0===s?void 0:s.pk),metadata:{step:"#resumeCheckout",response:e}})}return e}}))},$=function(e){n(this,L,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"}(H||(H={}));const Q={type:t.ValidationRuleType.LENGTH_MATCH_RULE,params:{max:70}},W=RegExp("^(?!s*$).+"),X={type:t.ValidationRuleType.REGEX_MATCH_RULE,params:{regex:W,error:"El campo es requerido"}},J="Titular de la tarjeta",G="Número de tarjeta",Z="CVC/CVV",ee="Mes",te="Año",re="Fecha de expiración",oe="Nombre como aparece en la tarjeta",ne="1234 1234 1234 1234",ie="3-4 dígitos",se="MM",ae="AA",de={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")'}},le={base:{fontSize:"12px",fontWeight:"500",fontFamily:'"Inter", sans-serif'}},ce={base:{fontSize:"12px",fontWeight:"500",fontFamily:'"Inter", sans-serif',color:"#f44336"}};function ue({baseUrl:e,apiKey:o,vault_id:n,vault_url:i,data:a}){return r(this,void 0,void 0,(function*(){const d=t.init({vaultID:n,vaultURL:i,getBearerToken:()=>r(this,void 0,void 0,(function*(){return yield q(e,o)})),options:{logLevel:t.LogLevel.ERROR,env:t.Env.DEV}}).container(t.ContainerType.COLLECT),l=yield function(e,o){return r(this,void 0,void 0,(function*(){const n=yield function(e,o){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 o.create({table:"cards",column:e,type:t.ElementType.INPUT_FIELD}),key:e}})))))}))}(e,o);return n?n.map((t=>new Promise((r=>{var o;const n=document.createElement("div");n.hidden=!0,n.id=`id-${t.key}`,null===(o=document.querySelector("body"))||void 0===o||o.appendChild(n),setTimeout((()=>{t.element.mount(`#id-${t.key}`),setInterval((()=>{if(t.element.isMounted()){const o=e[t.key];return t.element.setValue(o),r(t.element.isMounted())}}),120)}),120)})))):[]}))}(a,d);if((yield Promise.all(l)).some((e=>!e)))throw y({errorCode:s.SAVE_CARD_PROCESS_ERROR,details:{step:"get_skyflow_tokens"}});try{const e=yield d.collect();if(e)return e.records[0].fields;throw y({errorCode:s.SAVE_CARD_PROCESS_ERROR,details:{step:"get_skyflow_tokens"}})}catch(e){throw y({errorCode:s.SAVE_CARD_PROCESS_ERROR},e)}}))}function he(e){const{element:r,fieldMessage:o="",errorStyles:n={},requiredMessage:i="Campo requerido",invalidMessage:s="Campo no válido",events:a}=e;"on"in r&&(r.on(t.EventName.CHANGE,(e=>{_e({eventName:"onChange",data:e,events:a}),Ee({element:r,errorStyles:n,color:"transparent"})})),r.on(t.EventName.BLUR,(e=>{if(_e({eventName:"onBlur",data:e,events:a}),!e.isValid){const t=e.isEmpty?i:""!=o?`El campo ${o} no es válido`:s;r.setError(t)}Ee({element:r,errorStyles:n})})),r.on(t.EventName.FOCUS,(e=>{_e({eventName:"onFocus",data:e,events:a}),Ee({element:r,errorStyles:n,color:"transparent"}),r.resetError()})))}function Ee(e){const{element:t,errorStyles:r={},color:o=""}=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)),""!=o&&{color:o})})})}const _e=t=>{const{eventName:r,data:o,events:n}=t;if(n&&r in n){const t=n[r];"function"==typeof t&&t({elementType:e(o,"elementType",""),isEmpty:e(o,"isEmpty",""),isFocused:e(o,"isFocused",""),isValid:e(o,"isValid","")})}};function pe(e){return r(this,void 0,void 0,(function*(){const{element:t,containerId:r,retries:o=2,delay:n=30}=e;for(let e=0;e<=o;e++){if(document.querySelector(r))return void t.mount(r);e<o&&(yield new Promise((e=>setTimeout(e,n))))}console.warn(`[mountCardFields] Container ${r} was not found after ${o+1} attempts`)}))}const me=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"}),Re={[me.SORIANA]:{label:"Soriana",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/soriana.png"},[me.OXXO]:{label:"Oxxo",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/oxxo.png"},[me.CODI]:{label:"CoDi",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/codi.png"},[me.MERCADOPAGO]:{label:"Mercado Pago",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/mercadopago.png"},[me.OXXOPAY]:{label:"Oxxo Pay",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/oxxopay.png"},[me.SPEI]:{label:"SPEI",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/spei.png"},[me.PAYPAL]:{label:"Paypal",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/paypal.png"},[me.COMERCIALMEXICANA]:{label:"Comercial Mexicana",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/comercial_exicana.png"},[me.BANCOMER]:{label:"Bancomer",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/bancomer.png"},[me.WALMART]:{label:"Walmart",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/walmart.png"},[me.BODEGA]:{label:"Bodega Aurrera",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/bodega_aurrera.png"},[me.SAMSCLUB]:{label:"Sam´s Club",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/sams_club.png"},[me.SUPERAMA]:{label:"Superama",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/superama.png"},[me.CALIMAX]:{label:"Calimax",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/calimax.png"},[me.EXTRA]:{label:"Tiendas Extra",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/tiendas_extra.png"},[me.CIRCULOK]:{label:"Círculo K",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/circulo_k.png"},[me.SEVEN11]:{label:"7 Eleven",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/7_eleven.png"},[me.TELECOMM]:{label:"Telecomm",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/telecomm.png"},[me.BANORTE]:{label:"Banorte",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/banorte.png"},[me.BENAVIDES]:{label:"Farmacias Benavides",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_benavides.png"},[me.DELAHORRO]:{label:"Farmacias del Ahorro",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_ahorro.png"},[me.ELASTURIANO]:{label:"El Asturiano",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/asturiano.png"},[me.WALDOS]:{label:"Waldos",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/waldos.png"},[me.ALSUPER]:{label:"Alsuper",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/al_super.png"},[me.KIOSKO]:{label:"Kiosko",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/kiosko.png"},[me.STAMARIA]:{label:"Farmacias Santa María",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_santa_maria.png"},[me.LAMASBARATA]:{label:"Farmacias la más barata",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_barata.png"},[me.FARMROMA]:{label:"Farmacias Roma",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_roma.png"},[me.FARMUNION]:{label:"Pago en Farmacias Unión",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_union.png"},[me.FARMATODO]:{label:"Pago en Farmacias Farmatodo",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_farmatodo.png\t"},[me.SFDEASIS]:{label:"Pago en Farmacias San Francisco de Asís",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_san_francisco.png"},[me.FARM911]:{label:"Farmacias 911",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.FARMECONOMICAS]:{label:"Farmacias Economicas",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.FARMMEDICITY]:{label:"Farmacias Medicity",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.RIANXEIRA]:{label:"Rianxeira",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.WESTERNUNION]:{label:"Western Union",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.ZONAPAGO]:{label:"Zona Pago",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.CAJALOSANDES]:{label:"Caja Los Andes",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.CAJAPAITA]:{label:"Caja Paita",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.CAJASANTA]:{label:"Caja Santa",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.CAJASULLANA]:{label:"Caja Sullana",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.CAJATRUJILLO]:{label:"Caja Trujillo",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.EDPYME]:{label:"Edpyme",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.KASNET]:{label:"KasNet",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.NORANDINO]:{label:"Norandino",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.QAPAQ]:{label:"Qapaq",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.RAIZ]:{label:"Raiz",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.PAYSER]:{label:"Paysera",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.WUNION]:{label:"Western Union",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.BANCOCONTINENTAL]:{label:"Banco Continental",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.GMONEY]:{label:"Go money",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.GOPAY]:{label:"Go pay",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.WU]:{label:"Western Union",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.PUNTOSHEY]:{label:"Puntoshey",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.AMPM]:{label:"Ampm",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.JUMBOMARKET]:{label:"Jumbomarket",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.SMELPUEBLO]:{label:"Smelpueblo",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.BAM]:{label:"Bam",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.REFACIL]:{label:"Refacil",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.ACYVALORES]:{label:"Acyvalores",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"}},ye=e=>{const t=e.toUpperCase().trim().replace(/\s+/g,"");return Re[t]||{icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png",label:""}};class ve extends z{constructor({apiKey:e,mode:t,returnUrl:r,callBack:o,apiKeyTonder:n,baseUrlTonder:i,customization:s,collectorIds:a,events:d}){super({mode:t,apiKey:e,returnUrl:r,callBack:o,apiKeyTonder:n,baseUrlTonder:i,customization:s,tdsIframeId:a&&"tdsIframe"in a?null==a?void 0:a.tdsIframe:"tdsIframe",sdkInfo:k}),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"}}),y({errorCode:s.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:o,first_name:n="",last_name:i="",email:a=""}=r,{vault_id:d,vault_url:l,business:c}=this.merchantData,u=this._hasCardOnFileKeys(),h={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,"")},E=yield ue({vault_id:d,vault_url:l,data:h,baseUrl:this.baseUrl,apiKey:this.apiKeyTonder}),_=yield this._saveCustomerCard(o,null==c?void 0:c.pk,E,u);if(t=_.skyflow_id,u){const 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:E.cardholder_name,number:E.card_number,expiryMonth:E.expiration_month,expiryYear:E.expiration_year,cvv:E.cvv},cardBin:e,contactDetails:{firstName:n||"",lastName:i||"",email:a||""},customerId:o,currency:this.currency||"MXN"})}catch(e){throw y({errorCode:s.CARD_ON_FILE_DECLINED,lockErrorCode:!0},e)}const d={skyflow_id:E.skyflow_id,subscription_id:r.subscriptionId};yield this._saveCustomerCard(o,null==c?void 0:c.pk,d)}return _}catch(e){throw t&&(yield this.removeCustomerCard(t)),this.reportSdkError(e,{feature:"save-card",process_id:t||this.getCustomerId(),metadata:{step:"saveCustomerCard"}}),y({errorCode:s.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"}}),y({errorCode:s.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},ye(e.payment_method)))).sort(((e,t)=>e.priority-t.priority))}catch(e){throw this.reportSdkError(e,{feature:"get-payment-methods",metadata:{step:"getCustomerPaymentMethods"}}),y({errorCode:s.FETCH_PAYMENT_METHODS_ERROR},e)}}))}mountCardFields(e){var o;return r(this,void 0,void 0,(function*(){const n=e.card_id?`update:${e.card_id}`:"create",i=null!==(o=e.unmount_context)&&void 0!==o?o:"all";"none"!==i&&("current"===i?this.unmountCardFields(n):this.unmountCardFields(i)),yield this.createSkyflowInstance();const s=yield function(e){var o,n,i,s,a,d,l,c,u,h,E,_,p,m,R,y,v;return r(this,void 0,void 0,(function*(){const{skyflowInstance:r,data:f,customization:A,events:C}=e,O=r.container(t.ContainerType.COLLECT),T=[],g={[H.CVV]:t.ElementType.CVV,[H.CARD_NUMBER]:t.ElementType.CARD_NUMBER,[H.EXPIRATION_MONTH]:t.ElementType.EXPIRATION_MONTH,[H.EXPIRATION_YEAR]:t.ElementType.EXPIRATION_YEAR,[H.CARDHOLDER_NAME]:t.ElementType.CARDHOLDER_NAME},I={[H.CVV]:[X],[H.CARD_NUMBER]:[X],[H.EXPIRATION_MONTH]:[X],[H.EXPIRATION_YEAR]:[X],[H.CARDHOLDER_NAME]:[Q,X]},S={errorStyles:(null===(n=null===(o=null==A?void 0:A.styles)||void 0===o?void 0:o.cardForm)||void 0===n?void 0:n.errorStyles)||ce,inputStyles:(null===(s=null===(i=null==A?void 0:A.styles)||void 0===i?void 0:i.cardForm)||void 0===s?void 0:s.inputStyles)||de,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)||le},N={name:(null===(l=null==A?void 0:A.labels)||void 0===l?void 0:l.name)||J,card_number:(null===(c=null==A?void 0:A.labels)||void 0===c?void 0:c.card_number)||G,cvv:(null===(u=null==A?void 0:A.labels)||void 0===u?void 0:u.cvv)||Z,expiration_date:(null===(h=null==A?void 0:A.labels)||void 0===h?void 0:h.expiry_date)||re,expiration_month:(null===(E=null==A?void 0:A.labels)||void 0===E?void 0:E.expiration_month)||ee,expiration_year:(null===(_=null==A?void 0:A.labels)||void 0===_?void 0:_.expiration_year)||te},D={name:(null===(p=null==A?void 0:A.placeholders)||void 0===p?void 0:p.name)||oe,card_number:(null===(m=null==A?void 0:A.placeholders)||void 0===m?void 0:m.card_number)||ne,cvv:(null===(R=null==A?void 0:A.placeholders)||void 0===R?void 0:R.cvv)||ie,expiration_month:(null===(y=null==A?void 0:A.placeholders)||void 0===y?void 0:y.expiration_month)||se,expiration_year:(null===(v=null==A?void 0:A.placeholders)||void 0===v?void 0:v.expiration_year)||ae},b={[H.CVV]:null==C?void 0:C.cvvEvents,[H.CARD_NUMBER]:null==C?void 0:C.cardNumberEvents,[H.EXPIRATION_MONTH]:null==C?void 0:C.monthEvents,[H.EXPIRATION_YEAR]:null==C?void 0:C.yearEvents,[H.CARDHOLDER_NAME]:null==C?void 0:C.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=O.create(Object.assign(Object.assign(Object.assign({table:"cards",column:e,type:g[e],validations:I[e]},S),{label:N[e],placeholder:D[e]}),f.card_id?{skyflowID:f.card_id}:{}));he({element:t,errorStyles:S.errorStyles,fieldMessage:[H.CVV,H.EXPIRATION_MONTH,H.EXPIRATION_YEAR].includes(e)?"":N[e],events:b[e]});const r=`#collect_${String(e)}`+(f.card_id?`_${f.card_id}`:"");yield pe({element:t,containerId:r}),T.push({element:t,containerId:r})}else for(const e of f.fields){const t=e.field,r=O.create(Object.assign(Object.assign(Object.assign({table:"cards",column:t,type:g[t],validations:I[t]},S),{label:N[t],placeholder:D[t]}),f.card_id?{skyflowID:f.card_id}:{})),o=e.container_id||`#collect_${String(t)}`+(f.card_id?`_${f.card_id}`:"");yield pe({element:r,containerId:o}),T.push({element:r,containerId:o})}return{elements:T.map((e=>e.element)),container:O}}))}({skyflowInstance:this.skyflowInstance,data:e,customization:this.customization,events:this.events});this.mountedElementsByContext.set(n,{elements:s.elements||[],container:s})}))}getContainerByCardId(e){var t;const r=`update:${e}`,o=this.mountedElementsByContext.get(r);return(null===(t=null==o?void 0:o.container)||void 0===t?void 0:t.container)||null}collectCardTokens(e){var t,o,n;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===(o=null===(t=null==e?void 0:e.records)||void 0===t?void 0:t[0])||void 0===o?void 0:o.fields)||null}catch(t){const r=null===(n=null==t?void 0:t.error)||void 0===n?void 0:n.description;throw this.reportSdkError(t,{feature:"collect-card-tokens",process_id:e,metadata:{step:"collectCardTokens"}}),new d({code:s.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 i(this.baseUrl,this.apiKeyTonder,this.abortController.signal)}catch(e){throw this.reportSdkError(e,{feature:"get-business",metadata:{step:"getBusiness"}}),y({errorCode:s.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:o}=this.merchantData;this.skyflowInstance=yield function({baseUrl:e,apiKey:o,vault_id:n,vault_url:i}){return r(this,void 0,void 0,(function*(){return t.init({vaultID:n,vaultURL:i,getBearerToken:()=>r(this,void 0,void 0,(function*(){return yield q(e,o)})),options:{logLevel:t.LogLevel.ERROR,env:t.Env.DEV}})}))}({vault_id:e,vault_url:o,baseUrl:this.baseUrl,apiKey:this.apiKeyTonder})}))}getOpenpayDeviceSessionID(e,t,o){return r(this,void 0,void 0,(function*(){try{return yield C(e,t,o)}catch(e){throw this.reportSdkError(e,{feature:"get-openpay-device-session",metadata:{step:"getOpenpayDeviceSessionID"}}),y({errorCode:s.START_CHECKOUT_ERROR},e)}}))}getSkyflowTokens({vault_id:e,vault_url:t,data:o}){return r(this,void 0,void 0,(function*(){return yield ue({vault_id:e,vault_url:t,data:o,baseUrl:this.baseUrl,apiKey:this.apiKeyTonder})}))}_setCartTotal(e){this.cartTotal=e}_checkout({card:e,payment_method:t,isSandbox:o,returnUrl:n}){var i,a;return r(this,void 0,void 0,(function*(){yield this._fetchMerchantData();const d=yield this._getCustomer(this.abortController.signal),{vault_id:l,vault_url:c,business:u}=this.merchantData,{auth_token:h,first_name:E="",last_name:_="",email:p=""}=d,m=this._hasCardOnFileKeys();let R,v=null,f=null,A=null,C=!1;const O=()=>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(h,this.merchantData.business.pk))}));if(!t){if("string"==typeof e)if(f=e,R={skyflow_id:e},m){yield O();const t=null===(a=null===(i=this.customerCardsCache)||void 0===i?void 0:i.cards)||void 0===a?void 0:a.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 ue({vault_id:l,vault_url:c,data:t,baseUrl:this.baseUrl,apiKey:this.apiKeyTonder}),f=R.skyflow_id,m&&(A={name:R.cardholder_name,number:R.card_number,expiryMonth:R.expiration_month,expiryYear:R.expiration_year,cvv:R.cvv},C=!0)}if(C){if(!f||!A)throw new Error("Missing card data for card-on-file processing");let e=null;try{const t=yield this._saveCustomerCard(h,null==u?void 0:u.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 o=yield this._initializeCardOnFile();let n;try{n=yield o.process({cardTokens:A,cardBin:r,contactDetails:{firstName:E||"",lastName:_||"",email:p||""},customerId:h,currency:this.currency||"MXN"})}catch(e){throw y({errorCode:s.CARD_ON_FILE_DECLINED,lockErrorCode:!0},e)}v={subscriptionId:n.subscriptionId},yield this._saveCustomerCard(h,null==u?void 0:u.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:d,isSandbox:o,returnUrl:n,enable_card_on_file:!!(null==v?void 0:v.subscriptionId)&&m})}))}customerRegister(e){return r(this,void 0,void 0,(function*(){try{const t=`${this.baseUrl}/api/v1/customer/`,r={email:e},o=yield fetch(t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKeyTonder}`},signal:this.abortController.signal,body:JSON.stringify(r)});if(o.ok)return yield o.json();throw yield y({response:o,errorCode:s.CUSTOMER_OPERATION_ERROR})}catch(e){throw this.reportSdkError(e,{feature:"customer-register",metadata:{step:"customerRegister"}}),y({errorCode:s.CUSTOMER_OPERATION_ERROR},e)}}))}createOrder(e){return r(this,void 0,void 0,(function*(){try{const t=`${this.baseUrl}/api/v1/orders/`,r=e,o=yield fetch(t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKeyTonder}`},body:JSON.stringify(r)});if(o.ok)return yield o.json();throw yield y({response:o,errorCode:s.CREATE_ORDER_ERROR})}catch(e){throw this.reportSdkError(e,{feature:"create-order",metadata:{step:"createOrder"}}),y({errorCode:s.CREATE_ORDER_ERROR},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,o=yield fetch(t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKeyTonder}`},body:JSON.stringify(r)});if(o.ok)return yield o.json();throw yield y({response:o,errorCode:s.CREATE_PAYMENT_ERROR})}catch(e){throw this.reportSdkError(e,{feature:"create-payment",metadata:{step:"createPayment"}}),y({errorCode:s.CREATE_PAYMENT_ERROR},e)}}))}startCheckoutRouter(e){return r(this,void 0,void 0,(function*(){const t=yield A(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:o,skyflowTokens:n,return_url:i,isSandbox:a,metadata:d,currency:c,payment_method:u}=e,h=yield this._fetchMerchantData(),E=yield this.customerRegister(o.email);if(!(E&&"auth_token"in E&&h&&"reference"in h))throw y({errorCode:s.START_CHECKOUT_ERROR,details:{message:"Merchant or customer reposne errors",merchantResult:h,customerResult:E}});{const e={business:this.apiKeyTonder,client:E.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),p=(new Date).toISOString();if(!("id"in _&&"id"in E&&"business"in h))throw y({errorCode:s.START_CHECKOUT_ERROR,details:{message:"Order response errors",orderResult:_}});{const e={business_pk:h.business.pk,amount:r,date:p,order_id:_.id,client_id:E.id},t=yield this.createPayment(e);let s;const{openpay_keys:m,business:R}=h;m.merchant_id&&m.public_key&&(s=yield C(m.merchant_id,m.public_key,a));const y=Object.assign(Object.assign({name:o.name,last_name:o.lastname,email_client:o.email,phone_number:o.phone,return_url:i,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:R.pk,payment_id:"pk"in t&&t.pk,source:"sdk",metadata:d,browser_info:l(),currency:c},u?{payment_method:u}:{card:n}),"undefined"!=typeof MP_DEVICE_SESSION_ID?{mp_device_session_id:MP_DEVICE_SESSION_ID}:{}),v=yield A(this.baseUrl,this.apiKeyTonder,y);if(yield this.init3DSRedirect(v))return v}}}catch(e){throw this.reportSdkError(e,{feature:"start-checkout-router-full",metadata:{step:"startCheckoutRouterFull"}}),y({errorCode:s.START_CHECKOUT_ERROR},e)}}))}registerCustomerCard(e,t,o){return r(this,void 0,void 0,(function*(){try{yield this._fetchMerchantData();const r=yield fetch(`${this.baseUrl}/api/v1/business/${c(this.merchantData)}/cards/`,{method:"POST",headers:{Authorization:`Bearer ${e}`,"User-token":t,"Content-Type":"application/json"},body:JSON.stringify(Object.assign({},o))});if(r.ok)return yield r.json();throw yield y({response:r,errorCode:s.SAVE_CARD_ERROR})}catch(e){throw this.reportSdkError(e,{feature:"register-customer-card",metadata:{step:"registerCustomerCard"}}),y({errorCode:s.SAVE_CARD_ERROR},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/${c(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 y({response:r,errorCode:s.REMOVE_CARD_ERROR})}catch(e){throw this.reportSdkError(e,{feature:"delete-customer-card",process_id:t,metadata:{step:"deleteCustomerCard"}}),y({errorCode:s.REMOVE_CARD_ERROR},e)}}))}getActiveAPMs(){return r(this,void 0,void 0,(function*(){try{const e=yield function(e,t,o="?status=active&page_size=10000&country=México",n=null){return r(this,void 0,void 0,(function*(){const r=yield fetch(`${e}/api/v1/payment_methods${o}`,{method:"GET",headers:{Authorization:`Token ${t}`,"Content-Type":"application/json"},signal:n});if(r.ok)return yield r.json();throw yield y({response:r,errorCode:s.FETCH_PAYMENT_METHODS_ERROR})}))}(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},ye(e.payment_method)))).sort(((e,t)=>e.priority-t.priority)),this.activeAPMs}catch(e){return console.error("Error getting APMS",e),[]}}))}}function fe(e){return/^\d{12,19}$/.test(e)&&ge(e)}function Ae(e){return/^([a-zA-Z\\ \\,\\.\\-\\']{2,})$/.test(e)}function Ce(e){return/^\d{3,4}$/.test(e)}function Oe(e){return/^(0[1-9]|1[0-2])$/.test(e)}function Te(e){if(!/^\d{2}$/.test(e))return!1;const t=(new Date).getFullYear()%100;return parseInt(e,10)>=t}const ge=e=>{const t=`${e}`.split("").reverse().map((e=>Number.parseInt(e))),r=t.shift();let o=t.reduce(((e,t,r)=>r%2!=0?e+t:e+((t*=2)>9?t-9:t)),0);return o+=r,o%10==0};export{E as AppError,z as BaseInlineCheckout,ve as LiteCheckout,M as SdkTelemetryClient,Ce as validateCVV,fe as validateCardNumber,Ae as validateCardholderName,Oe as validateExpirationMonth,Te as validateExpirationYear};
1
+ import{get as e}from"lodash";import t from"skyflow-js";function r(e,t,r,o){return new(r||(r=Promise))((function(n,i){function s(e){try{d(o.next(e))}catch(e){i(e)}}function a(e){try{d(o.throw(e))}catch(e){i(e)}}function d(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}d((o=o.apply(e,t||[])).next())}))}function o(e,t,r,o){if("a"===r&&!o)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!o:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?o:"a"===r?o.call(e):o?o.value:t.get(e)}function n(e,t,r,o,n){if("m"===o)throw new TypeError("Private method is not writable");if("a"===o&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===o?n.call(e,r):n?n.value=r:t.set(e,r),r}function i(e,t,o){return r(this,void 0,void 0,(function*(){const r=yield fetch(`${e}/api/v1/payments/business/${t}`,{headers:{Authorization:`Token ${t}`},signal:o});return yield r.json()}))}var s;"function"==typeof SuppressedError&&SuppressedError,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"}(s||(s={}));const a={[s.INIT_ERROR]:"Error initializing the SDK.",[s.INVALID_TYPE]:"SDK Type invalid.",[s.STATE_ERROR]:"Error updating SDK state.",[s.FETCH_BUSINESS_ERROR]:"Error retrieving merchant information.",[s.INVALID_CONFIG]:"Required configuration options.",[s.MERCHANT_CREDENTIAL_REQUIRED]:"Merchant credential required.",[s.INVALID_PAYMENT_REQUEST]:"The payment data must be of type: :::interface:::.",[s.INVALID_PAYMENT_REQUEST_CARD_PM]:"The fields card and payment_method cannot be provided together.",[s.TYPE_SDK_REQUIRED]:"SDK type required.",[s.ENVIRONMENT_REQUIRED]:"Environment required.",[s.FETCH_CARDS_ERROR]:"Error retrieving cards.",[s.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.",[s.SAVE_CARD_ERROR]:"Error saving the card.",[s.REMOVE_CARD_ERROR]:"Error deleting the card.",[s.CREATE_PAYMENT_ERROR]:"Error creating the payment.",[s.PAYMENT_PROCESS_ERROR]:"There was an issue processing the payment.",[s.CARD_SAVED_SUCCESSFULLY]:"Card saved successfully.",[s.CARD_REMOVED_SUCCESSFULLY]:"Card deleted successfully.",[s.SAVE_CARD_PROCESS_ERROR]:"Error processing card data.",[s.START_CHECKOUT_ERROR]:"Error processing the payment.",[s.CREATE_ORDER_ERROR]:"Error creating the order.",[s.BUSINESS_ID_REQUIRED]:"Business ID is required.",[s.CLIENT_ID_REQUIRED]:"Client ID is required.",[s.INVALID_AMOUNT]:"Invalid amount.",[s.INVALID_ITEMS]:"Invalid items.",[s.CUSTOMER_OPERATION_ERROR]:"Error registering or fetching customer",[s.INVALID_EMAIL]:"Invalid email.",[s.FETCH_PAYMENT_METHODS_ERROR]:"Error retrieving active payment methods.",[s.INVALID_VAULT_TOKEN]:"An invalid vault token response was received.",[s.VAULT_TOKEN_ERROR]:"Error retrieving the vault token.",[s.SECURE_TOKEN_ERROR]:"Error getting secure token.",[s.SECURE_TOKEN_INVALID]:"Invalid secure token.",[s.INVALID_SECRET_API_KEY]:"SECRET API KEY is required.",[s.REMOVE_CARD]:"Card deleted successfully",[s.SKYFLOW_NOT_INITIALIZED]:"Skyflow not initialized.",[s.ERROR_LOAD_PAYMENT_FORM]:"There was an issue loading the payment form.",[s.INVALID_CARD_DATA]:"Invalid card data.",[s.ERROR_LOAD_ENROLLMENT_FORM]:"There was an issue loading the card form.",[s.MOUNT_COLLECT_ERROR]:"Mount failed. Make sure all inputs are complete and valid.",[s.CARD_ON_FILE_DECLINED]:"Transaction declined. Please verify your card details.",[s.REQUEST_ABORTED]:"Requests canceled.",[s.REQUEST_FAILED]:"Request failed.",[s.UNKNOWN_ERROR]:"An unexpected error occurred.",[s.CREATE_ERROR]:"Error creating the SDK.",[s.FETCH_TRANSACTION_ERROR]:"Error retrieving the transaction.",[s.THREEDS_REDIRECTION_ERROR]:"Ocurrió un error durante la redirección de 3DS.",[s.REMOVE_SDK_ERROR]:"Ocurrió un error removiendo la instancia del SDK."};s.INIT_ERROR,s.STATE_ERROR,s.FETCH_BUSINESS_ERROR,s.INVALID_CONFIG,s.TYPE_SDK_REQUIRED,s.ENVIRONMENT_REQUIRED,s.FETCH_CARDS_ERROR,s.SAVE_CARD_ERROR,s.REMOVE_CARD_ERROR,s.CREATE_PAYMENT_ERROR,s.START_CHECKOUT_ERROR,s.CREATE_ORDER_ERROR,s.BUSINESS_ID_REQUIRED,s.CLIENT_ID_REQUIRED,s.INVALID_AMOUNT,s.INVALID_ITEMS,s.CUSTOMER_OPERATION_ERROR,s.INVALID_EMAIL,s.FETCH_PAYMENT_METHODS_ERROR,s.INVALID_VAULT_TOKEN,s.VAULT_TOKEN_ERROR,s.SECURE_TOKEN_ERROR,s.INVALID_SECRET_API_KEY,s.CUSTOMER_AUTH_TOKEN_NOT_VALID,s.SECURE_TOKEN_INVALID,s.REMOVE_CARD,s.SKYFLOW_NOT_INITIALIZED,s.INVALID_TYPE,s.PAYMENT_PROCESS_ERROR,s.INVALID_PAYMENT_REQUEST,s.INVALID_PAYMENT_REQUEST_CARD_PM,s.SAVE_CARD_PROCESS_ERROR,s.ERROR_LOAD_PAYMENT_FORM,s.INVALID_CARD_DATA,s.ERROR_LOAD_ENROLLMENT_FORM,s.MOUNT_COLLECT_ERROR,s.CARD_ON_FILE_DECLINED,s.CARD_SAVED_SUCCESSFULLY,s.CARD_REMOVED_SUCCESSFULLY,s.REQUEST_ABORTED,s.REQUEST_FAILED,s.UNKNOWN_ERROR,s.CREATE_ERROR,s.FETCH_TRANSACTION_ERROR,s.THREEDS_REDIRECTION_ERROR,s.REMOVE_SDK_ERROR;class d extends Error{constructor(e){var t,r;const o=e.message||a[e.code]||"Unknown error";super(o),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)||o}}}const l=()=>({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}),c=e=>{var t;return e&&"business"in e?null===(t=null==e?void 0:e.business)||void 0===t?void 0:t.pk:""},u="__tonderLockErrorCode__";function h(e){return"object"==typeof e&&null!==e}class _ extends Error{constructor(e){var t,r;const o=_.resolveStatusCode(e.statusCode,e.originalError),n=_.resolveMessage(e.errorCode,e.message),i=_.resolveSystemError(null===(t=e.details)||void 0===t?void 0:t.systemError,e.originalError);super(n),this.status="error",Object.setPrototypeOf(this,new.target.prototype),this.name="TonderError",this.code=e.errorCode,this.statusCode=o,this.originalError=e.originalError,this.details={code:e.errorCode,statusCode:o,systemError:i},e.lockErrorCode&&Object.defineProperty(this,u,{value:!0,enumerable:!1,configurable:!0}),null===(r=Error.captureStackTrace)||void 0===r||r.call(Error,this,_)}static isRecord(e){return"object"==typeof e&&null!==e}static parseStatusCode(e){const t=Number(e);return Number.isFinite(t)?t<100||t>599?500:Math.trunc(t):500}static resolveStatusCode(e,t){const r=[e];if(_.isRecord(t)){r.push(t.statusCode,t.status);const e=_.isRecord(t.body)?t.body:null;e&&r.push(e.statusCode,e.status)}for(const e of r)if(_.isHttpStatusCode(e))return Math.trunc(Number(e));return 500}static resolveMessage(e,t){return t||(a[e]||a[s.UNKNOWN_ERROR]||"An unexpected error occurred.")}static isHttpStatusCode(e){const t=Number(e);return Number.isFinite(t)&&t>=100&&t<=599}static normalizeSystemError(e){if("string"!=typeof e)return null;return e.trim()||null}static resolveSystemError(e,t){const r=[e];if(_.isRecord(t)){const e=_.isRecord(t.details)?t.details:null,o=_.isRecord(t.body)?t.body:null,n=o&&_.isRecord(o.details)?o.details:null;r.push(t.systemError,t.code,null==e?void 0:e.systemError,null==e?void 0:e.code,null==o?void 0:o.systemError,null==o?void 0:o.code,null==n?void 0:n.systemError,null==n?void 0:n.code)}for(const e of r){const t=_.normalizeSystemError(e);if(t)return t}return"APP_INTERNAL_001"}}function E(e){return h(e)&&!0===e[u]}function p(e){return e instanceof _&&void 0!==e.originalError?e.originalError:e}function m(e,t){var r;if(!(null==e?void 0:e.errorCode))throw new Error("buildPublicAppError requires errorCode");const o=null===(r=e.details)||void 0===r?void 0:r.systemError,n=!!e.message||void 0!==e.statusCode||void 0!==o;return!function(e){return h(e)&&"TonderError"===e.name&&"string"==typeof e.code}(t)||(e.lockErrorCode&&function(e){Object.defineProperty(e,u,{value:!0,enumerable:!1,configurable:!0})}(t),n||e.errorCode!==t.code&&!E(t))?new _({errorCode:e.errorCode,message:e.message,statusCode:e.statusCode,details:void 0!==o?{systemError:o}:void 0,originalError:p(t),lockErrorCode:e.lockErrorCode||E(t)}):t}function R(e){var t,o;return r(this,void 0,void 0,(function*(){const n=yield function(e){return r(this,void 0,void 0,(function*(){try{return yield e.clone().json()}catch(e){}try{return(yield e.text())||void 0}catch(e){return}}))}(e.response),i={status:e.response.status};return e.response.statusText&&(i.statusText=e.response.statusText),void 0!==n&&(i.body=n),new _({errorCode:e.errorCode,message:e.message,statusCode:null!==(t=e.statusCode)&&void 0!==t?t:e.response.status,details:void 0!==(null===(o=e.details)||void 0===o?void 0:o.systemError)?{systemError:e.details.systemError}:void 0,originalError:i,lockErrorCode:e.lockErrorCode})}))}function y(e,t){return(null==e?void 0:e.response)?R(e):m(e,t)}class v{constructor({payload:e=null,apiKey:t,baseUrl:r,redirectOnComplete:o,tdsIframeId:n,tonderPayButtonId:i,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=n,this.tonderPayButtonId=i,this.redirectOnComplete=o,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,o,n,i;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===(i=null===(n=null===(o=this.payload)||void 0===o?void 0:o.next_action)||void 0===n?void 0:n.iframe_resources)||void 0===i?void 0:i.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,o,n;const i=null===(n=null===(o=null===(r=this.payload)||void 0===r?void 0:r.next_action)||void 0===o?void 0:o.iframe_resources)||void 0===n?void 0:n.iframe;if(i){this.saveVerifyTransactionUrl();const r=document.createElement("div");r.innerHTML=i,document.body.appendChild(r);const o=document.createElement("script");o.textContent='document.getElementById("tdsMmethodForm").submit();',r.appendChild(o);const n=document.getElementById("tdsMmethodTgtFrame");n?n.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 o=this,n=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"),o.callBack&&o.callBack(o.payload),t.removeEventListener("load",n)},i=t=>r(this,void 0,void 0,(function*(){const n=yield new Promise(((e,r)=>e(t)));if(n){if((e=>"Pending"!==(null==e?void 0:e.transaction_status))(n))return e();{const e=setTimeout((()=>r(this,void 0,void 0,(function*(){clearTimeout(e),yield i(o.requestTransactionStatus())}))),7e3)}}}));yield i(o.requestTransactionStatus())}));t.addEventListener("load",n)}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,o]of t)e[r]=o;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 o=document.createElement("input");o.type="hidden",o.name=e.term_url,o.value=e.TermUrl,t.appendChild(o),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 f=Object.freeze({production:"https://app.tonder.io",sandbox:"https://sandbox.tonder.io",stage:"https://stage.tonder.io",development:"http://localhost:8000"});function A(e,t,o){return r(this,void 0,void 0,(function*(){const r=`${e}/api/v1/checkout-router/`,n=o,i=yield fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${t}`},body:JSON.stringify(Object.assign(Object.assign({},n),"undefined"!=typeof MP_DEVICE_SESSION_ID?{mp_device_session_id:MP_DEVICE_SESSION_ID}:{}))});if(i.ok)return yield i.json();throw yield y({response:i,errorCode:s.START_CHECKOUT_ERROR})}))}function C(e,t,o=!0,n=null){return r(this,void 0,void 0,(function*(){let r=yield window.OpenPay;return r.setId(e),r.setApiKey(t),r.setSandboxMode(o),yield r.deviceData.setup({signal:n})}))}const O=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"}),T=Object.freeze({TELEMETRY:"/telemetry/v1/events",ACQ_SUBSCRIPTION_TOKEN:"/acq-kushki/subscription/token",ACQ_SUBSCRIPTION_CREATE:"/acq-kushki/subscription/create"});function g(e="stage"){return`${O[e]}${T.TELEMETRY}`}const I="https://cdn.kushkipagos.com/kushki.min.js",S=s.CARD_ON_FILE_DECLINED;let N=!1,D=null;class b{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 O[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 N?Promise.resolve():D||(D=new Promise(((e,t)=>{if(document.querySelector(`script[src="${I}"]`))return N=!0,void e();const r=document.createElement("script");r.src=I,r.async=!0,r.onload=()=>{N=!0,e()},r.onerror=()=>{D=null,t(y({errorCode:S,lockErrorCode:!0,details:{step:"load_acquirer_script",message:"Failed to load acquirer script"}}))},document.head.appendChild(r)})),D)}))}(),this.acquirerInstance=function(e,t){if(!window.Kushki)throw y({errorCode:S,lockErrorCode:!0,details:{step:"create_acquirer_instance",message:"Acquirer script not loaded. Call initialize() first."}});return new window.Kushki({merchantId:e,inTestEnvironment:t})}(this.merchantId,this.isTestEnvironment)}))}getAcquirerInstance(){if(!this.acquirerInstance)throw y({errorCode:S,lockErrorCode:!0,details:{step:"get_acquirer_instance",message:"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,o)=>{t.requestSecureInit({card:{number:e}},(e=>{if("code"in e&&e.code)return void o(y({errorCode:S,lockErrorCode:!0,details:{step:"get_jwt",acquirerResponse:e}}));const t=e;t.jwt?r(t.jwt):o(y({errorCode:S,lockErrorCode:!0,details:{step:"get_jwt",message:"No JWT returned from acquirer",acquirerResponse:t}}))}))}))}))}generateToken(e){return r(this,void 0,void 0,(function*(){const t=yield fetch(`${this.apiUrl}${T.ACQ_SUBSCRIPTION_TOKEN}`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKey}`},body:JSON.stringify(e)});if(!t.ok)throw yield y({response:t,errorCode:S,lockErrorCode:!0,details:{step:"generate_token"}});return t.json()}))}createSubscription(e){return r(this,void 0,void 0,(function*(){const t=yield fetch(`${this.apiUrl}${T.ACQ_SUBSCRIPTION_CREATE}`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKey}`},body:JSON.stringify(e)});if(!t.ok)throw yield y({response:t,errorCode:S,lockErrorCode:!0,details:{step:"create_subscription"}});return t.json()}))}validate3DS(e,t){return r(this,void 0,void 0,(function*(){const r=this.getAcquirerInstance();return new Promise(((o,n)=>{r.requestValidate3DS({secureId:e,security:t},(e=>{const t=e;t.code&&"3DS000"!==t.code?n(y({errorCode:S,lockErrorCode:!0,details:{step:"validate_3ds",message:"3DS validation failed",acquirerResponse:t}})):!1!==t.isValid?o(!0):n(y({errorCode:S,lockErrorCode:!0,details:{step:"validate_3ds",message:"3DS validation failed",acquirerResponse:t}}))}))}))}))}process(e){var t,o;return r(this,void 0,void 0,(function*(){const r=yield this.getJwt(e.cardBin),n=yield this.generateToken({card:e.cardTokens,currency:e.currency,jwt:r}),i=n.secureId||(null===(t=n.details)||void 0===t?void 0:t.secureId),s=n.security||(null===(o=n.details)||void 0===o?void 0:o.security);if(!i||!s)throw y({errorCode:S,lockErrorCode:!0,details:{step:"process",message:"Missing secureId or security in token response",tokenResponse:n}});return yield this.validate3DS(i,s),this.createSubscription({token:n.token,contactDetails:e.contactDetails,metadata:{customerId:e.customerId},currency:e.currency})}))}}class M{constructor(e){this.REQUEST_TIMEOUT_MS=5e3,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),o=Object.assign({},t.metadata||{});void 0===o.error&&(o.error=e),"undefined"!=typeof window&&(o.url=window.location.href);const n={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:o};return t.tenant_id&&(n.tenant_id=t.tenant_id),t.request_id&&(n.request_id=t.request_id),t.process_id&&(n.process_id=t.process_id),t.user_id&&(n.user_id=t.user_id),r.stack&&(n.stack=r.stack),t.error_code&&(n.error_code=t.error_code),t.http_status&&(n.http_status=t.http_status),n}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,o=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(o),e.ok}catch(e){return clearTimeout(o),!1}}catch(e){return!1}}))}}const k=Object.freeze({name:"@tonder.io/ionic-lite-sdk",version:"0.0.68"});var U,L,P,w,j,V,K,F,x,B,Y,$,H;class z{constructor({mode:e="stage",customization:t,apiKey:r,apiKeyTonder:o,returnUrl:n,tdsIframeId:i,callBack:s=(()=>{}),baseUrlTonder:a,tonderPayButtonId:d,sdkInfo:l}){U.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,L.set(this,void 0),P.set(this,void 0),this.apiKeyTonder=o||r||"",this.returnUrl=n,this.callBack=s,this.mode=e,this.customer={},this.baseUrl=a||f[this.mode]||f.stage,this.abortController=new AbortController,this.requestId=this.generateRequestId(),this.customization=Object.assign(Object.assign({},this.customization),t||{}),this.process3ds=new v({apiKey:r,baseUrl:this.baseUrl,redirectOnComplete:this.customization.redirectOnComplete,tdsIframeId:i,tonderPayButtonId:d,callBack:s}),this.tdsIframeId=i;const c=l||k;this.telemetry=new M({endpoint:g(this.mode),apiKey:this.apiKeyTonder,platform:c.name,platform_version:c.version,mode:this.mode||"stage"})}configureCheckout(e){"secureToken"in e&&o(this,U,"m",V).call(this,e.secureToken),o(this,U,"m",w).call(this,e)}getCustomerId(){var e,t;return null===(t=null===(e=o(this,P,"f"))||void 0===e?void 0:e.id)||void 0===t?void 0:t.toString()}reportSdkError(e,t){var r,o,n,i;try{const s=this.getCustomerId(),a=e instanceof _&&void 0!==e.originalError?e.originalError:e,d=Object.assign(Object.assign({},(null==t?void 0:t.metadata)||{}),void 0===(null===(r=null==t?void 0:t.metadata)||void 0===r?void 0:r.error)?{error:a}:{}),l=Object.assign(Object.assign({tenant_id:null===(i=null===(n=null===(o=this.merchantData)||void 0===o?void 0:o.business)||void 0===n?void 0:n.pk)||void 0===i?void 0:i.toString(),user_id:s},t||{}),{metadata:d,request_id:this.requestId});l.user_id||delete l.user_id,l.feature=(null==t?void 0:t.feature)||"unknown",this.telemetry.captureException(e,l)}catch(e){}}generateRequestId(){return`req_${Date.now()}_${Math.random().toString(36).slice(2,10)}`}verify3dsTransaction(){return r(this,void 0,void 0,(function*(){const e=yield this.process3ds.verifyTransactionStatus(),t=yield o(this,U,"m",Y).call(this,e);return this.process3ds.setPayload(t),this._handle3dsRedirect(t)}))}payment(e){return new Promise(((t,n)=>r(this,void 0,void 0,(function*(){var r,i;let a;try{o(this,U,"m",w).call(this,e),a=yield this._checkout(e),this.process3ds.setPayload(a);if(yield this._handle3dsRedirect(a)){try{const e=document.querySelector(`#${this.tonderPayButtonId}`);e&&(e.disabled=!1)}catch(e){}this.callBack&&this.callBack(a),t(a)}}catch(t){this.reportSdkError(t,{feature:"payment",process_id:(null==a?void 0:a.payment_id)||(null===(r=null==a?void 0:a.payment)||void 0===r?void 0:r.id)||(null===(i=null==a?void 0:a.payment)||void 0===i?void 0:i.pk),metadata:{step:"payment",request:e,response:a}}),n(y({errorCode:s.PAYMENT_PROCESS_ERROR},t))}}))))}getSecureToken(e){return r(this,void 0,void 0,(function*(){try{return yield function(e,t,o=null){return r(this,void 0,void 0,(function*(){const r=yield fetch(`${e}/api/secure-token/`,{method:"POST",headers:{Authorization:`Token ${t}`,"Content-Type":"application/json"},signal:o});if(r.ok)return yield r.json();throw yield y({response:r,errorCode:s.SECURE_TOKEN_ERROR})}))}(this.baseUrl,e)}catch(e){throw this.reportSdkError(e,{feature:"secure-token",metadata:{step:"getSecureToken"}}),y({errorCode:s.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 o(this,P,"f")||n(this,P,yield function(e,t,o,n=null){return r(this,void 0,void 0,(function*(){const r=`${e}/api/v1/customer/`,i={email:o.email,first_name:null==o?void 0:o.firstName,last_name:null==o?void 0:o.lastName,phone:null==o?void 0:o.phone},a=yield fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${t}`},signal:n,body:JSON.stringify(i)});if(a.ok)return yield a.json();throw yield y({response:a,errorCode:s.CUSTOMER_OPERATION_ERROR})}))}(this.baseUrl,this.apiKeyTonder,this.customer,e),"f"),o(this,P,"f")}))}_handleCheckout({card:t,payment_method:n,customer:i,isSandbox:a,enable_card_on_file:d,returnUrl:c}){return r(this,void 0,void 0,(function*(){const{openpay_keys:u,reference:h,business:_}=this.merchantData,E=Number(this.cartTotal);let p,m,R;try{let v;!v&&u.merchant_id&&u.public_key&&!n&&(v=yield C(u.merchant_id,u.public_key,a,this.abortController.signal));const{id:f,auth_token:O}=i;p={business:this.apiKeyTonder,client:O,billing_address_id:null,shipping_address_id:null,amount:E,status:"A",reference:h,is_oneclick:!0,items:this.cartItems,currency:this.currency,metadata:this.metadata};const T=yield function(e,t,o){return r(this,void 0,void 0,(function*(){const r=`${e}/api/v1/orders/`,n=o,i=yield fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${t}`},body:JSON.stringify(n)});if(i.ok)return yield i.json();throw yield y({response:i,errorCode:s.CREATE_ORDER_ERROR})}))}(this.baseUrl,this.apiKeyTonder,p),g=(new Date).toISOString();m={business_pk:_.pk,client_id:f,amount:E,date:g,order_id:T.id,customer_order_reference:this.order_reference?this.order_reference:h,items:this.cartItems,currency:this.currency,metadata:this.metadata};const I=yield function(e,t,o){return r(this,void 0,void 0,(function*(){const r=`${e}/api/v1/business/${o.business_pk}/payments/`,n=o,i=yield fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${t}`},body:JSON.stringify(n)});if(i.ok)return yield i.json();throw yield y({response:i,errorCode:s.CREATE_PAYMENT_ERROR})}))}(this.baseUrl,this.apiKeyTonder,m);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:c||this.returnUrl,id_product:"no_id",quantity_product:1,id_ship:"0",instance_id_ship:"0",amount:E,title_ship:"shipping",description:"transaction",device_session_id:v||null,token_id:"",order_id:T.id,business_id:_.pk,payment_id:I.pk,source:"sdk",items:this.cartItems,metadata:this.metadata,browser_info:l(),currency:this.currency},n?{payment_method:n}:{card:t}),{apm_config:o(this,L,"f")}),this.customer&&"identification"in this.customer?{identification:this.customer.identification}:{}),void 0!==d?{enable_card_on_file:d}:{});const S=yield A(this.baseUrl,this.apiKeyTonder,R);return S||!1}catch(e){throw this.reportSdkError(e,{feature:"payment",process_id:null==R?void 0:R.payment_id,metadata:{step:"_handleCheckout",orderItems:p,paymentItems:m,routerItems:R}}),e}}))}_fetchMerchantData(){return r(this,void 0,void 0,(function*(){try{return this.merchantData||(this.merchantData=yield i(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,o,n,i=null){return r(this,void 0,void 0,(function*(){const r=`${e}/api/v1/business/${n}/cards/`,a=yield fetch(r,{method:"GET",headers:{Authorization:`Bearer ${o}`,"Content-Type":"application/json","User-token":t},signal:i});if(a.ok)return yield a.json();if(401===a.status)return{user_id:0,cards:[]};throw yield y({response:a,errorCode:s.FETCH_CARDS_ERROR})}))}(this.baseUrl,e,this.secureToken,t)}))}_saveCustomerCard(e,t,o,n=!1){return r(this,void 0,void 0,(function*(){return yield function(e,t,o,n,i,a=!1){return r(this,void 0,void 0,(function*(){const r=`${e}/api/v1/business/${n}/cards/`,d=yield fetch(r,{method:"POST",headers:Object.assign({Authorization:`Bearer ${o}`,"Content-Type":"application/json","User-token":t},a?{"X-App-Origin":"sdk/ionic"}:{}),body:JSON.stringify(i)});if(d.ok)return yield d.json();throw yield y({response:d,errorCode:s.SAVE_CARD_ERROR})}))}(this.baseUrl,e,this.secureToken,t,o,n)}))}_removeCustomerCard(e,t,o){return r(this,void 0,void 0,(function*(){return yield function(e,t,o,n="",i){return r(this,void 0,void 0,(function*(){const r=`${e}/api/v1/business/${i}/cards/${n}`,d=yield fetch(r,{method:"DELETE",headers:{Authorization:`Bearer ${o}`,"Content-Type":"application/json","User-token":t}});if(204===d.status)return a[s.CARD_REMOVED_SUCCESSFULLY];if(d.ok&&"json"in d)return yield d.json();throw yield y({response:d,errorCode:s.REMOVE_CARD_ERROR})}))}(this.baseUrl,e,this.secureToken,o,t)}))}_fetchCustomerPaymentMethods(){return r(this,void 0,void 0,(function*(){return yield function(e,t,o={status:"active",pagesize:"10000"},n=null){return r(this,void 0,void 0,(function*(){const r=new URLSearchParams(o).toString(),i=yield fetch(`${e}/api/v1/payment_methods?${r}`,{method:"GET",headers:{Authorization:`Token ${t}`,"Content-Type":"application/json"},signal:n});if(i.ok)return yield i.json();throw yield y({response:i,errorCode:s.FETCH_PAYMENT_METHODS_ERROR})}))}(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 b({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,o;return r(this,void 0,void 0,(function*(){if(e&&"next_action"in e?null===(o=null===(t=null==e?void 0:e.next_action)||void 0===t?void 0:t.iframe_resources)||void 0===o?void 0:o.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 q(e,t,o=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:o});if(r.ok){return(yield r.json()).token}throw yield y({response:r,errorCode:s.VAULT_TOKEN_ERROR})}))}L=new WeakMap,P=new WeakMap,U=new WeakSet,w=function(e){var t,r;!e||e&&0===Object.keys(e).length||(o(this,U,"m",j).call(this,e.customer),this._setCartTotal((null===(t=e.cart)||void 0===t?void 0:t.total)||0),o(this,U,"m",K).call(this,(null===(r=e.cart)||void 0===r?void 0:r.items)||[]),o(this,U,"m",F).call(this,e),o(this,U,"m",x).call(this,e),o(this,U,"m",B).call(this,e),o(this,U,"m",$).call(this,e))},j=function(e){e&&(this.customer=e)},V=function(e){this.secureToken=e},K=function(e){this.cartItems=e},F=function(e){this.metadata=null==e?void 0:e.metadata,this.order_reference=null==e?void 0:e.order_reference},x=function(e){this.currency=null==e?void 0:e.currency},B=function(e){this.card=null==e?void 0:e.card},Y=function(e){var t,o,n,i,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===(o=null==e?void 0:e.checkout)||void 0===o?void 0:o.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===(n=e.checkout)||void 0===n?void 0:n.id)||(null==e?void 0:e.checkout_id)};try{return yield A(this.baseUrl,this.apiKeyTonder,t)}catch(t){this.reportSdkError(t,{feature:"payment",process_id:(null==e?void 0:e.payment_id)||(null===(i=null==e?void 0:e.payment)||void 0===i?void 0:i.id)||(null===(s=null==e?void 0:e.payment)||void 0===s?void 0:s.pk),metadata:{step:"#resumeCheckout",response:e}})}return e}}))},$=function(e){n(this,L,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"}(H||(H={}));const Q={type:t.ValidationRuleType.LENGTH_MATCH_RULE,params:{max:70}},W=RegExp("^(?!s*$).+"),X={type:t.ValidationRuleType.REGEX_MATCH_RULE,params:{regex:W,error:"El campo es requerido"}},J="Titular de la tarjeta",G="Número de tarjeta",Z="CVC/CVV",ee="Mes",te="Año",re="Fecha de expiración",oe="Nombre como aparece en la tarjeta",ne="1234 1234 1234 1234",ie="3-4 dígitos",se="MM",ae="AA",de={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")'}},le={base:{fontSize:"12px",fontWeight:"500",fontFamily:'"Inter", sans-serif'}},ce={base:{fontSize:"12px",fontWeight:"500",fontFamily:'"Inter", sans-serif',color:"#f44336"}};function ue({baseUrl:e,apiKey:o,vault_id:n,vault_url:i,data:a}){return r(this,void 0,void 0,(function*(){const d=t.init({vaultID:n,vaultURL:i,getBearerToken:()=>r(this,void 0,void 0,(function*(){return yield q(e,o)})),options:{logLevel:t.LogLevel.ERROR,env:t.Env.DEV}}).container(t.ContainerType.COLLECT),l=yield function(e,o){return r(this,void 0,void 0,(function*(){const n=yield function(e,o){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 o.create({table:"cards",column:e,type:t.ElementType.INPUT_FIELD}),key:e}})))))}))}(e,o);return n?n.map((t=>new Promise((r=>{var o;const n=document.createElement("div");n.hidden=!0,n.id=`id-${t.key}`,null===(o=document.querySelector("body"))||void 0===o||o.appendChild(n),setTimeout((()=>{t.element.mount(`#id-${t.key}`),setInterval((()=>{if(t.element.isMounted()){const o=e[t.key];return t.element.setValue(o),r(t.element.isMounted())}}),120)}),120)})))):[]}))}(a,d);if((yield Promise.all(l)).some((e=>!e)))throw y({errorCode:s.SAVE_CARD_PROCESS_ERROR,details:{step:"get_skyflow_tokens"}});try{const e=yield d.collect();if(e)return e.records[0].fields;throw y({errorCode:s.SAVE_CARD_PROCESS_ERROR,details:{step:"get_skyflow_tokens"}})}catch(e){throw y({errorCode:s.SAVE_CARD_PROCESS_ERROR},e)}}))}function he(e){const{element:r,fieldMessage:o="",errorStyles:n={},requiredMessage:i="Campo requerido",invalidMessage:s="Campo no válido",events:a}=e;"on"in r&&(r.on(t.EventName.CHANGE,(e=>{Ee({eventName:"onChange",data:e,events:a}),_e({element:r,errorStyles:n,color:"transparent"})})),r.on(t.EventName.BLUR,(e=>{if(Ee({eventName:"onBlur",data:e,events:a}),!e.isValid){const t=e.isEmpty?i:""!=o?`El campo ${o} no es válido`:s;r.setError(t)}_e({element:r,errorStyles:n})})),r.on(t.EventName.FOCUS,(e=>{Ee({eventName:"onFocus",data:e,events:a}),_e({element:r,errorStyles:n,color:"transparent"}),r.resetError()})))}function _e(e){const{element:t,errorStyles:r={},color:o=""}=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)),""!=o&&{color:o})})})}const Ee=t=>{const{eventName:r,data:o,events:n}=t;if(n&&r in n){const t=n[r];"function"==typeof t&&t({elementType:e(o,"elementType",""),isEmpty:e(o,"isEmpty",""),isFocused:e(o,"isFocused",""),isValid:e(o,"isValid","")})}};function pe(e){return r(this,void 0,void 0,(function*(){const{element:t,containerId:r,retries:o=2,delay:n=30}=e;for(let e=0;e<=o;e++){if(document.querySelector(r))return void t.mount(r);e<o&&(yield new Promise((e=>setTimeout(e,n))))}console.warn(`[mountCardFields] Container ${r} was not found after ${o+1} attempts`)}))}const me=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"}),Re={[me.SORIANA]:{label:"Soriana",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/soriana.png"},[me.OXXO]:{label:"Oxxo",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/oxxo.png"},[me.CODI]:{label:"CoDi",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/codi.png"},[me.MERCADOPAGO]:{label:"Mercado Pago",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/mercadopago.png"},[me.OXXOPAY]:{label:"Oxxo Pay",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/oxxopay.png"},[me.SPEI]:{label:"SPEI",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/spei.png"},[me.PAYPAL]:{label:"Paypal",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/paypal.png"},[me.COMERCIALMEXICANA]:{label:"Comercial Mexicana",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/comercial_exicana.png"},[me.BANCOMER]:{label:"Bancomer",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/bancomer.png"},[me.WALMART]:{label:"Walmart",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/walmart.png"},[me.BODEGA]:{label:"Bodega Aurrera",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/bodega_aurrera.png"},[me.SAMSCLUB]:{label:"Sam´s Club",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/sams_club.png"},[me.SUPERAMA]:{label:"Superama",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/superama.png"},[me.CALIMAX]:{label:"Calimax",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/calimax.png"},[me.EXTRA]:{label:"Tiendas Extra",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/tiendas_extra.png"},[me.CIRCULOK]:{label:"Círculo K",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/circulo_k.png"},[me.SEVEN11]:{label:"7 Eleven",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/7_eleven.png"},[me.TELECOMM]:{label:"Telecomm",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/telecomm.png"},[me.BANORTE]:{label:"Banorte",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/banorte.png"},[me.BENAVIDES]:{label:"Farmacias Benavides",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_benavides.png"},[me.DELAHORRO]:{label:"Farmacias del Ahorro",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_ahorro.png"},[me.ELASTURIANO]:{label:"El Asturiano",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/asturiano.png"},[me.WALDOS]:{label:"Waldos",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/waldos.png"},[me.ALSUPER]:{label:"Alsuper",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/al_super.png"},[me.KIOSKO]:{label:"Kiosko",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/kiosko.png"},[me.STAMARIA]:{label:"Farmacias Santa María",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_santa_maria.png"},[me.LAMASBARATA]:{label:"Farmacias la más barata",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_barata.png"},[me.FARMROMA]:{label:"Farmacias Roma",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_roma.png"},[me.FARMUNION]:{label:"Pago en Farmacias Unión",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_union.png"},[me.FARMATODO]:{label:"Pago en Farmacias Farmatodo",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_farmatodo.png\t"},[me.SFDEASIS]:{label:"Pago en Farmacias San Francisco de Asís",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/farmacias_san_francisco.png"},[me.FARM911]:{label:"Farmacias 911",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.FARMECONOMICAS]:{label:"Farmacias Economicas",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.FARMMEDICITY]:{label:"Farmacias Medicity",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.RIANXEIRA]:{label:"Rianxeira",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.WESTERNUNION]:{label:"Western Union",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.ZONAPAGO]:{label:"Zona Pago",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.CAJALOSANDES]:{label:"Caja Los Andes",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.CAJAPAITA]:{label:"Caja Paita",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.CAJASANTA]:{label:"Caja Santa",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.CAJASULLANA]:{label:"Caja Sullana",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.CAJATRUJILLO]:{label:"Caja Trujillo",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.EDPYME]:{label:"Edpyme",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.KASNET]:{label:"KasNet",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.NORANDINO]:{label:"Norandino",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.QAPAQ]:{label:"Qapaq",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.RAIZ]:{label:"Raiz",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.PAYSER]:{label:"Paysera",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.WUNION]:{label:"Western Union",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.BANCOCONTINENTAL]:{label:"Banco Continental",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.GMONEY]:{label:"Go money",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.GOPAY]:{label:"Go pay",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.WU]:{label:"Western Union",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.PUNTOSHEY]:{label:"Puntoshey",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.AMPM]:{label:"Ampm",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.JUMBOMARKET]:{label:"Jumbomarket",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.SMELPUEBLO]:{label:"Smelpueblo",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.BAM]:{label:"Bam",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.REFACIL]:{label:"Refacil",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"},[me.ACYVALORES]:{label:"Acyvalores",icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png"}},ye=e=>{const t=e.toUpperCase().trim().replace(/\s+/g,"");return Re[t]||{icon:"https://d35a75syrgujp0.cloudfront.net/payment_methods/store.png",label:""}};class ve extends z{constructor({apiKey:e,mode:t,returnUrl:r,callBack:o,apiKeyTonder:n,baseUrlTonder:i,customization:s,collectorIds:a,events:d}){super({mode:t,apiKey:e,returnUrl:r,callBack:o,apiKeyTonder:n,baseUrlTonder:i,customization:s,tdsIframeId:a&&"tdsIframe"in a?null==a?void 0:a.tdsIframe:"tdsIframe",sdkInfo:k}),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"}}),y({errorCode:s.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:o,first_name:n="",last_name:i="",email:a=""}=r,{vault_id:d,vault_url:l,business:c}=this.merchantData,u=this._hasCardOnFileKeys(),h={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 ue({vault_id:d,vault_url:l,data:h,baseUrl:this.baseUrl,apiKey:this.apiKeyTonder}),E=yield this._saveCustomerCard(o,null==c?void 0:c.pk,_,u);if(t=E.skyflow_id,u){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:n||"",lastName:i||"",email:a||""},customerId:o,currency:this.currency||"MXN"})}catch(e){throw y({errorCode:s.CARD_ON_FILE_DECLINED,lockErrorCode:!0},e)}const d={skyflow_id:_.skyflow_id,subscription_id:r.subscriptionId};yield this._saveCustomerCard(o,null==c?void 0:c.pk,d)}return E}catch(e){throw t&&(yield this.removeCustomerCard(t)),this.reportSdkError(e,{feature:"save-card",process_id:t||this.getCustomerId(),metadata:{step:"saveCustomerCard"}}),y({errorCode:s.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"}}),y({errorCode:s.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},ye(e.payment_method)))).sort(((e,t)=>e.priority-t.priority))}catch(e){throw this.reportSdkError(e,{feature:"get-payment-methods",metadata:{step:"getCustomerPaymentMethods"}}),y({errorCode:s.FETCH_PAYMENT_METHODS_ERROR},e)}}))}mountCardFields(e){var o;return r(this,void 0,void 0,(function*(){const n=e.card_id?`update:${e.card_id}`:"create",i=null!==(o=e.unmount_context)&&void 0!==o?o:"all";"none"!==i&&("current"===i?this.unmountCardFields(n):this.unmountCardFields(i)),yield this.createSkyflowInstance();const s=yield function(e){var o,n,i,s,a,d,l,c,u,h,_,E,p,m,R,y,v;return r(this,void 0,void 0,(function*(){const{skyflowInstance:r,data:f,customization:A,events:C}=e,O=r.container(t.ContainerType.COLLECT),T=[],g={[H.CVV]:t.ElementType.CVV,[H.CARD_NUMBER]:t.ElementType.CARD_NUMBER,[H.EXPIRATION_MONTH]:t.ElementType.EXPIRATION_MONTH,[H.EXPIRATION_YEAR]:t.ElementType.EXPIRATION_YEAR,[H.CARDHOLDER_NAME]:t.ElementType.CARDHOLDER_NAME},I={[H.CVV]:[X],[H.CARD_NUMBER]:[X],[H.EXPIRATION_MONTH]:[X],[H.EXPIRATION_YEAR]:[X],[H.CARDHOLDER_NAME]:[Q,X]},S={errorStyles:(null===(n=null===(o=null==A?void 0:A.styles)||void 0===o?void 0:o.cardForm)||void 0===n?void 0:n.errorStyles)||ce,inputStyles:(null===(s=null===(i=null==A?void 0:A.styles)||void 0===i?void 0:i.cardForm)||void 0===s?void 0:s.inputStyles)||de,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)||le},N={name:(null===(l=null==A?void 0:A.labels)||void 0===l?void 0:l.name)||J,card_number:(null===(c=null==A?void 0:A.labels)||void 0===c?void 0:c.card_number)||G,cvv:(null===(u=null==A?void 0:A.labels)||void 0===u?void 0:u.cvv)||Z,expiration_date:(null===(h=null==A?void 0:A.labels)||void 0===h?void 0:h.expiry_date)||re,expiration_month:(null===(_=null==A?void 0:A.labels)||void 0===_?void 0:_.expiration_month)||ee,expiration_year:(null===(E=null==A?void 0:A.labels)||void 0===E?void 0:E.expiration_year)||te},D={name:(null===(p=null==A?void 0:A.placeholders)||void 0===p?void 0:p.name)||oe,card_number:(null===(m=null==A?void 0:A.placeholders)||void 0===m?void 0:m.card_number)||ne,cvv:(null===(R=null==A?void 0:A.placeholders)||void 0===R?void 0:R.cvv)||ie,expiration_month:(null===(y=null==A?void 0:A.placeholders)||void 0===y?void 0:y.expiration_month)||se,expiration_year:(null===(v=null==A?void 0:A.placeholders)||void 0===v?void 0:v.expiration_year)||ae},b={[H.CVV]:null==C?void 0:C.cvvEvents,[H.CARD_NUMBER]:null==C?void 0:C.cardNumberEvents,[H.EXPIRATION_MONTH]:null==C?void 0:C.monthEvents,[H.EXPIRATION_YEAR]:null==C?void 0:C.yearEvents,[H.CARDHOLDER_NAME]:null==C?void 0:C.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=O.create(Object.assign(Object.assign(Object.assign({table:"cards",column:e,type:g[e],validations:I[e]},S),{label:N[e],placeholder:D[e]}),f.card_id?{skyflowID:f.card_id}:{}));he({element:t,errorStyles:S.errorStyles,fieldMessage:[H.CVV,H.EXPIRATION_MONTH,H.EXPIRATION_YEAR].includes(e)?"":N[e],events:b[e]});const r=`#collect_${String(e)}`+(f.card_id?`_${f.card_id}`:"");yield pe({element:t,containerId:r}),T.push({element:t,containerId:r})}else for(const e of f.fields){const t=e.field,r=O.create(Object.assign(Object.assign(Object.assign({table:"cards",column:t,type:g[t],validations:I[t]},S),{label:N[t],placeholder:D[t]}),f.card_id?{skyflowID:f.card_id}:{})),o=e.container_id||`#collect_${String(t)}`+(f.card_id?`_${f.card_id}`:"");yield pe({element:r,containerId:o}),T.push({element:r,containerId:o})}return{elements:T.map((e=>e.element)),container:O}}))}({skyflowInstance:this.skyflowInstance,data:e,customization:this.customization,events:this.events});this.mountedElementsByContext.set(n,{elements:s.elements||[],container:s})}))}getContainerByCardId(e){var t;const r=`update:${e}`,o=this.mountedElementsByContext.get(r);return(null===(t=null==o?void 0:o.container)||void 0===t?void 0:t.container)||null}collectCardTokens(e){var t,o,n;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===(o=null===(t=null==e?void 0:e.records)||void 0===t?void 0:t[0])||void 0===o?void 0:o.fields)||null}catch(t){const r=null===(n=null==t?void 0:t.error)||void 0===n?void 0:n.description;throw this.reportSdkError(t,{feature:"collect-card-tokens",process_id:e,metadata:{step:"collectCardTokens"}}),new d({code:s.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 i(this.baseUrl,this.apiKeyTonder,this.abortController.signal)}catch(e){throw this.reportSdkError(e,{feature:"get-business",metadata:{step:"getBusiness"}}),y({errorCode:s.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:o}=this.merchantData;this.skyflowInstance=yield function({baseUrl:e,apiKey:o,vault_id:n,vault_url:i}){return r(this,void 0,void 0,(function*(){return t.init({vaultID:n,vaultURL:i,getBearerToken:()=>r(this,void 0,void 0,(function*(){return yield q(e,o)})),options:{logLevel:t.LogLevel.ERROR,env:t.Env.DEV}})}))}({vault_id:e,vault_url:o,baseUrl:this.baseUrl,apiKey:this.apiKeyTonder})}))}getOpenpayDeviceSessionID(e,t,o){return r(this,void 0,void 0,(function*(){try{return yield C(e,t,o)}catch(e){throw this.reportSdkError(e,{feature:"get-openpay-device-session",metadata:{step:"getOpenpayDeviceSessionID"}}),y({errorCode:s.START_CHECKOUT_ERROR},e)}}))}getSkyflowTokens({vault_id:e,vault_url:t,data:o}){return r(this,void 0,void 0,(function*(){return yield ue({vault_id:e,vault_url:t,data:o,baseUrl:this.baseUrl,apiKey:this.apiKeyTonder})}))}_setCartTotal(e){this.cartTotal=e}_checkout({card:e,payment_method:t,isSandbox:o,returnUrl:n}){var i,a;return r(this,void 0,void 0,(function*(){yield this._fetchMerchantData();const d=yield this._getCustomer(this.abortController.signal),{vault_id:l,vault_url:c,business:u}=this.merchantData,{auth_token:h,first_name:_="",last_name:E="",email:p=""}=d,m=this._hasCardOnFileKeys();let R,v=null,f=null,A=null,C=!1;const O=()=>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(h,this.merchantData.business.pk))}));if(!t){if("string"==typeof e)if(f=e,R={skyflow_id:e},m){yield O();const t=null===(a=null===(i=this.customerCardsCache)||void 0===i?void 0:i.cards)||void 0===a?void 0:a.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 ue({vault_id:l,vault_url:c,data:t,baseUrl:this.baseUrl,apiKey:this.apiKeyTonder}),f=R.skyflow_id,m&&(A={name:R.cardholder_name,number:R.card_number,expiryMonth:R.expiration_month,expiryYear:R.expiration_year,cvv:R.cvv},C=!0)}if(C){if(!f||!A)throw new Error("Missing card data for card-on-file processing");let e=null;try{const t=yield this._saveCustomerCard(h,null==u?void 0:u.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 o=yield this._initializeCardOnFile();let n;try{n=yield o.process({cardTokens:A,cardBin:r,contactDetails:{firstName:_||"",lastName:E||"",email:p||""},customerId:h,currency:this.currency||"MXN"})}catch(e){throw y({errorCode:s.CARD_ON_FILE_DECLINED,lockErrorCode:!0},e)}v={subscriptionId:n.subscriptionId},yield this._saveCustomerCard(h,null==u?void 0:u.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:d,isSandbox:o,returnUrl:n,enable_card_on_file:!!(null==v?void 0:v.subscriptionId)&&m})}))}customerRegister(e){return r(this,void 0,void 0,(function*(){try{const t=`${this.baseUrl}/api/v1/customer/`,r={email:e},o=yield fetch(t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKeyTonder}`},signal:this.abortController.signal,body:JSON.stringify(r)});if(o.ok)return yield o.json();throw yield y({response:o,errorCode:s.CUSTOMER_OPERATION_ERROR})}catch(e){throw this.reportSdkError(e,{feature:"customer-register",metadata:{step:"customerRegister"}}),y({errorCode:s.CUSTOMER_OPERATION_ERROR},e)}}))}createOrder(e){return r(this,void 0,void 0,(function*(){try{const t=`${this.baseUrl}/api/v1/orders/`,r=e,o=yield fetch(t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKeyTonder}`},body:JSON.stringify(r)});if(o.ok)return yield o.json();throw yield y({response:o,errorCode:s.CREATE_ORDER_ERROR})}catch(e){throw this.reportSdkError(e,{feature:"create-order",metadata:{step:"createOrder"}}),y({errorCode:s.CREATE_ORDER_ERROR},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,o=yield fetch(t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Token ${this.apiKeyTonder}`},body:JSON.stringify(r)});if(o.ok)return yield o.json();throw yield y({response:o,errorCode:s.CREATE_PAYMENT_ERROR})}catch(e){throw this.reportSdkError(e,{feature:"create-payment",metadata:{step:"createPayment"}}),y({errorCode:s.CREATE_PAYMENT_ERROR},e)}}))}startCheckoutRouter(e){return r(this,void 0,void 0,(function*(){const t=yield A(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:o,skyflowTokens:n,return_url:i,isSandbox:a,metadata:d,currency:c,payment_method:u}=e,h=yield this._fetchMerchantData(),_=yield this.customerRegister(o.email);if(!(_&&"auth_token"in _&&h&&"reference"in h))throw y({errorCode:s.START_CHECKOUT_ERROR,details:{message:"Merchant or customer reposne errors",merchantResult:h,customerResult:_}});{const e={business:this.apiKeyTonder,client:_.auth_token,billing_address_id:null,shipping_address_id:null,amount:r,reference:h.reference,is_oneclick:!0,items:t.items},E=yield this.createOrder(e),p=(new Date).toISOString();if(!("id"in E&&"id"in _&&"business"in h))throw y({errorCode:s.START_CHECKOUT_ERROR,details:{message:"Order response errors",orderResult:E}});{const e={business_pk:h.business.pk,amount:r,date:p,order_id:E.id,client_id:_.id},t=yield this.createPayment(e);let s;const{openpay_keys:m,business:R}=h;m.merchant_id&&m.public_key&&(s=yield C(m.merchant_id,m.public_key,a));const y=Object.assign(Object.assign({name:o.name,last_name:o.lastname,email_client:o.email,phone_number:o.phone,return_url:i,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 E&&E.id,business_id:R.pk,payment_id:"pk"in t&&t.pk,source:"sdk",metadata:d,browser_info:l(),currency:c},u?{payment_method:u}:{card:n}),"undefined"!=typeof MP_DEVICE_SESSION_ID?{mp_device_session_id:MP_DEVICE_SESSION_ID}:{}),v=yield A(this.baseUrl,this.apiKeyTonder,y);if(yield this.init3DSRedirect(v))return v}}}catch(e){throw this.reportSdkError(e,{feature:"start-checkout-router-full",metadata:{step:"startCheckoutRouterFull"}}),y({errorCode:s.START_CHECKOUT_ERROR},e)}}))}registerCustomerCard(e,t,o){return r(this,void 0,void 0,(function*(){try{yield this._fetchMerchantData();const r=yield fetch(`${this.baseUrl}/api/v1/business/${c(this.merchantData)}/cards/`,{method:"POST",headers:{Authorization:`Bearer ${e}`,"User-token":t,"Content-Type":"application/json"},body:JSON.stringify(Object.assign({},o))});if(r.ok)return yield r.json();throw yield y({response:r,errorCode:s.SAVE_CARD_ERROR})}catch(e){throw this.reportSdkError(e,{feature:"register-customer-card",metadata:{step:"registerCustomerCard"}}),y({errorCode:s.SAVE_CARD_ERROR},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/${c(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 y({response:r,errorCode:s.REMOVE_CARD_ERROR})}catch(e){throw this.reportSdkError(e,{feature:"delete-customer-card",process_id:t,metadata:{step:"deleteCustomerCard"}}),y({errorCode:s.REMOVE_CARD_ERROR},e)}}))}getActiveAPMs(){return r(this,void 0,void 0,(function*(){try{const e=yield function(e,t,o="?status=active&page_size=10000&country=México",n=null){return r(this,void 0,void 0,(function*(){const r=yield fetch(`${e}/api/v1/payment_methods${o}`,{method:"GET",headers:{Authorization:`Token ${t}`,"Content-Type":"application/json"},signal:n});if(r.ok)return yield r.json();throw yield y({response:r,errorCode:s.FETCH_PAYMENT_METHODS_ERROR})}))}(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},ye(e.payment_method)))).sort(((e,t)=>e.priority-t.priority)),this.activeAPMs}catch(e){return console.error("Error getting APMS",e),[]}}))}}function fe(e){return/^\d{12,19}$/.test(e)&&ge(e)}function Ae(e){return/^([a-zA-Z\\ \\,\\.\\-\\']{2,})$/.test(e)}function Ce(e){return/^\d{3,4}$/.test(e)}function Oe(e){return/^(0[1-9]|1[0-2])$/.test(e)}function Te(e){if(!/^\d{2}$/.test(e))return!1;const t=(new Date).getFullYear()%100;return parseInt(e,10)>=t}const ge=e=>{const t=`${e}`.split("").reverse().map((e=>Number.parseInt(e))),r=t.shift();let o=t.reduce(((e,t,r)=>r%2!=0?e+t:e+((t*=2)>9?t-9:t)),0);return o+=r,o%10==0};export{_ as AppError,z as BaseInlineCheckout,ve as LiteCheckout,M as SdkTelemetryClient,Ce as validateCVV,fe as validateCardNumber,Ae as validateCardholderName,Oe as validateExpirationMonth,Te as validateExpirationYear};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tonder.io/ionic-lite-sdk",
3
- "version": "0.0.68-beta.DEV-2106.11",
3
+ "version": "0.0.68",
4
4
  "description": "Tonder ionic lite SDK",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -341,7 +341,7 @@ export class CardOnFile {
341
341
 
342
342
  // Only continue to subscription if 3DS validation passed
343
343
  return this.createSubscription({
344
- token: "123",
344
+ token: tokenResponse.token,
345
345
  contactDetails: params.contactDetails,
346
346
  metadata: {
347
347
  customerId: params.customerId,
@@ -1,86 +0,0 @@
1
- import { ITelemetryConfig, ITelemetryContext } from "../types/telemetry";
2
- /**
3
- * SdkTelemetryClient - Internal SDK error reporting
4
- *
5
- * Features:
6
- * - Ring buffer (max 100 events)
7
- * - Batching (flush every 5s or 10 events)
8
- * - Circuit breaker (3 consecutive failures = 10 min pause)
9
- * - Non-blocking (never throws)
10
- * - Sanitization (truncate message/stack, allowlist context)
11
- * - Retry with backoff (max 1 retry)
12
- */
13
- export declare class SdkTelemetryClient {
14
- private config;
15
- private buffer;
16
- private readonly MAX_BUFFER_SIZE;
17
- private readonly BATCH_SIZE;
18
- private readonly FLUSH_INTERVAL_MS;
19
- private readonly REQUEST_TIMEOUT_MS;
20
- private readonly MAX_MESSAGE_LENGTH;
21
- private readonly MAX_STACK_LENGTH;
22
- private readonly MAX_RETRIES;
23
- private readonly CIRCUIT_BREAKER_THRESHOLD;
24
- private readonly CIRCUIT_BREAKER_TIMEOUT_MS;
25
- private flushTimer;
26
- private circuitBreaker;
27
- constructor(config: ITelemetryConfig);
28
- /**
29
- * Capture an exception and queue it for sending
30
- * @param error - Error object or any thrown value
31
- * @param context - Additional context (tenant_id, feature, process_id, user_id, metadata, etc.)
32
- */
33
- captureException(error: unknown, context?: ITelemetryContext): void;
34
- /**
35
- * Extract error information from error object
36
- */
37
- private extractErrorInfo;
38
- /**
39
- * Safe stringify with circular reference protection
40
- */
41
- private safeStringify;
42
- /**
43
- * Build telemetry event with API format
44
- */
45
- private buildEvent;
46
- /**
47
- * Truncate string to max length
48
- */
49
- private truncate;
50
- /**
51
- * Start automatic flush timer
52
- */
53
- private startFlushTimer;
54
- /**
55
- * Flush buffer - send all pending events
56
- */
57
- private flush;
58
- /**
59
- * Send a single event with retry logic
60
- */
61
- private sendEvent;
62
- /**
63
- * Send HTTP request to telemetry endpoint
64
- */
65
- private sendHttpRequest;
66
- /**
67
- * Handle successful send
68
- */
69
- private onSendSuccess;
70
- /**
71
- * Handle send failure with retry logic
72
- */
73
- private onSendFailure;
74
- /**
75
- * Open circuit breaker
76
- */
77
- private openCircuitBreaker;
78
- /**
79
- * Check if circuit breaker is open
80
- */
81
- private isCircuitBreakerOpen;
82
- /**
83
- * Cleanup - stop flush timer
84
- */
85
- destroy(): void;
86
- }
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../node_modules/tslib/tslib.es6.js","../src/data/businessApi.ts","../src/shared/enum/ErrorKeyEnum.ts","../src/shared/constants/messages.ts","../src/shared/utils/errors.ts","../src/helpers/utils.ts","../src/shared/utils/appError.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/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","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","export 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};\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 getCardType,\n clearSpace,\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 statusCode?: number;\n details?: Record<string, unknown>;\n originalError?: unknown;\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 readonly originalError?: unknown;\n public details: Record<string, unknown>;\n\n constructor(error: IAppErrorInput) {\n const resolvedStatusCode = AppError.resolveStatusCode(\n error.statusCode,\n error.originalError,\n );\n const resolvedMessage = AppError.resolveMessage(\n error.errorCode,\n error.message,\n );\n const resolvedSystemError = AppError.resolveSystemError(\n error.details?.systemError,\n error.originalError,\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 this.originalError = error.originalError;\n this.details = {\n code: error.errorCode,\n statusCode: resolvedStatusCode,\n systemError: resolvedSystemError,\n };\n\n Error.captureStackTrace?.(this, AppError);\n }\n\n private static isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\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 resolveStatusCode(\n explicitStatusCode: unknown,\n originalError?: unknown,\n ): number {\n const candidates: unknown[] = [explicitStatusCode];\n\n if (AppError.isRecord(originalError)) {\n candidates.push(\n originalError.statusCode,\n originalError.status,\n );\n\n const body = AppError.isRecord(originalError.body)\n ? originalError.body\n : null;\n if (body) {\n candidates.push(body.statusCode, body.status);\n }\n }\n\n for (const candidate of candidates) {\n if (AppError.isHttpStatusCode(candidate)) {\n return Math.trunc(Number(candidate));\n }\n }\n\n return 500;\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 normalizeSystemError(value: unknown): string | null {\n if (typeof value !== 'string') return null;\n const trimmed = value.trim();\n return trimmed || null;\n }\n\n public static resolveSystemError(\n explicitSystemError: unknown,\n originalError?: unknown,\n ): string {\n const candidates: unknown[] = [explicitSystemError];\n\n if (AppError.isRecord(originalError)) {\n const details = AppError.isRecord(originalError.details)\n ? originalError.details\n : null;\n const body = AppError.isRecord(originalError.body)\n ? originalError.body\n : null;\n const bodyDetails = body && AppError.isRecord(body.details)\n ? body.details\n : null;\n\n candidates.push(\n originalError.systemError,\n originalError.code,\n details?.systemError,\n details?.code,\n body?.systemError,\n body?.code,\n bodyDetails?.systemError,\n bodyDetails?.code,\n );\n }\n\n for (const candidate of candidates) {\n const resolved = AppError.normalizeSystemError(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 response?: Response;\n}\n\nfunction getOriginalError(error: unknown): unknown {\n if (error instanceof AppError) {\n return error.originalError !== undefined ? error.originalError : error;\n }\n\n return error;\n}\n\nasync function parseResponseBody(response: Response): Promise<unknown> {\n try {\n return await response.clone().json();\n } catch (_) {\n // Ignore JSON parsing errors and fallback to text.\n }\n\n try {\n const text = await response.text();\n return text || undefined;\n } catch (_) {\n return undefined;\n }\n}\n\nfunction buildPublicAppErrorSync(\n data: IBuildPublicAppErrorInput,\n error?: unknown,\n): AppError {\n if (!data?.errorCode) {\n throw new Error('buildPublicAppError requires errorCode');\n }\n\n const explicitSystemError = data.details?.systemError;\n const hasOverrides =\n data.errorCode !== (error as any)?.code ||\n !!data.message ||\n data.statusCode !== undefined ||\n explicitSystemError !== undefined;\n\n if (error instanceof AppError && !hasOverrides) {\n return error;\n }\n\n return new AppError({\n errorCode: data.errorCode,\n message: data.message,\n statusCode: data.statusCode,\n details:\n explicitSystemError !== undefined\n ? { systemError: explicitSystemError }\n : undefined,\n originalError: getOriginalError(error),\n });\n}\n\nasync function buildPublicAppErrorFromHttpResponse(\n data: IBuildPublicAppErrorInput & { response: Response },\n): Promise<AppError> {\n const body = await parseResponseBody(data.response);\n\n const originalError: Record<string, unknown> = {\n status: data.response.status,\n };\n\n if (data.response.statusText) {\n originalError.statusText = data.response.statusText;\n }\n\n if (body !== undefined) {\n originalError.body = body;\n }\n\n return new AppError({\n errorCode: data.errorCode,\n message: data.message,\n statusCode: data.statusCode ?? data.response.status,\n details:\n data.details?.systemError !== undefined\n ? { systemError: data.details.systemError }\n : undefined,\n originalError,\n });\n}\n\nexport function buildPublicAppError(\n data: IBuildPublicAppErrorInput & { response: Response },\n error?: unknown,\n): Promise<AppError>;\nexport function buildPublicAppError(\n data: IBuildPublicAppErrorInput,\n error?: unknown,\n): AppError;\nexport function buildPublicAppError(\n data: IBuildPublicAppErrorInput,\n error?: unknown,\n): AppError | Promise<AppError> {\n if (data?.response) {\n return buildPublicAppErrorFromHttpResponse(\n data as IBuildPublicAppErrorInput & { response: Response },\n );\n }\n\n return buildPublicAppErrorSync(data, error);\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\";\nimport {\n buildPublicAppError,\n} from \"../shared/utils/appError\";\nimport { ErrorKeyEnum } from \"../shared/enum/ErrorKeyEnum\";\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.ok) {\n return await response.json();\n } else {\n throw await buildPublicAppError({\n response,\n errorCode: ErrorKeyEnum.CREATE_ORDER_ERROR,\n });\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.ok) {\n return await response.json();\n } else {\n throw await buildPublicAppError({\n response,\n errorCode: ErrorKeyEnum.CREATE_PAYMENT_ERROR,\n });\n }\n}\n\nexport async function startCheckoutRouter(\n baseUrl: string,\n apiKey: string,\n routerItems: IStartCheckoutRequest | IStartCheckoutIdRequest,\n) {\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.ok) {\n return await response.json();\n }\n\n throw await buildPublicAppError({\n response,\n errorCode: ErrorKeyEnum.START_CHECKOUT_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\";\nimport { ErrorKeyEnum } from \"../shared/enum/ErrorKeyEnum\";\nimport {\n buildPublicAppError,\n} from \"../shared/utils/appError\";\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\";\nconst CARD_ON_FILE_ERROR_CODE = ErrorKeyEnum.CARD_ON_FILE_DECLINED;\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(\n buildPublicAppError({\n errorCode: CARD_ON_FILE_ERROR_CODE,\n details: {\n step: \"load_acquirer_script\",\n message: \"Failed to load acquirer script\",\n },\n }),\n );\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 buildPublicAppError({\n errorCode: CARD_ON_FILE_ERROR_CODE,\n details: {\n step: \"create_acquirer_instance\",\n message: \"Acquirer script not loaded. Call initialize() first.\",\n },\n });\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 buildPublicAppError({\n errorCode: CARD_ON_FILE_ERROR_CODE,\n details: {\n step: \"get_acquirer_instance\",\n message: \"CardOnFile not initialized. Call initialize() first.\",\n },\n });\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(\n buildPublicAppError({\n errorCode: CARD_ON_FILE_ERROR_CODE,\n details: {\n step: \"get_jwt\",\n acquirerResponse: response as unknown as Record<string, unknown>,\n },\n }),\n );\n return;\n }\n\n const successResponse = response as SecureInitResponse;\n if (!successResponse.jwt) {\n reject(\n buildPublicAppError({\n errorCode: CARD_ON_FILE_ERROR_CODE,\n details: {\n step: \"get_jwt\",\n message: \"No JWT returned from acquirer\",\n acquirerResponse: successResponse as unknown as Record<string, unknown>,\n },\n }),\n );\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 throw await buildPublicAppError({\n response,\n errorCode: CARD_ON_FILE_ERROR_CODE,\n details: {\n step: \"generate_token\",\n },\n });\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 throw await buildPublicAppError({\n response,\n errorCode: CARD_ON_FILE_ERROR_CODE,\n details: {\n step: \"create_subscription\",\n },\n });\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(\n buildPublicAppError({\n errorCode: CARD_ON_FILE_ERROR_CODE,\n details: {\n step: \"validate_3ds\",\n message: \"3DS validation failed\",\n acquirerResponse: validResponse as unknown as Record<string, unknown>,\n },\n }),\n );\n return;\n }\n\n // Check isValid flag if present\n if (validResponse.isValid === false) {\n reject(\n buildPublicAppError({\n errorCode: CARD_ON_FILE_ERROR_CODE,\n details: {\n step: \"validate_3ds\",\n message: \"3DS validation failed\",\n acquirerResponse: validResponse as unknown as Record<string, unknown>,\n },\n }),\n );\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 buildPublicAppError({\n errorCode: CARD_ON_FILE_ERROR_CODE,\n details: {\n step: \"process\",\n message: \"Missing secureId or security in token response\",\n tokenResponse: tokenResponse as unknown as Record<string, unknown>,\n },\n });\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 = 5000;\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 if (metadata.error === undefined) {\n metadata.error = error;\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.request_id) event.request_id = context.request_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","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 { AppError, 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 protected readonly requestId: string;\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.requestId = this.generateRequestId();\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 telemetryError =\n err instanceof AppError && err.originalError !== undefined\n ? err.originalError\n : err;\n const metadata = {\n ...(extra?.metadata || {}),\n ...(extra?.metadata?.error === undefined ? { error: telemetryError } : {}),\n };\n const context: Record<string, any> = {\n tenant_id: this.merchantData?.business?.pk?.toString(),\n user_id: defaultUserId,\n ...(extra || {}),\n metadata,\n request_id: this.requestId,\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 private generateRequestId(): string {\n if (\n typeof crypto !== \"undefined\" &&\n typeof crypto.randomUUID === \"function\"\n ) {\n return crypto.randomUUID();\n }\n\n return `req_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;\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 buildPublicAppError,\n} from \"../shared/utils/appError\";\nimport { ErrorKeyEnum } from \"../shared/enum/ErrorKeyEnum\";\n\nexport async function getSecureToken(\n baseUrl: string,\n token: string,\n signal = null,\n): Promise<GetSecureTokenResponse> {\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 buildPublicAppError({\n response,\n errorCode: ErrorKeyEnum.SECURE_TOKEN_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\";\nimport { ErrorKeyEnum } from \"../shared/enum/ErrorKeyEnum\";\nimport {\n buildPublicAppError,\n} from \"../shared/utils/appError\";\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.ok) {\n return await response.json();\n }\n\n throw await buildPublicAppError({\n response,\n errorCode: ErrorKeyEnum.CUSTOMER_OPERATION_ERROR,\n });\n}\n","import { MESSAGES_EN } from \"../shared/constants/messages\";\nimport { ErrorKeyEnum } from \"../shared/enum/ErrorKeyEnum\";\nimport {\n buildPublicAppError,\n} from \"../shared/utils/appError\";\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 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 buildPublicAppError({\n response,\n errorCode: ErrorKeyEnum.FETCH_CARDS_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 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 buildPublicAppError({\n response,\n errorCode: ErrorKeyEnum.SAVE_CARD_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 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 buildPublicAppError({\n response,\n errorCode: ErrorKeyEnum.REMOVE_CARD_ERROR,\n });\n}\n","import {\n buildPublicAppError,\n} from \"../shared/utils/appError\";\nimport { ErrorKeyEnum } from \"../shared/enum/ErrorKeyEnum\";\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 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 buildPublicAppError({\n response,\n errorCode: ErrorKeyEnum.FETCH_PAYMENT_METHODS_ERROR,\n });\n}\n","import { ErrorKeyEnum } from \"../shared/enum/ErrorKeyEnum\";\nimport {\n buildPublicAppError,\n} from \"../shared/utils/appError\";\n\nexport 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 }\n\n throw await buildPublicAppError({\n response,\n errorCode: ErrorKeyEnum.VAULT_TOKEN_ERROR,\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 Skyflow from \"skyflow-js\";\nimport CollectContainer from \"skyflow-js/types/core/external/collect/collect-container\";\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\";\nimport { buildPublicAppError } from \"../shared/utils/appError\";\nimport { ErrorKeyEnum } from \"../shared/enum/ErrorKeyEnum\";\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> {\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 buildPublicAppError({\n errorCode: ErrorKeyEnum.SAVE_CARD_PROCESS_ERROR,\n details: {\n step: \"get_skyflow_tokens\",\n },\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 buildPublicAppError({\n errorCode: ErrorKeyEnum.SAVE_CARD_PROCESS_ERROR,\n details: {\n step: \"get_skyflow_tokens\"\n },\n });\n } catch (error) {\n throw buildPublicAppError(\n {\n errorCode: ErrorKeyEnum.SAVE_CARD_PROCESS_ERROR,\n },\n error,\n );\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 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 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 buildPublicAppError(\n {\n errorCode: ErrorKeyEnum.START_CHECKOUT_ERROR,\n },\n e,\n );\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 buildPublicAppError({\n response,\n errorCode: ErrorKeyEnum.CUSTOMER_OPERATION_ERROR,\n });\n } catch (e) {\n this.reportSdkError(e, {\n feature: \"customer-register\",\n metadata: {\n step: \"customerRegister\",\n },\n });\n throw buildPublicAppError(\n {\n errorCode: ErrorKeyEnum.CUSTOMER_OPERATION_ERROR,\n },\n e,\n );\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 buildPublicAppError({\n response,\n errorCode: ErrorKeyEnum.CREATE_ORDER_ERROR,\n });\n } catch (e) {\n this.reportSdkError(e, {\n feature: \"create-order\",\n metadata: {\n step: \"createOrder\",\n },\n });\n throw buildPublicAppError(\n {\n errorCode: ErrorKeyEnum.CREATE_ORDER_ERROR,\n },\n e,\n );\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 buildPublicAppError({\n response,\n errorCode: ErrorKeyEnum.CREATE_PAYMENT_ERROR,\n });\n } catch (e) {\n this.reportSdkError(e, {\n feature: \"create-payment\",\n metadata: {\n step: \"createPayment\",\n },\n });\n throw buildPublicAppError(\n {\n errorCode: ErrorKeyEnum.CREATE_PAYMENT_ERROR,\n },\n e,\n );\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 buildPublicAppError({\n errorCode: ErrorKeyEnum.START_CHECKOUT_ERROR,\n details: {\n message: \"Order response errors\",\n orderResult: orderResult as any,\n },\n });\n }\n } else {\n throw buildPublicAppError({\n errorCode: ErrorKeyEnum.START_CHECKOUT_ERROR,\n details: {\n message: \"Merchant or customer reposne errors\",\n merchantResult: merchantResult as any,\n customerResult: customerResult as any,\n },\n });\n }\n } catch (e) {\n this.reportSdkError(e, {\n feature: \"start-checkout-router-full\",\n metadata: {\n step: \"startCheckoutRouterFull\",\n },\n });\n throw buildPublicAppError(\n {\n errorCode: ErrorKeyEnum.START_CHECKOUT_ERROR,\n },\n e,\n );\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 buildPublicAppError({\n response,\n errorCode: ErrorKeyEnum.SAVE_CARD_ERROR,\n });\n } catch (error) {\n this.reportSdkError(error, {\n feature: \"register-customer-card\",\n metadata: {\n step: \"registerCustomerCard\",\n },\n });\n throw buildPublicAppError(\n {\n errorCode: ErrorKeyEnum.SAVE_CARD_ERROR,\n },\n error,\n );\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 buildPublicAppError({\n response,\n errorCode: ErrorKeyEnum.REMOVE_CARD_ERROR,\n });\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 buildPublicAppError(\n {\n errorCode: ErrorKeyEnum.REMOVE_CARD_ERROR,\n },\n error,\n );\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 { ErrorKeyEnum } from \"../shared/enum/ErrorKeyEnum\";\nimport {\n buildPublicAppError,\n} from \"../shared/utils/appError\";\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 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 buildPublicAppError({\n response,\n errorCode: ErrorKeyEnum.FETCH_PAYMENT_METHODS_ERROR,\n });\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","ErrorKeyEnum","SuppressedError","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","constructor","params","resolvedMessage","message","code","super","this","name","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","AppError","error","resolvedStatusCode","resolveStatusCode","statusCode","originalError","resolveMessage","errorCode","resolvedSystemError","resolveSystemError","systemError","status","Object","setPrototypeOf","prototype","captureStackTrace","isRecord","parseStatusCode","parsed","Number","isFinite","Math","trunc","explicitStatusCode","candidates","push","body","candidate","isHttpStatusCode","normalizeSystemError","trim","explicitSystemError","bodyDetails","resolved","getOriginalError","undefined","buildPublicAppErrorFromHttpResponse","data","response","clone","_","text","parseResponseBody","statusText","buildPublicAppError","hasOverrides","buildPublicAppErrorSync","ThreeDSHandler","payload","redirectOnComplete","tdsIframeId","tonderPayButtonId","callBack","localStorageKey","setPayload","setStorageItem","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","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","freeze","production","sandbox","stage","development","startCheckoutRouter","routerItems","assign","MP_DEVICE_SESSION_ID","mp_device_session_id","ok","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","CARD_ON_FILE_ERROR_CODE","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","acquirerResponse","successResponse","jwt","generateToken","request","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","stack","stringified","safeStringify","obj","seen","WeakSet","add","String","errorInfo","href","platform","platform_version","env","feature","level","tenant_id","request_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","CardFieldEnum","BaseInlineCheckout","customization","apiKeyTonder","returnUrl","baseUrlTonder","sdkInfo","cartTotal","secureToken","order_reference","cardOnFileInstance","_BaseInlineCheckout_apm_config","_BaseInlineCheckout_customerData","customer","abortController","requestId","generateRequestId","process3ds","resolvedSdkInfo","telemetry","configureCheckout","_BaseInlineCheckout_instances","_BaseInlineCheckout_setSecureToken","_BaseInlineCheckout_setCheckoutData","getCustomerId","id","toString","reportSdkError","err","extra","defaultUserId","telemetryError","crypto","randomUUID","now","random","slice","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","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","keys","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","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":"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","x_google_ignoreList":[0]}
@@ -1,17 +0,0 @@
1
- import 'react';
2
-
3
- declare global {
4
- namespace JSX {
5
- interface IntrinsicElements {
6
- 'tonder-card-cvv-input': React.DetailedHTMLProps<
7
- React.HTMLAttributes<HTMLElement>,
8
- HTMLElement
9
- > & {
10
- 'skyflow-id'?: string; // lo que usas en la app
11
- skyflowid?: string; // por si cambias/compatibilidad
12
- };
13
- }
14
- }
15
- }
16
-
17
- export {};
@@ -1,19 +0,0 @@
1
- import { LiteCheckout } from '../../../classes/liteCheckout';
2
- export declare class CardCVVInput extends HTMLElement {
3
- private _skyflowId?;
4
- private _checkoutInstance?;
5
- private _cvvDiv;
6
- private _mounted;
7
- private shadow;
8
- constructor();
9
- static get observedAttributes(): string[];
10
- get skyflowId(): string | undefined;
11
- set skyflowId(val: string | undefined);
12
- get checkoutInstance(): LiteCheckout | undefined;
13
- set checkoutInstance(val: LiteCheckout | undefined);
14
- attributeChangedCallback(name: string, _old: string, value: string): void;
15
- connectedCallback(): void;
16
- disconnectedCallback(): void;
17
- private _update;
18
- private _mountCVV;
19
- }