tilfluktsrom/pwa/vite.config.ts
Ole-Morten Duesund c1ac68e746 Legg til om-side, personvernerklæring og sikkerheitsforbetring
Om-side (Android + PWA):
- Ny AboutDialog med personvernerklæring, datakjelder og opphavsrett
- Opphavsrett flytta frå sivilforsvardialogen til om-sida
- Tilgjengeleg via «Om denne appen»-lenke i sivilforsvarsdialogen (Android)
  og ny om-knapp i statuslinja (PWA)
- Lokalisert til en/nb/nn

Personvern og sikkerheit:
- Lagra GPS-posisjon utløper etter 24 timar (widget_prefs)
- Widget viser «Trykk for å oppdatere» når posisjon manglar eller er utløpt
- Eigendefinert User-Agent (Tilfluktsrom/1.6.1) i OkHttp
- Content Security Policy (CSP) meta-tag i PWA
- Tenararbeidar bufrar berre HTTP 200-svar (ikkje opake)
- Kartbuffer-metadata runda til ~11km presisjon i localStorage
- crossorigin="anonymous" på Leaflet CSS

i18n-opprydding:
- Unicode-escapes erstatta med UTF-8-teikn i nb.ts og nn.ts

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 14:27:45 +01:00

56 lines
1.7 KiB
TypeScript

import { defineConfig } from 'vite';
import { VitePWA } from 'vite-plugin-pwa';
export default defineConfig({
define: {
// Injected as a global — changes every build, breaking any stale cache
__BUILD_REVISION__: JSON.stringify(
`${new Date().toISOString().slice(0, 16)}`,
),
},
plugins: [
VitePWA({
registerType: 'autoUpdate',
workbox: {
// Precache all built assets (JS/CSS get content hashes from Vite;
// files in public/ like shelters.json get a Workbox revision hash
// computed from their content, so any change triggers re-fetch).
globPatterns: ['**/*.{js,css,html,json,png,svg,ico,webmanifest}'],
// Remove old precache entries from previous builds
cleanupOutdatedCaches: true,
// SPA: serve index.html for all navigation requests
navigateFallback: '/index.html',
// Vite already hashes JS/CSS filenames — skip Workbox's
// cache-bust query parameter for those
dontCacheBustURLsMatching: /\.[0-9a-f]{8}\./,
// Runtime caching for map tiles (not precached — cached as viewed)
runtimeCaching: [
{
urlPattern: /^https:\/\/[abc]\.tile\.openstreetmap\.org\/.*/,
handler: 'CacheFirst',
options: {
cacheName: 'osm-tiles',
expiration: {
maxEntries: 5000,
maxAgeSeconds: 30 * 24 * 60 * 60, // 30 days
},
cacheableResponse: {
statuses: [200],
},
},
},
],
},
manifest: false, // We provide our own manifest.webmanifest
}),
],
resolve: {
alias: {
'@': '/src',
},
},
});