import { Signal } from '@angular/core'; import { AppVersionStatus } from './types'; import * as i0 from "@angular/core"; export declare class AppVersionService { /** SwUpdate solo existe si el SW está registrado (prod build). */ private readonly swUpdate; /** AppConfigService es opcional: la app puede no wirearlo. */ private readonly appConfig; private readonly serviceConfig; /** Plugin nativo opcional: provisto por apps Capacitor para Play Store / App Store. */ private readonly platformPlugin; /** Plugin HTTP opcional: alternativa a AppConfigService para apps sin Firebase. */ private readonly remotePlugin; private readonly document; private readonly destroyRef; /** True cuando el SW reportó un bundle nuevo listo (`VERSION_READY`). */ private readonly swUpdateReady; /** Config remota cargada por el plugin HTTP. Null hasta que carga o si no hay plugin. */ private readonly remoteConfig; /** * True cuando el usuario descartó el banner de actualización opcional. * El banner obligatorio (`update-required`) ignora este flag. */ private readonly _dismissed; readonly dismissed: Signal; /** * Versión local del build actual de la app. * Proviene del provider `provideValtechAppVersion({ currentVersion })`. */ readonly currentVersion: Signal; /** * Última versión publicada según el config remoto (AppConfigService o plugin HTTP). * `null` si ninguna fuente está disponible o aún no cargó. */ readonly latestVersion: Signal; /** * Estado de la versión: * - `update-required` — la versión local quedó por debajo de `minVersion`. Hard gate. * - `update-available` — SW bundle listo, AppConfigService o plugin HTTP detectaron versión nueva. * - `up-to-date` — en cualquier otro caso. */ readonly status: Signal; constructor(); /** * Aplica la actualización pendiente. * * Si hay un plugin de plataforma (nativo/Capacitor), delega en él (ej. Play Store). * Si no, activa la versión SW si está disponible y recarga la página. */ applyUpdate(): Promise; /** * Espera a que el SW reporte un bundle nuevo listo (`VERSION_READY`), o hasta * `timeoutMs`. Evita el reload "en seco" cuando el update lo detectó el path * HTTP antes de que el SW descargara el bundle. Si el timeout vence (ej. * Android Chrome donde VERSION_READY es poco confiable), resuelve igual y el * caller recarga como último recurso. */ private waitForSwReady; /** * Descarta el banner de actualización opcional. * No tiene efecto sobre el estado `update-required` (hard gate). */ dismiss(): void; /** * Fuerza un chequeo: SW + plugin HTTP (si existe). */ checkNow(): Promise; /** * Suscribe `versionUpdates`, programa chequeos periódicos y reacciona al * volver la app a foreground. Solo actúa si el SW está habilitado. */ private wireServiceWorker; /** * Carga config remota via plugin HTTP al inicio, en foreground y en el intervalo periódico. * Solo se llama si `remotePlugin` está provisto. */ private wireRemotePlugin; private loadRemoteConfig; /** Persiste el timestamp de la última actualización aplicada en sessionStorage. */ private markUpdateApplied; /** * Retorna true si el tiempo transcurrido desde la última actualización * aplicada es menor al grace period configurado. Silencia el banner durante * esa ventana para evitar el loop "actualizar N veces" cuando hay deploys * acumulados. */ private isInPostUpdateGrace; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵprov: i0.ɵɵInjectableDeclaration; }