// lib/common/services/network.service.js // // Определение сети, в которой находится устройство. // // - внутри локальной сети принтера (Wi-Fi UnitPrintLocal) // домен unitprint.ru резолвится на 192.168.20.1 — локальный сервер печати; // - из интернета домен отвечает публичным адресом 95.165.135.233. // // Клиент не может сам отличить эти случаи по IP (сертификаты, mixed content), // поэтому спрашиваем сам сервер: GET /api/is_local → { "is_local": true|false }. // Эндпоинт обязан быть на обоих инстансах: // локальный → { "is_local": true } // публичный → { "is_local": false } export const DOMAIN = 'unitprint.ru'; export const PUBLIC_IP = '95.165.135.233'; export const LOCAL_IP = '192.168.20.1'; export const LOCAL_WIFI_NAME = 'UnitPrintLocal'; /** * Определяет текущий режим сети. * @returns {Promise<'local' | 'internet' | 'offline'>} * - 'local' → отвечающий сервер — локальный (домен → 192.168.20.1) * - 'internet' → отвечающий сервер — публичный (домен → 95.165.135.233) * - 'offline' → сервер вообще не ответил */ export async function detectNetwork(timeoutMs = 6000) { if (typeof fetch === 'undefined') return 'offline'; const controller = new AbortController(); const timer = setTimeout(() => controller.abort(), timeoutMs); try { const res = await fetch('/api/is_local', { cache: 'no-store', signal: controller.signal, }); if (!res.ok) return 'offline'; const data = await res.json(); if (typeof data?.is_local !== 'boolean') return 'offline'; return data.is_local ? 'local' : 'internet'; } catch { return 'offline'; } finally { clearTimeout(timer); } }