import { defineConfig } from "vite"; import { svelte } from "@sveltejs/vite-plugin-svelte"; import tailwindcss from "@tailwindcss/vite"; import { VitePWA } from "vite-plugin-pwa"; export default defineConfig({ plugins: [ svelte(), tailwindcss(), VitePWA({ // Auto-update: a new SW activates on next page load. No "click to // update" prompt — chat needs to stay fresh and we don't want users // stuck on an old build. registerType: "autoUpdate", injectRegister: "auto", manifest: { name: "kez-chat", short_name: "kez-chat", description: "End-to-end encrypted chat on top of KEZ — portable cross-app identity.", start_url: "/", scope: "/", display: "standalone", background_color: "#111827", theme_color: "#111827", categories: ["social", "communication"], icons: [ { src: "pwa-64x64.png", sizes: "64x64", type: "image/png" }, { src: "pwa-192x192.png", sizes: "192x192", type: "image/png" }, { src: "pwa-512x512.png", sizes: "512x512", type: "image/png" }, { src: "maskable-icon-512x512.png", sizes: "512x512", type: "image/png", purpose: "maskable", }, ], }, workbox: { // Precache the SPA shell. Chat data is fetched live from /v1/* // and we DON'T want it cached — see runtimeCaching below. globPatterns: ["**/*.{js,css,html,svg,png,ico,wasm}"], // zstd wasm is ~350 KB; raise the per-file cap. maximumFileSizeToCacheInBytes: 5 * 1024 * 1024, // Same-origin navigation requests fall back to the SPA shell so // /messages, /claims, etc. work after a refresh while offline. navigateFallback: "index.html", navigateFallbackDenylist: [/^\/v1\//, /^\/internal\//, /^\/\.well-known\//], runtimeCaching: [ { // Never cache API responses — they're authenticated + dynamic. urlPattern: /\/v1\//, handler: "NetworkOnly", }, ], navigationPreload: true, cleanupOutdatedCaches: true, }, devOptions: { enabled: false, }, }), ], server: { // For dev: proxy API calls to the locally-running chat-server. // The deployed SPA (served by the same chat-server) doesn't need this. proxy: { "/v1": "http://localhost:6969", "/internal": "http://localhost:6969", "/.well-known": "http://localhost:6969", }, }, build: { outDir: "dist", emptyOutDir: true, }, });