/** * GET /api/mobile/app-versions — archived releases for the admin "Versionsverlauf" (re-install an * older build). Entries: { versionName, versionCode, releaseDate, releaseNotes, apkUrl, sha256?, size? }. * Session → server-side channel with absolute signed URLs; no session → legacy www.logyou.de * history.json (relative apkUrl) while MOBILE_APP_LEGACY_FALLBACK is on. Fail-soft: [] on any error. */ import { readHistory, readManifest, historyWithSignedUrls, legacyFallbackEnabled, isServiceTokenRequest } from '../../utils/mobileReleases' const LEGACY_URL = 'https://www.logyou.de/logship/history.json' export default defineEventHandler(async (event) => { setHeader(event, 'Cache-Control', 'no-store') const token = await getTokenHelper(event) const authed = !!token || isServiceTokenRequest(event) if (authed && readManifest()) { try { return historyWithSignedUrls(readHistory()) } catch (err: any) { console.error('[app-versions] cannot sign download urls:', err?.message || err) return [] } } if (!legacyFallbackEnabled()) { if (!authed) setResponseStatus(event, 401) return [] } try { const response = await fetch(LEGACY_URL, { cache: 'no-store' } as any) if (response.status === 404) return [] if (!response.ok) throw new Error(`Failed to fetch history: ${response.status}`) const data = await response.json() return Array.isArray(data) ? data : [] } catch (error: any) { console.error('Error fetching app version history:', error) return [] } })