import { getApiBase, apiPostUrlEncoded } from './api.js'; import { getStableDeviceIdentity } from './trial.js'; const ACTIVATION_STATE_KEY = 'insuite_mobile_activation_state'; export function getMobileActivationState() { try { const parsed = JSON.parse(localStorage.getItem(ACTIVATION_STATE_KEY) || 'null') || {}; return { activated: parsed.activated === true, email: String(parsed.email || '').trim(), userName: String(parsed.userName || '').trim(), activatedAt: String(parsed.activatedAt || '').trim(), }; } catch { return { activated: false, email: '', userName: '', activatedAt: '' }; } } export function setMobileActivationState(payload = {}) { const state = { activated: payload.activated === true, email: String(payload.email || '').trim(), userName: String(payload.userName || '').trim(), activatedAt: String(payload.activatedAt || '').trim(), }; localStorage.setItem(ACTIVATION_STATE_KEY, JSON.stringify(state)); return state; } export function clearMobileActivationState() { localStorage.removeItem(ACTIVATION_STATE_KEY); } export async function syncMobileActivationState() { const apiBase = getApiBase(); if (!apiBase) { return getMobileActivationState(); } const identity = await getStableDeviceIdentity(); if (!identity.deviceId && !identity.fingerprint) { return getMobileActivationState(); } try { const res = await apiPostUrlEncoded('/api/mobile/activation/status', { device_id: identity.deviceId, device_fingerprint: identity.fingerprint, platform: identity.platform, model: identity.model, }); if (res?.ok && res?.activation?.activated) { return setMobileActivationState({ activated: true, email: res.activation.email || '', userName: res.activation.user_name || '', activatedAt: res.activation.activated_at || '', }); } clearMobileActivationState(); } catch { return getMobileActivationState(); } return getMobileActivationState(); } export async function activateMobileAccess({ email, code }) { const identity = await getStableDeviceIdentity(); const res = await apiPostUrlEncoded('/api/mobile/activate', { email, code, device_id: identity.deviceId, device_fingerprint: identity.fingerprint, platform: identity.platform, model: identity.model, }); if (res?.ok && res?.activation?.activated) { return setMobileActivationState({ activated: true, email: res.activation.email || email, userName: res.activation.user_name || '', activatedAt: res.activation.activated_at || '', }); } return getMobileActivationState(); }