PageSourceSearch

https://wompi.co/assets/js/zendesk-launcher.js

js wompi.co collected 2026-10-02 02:55:42 UTC 3,286 bytes, 111 lines download raw bytes

1/* Wompi · "Chatea con nosotros" → Zendesk SunCo messenger */
2(function () {
3  'use strict';
4
5  var ZENDESK_KEY = '995e8436-141d-47e6-9608-07e7aa72c933'; // PROD
6  // var ZENDESK_KEY = 'e95b4158-24d5-4449-b02d-18de6f00bd59'; // TEST
7  var ZENDESK_SRC = 'https://static.zdassets.com/ekr/snippet.js?key=' + ZENDESK_KEY;
8  var SNIPPET_ID = 'ze-snippet';
9  var LAUNCHER_ID = 'waiChatLauncher';
10  var LAUNCHER_SELECTOR = '#' + LAUNCHER_ID + ', .wai-chat-launcher, [data-wai-chat-launcher]';
11
12  var pendingOpen = false;
13
14  // Purga one-shot de las keys que dejó el bot WAI anterior.
15  function purgeLegacyStorage() {
16    try {
17      if (localStorage.getItem('wai_legacy_purged') === '1') return;
18      ['wai_terms_accepted', 'wai_user_identifier', 'wai_selected_vertical']
19        .forEach(function (k) { localStorage.removeItem(k); });
20      localStorage.setItem('wai_legacy_purged', '1');
21    } catch (_) {}
22  }
23  purgeLegacyStorage();
24
25  function injectZendeskSnippet() {
26    if (document.getElementById(SNIPPET_ID)) return;
27    var s = document.createElement('script');
28    s.id = SNIPPET_ID;
29    s.src = ZENDESK_SRC;
30    s.async = true;
31    document.head.appendChild(s);
32  }
33
34  function callMessenger() {
35    if (typeof window.zE !== 'function') return false;
36    try {
37      var args = ['messenger'].concat(Array.prototype.slice.call(arguments));
38      window.zE.apply(null, args);
39      return true;
40    } catch (err) {
41      console.warn('[zendesk-launcher] zE call failed:', err);
42      return false;
43    }
44  }
45
46  function hideNativeLauncher() {
47    return callMessenger('hide');
48  }
49
50  function openMessenger() {
51    if (!callMessenger('show')) return false;
52    callMessenger('open');
53    return true;
54  }
55
56  function whenReady(cb) {
57    if (typeof window.zE === 'function') { cb(); return; }
58    var tries = 0;
59    var maxTries = 100; // ~20s a 200ms
60    var t = setInterval(function () {
61      tries += 1;
62      if (typeof window.zE === 'function') {
63        clearInterval(t);
64        cb();
65      } else if (tries >= maxTries) {
66        clearInterval(t);
67        console.warn('[zendesk-launcher] Zendesk no respondió a tiempo.');
68      }
69    }, 200);
70  }
71
72  function init() {
73    injectZendeskSnippet();
74
75    whenReady(function () {
76      hideNativeLauncher();
77      // Re-ocultar el launcher nativo cada vez que se cierra el messenger.
78      callMessenger('on', 'close', function () { hideNativeLauncher(); });
79      if (pendingOpen) {
80        pendingOpen = false;
81        openMessenger();
82      }
83    });
84
85    bindLauncher();
86  }
87
88  function bindLauncher() {
89    // Delegación sobre document por si el launcher se inserta tarde.
90    document.addEventListener('click', function (evt) {
91      var target = evt.target;
92      if (!target) return;
93      var anchor = target.closest ? target.closest(LAUNCHER_SELECTOR) : null;
94      if (!anchor) return;
95
96      evt.preventDefault();
97
98      // Cerrar el menú propio para que no tape el messenger.
99      var helpWidget = document.getElementById('bws-help-widget');
100      if (helpWidget) helpWidget.classList.remove('bws-hw-active');
101
102      if (!openMessenger()) pendingOpen = true;
103    });
104  }
105
106  if (document.readyState === 'loading') {
107    document.addEventListener('DOMContentLoaded', init);
108  } else {
109    init();
110  }
111})();

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.