PageSourceSearch

https://segundazo.com.co/assets/js/segundazo-flypass.js?v=20260901name

js segundazo.com.co collected 2026-10-08 05:15:32 UTC 4,824 bytes, 110 lines download raw bytes

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.