Files
webmail-client/frontend/vite.config.ts
T
lukasandClaude Opus 5.5 0e3793a4d6 App passwords; CalDAV / CardDAV server for phones, Thunderbird, macOS
App passwords (SPEC App. D §D.5): one generated password per app, shown once,
revocable on its own, revoked on a password reset; never accepted by the web
sign-in. Settings → Security → App passwords (migration 0024).

CalDAV / CardDAV server (SPEC Appendix E), built in: /dav/ with
/.well-known/caldav|carddav, HTTP Basic with app passwords only (cached checks,
throttled failures). The calendar and contacts plugins serve their own tables as
collections (Plugin(dav=...)):
- calendars as iCalendar: series with overrides, time zones, all-day, attendees
  and RSVP, alarms <-> reminders; MKCALENDAR / PROPPATCH / DELETE of calendars;
  subscriptions read-only; writes to upstream-synced calendars flow on upstream;
- address books as vCard (3.0 served, 3.0/4.0 read), groups as CATEGORIES;
- what a client stores is served back verbatim until the web app edits it;
- sync tokens / CTags from change logs filled by triggers (calendar0008,
  contacts0002), so every write path counts; trimmed nightly after 90 days.
REPORTs: calendar-query (time range), calendar-/addressbook-multiget,
addressbook-query, sync-collection. nginx and the Vite proxy route /dav/.
Settings shows the server and user name to enter; install guide §5.4.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 21:49:04 +02:00

41 lines
1.2 KiB
TypeScript

/// <reference types="vitest" />
import { resolve } from "node:path";
import react from "@vitejs/plugin-react";
import { defineConfig } from "vite";
// SPEC dev-environment §5: Vite dev proxy /api -> :8000 with ws:true for /api/ws.
export default defineConfig({
plugins: [react()],
build: {
rollupOptions: {
// Two apps, one dist: the mail client (index.html) and the admin panel
// (admin.html). nginx serves each from its own listener — see
// docker/nginx.conf. In dev, the panel is at /admin.html.
input: {
main: resolve(__dirname, "index.html"),
admin: resolve(__dirname, "admin.html"),
},
},
},
server: {
port: 5173,
proxy: {
"/api": {
target: "http://127.0.0.1:8000",
changeOrigin: true,
ws: true,
},
// CalDAV / CardDAV (SPEC Appendix E), for trying clients against dev.
"/dav": { target: "http://127.0.0.1:8000", changeOrigin: true },
"/.well-known/caldav": { target: "http://127.0.0.1:8000", changeOrigin: true },
"/.well-known/carddav": { target: "http://127.0.0.1:8000", changeOrigin: true },
},
},
test: {
environment: "jsdom",
globals: true,
setupFiles: ["./src/test/setup.ts"],
},
});