1(function () { 2 'use strict'; 3 4 const form = document.getElementById('flypass-form'); 5 if (!form) return; 6 7 const cfg = window.SegundazoFlypassCfg || {}; 8 const host = window.location.hostname || ''; 9 const isLocalOrDev = ['localhost', '127.0.0.1', '::1', 'dev.segundazo.com.co'].includes(host); 10 const configuredApi = String(cfg.apiBase || 'https://api.segundazo.com.co').replace(/\/$/, ''); 11 const apiBase = isLocalOrDev && configuredApi.includes('api.segundazo.com.co') 12 ? 'https://devapi.segundazo.com.co' 13 : configuredApi; 14 const registrationUrl = cfg.registrationUrl || `${apiBase}/flypass/registrations`; 15 const referralUrl = 'https://express-clientes.flypass.com.co/public/landing-mastercard?utm_source=alianza&utm_medium=online&utm_campaign=FP_ADQN_ALIANZ_PEF_SEGUNDAZO_AON_SEGUNDAZO&utm_content=CTW'; 16 const plate = form.querySelector('[name="placa"]'); 17 const documentNumber = form.querySelector('[name="numero_identificacion"]'); 18 const submit = form.querySelector('button[type="submit"]'); 19 const status = form.querySelector('[data-flypass-form-status]'); 20 const initialSubmitHtml = submit?.innerHTML || ''; 21 22 function setStatus(message, state) { 23 if (!status) return; 24 status.textContent = message || ''; 25 status.dataset.state = state || ''; 26 } 27 28 function errorMessage(payload) { 29 if (typeof payload?.detail === 'string') return payload.detail; 30 if (Array.isArray(payload?.detail) && payload.detail[0]?.msg) return payload.detail[0].msg; 31 return 'No pudimos guardar el registro. Revisa tu conexión e inténtalo nuevamente.'; 32 } 33 34 function campaignValue(params, name, fallback) { 35 return String(params.get(name) || fallback || '').trim().slice(0, 255) || null; 36 } 37 38 plate?.addEventListener('input', function () { 39 this.value = this.value.toUpperCase().replace(/[^A-Z0-9-]/g, '').slice(0, 7); 40 }); 41 42 documentNumber?.addEventListener('input', function () { 43 this.value = this.value.replace(/\D/g, '').slice(0, 12); 44 }); 45 46 form.addEventListener('submit', async function (event) { 47 event.preventDefault(); 48 if (!form.checkValidity()) { 49 form.reportValidity(); 50 return; 51 } 52 53 const values = new FormData(form); 54 const query = new URLSearchParams(window.location.search || ''); 55 const payload = { 56 nombre: String(values.get('nombre') || '').trim().replace(/\s+/g, ' '), 57 placa: String(values.get('placa') || '').trim().toUpperCase(), 58 email: String(values.get('email') || '').trim().toLowerCase(), 59 numero_identificacion: String(values.get('numero_identificacion') || '').trim(), 60 source_page: 'website_flypass_form', 61 page_url: window.location.href.slice(0, 2000), 62 utm_source: campaignValue(query, 'utm_source', 'segundazo'), 63 utm_medium: campaignValue(query, 'utm_medium', 'website'), 64 utm_campaign: campaignValue(query, 'utm_campaign', 'flypass'), 65 utm_content: campaignValue(query, 'utm_content', 'flypass_form') 66 }; 67 68 if (submit) { 69 submit.disabled = true; 70 submit.setAttribute('aria-busy', 'true'); 71 submit.textContent = 'Guardando tu registroâ¦'; 72 } 73 setStatus('Estamos creando o vinculando tu cuenta de Segundazo.', 'loading'); 74 75 try { 76 const response = await fetch(registrationUrl, { 77 method: 'POST', 78 headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, 79 credentials: 'omit', 80 body: JSON.stringify(payload) 81 }); 82 const responsePayload = await response.json().catch(function () { return {}; }); 83 if (!response.ok) throw Object.assign(new Error('Flypass registration failed'), { responsePayload }); 84 85 if (window.sgzTrack && typeof window.sgzTrack.push === 'function') { 86 window.sgzTrack.push('flypass_form_submit', null, { 87 cta_section: 'form', cta_type: 'primary', cta_intent: 'account', cta_label: 'registro_creado_continuar_flypass' 88 }); 89 } 90 window.dataLayer = window.dataLayer || []; 91 window.dataLayer.push({ 92 event: 'segundazo_flypass_registration_created', 93 flypass_campaign: payload.utm_campaign, 94 flypass_account_status: responsePayload.account_link_status, 95 flypass_activation_email_sent: Boolean(responsePayload.activation_email_sent) 96 }); 97 setStatus('Registro guardado. Te estamos llevando a Flypassâ¦', 'success'); 98 window.location.assign(responsePayload.redirect_url || referralUrl); 99 } catch (error) { 100 setStatus(errorMessage(error.responsePayload), 'error'); 101 window.dataLayer = window.dataLayer || []; 102 window.dataLayer.push({ event: 'segundazo_flypass_registration_error' }); 103 if (submit) { 104 submit.disabled = false;
105 submit.removeAttribute('aria-busy'); 106 submit.innerHTML = initialSubmitHtml; 107 } 108 } 109 }); 110})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.