(function () { const REMEMBER_KEY = '_cy_remember'; const OBFUSCATE_KEY = 'cydd2024'; function obfuscate(str) { let result = ''; for (let i = 0; i < str.length; i++) { result += String.fromCharCode(str.charCodeAt(i) ^ OBFUSCATE_KEY.charCodeAt(i % OBFUSCATE_KEY.length)); } return btoa(unescape(encodeURIComponent(result))); } function deobfuscate(encoded) { try { const str = decodeURIComponent(escape(atob(encoded))); let result = ''; for (let i = 0; i < str.length; i++) { result += String.fromCharCode(str.charCodeAt(i) ^ OBFUSCATE_KEY.charCodeAt(i % OBFUSCATE_KEY.length)); } return result; } catch (e) { return null; } } function saveWebCredentials(username, password) { try { localStorage.setItem(REMEMBER_KEY, obfuscate(JSON.stringify({ u: username, p: password, t: Date.now() }))); } catch (e) {} } function loadWebCredentials() { try { const encoded = localStorage.getItem(REMEMBER_KEY); if (!encoded) return null; const json = deobfuscate(encoded); if (!json) return null; const data = JSON.parse(json); if (data.u && data.p) return data; } catch (e) {} return null; } function clearWebCredentials() { try { localStorage.removeItem(REMEMBER_KEY); } catch (e) {} } window.CredentialStore = { saveWebCredentials, loadWebCredentials, clearWebCredentials, async loadSavedLogin({ getOfflineData }) { if (window.MobilePlatform?.isNativeApp?.()) { return await getOfflineData('_saved_login'); } return loadWebCredentials(); }, async hasSavedLogin() { if (window.MobilePlatform?.isNativeApp?.()) { const saved = window.OfflineStore?.cache?.get('_saved_login'); return !!(saved && saved.username); } const saved = loadWebCredentials(); return !!(saved && saved.username); }, async saveSavedLogin({ rememberMe, username, password, saveOfflineData, clearSavedLogin }) { if (window.MobilePlatform?.isNativeApp?.()) { if (rememberMe) { await saveOfflineData('_saved_login', { username, password }); } else { await clearSavedLogin(); } return; } if (rememberMe) { saveWebCredentials(username, password); } else { clearSavedLogin(); } }, async clearSavedLogin({ openOfflineDB } = {}) { if (window.MobilePlatform?.isNativeApp?.()) { window.OfflineStore?.cache?.delete('_saved_login'); try { const db = await openOfflineDB(); const tx = db.transaction('data', 'readwrite'); tx.objectStore('data').delete('_saved_login'); } catch (e) {} return; } clearWebCredentials(); } }; })();