From c17887e48eed9b0c808471e6fa4dca8d52150d10 Mon Sep 17 00:00:00 2001 From: John Ellis Date: Sun, 23 Aug 2026 01:07:13 -0700 Subject: [PATCH] ihasmail 2.0: rebuild as Stalwart-first JMAP webmail Replace the FastAPI/HTMX prototype with a Node/Hono session proxy and a React 19/Vite SPA. Mail (conversation view, search operators, labels, sanitised HTML, privacy image proxy, invites, undo send, templates), calendar (month/week/day/agenda, invites, free/busy, categories, context menus), contacts (JSContact, groups, vCard), files, Sieve filter builder (incl. filter-from-message with retroactive apply), vacation, identities with default + Reply-To, PWA/mobile layout, push via SSE, in-memory mock Stalwart for dev, Docker + CI. --- .dockerignore | 6 + .env.example | 35 + .github/workflows/ci.yml | 20 + .gitignore | 8 + Caddyfile.example | 9 + Dockerfile | 41 +- Makefile | 13 - README.md | 162 +- app/__init__.py | 0 app/config.py | 9 - app/dav.py | 41 - app/jmap.py | 31 - app/main.py | 34 - app/routes/__init__.py | 0 app/routes/auth.py | 45 - app/routes/calendar.py | 39 - app/routes/contacts.py | 35 - app/routes/mail.py | 316 -- app/routes/webdav.py | 21 - app/static/css/style.css | 30 - app/templates/base.html | 37 - app/templates/calendar.html | 15 - app/templates/compose.html | 11 - app/templates/contacts.html | 19 - app/templates/login.html | 24 - app/templates/mail.html | 26 - app/templates/message.html | 25 - app/templates/webdav.html | 15 - app/utils.py | 19 - charts/ihasmail/Chart.yaml | 6 - charts/ihasmail/templates/NOTES.txt | 7 - charts/ihasmail/templates/_helpers.tpl | 20 - charts/ihasmail/templates/deployment.yaml | 60 - charts/ihasmail/templates/ingress.yaml | 30 - charts/ihasmail/templates/service.yaml | 15 - charts/ihasmail/values.yaml | 32 - docker-compose.yml | 18 +- docs/screenshots/calendar.jpg | Bin 0 -> 48859 bytes docs/screenshots/compose.jpg | Bin 0 -> 102880 bytes docs/screenshots/contacts.jpg | Bin 0 -> 46739 bytes docs/screenshots/filters.jpg | Bin 0 -> 35983 bytes docs/screenshots/inbox-dark.jpg | Bin 0 -> 96969 bytes docs/screenshots/inbox-light.jpg | Bin 0 -> 99396 bytes docs/screenshots/login.jpg | Bin 0 -> 25825 bytes docs/screenshots/mobile.jpg | Bin 0 -> 49934 bytes nginx.example.conf | 19 + package-lock.json | 3845 +++++++++++++++++ package.json | 29 + pyproject.toml | 30 - server/package.json | 24 + server/src/app.test.ts | 37 + server/src/app.ts | 404 ++ server/src/config.ts | 81 + server/src/crypto.ts | Bin 0 -> 1867 bytes server/src/imageproxy.ts | 121 + server/src/index.ts | 27 + server/src/mock/index.ts | 434 ++ server/src/ratelimit.ts | 45 + server/src/sessions.test.ts | 48 + server/src/sessions.ts | 213 + server/src/static.ts | 101 + server/src/upstream.ts | 94 + server/tsconfig.json | 21 + tests/test_smoke.py | 7 - web/index.html | 23 + web/package.json | 31 + web/public/favicon.ico | Bin 0 -> 15086 bytes web/public/img/apple-touch-icon.png | Bin 0 -> 28770 bytes web/public/img/favicon-64.png | Bin 0 -> 4810 bytes web/public/img/icon-192.png | Bin 0 -> 42165 bytes web/public/img/icon-512.png | Bin 0 -> 235279 bytes web/public/img/icon-maskable.png | Bin 0 -> 28375 bytes {app/static => web/public}/img/logo.png | Bin web/public/manifest.webmanifest | 21 + web/public/sw.js | 41 + web/src/App.tsx | 137 + web/src/jmap/client.ts | 348 ++ web/src/jmap/push.ts | 104 + web/src/jmap/types.ts | 775 ++++ web/src/lib/__tests__/address.test.ts | 23 + web/src/lib/__tests__/dates.test.ts | 23 + web/src/lib/__tests__/html.test.ts | 34 + web/src/lib/__tests__/search.test.ts | 42 + web/src/lib/__tests__/sieve.test.ts | 31 + web/src/lib/__tests__/sieveApply.test.ts | 31 + web/src/lib/__tests__/signatureHtml.test.ts | 26 + web/src/lib/__tests__/text.test.ts | 27 + web/src/lib/address.ts | 116 + web/src/lib/contacts.ts | 149 + web/src/lib/dates.ts | 250 ++ web/src/lib/format.ts | 108 + web/src/lib/html.ts | 169 + web/src/lib/keyboard.ts | 138 + web/src/lib/notify.ts | 95 + web/src/lib/recurrence.ts | 92 + web/src/lib/search.ts | 193 + web/src/lib/sieve.ts | 250 ++ web/src/lib/sieveApply.ts | 221 + web/src/lib/signatureHtml.ts | 103 + web/src/lib/signatureImages.ts | 119 + web/src/lib/storage.ts | 42 + web/src/lib/text.ts | 194 + web/src/main.tsx | 18 + web/src/store/calendar.ts | 338 ++ web/src/store/compose.ts | 678 +++ web/src/store/contacts.ts | 320 ++ web/src/store/files.ts | 192 + web/src/store/mail.ts | 922 ++++ web/src/store/session.ts | 100 + web/src/store/settings.ts | 173 + web/src/store/sieve.ts | 139 + web/src/styles/app.css | 842 ++++ web/src/ui/Splitter.tsx | 56 + web/src/ui/dialog.tsx | 152 + web/src/ui/misc.tsx | 99 + web/src/ui/popover.tsx | 176 + web/src/ui/toast.tsx | 84 + web/src/views/AppShell.tsx | 200 + web/src/views/Login.tsx | 88 + web/src/views/SearchBar.tsx | 102 + web/src/views/Shortcuts.tsx | 60 + .../views/calendar/CalendarContextMenu.tsx | 129 + web/src/views/calendar/CalendarDialog.tsx | 52 + web/src/views/calendar/CalendarSidebar.tsx | 83 + web/src/views/calendar/CalendarView.tsx | 422 ++ web/src/views/calendar/EventEditor.tsx | 340 ++ web/src/views/calendar/EventPopover.tsx | 101 + web/src/views/compose/Composer.tsx | 232 + web/src/views/compose/ComposerDock.tsx | 19 + web/src/views/compose/RecipientInput.tsx | 153 + web/src/views/compose/RichEditor.tsx | 286 ++ web/src/views/contacts/ContactEditor.tsx | 280 ++ web/src/views/contacts/ContactsView.tsx | 250 ++ web/src/views/files/FilesView.tsx | 142 + web/src/views/mail/FilterFromMessage.tsx | 81 + web/src/views/mail/InviteCard.tsx | 124 + web/src/views/mail/LabelPicker.tsx | 83 + web/src/views/mail/MailView.tsx | 313 ++ web/src/views/mail/MailboxPicker.tsx | 64 + web/src/views/mail/MailboxTree.tsx | 244 ++ web/src/views/mail/MessageList.tsx | 441 ++ web/src/views/mail/MessageView.tsx | 466 ++ web/src/views/mail/ThreadView.tsx | 211 + web/src/views/mail/VCardCard.tsx | 38 + web/src/views/settings/AboutSettings.tsx | 33 + web/src/views/settings/AppearanceSettings.tsx | 60 + web/src/views/settings/CalendarSettings.tsx | 88 + web/src/views/settings/FiltersSettings.tsx | 209 + web/src/views/settings/FoldersSettings.tsx | 62 + web/src/views/settings/GeneralSettings.tsx | 115 + web/src/views/settings/IdentitiesSettings.tsx | 110 + web/src/views/settings/LabelsSettings.tsx | 44 + .../views/settings/NotificationsSettings.tsx | 40 + web/src/views/settings/RuleDialog.tsx | 154 + web/src/views/settings/SecuritySettings.tsx | 63 + web/src/views/settings/SettingsView.tsx | 62 + web/src/views/settings/ShareDialog.tsx | 126 + web/src/views/settings/ShortcutsSettings.tsx | 33 + web/src/views/settings/TemplatesSettings.tsx | 43 + web/src/views/settings/VacationSettings.tsx | 67 + web/tsconfig.json | 23 + web/vite.config.ts | 35 + 162 files changed, 20398 insertions(+), 1072 deletions(-) create mode 100644 .dockerignore create mode 100644 .env.example create mode 100644 .github/workflows/ci.yml create mode 100644 .gitignore create mode 100644 Caddyfile.example delete mode 100644 Makefile delete mode 100644 app/__init__.py delete mode 100644 app/config.py delete mode 100644 app/dav.py delete mode 100644 app/jmap.py delete mode 100644 app/main.py delete mode 100644 app/routes/__init__.py delete mode 100644 app/routes/auth.py delete mode 100644 app/routes/calendar.py delete mode 100644 app/routes/contacts.py delete mode 100644 app/routes/mail.py delete mode 100644 app/routes/webdav.py delete mode 100644 app/static/css/style.css delete mode 100644 app/templates/base.html delete mode 100644 app/templates/calendar.html delete mode 100644 app/templates/compose.html delete mode 100644 app/templates/contacts.html delete mode 100644 app/templates/login.html delete mode 100644 app/templates/mail.html delete mode 100644 app/templates/message.html delete mode 100644 app/templates/webdav.html delete mode 100644 app/utils.py delete mode 100644 charts/ihasmail/Chart.yaml delete mode 100644 charts/ihasmail/templates/NOTES.txt delete mode 100644 charts/ihasmail/templates/_helpers.tpl delete mode 100644 charts/ihasmail/templates/deployment.yaml delete mode 100644 charts/ihasmail/templates/ingress.yaml delete mode 100644 charts/ihasmail/templates/service.yaml delete mode 100644 charts/ihasmail/values.yaml create mode 100644 docs/screenshots/calendar.jpg create mode 100644 docs/screenshots/compose.jpg create mode 100644 docs/screenshots/contacts.jpg create mode 100644 docs/screenshots/filters.jpg create mode 100644 docs/screenshots/inbox-dark.jpg create mode 100644 docs/screenshots/inbox-light.jpg create mode 100644 docs/screenshots/login.jpg create mode 100644 docs/screenshots/mobile.jpg create mode 100644 nginx.example.conf create mode 100644 package-lock.json create mode 100644 package.json delete mode 100644 pyproject.toml create mode 100644 server/package.json create mode 100644 server/src/app.test.ts create mode 100644 server/src/app.ts create mode 100644 server/src/config.ts create mode 100644 server/src/crypto.ts create mode 100644 server/src/imageproxy.ts create mode 100644 server/src/index.ts create mode 100644 server/src/mock/index.ts create mode 100644 server/src/ratelimit.ts create mode 100644 server/src/sessions.test.ts create mode 100644 server/src/sessions.ts create mode 100644 server/src/static.ts create mode 100644 server/src/upstream.ts create mode 100644 server/tsconfig.json delete mode 100644 tests/test_smoke.py create mode 100644 web/index.html create mode 100644 web/package.json create mode 100644 web/public/favicon.ico create mode 100644 web/public/img/apple-touch-icon.png create mode 100644 web/public/img/favicon-64.png create mode 100644 web/public/img/icon-192.png create mode 100644 web/public/img/icon-512.png create mode 100644 web/public/img/icon-maskable.png rename {app/static => web/public}/img/logo.png (100%) create mode 100644 web/public/manifest.webmanifest create mode 100644 web/public/sw.js create mode 100644 web/src/App.tsx create mode 100644 web/src/jmap/client.ts create mode 100644 web/src/jmap/push.ts create mode 100644 web/src/jmap/types.ts create mode 100644 web/src/lib/__tests__/address.test.ts create mode 100644 web/src/lib/__tests__/dates.test.ts create mode 100644 web/src/lib/__tests__/html.test.ts create mode 100644 web/src/lib/__tests__/search.test.ts create mode 100644 web/src/lib/__tests__/sieve.test.ts create mode 100644 web/src/lib/__tests__/sieveApply.test.ts create mode 100644 web/src/lib/__tests__/signatureHtml.test.ts create mode 100644 web/src/lib/__tests__/text.test.ts create mode 100644 web/src/lib/address.ts create mode 100644 web/src/lib/contacts.ts create mode 100644 web/src/lib/dates.ts create mode 100644 web/src/lib/format.ts create mode 100644 web/src/lib/html.ts create mode 100644 web/src/lib/keyboard.ts create mode 100644 web/src/lib/notify.ts create mode 100644 web/src/lib/recurrence.ts create mode 100644 web/src/lib/search.ts create mode 100644 web/src/lib/sieve.ts create mode 100644 web/src/lib/sieveApply.ts create mode 100644 web/src/lib/signatureHtml.ts create mode 100644 web/src/lib/signatureImages.ts create mode 100644 web/src/lib/storage.ts create mode 100644 web/src/lib/text.ts create mode 100644 web/src/main.tsx create mode 100644 web/src/store/calendar.ts create mode 100644 web/src/store/compose.ts create mode 100644 web/src/store/contacts.ts create mode 100644 web/src/store/files.ts create mode 100644 web/src/store/mail.ts create mode 100644 web/src/store/session.ts create mode 100644 web/src/store/settings.ts create mode 100644 web/src/store/sieve.ts create mode 100644 web/src/styles/app.css create mode 100644 web/src/ui/Splitter.tsx create mode 100644 web/src/ui/dialog.tsx create mode 100644 web/src/ui/misc.tsx create mode 100644 web/src/ui/popover.tsx create mode 100644 web/src/ui/toast.tsx create mode 100644 web/src/views/AppShell.tsx create mode 100644 web/src/views/Login.tsx create mode 100644 web/src/views/SearchBar.tsx create mode 100644 web/src/views/Shortcuts.tsx create mode 100644 web/src/views/calendar/CalendarContextMenu.tsx create mode 100644 web/src/views/calendar/CalendarDialog.tsx create mode 100644 web/src/views/calendar/CalendarSidebar.tsx create mode 100644 web/src/views/calendar/CalendarView.tsx create mode 100644 web/src/views/calendar/EventEditor.tsx create mode 100644 web/src/views/calendar/EventPopover.tsx create mode 100644 web/src/views/compose/Composer.tsx create mode 100644 web/src/views/compose/ComposerDock.tsx create mode 100644 web/src/views/compose/RecipientInput.tsx create mode 100644 web/src/views/compose/RichEditor.tsx create mode 100644 web/src/views/contacts/ContactEditor.tsx create mode 100644 web/src/views/contacts/ContactsView.tsx create mode 100644 web/src/views/files/FilesView.tsx create mode 100644 web/src/views/mail/FilterFromMessage.tsx create mode 100644 web/src/views/mail/InviteCard.tsx create mode 100644 web/src/views/mail/LabelPicker.tsx create mode 100644 web/src/views/mail/MailView.tsx create mode 100644 web/src/views/mail/MailboxPicker.tsx create mode 100644 web/src/views/mail/MailboxTree.tsx create mode 100644 web/src/views/mail/MessageList.tsx create mode 100644 web/src/views/mail/MessageView.tsx create mode 100644 web/src/views/mail/ThreadView.tsx create mode 100644 web/src/views/mail/VCardCard.tsx create mode 100644 web/src/views/settings/AboutSettings.tsx create mode 100644 web/src/views/settings/AppearanceSettings.tsx create mode 100644 web/src/views/settings/CalendarSettings.tsx create mode 100644 web/src/views/settings/FiltersSettings.tsx create mode 100644 web/src/views/settings/FoldersSettings.tsx create mode 100644 web/src/views/settings/GeneralSettings.tsx create mode 100644 web/src/views/settings/IdentitiesSettings.tsx create mode 100644 web/src/views/settings/LabelsSettings.tsx create mode 100644 web/src/views/settings/NotificationsSettings.tsx create mode 100644 web/src/views/settings/RuleDialog.tsx create mode 100644 web/src/views/settings/SecuritySettings.tsx create mode 100644 web/src/views/settings/SettingsView.tsx create mode 100644 web/src/views/settings/ShareDialog.tsx create mode 100644 web/src/views/settings/ShortcutsSettings.tsx create mode 100644 web/src/views/settings/TemplatesSettings.tsx create mode 100644 web/src/views/settings/VacationSettings.tsx create mode 100644 web/tsconfig.json create mode 100644 web/vite.config.ts diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..80df665 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +node_modules +**/node_modules +**/dist +.git +.env +server/data diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..f5f1ea7 --- /dev/null +++ b/.env.example @@ -0,0 +1,35 @@ +# ---- ihasmail server configuration ---- + +# Base URL of your Stalwart server (scheme + host, no path). ihasmail discovers +# the JMAP session at /.well-known/jmap. +STALWART_URL=https://mail.example.com + +# Random secret used to derive encryption keys for persisted sessions. +# Generate with: openssl rand -base64 48 +APP_SECRET=change-me + +# Listen address +HOST=0.0.0.0 +PORT=8080 + +# Set to "1" when running behind a TLS-terminating reverse proxy (trusts +# X-Forwarded-* and marks cookies Secure). Set to "0" for plain-HTTP dev. +TRUST_PROXY=1 +SECURE_COOKIES=auto + +# Session lifetime (idle timeout) in seconds. "Remember me" extends to SESSION_REMEMBER_TTL. +SESSION_TTL=43200 +SESSION_REMEMBER_TTL=2592000 + +# Where to persist sessions so restarts don't log everyone out (optional). +SESSION_FILE=./data/sessions.json + +# Upstream timeouts / limits +UPSTREAM_TIMEOUT=30000 +MAX_UPLOAD_BYTES=52428800 + +# Remote-image privacy proxy (Gmail-style). Set to 0 to load remote images directly. +IMAGE_PROXY=1 + +# Branding +APP_NAME=ihasmail diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..5a26027 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,20 @@ +name: CI +on: + push: + branches: [main] + pull_request: +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + - run: npm ci --ignore-scripts + - run: npm run typecheck + - run: npm test + - run: npm run build + - name: Docker build + run: docker build -t ihasmail:ci . diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..117c18b --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +node_modules/ +dist/ +.env +*.log +.DS_Store +server/data/ +.vite/ +coverage/ diff --git a/Caddyfile.example b/Caddyfile.example new file mode 100644 index 0000000..268680b --- /dev/null +++ b/Caddyfile.example @@ -0,0 +1,9 @@ +# Example reverse proxy (Caddy) in front of ihasmail. +# TLS is automatic. ihasmail sets Secure cookies and HSTS when X-Forwarded-Proto is https. +mail.example.com { + encode zstd gzip + reverse_proxy 127.0.0.1:8080 { + # Keep SSE (push) connections open + flush_interval -1 + } +} diff --git a/Dockerfile b/Dockerfile index 695ec9e..c5b86eb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,29 @@ -FROM python:3.12-slim - -ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1 - -RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/* +# ---- build stage ---- +FROM node:22-alpine AS build WORKDIR /app +COPY package.json package-lock.json* ./ +COPY server/package.json server/ +COPY web/package.json web/ +RUN npm ci --ignore-scripts +COPY . . +RUN npm run build -COPY pyproject.toml README.md /app/ -RUN pip install --no-cache-dir -e . - -COPY app /app/app -COPY .env.example /app/.env.example - -ENV PORT=8000 -EXPOSE 8000 -CMD ["uvicorn", "app.main:app", "--host=0.0.0.0", "--port=8000"] +# ---- runtime stage ---- +FROM node:22-alpine AS runtime +ENV NODE_ENV=production \ + HOST=0.0.0.0 \ + PORT=8080 \ + STATIC_DIR=/app/web/dist \ + SESSION_FILE=/data/sessions.json +WORKDIR /app +COPY package.json ./ +COPY server/package.json server/ +COPY --from=build /app/node_modules ./node_modules +COPY --from=build /app/server/dist ./server/dist +COPY --from=build /app/web/dist ./web/dist +RUN mkdir -p /data && chown -R node:node /data /app +USER node +VOLUME ["/data"] +EXPOSE 8080 +HEALTHCHECK --interval=30s --timeout=5s CMD wget -qO- http://127.0.0.1:8080/api/health || exit 1 +CMD ["node", "server/dist/index.js"] diff --git a/Makefile b/Makefile deleted file mode 100644 index 40d8ae6..0000000 --- a/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -.PHONY: run dev test build - -run: - uvicorn app.main:app --host 0.0.0.0 --port 8000 - -dev: - uvicorn app.main:app --reload - -test: - pytest - -build: - docker compose build diff --git a/README.md b/README.md index d3699b7..345a01f 100644 --- a/README.md +++ b/README.md @@ -1,60 +1,142 @@ +

+ ihasmail +

+ # ihasmail -![ihasmail logo](app/static/img/logo.png) +**A fast, friendly, Gmail-class webmail for [Stalwart Mail Server](https://stalw.art) — built on JMAP, from the ground up.** -A polished, FastAPI + HTMX/Jinja webmail for Stalwart, with JMAP mail/contacts/calendar, Sieve UI, DAV browsing, and reverse-proxy friendly deploy. +ihasmail is a JMAP-first web client: mail, calendars, contacts, files, filters and every other modern feature Stalwart exposes, in a responsive single-page app that works equally well on a desktop monitor and a phone. It talks only JMAP (plus Stalwart's blob/upload/EventSource endpoints) — no IMAP, no SMTP, no database. -A production-leaning, **FastAPI** + **HTMX/Jinja** webmail for [Stalwart Mail Server](https://stalw.art/), using **JMAP** for mail, contacts, and calendar, plus simple **WebDAV/CalDAV** helpers. Authenticates with the user's Stalwart mailbox (like Roundcube). Designed to run behind a reverse proxy. +> Status: 2.0 rewrite, in QA against a live Stalwart 1.0 server. The previous FastAPI/HTMX prototype has been removed entirely (only the logo survived). + +## Screenshots + +*All screenshots are taken against the built-in mock server (`npm run dev:mock`) with sample data — no real mailbox involved.* + +| | | +| --- | --- | +| **Inbox & conversation view (dark)** ![Inbox, dark theme](docs/screenshots/inbox-dark.jpg) | **Inbox & conversation view (light)** ![Inbox, light theme](docs/screenshots/inbox-light.jpg) | +| **Reply composer** — identities, Reply-To, rich text, signature, quoted text ![Composer](docs/screenshots/compose.jpg) | **Calendar (month view)** ![Calendar](docs/screenshots/calendar.jpg) | +| **Contacts** ![Contacts](docs/screenshots/contacts.jpg) | **Sieve filter builder** — also reachable from a message's right-click menu ![Filters](docs/screenshots/filters.jpg) | +| **Sign-in** ![Login](docs/screenshots/login.jpg) | **Mobile layout** Mobile | ## Features -- Login with Stalwart mailbox (HTTP Basic against JMAP session or bearer token if provided) -- Inbox listing, read messages (plain text), compose & send via JMAP (`Email`, `EmailSubmission`) -- Contacts/Directory via JMAP `Contact` -- Calendar view via JMAP `CalendarEvent` -- WebDAV browser (read-only sample) and CalDAV endpoints (external DAV clients) -- CSRF on POST, signed session cookie, proxy-friendly -- Dockerfile + docker-compose for easy deploy -> HTML rendering and attachment streaming are stubbed—extend using the JMAP `downloadUrl` and sanitize HTML before display. +**Mail** +- Gmail-style three-pane layout (reading pane right/bottom/off, **drag-to-resize splitter** in both orientations, quick layout switch in the list menu), conversation view with collapsed messages and "show quoted text", dense/cozy/comfortable density, light/dark/system theme with accent colours +- Virtualised, infinitely-scrolling message list; multi-select (click, ⇧-click, ⌃-click), drag & drop to folders, right-click context menus, hover actions, Gmail keyboard shortcuts (`j/k`, `e`, `#`, `r/a/f`, `g i`, `/`, `?` …) +- Archive / delete / spam / star / mark read / move / labels (IMAP keywords with colours) with **Undo** +- **"Filter messages like this…"** from the message context menu: creates a Sieve rule pre-filled from the sender/list (target folders can be created on the fly), and can **apply it immediately to the existing messages in the folder** (evaluated client-side, actions applied via JMAP) +- Safe HTML rendering: DOMPurify sanitisation inside a Shadow DOM, **remote images blocked by default** with a per-sender allow-list and an optional **privacy image proxy** (like Gmail's) +- Attachments: previews for images/PDF/text, download all, inline `cid:` images, `.eml` export, *Show original*, header viewer +- Invitations: `.ics` parts render as an invite card with **Yes/Maybe/No** RSVP (via `CalendarEvent/parse` + iTIP); `.vcf` parts offer *Add to contacts*; `List-Unsubscribe` one-click +- Search with Gmail operators (`from:`, `to:`, `subject:`, `has:attachment`, `is:unread`, `is:starred`, `in:`, `label:`, `before:`, `after:`, `larger:`, `smaller:` …) plus an advanced-search panel +- Composer: multiple floating/minimised/maximised composers, rich-text editor (formatting, lists, links, colours, images pasted/dropped inline, emoji), plain-text mode, recipient chips with autocomplete from **contacts, the directory (GAL) and recent recipients**, multiple identities with HTML signatures, Cc/Bcc, priority, read-receipt request, templates/canned responses, attachment upload with progress, drag & drop, attachment reminder, **undo send**, autosaved drafts, reply/reply-all/forward with quoting and inline images preserved +- Live updates via JMAP push (EventSource proxied server-side) with polling fallback; desktop notifications, sound, title/favicon unread badge +- A–Z folder list with Inbox pinned on top (other special folders mixed in), subfolders nested and collapsed by default, folder management (create/rename/hide/share/empty), quota bar, Outlook-style module bar (Mail · Calendar · Contacts · Files) at the bottom of the pane, multi-account switching for shared accounts -## Quick Start (Docker) +**Calendar** (JMAP Calendars / JSCalendar) +- Month / week / day / agenda views, mini calendar, multiple calendars with colours, show/hide, create/edit/share calendars +- Create events by click or drag, edit everything: all-day, time zones, recurrence (presets + custom rule builder), location, meeting link, description, reminders, status/privacy/free-busy, colour +- Attendees with invitations (`sendSchedulingMessages`), RSVP, and **free/busy lookup** via `Principal/getAvailability` +- **Right-click menus** on events (open, edit, duplicate, colour, category, delete) and on empty slots/days (new event here, go to day/week) +- **Outlook-style colour categories**: named colours managed in Settings, assigned from the context menu or editor; stored as JSCalendar `categories` (+ `color`) so they sync + +**Contacts** (JMAP Contacts / JSContact) +- Address books (create/rename/share/default), contact list with search and letter index, full contact editor (names, emails, phones, addresses, org/title, birthday, website, notes, photo), **groups**, vCard import/export, compose-to-contact + +**Files** (JMAP FileNode) +- Browse folders, upload (drag & drop), download, create folders, rename, move, delete + +**Settings** +- Identities & signatures, **Sieve filters** (visual rule builder that round-trips to a Sieve script, plus a raw script editor with server-side validation), out-of-office (`VacationResponse`), folders, labels, templates, notifications, calendar defaults, sessions (sign out other devices), keyboard shortcuts, import/export of settings + +**Platform** +- Installable PWA (manifest + service worker), mobile layout with bottom tab bar, drawer navigation, full-screen composer, FAB +- Security: no credentials in the browser (server-side session with per-session encrypted upstream credentials), httpOnly SameSite cookies, CSRF header + Sec-Fetch-Site checks, strict CSP, sandboxed blob downloads, SSRF-safe image proxy, login rate limiting, security headers + +## Architecture + +``` +browser ──(same-origin /api/*)──► ihasmail server (Node + Hono) ──(JMAP over HTTPS)──► Stalwart + React SPA • session cookie ⇄ Basic auth + JMAP client + stores • /api/jmap, /api/blob, /api/upload, /api/events (SSE), /api/image +``` + +- `web/` — Vite + React 19 + TypeScript SPA. `src/jmap` (client, push, types), `src/store` (zustand stores: session, mail, compose, contacts, calendar, files, sieve, settings), `src/views` (mail, compose, calendar, contacts, files, settings), `src/lib` (sanitiser, search parser, Sieve codec, dates, vCard, …). +- `server/` — tiny Node/Hono backend: authenticates against Stalwart's JMAP session endpoint, stores the credentials sealed with a key derived from the cookie secret (the server never persists plaintext passwords), proxies JMAP/blob/SSE calls, serves the SPA with a strict CSP. Also contains `src/mock/` — an in-memory fake Stalwart for local development and demos. + +Stalwart capabilities used: `core`, `mail`, `submission`, `vacationresponse`, `sieve`, `contacts`(+`parse`), `calendars`(+`parse`), `principals`(+`availability`), `quota`, `blob`, `filenode`, EventSource push. Features degrade gracefully when a capability is missing. + +## Quick start (Docker) ```bash -# 1) Configure environment cp .env.example .env -# Edit JMAP_BASE, CALDAV_BASE, WEBDAV_BASE, APP_SECRET - -# 2) Build & run +# edit: STALWART_URL=https://mail.example.com and APP_SECRET=$(openssl rand -base64 48) docker compose up --build -d - -# 3) Reverse proxy (Nginx/Caddy) to http://127.0.0.1:8080 +# → http://localhost:8080 (put Caddy/nginx in front for TLS; see Caddyfile.example / nginx.example.conf) ``` -## Environment Variables -- `APP_SECRET` – random string for signing cookies (required) -- `JMAP_BASE` – e.g., `https://mail.example.com/jmap` -- `CALDAV_BASE` – e.g., `https://mail.example.com/caldav/` -- `WEBDAV_BASE` – e.g., `https://mail.example.com/webdav/` -- `COOKIE_NAME` – cookie name (default: `stalwart_webmail`) -- `TRUST_PROXY` – `1` to honor `X-Forwarded-*` (default: `1`) -- `UPSTREAM_TIMEOUT` – seconds for upstream HTTP (default: `15`) +Users sign in with their Stalwart mailbox credentials (TOTP codes are supported via the "two-factor code" field, which Stalwart accepts as `password$code`). + +## Development + +Requirements: Node ≥ 20.10 (22 recommended), npm ≥ 10. -## Dev ```bash -python -m venv .venv && source .venv/bin/activate -pip install -e ".[dev]" -uvicorn app.main:app --reload -pytest +npm install + +# against a real Stalwart (default: mail.example.com, change STALWART_URL in .env or the environment) +npm run dev # server on :8080 (tsx watch) + Vite dev server on :5173 (proxying /api) + +# against the built-in mock Stalwart (demo@example.com / demo) — no real mailbox needed +npm run dev:mock # mock on :8788, server on :8080, Vite on :5173 + +npm run typecheck # tsc for both packages +npm test # vitest (web) + node:test (server) +npm run build # web/dist + server/dist +npm start # serve the production build ``` -## Security & Hardening -- Prefer **bearer tokens** if Stalwart issues them; update `jmap_session()` to store `accessToken` -- Set explicit `accountId` from the JMAP session `primaryAccounts` -- Add mailbox/folder navigation via `Mailbox/query` + `Mailbox/get` -- Sanitize HTML bodies (e.g., `bleach`) before rendering -- Add Sieve UI via `urn:ietf:params:jmap:sieve` -- Consider rate limiting and security headers in the reverse proxy -- Serve static assets via proxy/CDN +Open http://localhost:5173 in dev (or http://localhost:8080 for the production build). + +## Configuration + +All configuration is via environment variables (see `.env.example`): + +| Variable | Default | Description | +| --- | --- | --- | +| `STALWART_URL` | `https://mail.example.com` | Base URL of Stalwart; the JMAP session is discovered at `/.well-known/jmap` | +| `APP_SECRET` | *(required in production)* | Secret used to derive session encryption keys | +| `PORT` / `HOST` | `8080` / `0.0.0.0` | Listen address | +| `TRUST_PROXY` | `1` | Honour `X-Forwarded-*` from a reverse proxy | +| `SECURE_COOKIES` | `auto` | `auto` (Secure on https), `1`, or `0` for plain-HTTP dev | +| `SESSION_TTL` / `SESSION_REMEMBER_TTL` | `43200` / `2592000` | Idle session lifetime (seconds), with/without "keep me signed in" | +| `SESSION_FILE` | *(unset)* | Persist sessions across restarts (ciphertext only) | +| `IMAGE_PROXY` | `1` | Route remote images through the privacy proxy | +| `MAX_UPLOAD_BYTES` | `52428800` | Upload size limit (Stalwart has its own limit too) | +| `APP_NAME` | `ihasmail` | Branding | + +## Keyboard shortcuts + +Press `?` anywhere. Highlights: `c` compose · `/` search · `j`/`k` navigate · `o`/`Enter` open · `u` back · `e` archive · `#` delete · `!` spam · `s` star · `r`/`a`/`f` reply/reply-all/forward · `v` move · `l` label · `x` select · `⇧I`/`⇧U` read/unread · `g i` inbox · `g l` calendar · `g c` contacts · `Ctrl+Enter` send. + +## Known issues / pending QA + +Verified against the mock server and, for the core mail flows, against a live Stalwart 1.0 (`mail.example.com`). Still pending live verification: + +- **HTML signatures** — Stalwart caps identity signatures at 2 KB. ihasmail compacts pasted HTML, moves images to Files and, if still too large, keeps the full signature in Files behind a short marker (other clients see a text fallback). The end-to-end flow (save → compose → send with inline logo) is implemented but not yet confirmed on the live server. +- **Files** — the live server runs an older Stalwart build than `main`; `FileNode/query` there rejects `isTopLevel`/`parentId` filters, so ihasmail falls back to listing all nodes and building the tree client-side. Upload/rename/move/delete still need a live pass. +- Recurring events: colour/category/edit/delete apply to the whole series (per-occurrence overrides aren't supported by the server yet). + +## Roadmap / not yet + +- Snooze and scheduled send (needs server-side support) +- Read-receipt (MDN) sending, S/MIME / OpenPGP +- Self-service password / app-password / 2FA management (Stalwart exposes this through its own account portal) +- Translations (strings are English-only for now) ## License -GPL-3.0-or-later + +GPL-3.0-or-later. See [LICENSE](LICENSE). diff --git a/app/__init__.py b/app/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/app/config.py b/app/config.py deleted file mode 100644 index 74abbb2..0000000 --- a/app/config.py +++ /dev/null @@ -1,9 +0,0 @@ -import os, secrets - -APP_SECRET = os.getenv("APP_SECRET") or secrets.token_urlsafe(32) -COOKIE_NAME = os.getenv("COOKIE_NAME", "stalwart_webmail") -JMAP_BASE = os.getenv("JMAP_BASE", "https://mail.example.com/jmap") -CALDAV_BASE = os.getenv("CALDAV_BASE", "https://mail.example.com/caldav/") -WEBDAV_BASE = os.getenv("WEBDAV_BASE", "https://mail.example.com/webdav/") -TRUST_PROXY = os.getenv("TRUST_PROXY", "1") == "1" -UPSTREAM_TIMEOUT = float(os.getenv("UPSTREAM_TIMEOUT", "15")) diff --git a/app/dav.py b/app/dav.py deleted file mode 100644 index 1d315ab..0000000 --- a/app/dav.py +++ /dev/null @@ -1,41 +0,0 @@ -from typing import List, Dict, Any, Tuple, Optional -import httpx -from urllib.parse import urljoin -from . import config - -DAV_PROPFIND = """ - - - - - - -""" - -async def propfind(ac: httpx.AsyncClient, base: str, path: Optional[str], auth: Tuple[str,str]) -> List[Dict[str, Any]]: - href = urljoin(base, path or "/") - r = await ac.request("PROPFIND", href, content=DAV_PROPFIND, headers={"Depth": "1"}, auth=auth) - if r.status_code not in (207, 200): - raise RuntimeError(f"WebDAV error {r.status_code}") - import xml.etree.ElementTree as ET - tree = ET.fromstring(r.text) - ns = {"d":"DAV:"} - items: List[Dict[str, Any]] = [] - for resp in tree.findall("d:response", ns): - href_el = resp.find("d:href", ns) - prop = resp.find("d:propstat/d:prop", ns) - if href_el is None or prop is None: - continue - name = prop.find("d:displayname", ns) - cl = prop.find("d:getcontentlength", ns) - rtype = prop.find("d:resourcetype", ns) - is_collection = rtype is not None and rtype.find("d:collection", ns) is not None - items.append({ - "href": href_el.text, - "name": (name.text if name is not None and name.text else href_el.text.rstrip("/").split("/")[-1] or "/"), - "type": "directory" if is_collection else "file", - "size": int(cl.text) if (cl is not None and cl.text and cl.text.isdigit()) else None - }) - if items: - items = items[1:] - return items diff --git a/app/jmap.py b/app/jmap.py deleted file mode 100644 index 975a79d..0000000 --- a/app/jmap.py +++ /dev/null @@ -1,31 +0,0 @@ -from typing import Any, Dict, List, Tuple -import httpx -from . import config - -def client() -> httpx.AsyncClient: - limits = httpx.Limits(max_connections=20, max_keepalive_connections=10) - return httpx.AsyncClient(timeout=config.UPSTREAM_TIMEOUT, limits=limits, trust_env=True) - -async def get_session(ac: httpx.AsyncClient, base: str, username: str, password: str) -> Dict[str, Any]: - r = await ac.get(base, auth=(username, password)) - if r.status_code == 401: - raise PermissionError("Invalid credentials") - r.raise_for_status() - return r.json() - -async def call(ac: httpx.AsyncClient, api_url: str, auth: Tuple[str,str] | None, method_calls: List[list]) -> Dict[str, Any]: - payload = { - "using": [ - "urn:ietf:params:jmap:core", - "urn:ietf:params:jmap:mail", - "urn:ietf:params:jmap:contacts", - "urn:ietf:params:jmap:calendars" - ], - "methodCalls": method_calls - } - kwargs: Dict[str, Any] = {"json": payload} - if auth: - kwargs["auth"] = auth - r = await ac.post(api_url, **kwargs) - r.raise_for_status() - return r.json() diff --git a/app/main.py b/app/main.py deleted file mode 100644 index a9d13e4..0000000 --- a/app/main.py +++ /dev/null @@ -1,34 +0,0 @@ -import bleach -from fastapi import FastAPI, Request -from fastapi.staticfiles import StaticFiles -from starlette.middleware.sessions import SessionMiddleware -from starlette.middleware.proxy_headers import ProxyHeadersMiddleware -from . import config -from .routes import auth, mail, contacts, calendar, webdav, sieve - -app = FastAPI(title="Stalwart Webmail (Python)") - -if config.TRUST_PROXY: - app.add_middleware(ProxyHeadersMiddleware, trusted_hosts="*") - -app.add_middleware(SessionMiddleware, secret_key=config.APP_SECRET, session_cookie=config.COOKIE_NAME, same_site="lax", https_only=True) - -app.mount("/static", StaticFiles(directory="app/static"), name="static") - -@app.get("/", include_in_schema=False) -async def root(request: Request): - from fastapi.responses import RedirectResponse - return RedirectResponse("/mail" if request.session.get("user") else "/login") - -# Routers -app.include_router(auth.router) -app.include_router(mail.router) -app.include_router(contacts.router) -app.include_router(calendar.router) -app.include_router(webdav.router) -app.include_router(sieve.router) - - -@app.get("/healthz", include_in_schema=False) -async def healthz(): - return {"ok": True} diff --git a/app/routes/__init__.py b/app/routes/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/app/routes/auth.py b/app/routes/auth.py deleted file mode 100644 index 7989108..0000000 --- a/app/routes/auth.py +++ /dev/null @@ -1,45 +0,0 @@ -from fastapi import APIRouter, Request, Form, HTTPException -from fastapi.responses import RedirectResponse, HTMLResponse -from starlette.middleware.sessions import SessionMiddleware -from starlette.responses import PlainTextResponse -from .. import config, jmap -from fastapi.templating import Jinja2Templates -from jinja2 import FileSystemLoader, Environment, select_autoescape -import pathlib, base64, os - -router = APIRouter() - -templates = Jinja2Templates(directory=str(pathlib.Path(__file__).resolve().parent.parent / "templates")) - -def make_csrf(session: dict) -> str: - token = base64.urlsafe_b64encode(os.urandom(24)).decode() - session["csrf"] = token - return token - -def check_csrf(session: dict, token: str): - if not token or token != session.get("csrf"): - raise HTTPException(status_code=400, detail="CSRF token invalid") - -@router.get("/login", response_class=HTMLResponse) -async def login_form(request: Request): - csrf = make_csrf(request.session) - return templates.TemplateResponse("login.html", {"request": request, "csrf": csrf, "jmap_base": config.JMAP_BASE}) - -@router.post("/login") -async def login_submit(request: Request, username: str = Form(...), password: str = Form(...), jmap_base: str = Form(...), csrf: str = Form(...)): - check_csrf(request.session, csrf) - async with jmap.client() as ac: - try: - session = await jmap.get_session(ac, jmap_base, username, password) - except PermissionError: - raise HTTPException(status_code=401, detail="Invalid credentials") - api_url = session.get("apiUrl") or jmap_base - download_url = session.get("downloadUrl") or "" - primary = session.get("primaryAccounts") or {} - request.session["user"] = {"username": username, "jmap_base": jmap_base, "api_url": api_url, "auth": (username, password), "download_url": download_url, "primary": primary, "session": session} - return RedirectResponse("/mail", status_code=303) - -@router.get("/logout") -async def logout(request: Request): - request.session.clear() - return RedirectResponse("/login", status_code=303) diff --git a/app/routes/calendar.py b/app/routes/calendar.py deleted file mode 100644 index 115855c..0000000 --- a/app/routes/calendar.py +++ /dev/null @@ -1,39 +0,0 @@ -from fastapi import APIRouter, Request, Depends, HTTPException -from fastapi.responses import HTMLResponse -from fastapi.templating import Jinja2Templates -import pathlib, datetime -from .. import jmap -from ..utils import fmt_when - -router = APIRouter() -templates = Jinja2Templates(directory=str(pathlib.Path(__file__).resolve().parent.parent / "templates")) - -def require_user(request: Request): - user = request.session.get("user") - if not user: - raise HTTPException(status_code=401) - return user - -@router.get("/calendar", response_class=HTMLResponse) -async def calendar(request: Request, user=Depends(require_user)): - async with jmap.client() as ac: - api = user["api_url"] - account_id = None - now = datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc) - until = now + datetime.timedelta(days=30) - res = await jmap.call(ac, api, tuple(user["auth"]), [ - ["CalendarEvent/query", {"accountId": account_id, "limit": 200, "sort":[{"property":"start","isAscending": True}]}, "q1"], - ["CalendarEvent/get", {"accountId": account_id, "#ids": {"resultOf":"q1","name":"CalendarEvent/query","path":"ids"}, "properties":["id","title","start","end","location"]}, "g1"] - ]) - events = [] - for name, data, _ in res.get("methodResponses", []): - if name == "CalendarEvent/get": - for e in data.get("list", []): - try: - s = datetime.datetime.fromisoformat((e.get("start") or "").replace("Z","+00:00")) - if s < now - datetime.timedelta(days=1) or s > until: - continue - except Exception: - pass - events.append({"title": e.get("title") or "(no title)", "start": fmt_when(e.get("start")), "end": fmt_when(e.get("end")), "loc": e.get("location")}) - return templates.TemplateResponse("calendar.html", {"request": request, "events": events, "user": user}) diff --git a/app/routes/contacts.py b/app/routes/contacts.py deleted file mode 100644 index 222aa7b..0000000 --- a/app/routes/contacts.py +++ /dev/null @@ -1,35 +0,0 @@ -from typing import Optional -from fastapi import APIRouter, Request, Depends, HTTPException -from fastapi.responses import HTMLResponse -from fastapi.templating import Jinja2Templates -import pathlib -from .. import jmap - -router = APIRouter() -templates = Jinja2Templates(directory=str(pathlib.Path(__file__).resolve().parent.parent / "templates")) - -def require_user(request: Request): - user = request.session.get("user") - if not user: - raise HTTPException(status_code=401) - return user - -@router.get("/contacts", response_class=HTMLResponse) -async def contacts(request: Request, q: Optional[str] = None, user=Depends(require_user)): - async with jmap.client() as ac: - api = user["api_url"] - account_id = None - filter_cond = {"text": q} if q else {} - res = await jmap.call(ac, api, tuple(user["auth"]), [ - ["Contact/query", {"accountId": account_id, "filter": filter_cond, "limit": 100}, "c1"], - ["Contact/get", {"accountId": account_id, "#ids": {"resultOf":"c1","name":"Contact/query","path":"ids"}, "properties":["id","firstName","lastName","emails","company"]}, "c2"] - ]) - contacts = [] - for name, data, _ in res.get("methodResponses", []): - if name == "Contact/get": - for c in data.get("list", []): - emails = [e.get("email","") for e in (c.get("emails") or [])] - contacts.append({"name": f"{c.get('firstName','')} {c.get('lastName','')}".strip() or (emails[0] if emails else ""), - "email": ", ".join(emails), - "org": c.get("company")}) - return templates.TemplateResponse("contacts.html", {"request": request, "contacts": contacts, "q": q, "user": user}) diff --git a/app/routes/mail.py b/app/routes/mail.py deleted file mode 100644 index 8e076c7..0000000 --- a/app/routes/mail.py +++ /dev/null @@ -1,316 +0,0 @@ -import json -import io -import bleach -from typing import Optional -from fastapi import APIRouter, Request, Depends, HTTPException, Form, UploadFile, File -from fastapi.responses import HTMLResponse, RedirectResponse, StreamingResponse, JSONResponse -from fastapi.templating import Jinja2Templates -import pathlib -from .. import jmap -from ..utils import human_size, fmt_when - -router = APIRouter() -templates = Jinja2Templates(directory=str(pathlib.Path(__file__).resolve().parent.parent / "templates")) - -def require_user(request: Request): - user = request.session.get("user") - if not user: - raise HTTPException(status_code=401) - return user - -def make_csrf(session: dict) -> str: - import os, base64 - token = base64.urlsafe_b64encode(os.urandom(24)).decode() - session["csrf"] = token - return token - -def check_csrf(session: dict, token: str): - if not token or token != session.get("csrf"): - raise HTTPException(status_code=400, detail="CSRF token invalid") - -@router.get("/mail", response_class=HTMLResponse) -async def inbox(request: Request, q: Optional[str] = None, mailbox: Optional[str] = None, user=Depends(require_user)): - async with jmap.client() as ac: - api = user["api_url"] - primary = user.get("primary", {}) - account_id = primary.get("urn:ietf:params:jmap:mail") - boxes, inbox_id = await get_mailboxes(ac, api, tuple(user["auth"]), account_id) - box_id = mailbox or inbox_id - filt = {"text": q} if q else ({"inMailbox": box_id} if box_id else {}) - res = await jmap.call(ac, api, tuple(user["auth"]), [ - ["Email/query", {"accountId": account_id, "filter": filt, "sort": [{"property":"receivedAt","isAscending": False}], "limit": 50}, "c1"], - ["Email/get", {"accountId": account_id, "#ids": {"resultOf":"c1","name":"Email/query","path":"ids"}, "properties": ["id","subject","from","size","receivedAt"]}, "c2"] - ]) - emails = [] - - for name, data, _ in res.get("methodResponses", []): - if name == "Email/get": - for e in data.get("list", []): - from_str = ", ".join([a.get("name") or a.get("email","") for a in (e.get("from") or [])]) - emails.append({"id": e["id"], "subject": e.get("subject") or "(no subject)", "from": from_str, "when": fmt_when(e.get("receivedAt")), "size": human_size(e.get("size"))}) - return templates.TemplateResponse("mail.html", {"request": request, "messages": emails, "q": q, "user": user, "mailboxes": boxes, "selected": box_id}) - -@router.get("/mail/{email_id}", response_class=HTMLResponse) -async def read_message(request: Request, email_id: str, user=Depends(require_user)): - async with jmap.client() as ac: - api = user["api_url"] - res = await jmap.call(ac, api, tuple(user["auth"]), [ - ["Email/get", {"ids": [email_id], "properties": ["id","subject","from","to","receivedAt","size","keywords","preview","bodyStructure","htmlBody","textBody"]}, "c1"] - ]) - msg = {"id": email_id, "subject":"", "from":"", "to":[], "when":"", "textBody":"", "htmlBody":"", "attachments":[]} - bstruct = None - cid_map = {} - for name, data, _ in res.get("methodResponses", []): - if name == "Email/get": - lst = data.get("list", []) - if lst: - e = lst[0] - msg["subject"] = e.get("subject") or msg["subject"] - msg["from"] = ", ".join([a.get("name") or a.get("email","") for a in (e.get("from") or [])]) or msg["from"] - msg["to"] = [a.get("email","") for a in (e.get("to") or [])] or msg["to"] - msg["when"] = fmt_when(e.get("receivedAt")) or msg["when"] - if "textBody" in e: - msg["textBody"] = e.get("textBody") or msg["textBody"] - if "htmlBody" in e: - raw_html = e.get("htmlBody") - if raw_html: - msg["htmlBody"] = bleach.clean(raw_html, tags=bleach.sanitizer.ALLOWED_TAGS.union({"p","span","div","br","hr","pre","code","blockquote","ul","ol","li","table","thead","tbody","tr","th","td","img","a","b","i","strong","em"}), attributes={"a":["href","title"],"img":["src","alt","title","width","height"]}, strip=True) - bstruct = bstruct or e.get("bodyStructure") - def walk_cid(bs): - if not isinstance(bs, dict): return - cid = bs.get("cid") - if cid and bs.get("blobId"): - cid_map[cid.strip("<>")] = {"blobId": bs["blobId"], "name": bs.get("name") or "inline"} - for p in bs.get("subParts", []) or []: - walk_cid(p) - if bstruct: - walk_cid(bstruct) - - def walk_bs(bs, out): - if not isinstance(bs, dict): return - if bs.get("disposition") == "attachment": - out.append({"name": bs.get("name") or "attachment", "type": bs.get("type") or "application/octet-stream", "size": bs.get("size"), "blobId": bs.get("blobId")}) - for p in bs.get("subParts", []) or []: - walk_bs(p, out) - att = [] - walk_bs(bstruct, att) - msg["attachments"] = att - # Inline CID images via internal route - if msg.get("htmlBody") and cid_map: - import re as _re - def _repl(m): - cid = m.group(1) - return f'src="/mail/{email_id}/cid/{cid}"' - msg["htmlBody"] = _re.sub(r'src=\"cid:([^\"]+)\"', _repl, msg["htmlBody"]) # cid_rewrite - return templates.TemplateResponse("message.html", {"request": request, "msg": msg, "user": user}) - -@router.get("/compose", response_class=HTMLResponse) -async def compose_form(request: Request, user=Depends(require_user)): - csrf = make_csrf(request.session) - return templates.TemplateResponse("compose.html", {"request": request, "csrf": csrf, "user": user}) - -@router.post("/compose") -async def compose_send(request: Request, to: str = Form(...), subject: str = Form(""), body: str = Form(""), csrf: str = Form(...), action: str = Form("send"), files: list[UploadFile] = File(default=[]), user=Depends(require_user)): - check_csrf(request.session, csrf) - async with jmap.client() as ac: - api = user["api_url"] - primary = user.get("primary", {}) - account_id = primary.get("urn:ietf:params:jmap:mail") - # Upload attachments if any - upload_url = user.get("upload_url") - blobs = [] - form = await request.form() - for k, v in form.multi_items(): - if k == 'preblob': - try: - b = json.loads(v) - if b.get('blobId'): blobs.append(b) - except Exception: - pass - if files: - for f in files: - data = await f.read() - if upload_url: - url = upload_url.replace("{accountId}", account_id or "") - ru = await ac.post(url, content=data, headers={"Content-Type": f.content_type or "application/octet-stream"}, auth=tuple(user["auth"])) - ru.raise_for_status() - up = ru.json() - blobs.append({"blobId": up.get("blobId"), "type": f.content_type or "application/octet-stream", "name": f.filename, "size": len(data)}) - email_creation_id = "k1" - submission_creation_id = "k2" - create_email = { - "accountId": account_id, - "create": { - email_creation_id: { - "mailboxIds": {}, - "from": [{"email": user["username"]}], - "to": [{"email": x.strip()} for x in to.split(",") if x.strip()], - "subject": subject, - "textBody": body, - "attachments": [{"blobId": b["blobId"], "type": b["type"], "name": b["name"]} for b in blobs] - } - } - } - # Move to Drafts if requested, else submit and move to Sent - special = await get_special_mailboxes(ac, api, tuple(user["auth"]), account_id) - sent_id = special.get("sent") - drafts_id = special.get("drafts") - calls = [] - calls.append(["Email/set", create_email, "s1"]) - if action == "draft": - if drafts_id: - calls.append(["Email/set", {"accountId": account_id, "onSuccessUpdateEmail": {"#kEmail": {"mailboxIds": {drafts_id: True}}}}, "sdraft"]) - else: - calls.append(["EmailSubmission/set", {"accountId": account_id, "create": {submission_creation_id: {"emailId": {"resultOf":"s1","name":"Email/set","path": f"created/{email_creation_id}/id"}}}}, "s2"]) - if sent_id: - calls.append(["Email/set", {"accountId": account_id, "onSuccessUpdateEmail": {"#kEmail": {"mailboxIds": {sent_id: True}}}}, "ssent"]) - await jmap.call(ac, api, tuple(user["auth"]), calls) - return RedirectResponse("/mail", status_code=303) - -async def get_mailboxes(ac, api, auth, account_id): - res = await jmap.call(ac, api, auth, [ - ["Mailbox/query", {"accountId": account_id, "sort":[{"property":"sortOrder","isAscending": True},{"property":"name","isAscending": True}], "limit": 200}, "q1"], - ["Mailbox/get", {"accountId": account_id, "#ids": {"resultOf":"q1","name":"Mailbox/query","path":"ids"}, "properties":["id","name","role","totalEmails","unreadEmails"]}, "g1"] - ]) - boxes = [] - inbox_id = None - for name, data, _ in res.get("methodResponses", []): - if name == "Mailbox/get": - for b in data.get("list", []): - boxes.append({"id": b["id"], "name": b.get("name",""), "role": b.get("role"), "total": b.get("totalEmails",0), "unread": b.get("unreadEmails",0)}) - if b.get("role") == "inbox": - inbox_id = b["id"] - return boxes, inbox_id or (boxes[0]["id"] if boxes else None) - -@router.get("/mail/{email_id}/attach/{index}") -async def download_attachment(request: Request, email_id: str, index: int, user=Depends(require_user)): - atts = request.query_params.get("atts") - # Re-fetch message to resolve bodyStructure (simple approach; could cache) - async with jmap.client() as ac: - api = user["api_url"] - res = await jmap.call(ac, api, tuple(user["auth"]), [ - ["Email/get", {"ids": [email_id], "properties": ["bodyStructure"]}, "c1"] - ]) - bstruct = None - cid_map = {} - for name, data, _ in res.get("methodResponses", []): - if name == "Email/get": - lst = data.get("list", []) - if lst: - bstruct = lst[0].get("bodyStructure") - parts = [] - def walk(bs, out): - if not isinstance(bs, dict): return - if bs.get("disposition") == "attachment": - out.append(bs) - for p in bs.get("subParts", []) or []: - walk(p, out) - walk(bstruct, parts) - if index < 0 or index >= len(parts): - raise HTTPException(status_code=404, detail="Attachment not found") - p = parts[index] - blob = p.get("blobId") - name = p.get("name") or "attachment" - ctype = p.get("type") or "application/octet-stream" - - # Build download URL from session template - tmpl = user.get("download_url") or "" - primary = user.get("primary", {}) - account_id = primary.get("urn:ietf:params:jmap:mail") - url = tmpl - if "{accountId}" in url: - url = url.replace("{accountId}", account_id or "") - if "{blobId}" in url: - url = url.replace("{blobId}", blob or "") - if "{name}" in url: - from urllib.parse import quote - url = url.replace("{name}", quote(name)) - # Fallback naive pattern if template missing - if not url or "{" in url: - from urllib.parse import urljoin, quote - base = user.get("jmap_base") - url = urljoin(base, f"/download/{quote(account_id or '')}/{quote(blob or '')}/{quote(name)}") - - async with jmap.client() as ac: - r = await ac.get(url, auth=tuple(user["auth"])) - r.raise_for_status() - return StreamingResponse(io.BytesIO(r.content), media_type=ctype, headers={"Content-Disposition": f'attachment; filename="{name}"'}) - - -async def get_special_mailboxes(ac, api, auth, account_id): - res = await jmap.call(ac, api, auth, [ - ["Mailbox/query", {"accountId": account_id, "limit": 200}, "q1"], - ["Mailbox/get", {"accountId": account_id, "#ids": {"resultOf":"q1","name":"Mailbox/query","path":"ids"}, "properties":["id","role","name"]}, "g1"] - ]) - sent_id = drafts_id = inbox_id = None - boxes = {} - for name, data, _ in res.get("methodResponses", []): - if name == "Mailbox/get": - for b in data.get("list", []): - boxes[b["id"]] = b - role = b.get("role") - if role == "sent": sent_id = b["id"] - if role == "drafts": drafts_id = b["id"] - if role == "inbox": inbox_id = b["id"] - return {"sent": sent_id, "drafts": drafts_id, "inbox": inbox_id, "all": boxes} - - -@router.get("/mail/{email_id}/cid/{cid}") -async def fetch_cid(request: Request, email_id: str, cid: str, user=Depends(require_user)): - # Walk bodyStructure to find matching cid, then download via downloadUrl - async with jmap.client() as ac: - api = user["api_url"] - res = await jmap.call(ac, api, tuple(user["auth"]), [ - ["Email/get", {"ids": [email_id], "properties": ["bodyStructure"]}, "c1"] - ]) - bstruct = None - for name, data, _ in res.get("methodResponses", []): - if name == "Email/get": - lst = data.get("list", []) - if lst: - bstruct = lst[0].get("bodyStructure") - target = None - def walk(bs): - nonlocal target - if not isinstance(bs, dict) or target is not None: return - if bs.get("cid") and bs.get("cid").strip("<>") == cid: - target = bs - return - for p in bs.get("subParts", []) or []: - walk(p) - walk(bstruct) - if not target: - raise HTTPException(status_code=404, detail="Inline part not found") - blob = target.get("blobId") - ctype = target.get("type") or "application/octet-stream" - name = target.get("name") or "inline" - tmpl = user.get("download_url") or "" - primary = user.get("primary", {}) - account_id = primary.get("urn:ietf:params:jmap:mail") - from urllib.parse import quote, urljoin - if tmpl and "{accountId}" in tmpl and "{blobId}" in tmpl: - url = tmpl.replace("{accountId}", account_id or "").replace("{blobId}", blob or "") - if "{name}" in url: - url = url.replace("{name}", quote(name)) - else: - url = urljoin(user.get("jmap_base"), f"/download/{quote(account_id or '')}/{quote(blob or '')}/{quote(name)}") - async with jmap.client() as ac: - r = await ac.get(url, auth=tuple(user["auth"])) - r.raise_for_status() - return StreamingResponse(io.BytesIO(r.content), media_type=ctype) - - -@router.post("/upload") -async def upload_file(request: Request, file: UploadFile = File(...), user=Depends(require_user)): - async with jmap.client() as ac: - primary = user.get("primary", {}) - account_id = user.get("active_account") or primary.get("urn:ietf:params:jmap:mail") - upload_url = user.get("upload_url") - if not upload_url or not account_id: - raise HTTPException(status_code=400, detail="Upload not available") - url = upload_url.replace("{accountId}", account_id) - data = await file.read() - r = await ac.post(url, content=data, headers={"Content-Type": file.content_type or "application/octet-stream"}, auth=tuple(user["auth"])) - r.raise_for_status() - up = r.json() - return JSONResponse({"blobId": up.get("blobId"), "type": file.content_type or "application/octet-stream", "name": file.filename, "size": len(data)}) diff --git a/app/routes/webdav.py b/app/routes/webdav.py deleted file mode 100644 index 807554e..0000000 --- a/app/routes/webdav.py +++ /dev/null @@ -1,21 +0,0 @@ -from typing import Optional -from fastapi import APIRouter, Request, Depends, HTTPException -from fastapi.responses import HTMLResponse -from fastapi.templating import Jinja2Templates -import pathlib -from .. import dav, jmap, config - -router = APIRouter() -templates = Jinja2Templates(directory=str(pathlib.Path(__file__).resolve().parent.parent / "templates")) - -def require_user(request: Request): - user = request.session.get("user") - if not user: - raise HTTPException(status_code=401) - return user - -@router.get("/webdav", response_class=HTMLResponse) -async def webdav_browse(request: Request, path: Optional[str]=None, user=Depends(require_user)): - async with jmap.client() as ac: - items = await dav.propfind(ac, config.WEBDAV_BASE, path, tuple(user["auth"])) - return templates.TemplateResponse("webdav.html", {"request": request, "items": items, "base": config.WEBDAV_BASE, "user": user}) diff --git a/app/static/css/style.css b/app/static/css/style.css deleted file mode 100644 index 7c3c50b..0000000 --- a/app/static/css/style.css +++ /dev/null @@ -1,30 +0,0 @@ -:root { color-scheme: light dark; --header-bg: #f6f7f9; --header-fg: #111; --card-bg: #fff; } -@media (prefers-color-scheme: dark) { :root { --header-bg: #0f172a; --header-fg: #e5e7eb; --card-bg: #0b1222; } } -body { margin:0; font: 14px/1.45 system-ui, -apple-system, Segoe UI, Roboto, sans-serif; } -header, footer { padding: 10px 14px; border-bottom: 1px solid #4443; background: var(--header-bg); color: var(--header-fg); } -main { padding: 14px; max-width: 1100px; margin: 0 auto; } -nav a { margin-right: 12px; } -.btn { display:inline-block; padding:6px 10px; border:1px solid #6665; border-radius:8px; text-decoration:none; } -table { border-collapse: collapse; width: 100%; } -th, td { padding: 8px; border-bottom: 1px solid #6662; text-align: left; vertical-align: top; } -.muted { color: #888; } -input, textarea, select { padding:6px 8px; width:100%; box-sizing: border-box; } -form .row { display:grid; grid-template-columns: 160px 1fr; gap: 8px; align-items: center; margin-bottom:10px; } -.msg { cursor:pointer; } -.pill { display:inline-block; font-size:12px; padding:2px 6px; border:1px solid #6663; border-radius:999px; margin-right:6px;} -.nowrap { white-space: nowrap; } -.right { text-align:right; } -.toolbar { display:flex; gap:8px; align-items:center; margin:8px 0; } -.panel { border:1px solid #6663;padding:10px;border-radius:8px;margin:10px 0;white-space:pre-wrap } - -#dropzone{padding:16px;border:2px dashed #6665;border-radius:8px;text-align:center;margin:10px 0} - -.brand { display:flex; align-items:center; gap:10px; } -.brand .logo { height:28px; vertical-align:middle; } -.brand-link { text-decoration:none; color:inherit; } -header nav { margin-top:6px; } -.badge { display:inline-block; padding:0 6px; border-radius:10px; font-size:12px; background:#6662; margin-left:6px; } - -.card{background:var(--card-bg); border:1px solid #6663; border-radius:12px; padding:18px; box-shadow:0 2px 6px #0001;} -.center{display:grid; place-items:center; min-height:60vh;} -.logo-lg{height:64px;} diff --git a/app/templates/base.html b/app/templates/base.html deleted file mode 100644 index 4b203e0..0000000 --- a/app/templates/base.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - {{ title or "ihasmail" }} - - - - - - - - -
- - -
-
- {% block content %}{% endblock %} -
-
ihasmail • JMAP • Sieve • DAV • FastAPI • reverse-proxy ready
- - diff --git a/app/templates/calendar.html b/app/templates/calendar.html deleted file mode 100644 index 25c71f1..0000000 --- a/app/templates/calendar.html +++ /dev/null @@ -1,15 +0,0 @@ -{% extends "base.html" %} -{% block content %} -

Calendar (JMAP & CalDAV)

-

Listing upcoming events via JMAP. CalDAV endpoints available for DAV clients.

- - - {% for e in events %} - - - - - - {% endfor %} -
WhenSummaryWhere
{{ e.start }} – {{ e.end }}{{ e.title }}{{ e.loc or "" }}
-{% endblock %} diff --git a/app/templates/compose.html b/app/templates/compose.html deleted file mode 100644 index 151c8bd..0000000 --- a/app/templates/compose.html +++ /dev/null @@ -1,11 +0,0 @@ -{% extends "base.html" %} -{% block content %} -

Compose

-
- -
-
-
- -
-{% endblock %} diff --git a/app/templates/contacts.html b/app/templates/contacts.html deleted file mode 100644 index cf2806e..0000000 --- a/app/templates/contacts.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends "base.html" %} -{% block content %} -

Contacts (Directory via JMAP)

-
-
- -
-
- - - {% for c in contacts %} - - - - - - {% endfor %} -
NameEmailOrg
{{ c.name }}{{ c.email }}{{ c.org or "" }}
-{% endblock %} diff --git a/app/templates/login.html b/app/templates/login.html deleted file mode 100644 index c5d84d6..0000000 --- a/app/templates/login.html +++ /dev/null @@ -1,24 +0,0 @@ -{% extends "base.html" %} -{% block content %} -
-
ihasmail
-

Sign in

-
- -
- - -
-
- - -
-
- - -
- -
-
-

Credentials are sent to your JMAP server to obtain a session/auth token; they are not stored on the server.

-{% endblock %} diff --git a/app/templates/mail.html b/app/templates/mail.html deleted file mode 100644 index 3de29e6..0000000 --- a/app/templates/mail.html +++ /dev/null @@ -1,26 +0,0 @@ -{% extends "base.html" %} -{% block content %} -

Inbox

-
-
- - -
- Compose -
- - - {% for m in messages %} - - - - - - - {% endfor %} -
WhenFromSubjectSize
{{ m.when }}{{ m.from }}{{ m.subject }}{{ m.size }}
-{% endblock %} diff --git a/app/templates/message.html b/app/templates/message.html deleted file mode 100644 index 6556c2c..0000000 --- a/app/templates/message.html +++ /dev/null @@ -1,25 +0,0 @@ -{% extends "base.html" %} -{% block content %} -

{{ msg.subject or "(no subject)" }}

-

From {{ msg.from }} To {{ msg.to|join(", ") }}

-

{{ msg.when }}

-{% if msg.htmlBody %} -
{{ (msg.htmlBody | safe) }}
-{% elif msg.textBody %} -
{{ msg.textBody }}
-{% else %} -
(no body)
-{% endif %} -
- Reply - Forward -
-{% if msg.attachments %} -

Attachments

- -{% endif %} -{% endblock %} diff --git a/app/templates/webdav.html b/app/templates/webdav.html deleted file mode 100644 index d2ed6d4..0000000 --- a/app/templates/webdav.html +++ /dev/null @@ -1,15 +0,0 @@ -{% extends "base.html" %} -{% block content %} -

WebDAV

-

Browsing {{ base }}

- - - {% for i in items %} - - - - - - {% endfor %} -
NameTypeSize
{{ i.name }}{{ i.type }}{% if i.size is not none %}{{ i.size }}{% endif %}
-{% endblock %} diff --git a/app/utils.py b/app/utils.py deleted file mode 100644 index f97bf2e..0000000 --- a/app/utils.py +++ /dev/null @@ -1,19 +0,0 @@ -import datetime - -def human_size(n: int | None) -> str: - if n is None: return "" - units = ["B","KB","MB","GB","TB","PB"] - i = 0 - x = float(n) - while x >= 1024 and i < len(units)-1: - x /= 1024.0 - i += 1 - return f"{x:.0f} {units[i]}" - -def fmt_when(iso: str | None) -> str: - if not iso: return "" - try: - dt = datetime.datetime.fromisoformat(iso.replace("Z","+00:00")).astimezone() - return dt.strftime("%Y-%m-%d %H:%M") - except Exception: - return iso or "" diff --git a/charts/ihasmail/Chart.yaml b/charts/ihasmail/Chart.yaml deleted file mode 100644 index 9c39854..0000000 --- a/charts/ihasmail/Chart.yaml +++ /dev/null @@ -1,6 +0,0 @@ -apiVersion: v2 -name: ihasmail -description: ihasmail — JMAP webmail for Stalwart (FastAPI) -type: application -version: 0.1.0 -appVersion: "0.2.0" diff --git a/charts/ihasmail/templates/NOTES.txt b/charts/ihasmail/templates/NOTES.txt deleted file mode 100644 index 7bea5f9..0000000 --- a/charts/ihasmail/templates/NOTES.txt +++ /dev/null @@ -1,7 +0,0 @@ -Thanks for installing ihasmail! - -Get the service URL by running these commands: - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "ihasmail.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') - echo http://$SERVICE_IP:{{ .Values.service.port }}/ - -If using Ingress and DNS, browse to the configured host (e.g., https://ihasmail.example.com). diff --git a/charts/ihasmail/templates/_helpers.tpl b/charts/ihasmail/templates/_helpers.tpl deleted file mode 100644 index a8643fe..0000000 --- a/charts/ihasmail/templates/_helpers.tpl +++ /dev/null @@ -1,20 +0,0 @@ -{{- define "ihasmail.name" -}} -{{- .Chart.Name -}} -{{- end -}} - -{{- define "ihasmail.fullname" -}} -{{- .Release.Name | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{- define "ihasmail.labels" -}} -helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} -app.kubernetes.io/name: {{ include "ihasmail.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -app.kubernetes.io/version: {{ .Chart.AppVersion }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end -}} - -{{- define "ihasmail.selectorLabels" -}} -app.kubernetes.io/name: {{ include "ihasmail.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end -}} diff --git a/charts/ihasmail/templates/deployment.yaml b/charts/ihasmail/templates/deployment.yaml deleted file mode 100644 index dcf21ff..0000000 --- a/charts/ihasmail/templates/deployment.yaml +++ /dev/null @@ -1,60 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "ihasmail.fullname" . }} - labels: - {{- include "ihasmail.labels" . | nindent 4 }} -spec: - replicas: 1 - selector: - matchLabels: - {{- include "ihasmail.selectorLabels" . | nindent 6 }} - template: - metadata: - labels: - {{- include "ihasmail.selectorLabels" . | nindent 8 }} - spec: - containers: - - name: app - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - env: - - name: APP_SECRET - valueFrom: - secretKeyRef: - name: {{ include "ihasmail.fullname" . }}-secret - key: APP_SECRET - - name: JMAP_BASE - value: {{ .Values.env.JMAP_BASE | quote }} - - name: CALDAV_BASE - value: {{ .Values.env.CALDAV_BASE | quote }} - - name: WEBDAV_BASE - value: {{ .Values.env.WEBDAV_BASE | quote }} - - name: COOKIE_NAME - value: {{ .Values.env.COOKIE_NAME | quote }} - - name: TRUST_PROXY - value: {{ .Values.env.TRUST_PROXY | quote }} - - name: UPSTREAM_TIMEOUT - value: {{ .Values.env.UPSTREAM_TIMEOUT | quote }} - ports: - - containerPort: 8000 - readinessProbe: - httpGet: - path: /healthz - port: 8000 - initialDelaySeconds: 5 - periodSeconds: 10 - livenessProbe: - httpGet: - path: /healthz - port: 8000 - initialDelaySeconds: 10 - periodSeconds: 20 ---- -apiVersion: v1 -kind: Secret -metadata: - name: {{ include "ihasmail.fullname" . }}-secret -type: Opaque -stringData: - APP_SECRET: {{ .Values.env.APP_SECRET | quote }} diff --git a/charts/ihasmail/templates/ingress.yaml b/charts/ihasmail/templates/ingress.yaml deleted file mode 100644 index f3f99ba..0000000 --- a/charts/ihasmail/templates/ingress.yaml +++ /dev/null @@ -1,30 +0,0 @@ -{{- if .Values.ingress.enabled }} -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: {{ include "ihasmail.fullname" . }} - {{- if .Values.ingress.className }} - annotations: - kubernetes.io/ingress.class: {{ .Values.ingress.className }} - {{- end }} -spec: - rules: - {{- range .Values.ingress.hosts }} - - host: {{ .host }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - pathType: {{ .pathType }} - backend: - service: - name: {{ include "ihasmail.fullname" $ }} - port: - number: {{ $.Values.service.port }} - {{- end }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- toYaml .Values.ingress.tls | nindent 4 }} - {{- end }} -{{- end }} diff --git a/charts/ihasmail/templates/service.yaml b/charts/ihasmail/templates/service.yaml deleted file mode 100644 index 3c300bf..0000000 --- a/charts/ihasmail/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "ihasmail.fullname" . }} - labels: - {{- include "ihasmail.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: 8000 - protocol: TCP - name: http - selector: - {{- include "ihasmail.selectorLabels" . | nindent 4 }} diff --git a/charts/ihasmail/values.yaml b/charts/ihasmail/values.yaml deleted file mode 100644 index 3e37d9c..0000000 --- a/charts/ihasmail/values.yaml +++ /dev/null @@ -1,32 +0,0 @@ -image: - repository: ghcr.io/your-org/ihasmail - tag: latest - pullPolicy: IfNotPresent - -service: - type: ClusterIP - port: 8000 - -ingress: - enabled: false - className: "" - hosts: - - host: ihasmail.example.com - paths: - - path: / - pathType: Prefix - tls: [] - -env: - APP_SECRET: "CHANGE_ME" - JMAP_BASE: "https://mail.example.com/jmap" - CALDAV_BASE: "https://mail.example.com/caldav/" - WEBDAV_BASE: "https://mail.example.com/webdav/" - COOKIE_NAME: "ihasmail" - TRUST_PROXY: "1" - UPSTREAM_TIMEOUT: "15" - -resources: {} -nodeSelector: {} -tolerations: [] -affinity: {} diff --git a/docker-compose.yml b/docker-compose.yml index bd3e870..2c1ddbb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,11 +1,17 @@ services: ihasmail: build: . - image: ihasmail:latest - env_file: .env + image: ihasmail:2 restart: unless-stopped - networks: [edge] ports: - - "127.0.0.1:8080:8000" -networks: - edge: {} + - "8080:8080" + environment: + STALWART_URL: ${STALWART_URL:-https://mail.example.com} + APP_SECRET: ${APP_SECRET:?set APP_SECRET in .env (openssl rand -base64 48)} + APP_NAME: ${APP_NAME:-ihasmail} + TRUST_PROXY: "1" + IMAGE_PROXY: "1" + volumes: + - ihasmail-data:/data +volumes: + ihasmail-data: diff --git a/docs/screenshots/calendar.jpg b/docs/screenshots/calendar.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4479d06d5126d0199849417fab6deafcea58de85 GIT binary patch literal 48859 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 OCw27uh-+j1n*0x2k|t;X literal 0 HcmV?d00001 diff --git a/docs/screenshots/contacts.jpg b/docs/screenshots/contacts.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b7ee0c9933cdc284f368e23530e664dfcc4f47d GIT binary patch literal 46739 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 PCV>7qAoi8fuc`k5DxS{W literal 0 HcmV?d00001 diff --git a/docs/screenshots/inbox-light.jpg b/docs/screenshots/inbox-light.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe2a2c1a9aad79048b827ad1da05b1e44a34b904 GIT binary patch literal 99396 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 Iq51z!0AXo$umAu6 literal 0 HcmV?d00001 diff --git a/docs/screenshots/login.jpg b/docs/screenshots/login.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d4660880ace6182479693b3eb09b08e9baac2435 GIT binary patch literal 25825 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 Y0ZKp&44~>17&^dI&BOp?G5o&?04jN~4gdfE literal 0 HcmV?d00001 diff --git a/docs/screenshots/mobile.jpg b/docs/screenshots/mobile.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aacfd4f3173c612afd7036879711c1d682866b95 GIT binary patch literal 49934 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 (Aut02 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 literal 0 HcmV?d00001 diff --git a/nginx.example.conf b/nginx.example.conf new file mode 100644 index 0000000..50b8989 --- /dev/null +++ b/nginx.example.conf @@ -0,0 +1,19 @@ +# Example nginx location block for ihasmail behind TLS termination. +server { + listen 443 ssl http2; + server_name mail.example.com; + # ssl_certificate ...; ssl_certificate_key ...; + + client_max_body_size 60m; + + location / { + proxy_pass http://127.0.0.1:8080; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + # Server-Sent Events (push notifications) + proxy_buffering off; + proxy_read_timeout 3600s; + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..bb00554 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3845 @@ +{ + "name": "ihasmail", + "version": "2.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ihasmail", + "version": "2.0.0", + "license": "GPL-3.0-or-later", + "workspaces": [ + "server", + "web" + ], + "devDependencies": { + "concurrently": "^9.1.2", + "typescript": "^5.7.3" + }, + "engines": { + "node": ">=20.10" + } + }, + "node_modules/@asamuzakjp/css-color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz", + "integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz", + "integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@hono/node-server": { + "version": "1.19.17", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.17.tgz", + "integrity": "sha512-dSneS5qhiauZWGDCeK4o695Xd9nUNjviSZCMQrj10eetr8Uln1ucn6bbphOM6UynAMMtNIzZNSpL9vnASJwrPQ==", + "license": "MIT", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@ihasmail/server": { + "resolved": "server", + "link": true + }, + "node_modules/@ihasmail/web": { + "resolved": "web", + "link": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/lzma-linux-x64-gnu": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", + "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^22.20 || ^24.12 || >=25" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.5.tgz", + "integrity": "sha512-jfkGfTwhQpsiSckPF8r9bU3pn3vyd72NlWaO+TgEO6WPSDnUhXzrNYCHBMOYj0ACaUgjm6eERLF+XV9a6RstoA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.5.tgz", + "integrity": "sha512-oGVqyQlxnrz9/ty89oHpU857VUHEl5/Xu4R2lS+aivCTrNnSsbiENzTnNaBsjxH0CNWGPhzHArOLFwo+oKXveA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.5.tgz", + "integrity": "sha512-bW7B8xMEq8n99Q3ieEcPRGuphurdZAaFzQc9Efyyw3FL6DZO6pMy9xhdN+kBoD7Sy05xNXSr4OyPPnpkYriS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.5.tgz", + "integrity": "sha512-YSwBS86QeHOGlrxJ1PSOIZSkzRL/JmKeunhc+lV6M1a6En8QuVCD/T/qIA0J4Gd2Y86RIOBYrLcOUtqGh9+/1w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.5.tgz", + "integrity": "sha512-2fST8lILgl7cKbme/1KDdPCmbXbG+gqoV3bHp19L0ypX/3akYMBVdOunPleRCwonoLnXOZ/0F+Mt/v8POFmfcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.5.tgz", + "integrity": "sha512-cpIxQCP9J+EVad0a6LO1kY3ZGODlk80VlI+2I96B8xMcdHZ4pLVhfQ49JFpYqjPF91FFkQWftf57YlDcTiw9yQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.5.tgz", + "integrity": "sha512-r9fGh3eFs3e/udWh5ZjXQtxiYK/xoFxQaYR/cELxac/Udkl5Th+IsFm0CX3Kl9hmUH/we7EoMpjJgeQNnE0+IA==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.5.tgz", + "integrity": "sha512-xdvFdp7OM6KLJviJT2g/YuRSUjnZgGHk4RNgwIbN7X6cPugOucV60DdHXWzsBVCUdrGb6qSXnJQrrAKMmQuj3Q==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.5.tgz", + "integrity": "sha512-rRqILAndyzHzP7T9NFQrq+4HFWNhqkqkKur7eiBpfLmz01PO0JKx5Vchu3YllE4YXI/Ftgq/szrDWg5GJ0mI8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.5.tgz", + "integrity": "sha512-Gf4X3qVMucayUvux6aXXPgXovocSFUC0rrffDuPI/S2nHhNMhjcZxsrAFYCOF350PRreW1XwzFj3CT/3bKsWCw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.5.tgz", + "integrity": "sha512-+s5qA0TNM0qm8PK/a5gt/1Hpx+NV08uSuCncvhziIlQzT6AEV2fnUQo7eBtFTFO0nA9scauvoR2HusfXmQnO4w==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.5.tgz", + "integrity": "sha512-ybb6QvWwWJCbBWqERpc8K3pYVGIrXlG8MEQ8IIuJY6Y9KdHQxoFoNyfkAOtKn1VHu3KuLidXvwrvGR1mEjeWCw==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.5.tgz", + "integrity": "sha512-nZb1DtnOyhCmYvsC8A2CwOkopVg+IS1+fPUa7rMOAXtNw5+lLCLLPqd6XAiNrGtoQKsbvIBOwsHnBH/3wnb4HQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.5.tgz", + "integrity": "sha512-yMbj63Sp89ryrXLWyz+sy+fYD2HpOnMCLGbe4Oa1smclFSUukdtD/BgdiHaAetJNb74URD8U4hM+qG5KVzMEkg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.5.tgz", + "integrity": "sha512-mhoan3OJw2kYV/e1jtIdmvUZgyBFeA6zGWsOswmR0Tg19TQbowZuR+JMLID6spbbBN7Zee2ejrgmy3+FxGrIdA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.5.tgz", + "integrity": "sha512-5ZTLmjWbb1VZdjuyhe83K/8QO0/h11midQCBP+X5OYn32ra7eOBoM0ZqtaY4nkgNsYgmdVhMYPoyVPTjUpHf3w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.5.tgz", + "integrity": "sha512-m53kG+br6PGxOTmgBEM2DHSDs9RVjsyEbUwjJPJGTFm1grWOG8EKJggDCTb60unD4Tjby8fi7/m9XfkEWasVWg==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.5.tgz", + "integrity": "sha512-6RHPJR1g/uvdYU8uXBnfq3nlqyZCP82Fr6NHgfGoaIeSh0YEqnX/x6uA9MmJJbnSH7swqX4F+CkGdUF+6doiQA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.5.tgz", + "integrity": "sha512-xs+OXQtEXgpXT0DmA5+U3qnRZHdCST/5HRQxS8wSPZTUZN/EMWeHuSIod32LQklTBZBV9DyfncKBQ8n5V3eFdw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.5.tgz", + "integrity": "sha512-e7hD+sl3s+mcLQDZ8pbudBVsdG6r5yN4w3LqG2TJ8sQHDpblWj5lrJs/3m01Cvlxbt4x13zu5thLjgypgtkYzw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.5.tgz", + "integrity": "sha512-GiyJaCf+WpMub/17aPcKk27QMl5W6f+KhdPTjlFOn5akH5Wa/DCM9Stdx5cDfmasyKB08MqpVQ1uJE2RkkpbXg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.5.tgz", + "integrity": "sha512-+OQ8U2DdoEfXl8T4Fb18AjmEwbXMerKDKCL8yCPAYhKCEEKoul7rkbeGCBFCbAlaGaa7pmtRTpkAJM2LE/i5FA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.5.tgz", + "integrity": "sha512-KanvAZrPKbDBFwrgiU9yEVpQoox9QPV1WZOXX7HudJQY+eSlu82CtWxDU8WtuRRvtN5EGkLczkd6Y6DTcvm9wA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.5.tgz", + "integrity": "sha512-1aC3UEWTtRl3RK3VpDJ/Tqk1XI4SLTmXIthAq6wRWo8XiSXJNd+VprJM4/1P4+i6HIaFEFlVi9sTTziniD2tOQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.5.tgz", + "integrity": "sha512-/gDJaRs4gl0NPIwqCz+6PkpmhhjRAD2j6P4rSNHBzUkO3naEx2mIU0pRle1vUNRQ7mE/+8OOeXLTv/J56FKiQg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tanstack/react-virtual": { + "version": "3.14.10", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.14.10.tgz", + "integrity": "sha512-SRyoUbdFMRHuYXMijV5H4ZarQWpXkj3iANq8OFre+pybeVap8ZJjZ3Nz9bVjx4d8PfobVUQUdKyyyHYk3E+djw==", + "license": "MIT", + "dependencies": { + "@tanstack/virtual-core": "3.17.8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@tanstack/virtual-core": { + "version": "3.17.8", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.17.8.tgz", + "integrity": "sha512-BfEvehNpOT75r5Ksc5xW6NZuXujTfb7nlSEyVu4XHG3gdxNg1KqXruWbDewXOUaUYIo4oRbSfkjIajz4MAT8tA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.20.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.1.tgz", + "integrity": "sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/react": { + "version": "19.2.18", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.18.tgz", + "integrity": "sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-Bsc+QHgp+P/F02XDzNCY9jnZNCUuLki36KT7VKrTXXLdHf+vHMNZnW1rVu5DNW/rCK+fya3DATySbLM4yhtKUw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT", + "optional": true + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/@vitest/expect": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.7.tgz", + "integrity": "sha512-E8eBXaKibuvH2pSZErOjdVb5vF4PbKYcrnluBTYxEk1l/VhhwZg1kZQsdtjq+CsF5CFydf2Rdkz7jDHKSisi3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.7", + "@vitest/utils": "3.2.7", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.7.tgz", + "integrity": "sha512-Trr0hYO9CM3Wj6ksWHRhK9IZpIY6wTMO5u/MqXurMxT57sWBaOPEtP3Oq60ihZuh5JsiagKfz95OcxdEP6dBrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.2.7", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.7.tgz", + "integrity": "sha512-KUHlwqVu0sRlhCdyPdQ/wBoTfRahjUky1MubOmYw9fWfIZy1gNoHpuaaQBPAaMaVYdQYHJLurzj8ECCj5OwTqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.7.tgz", + "integrity": "sha512-sB9y4ovltoQP+WaUPwmSxO9WIg9Ig694Di5PalVPsYHklAdE027mehpWF2SQSVq+k6sFgaivbTjTJwZLSHbedA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.2.7", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.7.tgz", + "integrity": "sha512-7C+MwShwtBSI5Buwoyg3s/iY1eHL9PKAf+O1wVh/TdnjXUtkoL/9YQtre90i4MtNXM6edP1wJ2zOBpfCyhIS7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.7", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.7.tgz", + "integrity": "sha512-Q2eQGI6d2L/hBtZ0qNuKcAGid68XK6cv1xsoaIma6PaJhHPoqcEJhYpXZ/5myCMqkNgtP6UKuBhbc0nHKnrkuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.7.tgz", + "integrity": "sha512-x6BDOd7dyo3PFLY3I9/HJ25X/6OurhGXk2/B9gOZNPF7XDVjeBK4k01lQE5uvDpbuheErh91qYuE1E2OEjK3Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.7", + "loupe": "^3.1.4", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.18", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.18.tgz", + "integrity": "sha512-1iEmLEYSiE1SeBoAfPo/Mnx3PzfzHUkDK61ASkCpuk3YXugYLH5DYK1SzqV55F8FMI6s0F+/tCP7Polz1QRjxw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.28.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", + "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.11.12", + "caniuse-lite": "^1.0.30001809", + "electron-to-chromium": "^1.5.402", + "node-releases": "^2.0.53", + "update-browserslist-db": "^1.3.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001809", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001809.tgz", + "integrity": "sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chai": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/check-error": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", + "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concurrently": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.4.tgz", + "integrity": "sha512-TZ0CEhyzvFjgtAvHTusDMgj7wNdihCh7LLLrzdUOXIhdlnL2JBBGA9eJxR24rtqgmdjh3OA3hrN1rCHj6HM8qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "4.1.2", + "rxjs": "7.8.2", + "shell-quote": "1.9.0", + "supports-color": "8.1.1", + "tree-kill": "1.2.2", + "yargs": "17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/dompurify": { + "version": "3.4.14", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.14.tgz", + "integrity": "sha512-dVoH9z+MY+C9IilgGCk3YfFqjLi3fChm2OiKJMzh6axrJ5qwxqWaZamgmHrpv22CN/KdbZJuGEGgfQoL00LTdg==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.412", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.412.tgz", + "integrity": "sha512-z4rMe3esBzlzovKHj4gxJnsCGZRK5l4baUvm+gCGJBPE+gsyUMKsuU9tnEUtI1dOebXz1ytAPGjvXhmQ7rIPwA==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hono": { + "version": "4.13.3", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.3.tgz", + "integrity": "sha512-r8AO2mYHoLxSHkgafNeC/BXyb2vWRxD3jem4Ts+ptav8oTG5FIRifAjuJEmZI4bSvvc2ns0GxmIYiZnHqN3mMw==", + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.5.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.1.1", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.1", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/loupe": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "0.477.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.477.0.tgz", + "integrity": "sha512-yCf7aYxerFZAbd8jHJxjwe1j7jEMPptjnaOqdYeirFnEy85cNR3/L+o0I875CYFYya+eEVzZSbNuRk8BZPDpVw==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.53.tgz", + "integrity": "sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/nwsapi": { + "version": "2.2.24", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.24.tgz", + "integrity": "sha512-7YRhZ3jS45LwmSCT4b2sVFHt/WuovaktDU07QrtOBY2PXskss5a9jfmR9jptyumwXST+rFjrmppMY1KT/yn35A==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.17", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/react": { + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz", + "integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.8.tgz", + "integrity": "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.8" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexparam": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-3.0.0.tgz", + "integrity": "sha512-RSYAtP31mvYLkAHrOlh25pCNQ5hWnT106VukGaaFfuJrZFkGRX5GhUAdPqpSDXxOhA2c4akmRuplv1mRqnBn6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.62.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.5.tgz", + "integrity": "sha512-/tqMfgP7GPA3PHhCmuiS4vIjrSVhHLgY++i+dhbG462euyAj7FpM4D9uq1X3BgjlqRdpcOrYhcQtfiQLNc8tqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@napi-rs/lzma-linux-x64-gnu": "1.5.1", + "@rollup/rollup-android-arm-eabi": "4.62.5", + "@rollup/rollup-android-arm64": "4.62.5", + "@rollup/rollup-darwin-arm64": "4.62.5", + "@rollup/rollup-darwin-x64": "4.62.5", + "@rollup/rollup-freebsd-arm64": "4.62.5", + "@rollup/rollup-freebsd-x64": "4.62.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.5", + "@rollup/rollup-linux-arm-musleabihf": "4.62.5", + "@rollup/rollup-linux-arm64-gnu": "4.62.5", + "@rollup/rollup-linux-arm64-musl": "4.62.5", + "@rollup/rollup-linux-loong64-gnu": "4.62.5", + "@rollup/rollup-linux-loong64-musl": "4.62.5", + "@rollup/rollup-linux-ppc64-gnu": "4.62.5", + "@rollup/rollup-linux-ppc64-musl": "4.62.5", + "@rollup/rollup-linux-riscv64-gnu": "4.62.5", + "@rollup/rollup-linux-riscv64-musl": "4.62.5", + "@rollup/rollup-linux-s390x-gnu": "4.62.5", + "@rollup/rollup-linux-x64-gnu": "4.62.5", + "@rollup/rollup-linux-x64-musl": "4.62.5", + "@rollup/rollup-openbsd-x64": "4.62.5", + "@rollup/rollup-openharmony-arm64": "4.62.5", + "@rollup/rollup-win32-arm64-msvc": "4.62.5", + "@rollup/rollup-win32-ia32-msvc": "4.62.5", + "@rollup/rollup-win32-x64-gnu": "4.62.5", + "@rollup/rollup-win32-x64-msvc": "4.62.5", + "fsevents": "~2.3.2" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shell-quote": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.9.0.tgz", + "integrity": "sha512-Iov+JwFv/2HcTpcwNMKd8+IWNb8tboQJNQTkAY/LLVK7gGH9jy+LGkVqPxfekHl+yMmiqXszdGWXgkfml7hjqA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-literal": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", + "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", + "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsx": { + "version": "4.23.12", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.12.tgz", + "integrity": "sha512-FDf4L4sYzKtzWYhU/Xm0AQFdTjdIxNo9ElTf2mxXM6k8YMHXzYUe4yODVaXP4V9uMFbVg8c0qyBccK2OOxb45Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.28.0" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz", + "integrity": "sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/vite": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.3.tgz", + "integrity": "sha512-NTKlcQjlAK7MlQoyb6LgaqHc8sso/pVyUJYWMws3jg21uTJw/LddqIFPcPqP6PzpgbIcZyKI85sFE4HBrQDA8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/vitest": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.7.tgz", + "integrity": "sha512-KrxIJ62Fd89gfysR4WotlgZABiz2dqFPgqGzX7s+CwsqLFomRH7777ZcrOD6+WVAh7khPQP41A+BKbpcJFrdEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.7", + "@vitest/mocker": "3.2.7", + "@vitest/pretty-format": "^3.2.7", + "@vitest/runner": "3.2.7", + "@vitest/snapshot": "3.2.7", + "@vitest/spy": "3.2.7", + "@vitest/utils": "3.2.7", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.1", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.4", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.2.7", + "@vitest/ui": "3.2.7", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wouter": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/wouter/-/wouter-3.10.0.tgz", + "integrity": "sha512-zTfddD80zc2/J5l8JKcdvzOK6AwP0kpyHEI3DxRN2bn8U1oJPnrSVm8v+X3WwDamvLAOxTO7ZvkxkpRWlyeJ1Q==", + "license": "Unlicense", + "dependencies": { + "mitt": "^3.0.1", + "regexparam": "^3.0.0", + "use-sync-external-store": "^1.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/ws": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", + "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/zustand": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.15.tgz", + "integrity": "sha512-MpSEjRiBkA9crSYeOUH32rJC7SVqAbm0Fqcqge/bUi2PPoLcBWKOsG+C8mevmpr8TwXHBVkChbbJiyvkE+i/3A==", + "license": "MIT", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=18.0.0", + "immer": ">=9.0.6", + "react": ">=18.0.0", + "use-sync-external-store": ">=1.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + }, + "use-sync-external-store": { + "optional": true + } + } + }, + "server": { + "name": "@ihasmail/server", + "version": "2.0.0", + "dependencies": { + "@hono/node-server": "^1.13.8", + "hono": "^4.7.4" + }, + "devDependencies": { + "@types/node": "^22.13.10", + "tsx": "^4.19.3", + "typescript": "^5.7.3" + } + }, + "web": { + "name": "@ihasmail/web", + "version": "2.0.0", + "dependencies": { + "@tanstack/react-virtual": "^3.13.2", + "dompurify": "^3.2.4", + "lucide-react": "^0.477.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "wouter": "^3.6.0", + "zustand": "^5.0.3" + }, + "devDependencies": { + "@types/react": "^19.0.10", + "@types/react-dom": "^19.0.4", + "@vitejs/plugin-react": "^4.3.4", + "jsdom": "^26.0.0", + "typescript": "^5.7.3", + "vite": "^6.2.0", + "vitest": "^3.0.8" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..9c363e6 --- /dev/null +++ b/package.json @@ -0,0 +1,29 @@ +{ + "name": "ihasmail", + "version": "2.0.0", + "private": true, + "description": "ihasmail \u2014 a fast, modern JMAP webmail for Stalwart Mail Server", + "license": "GPL-3.0-or-later", + "type": "module", + "workspaces": [ + "server", + "web" + ], + "engines": { + "node": ">=20.10" + }, + "scripts": { + "dev": "concurrently -n server,web -c blue,magenta \"npm run dev -w server\" \"npm run dev -w web\"", + "build": "npm run build -w web && npm run build -w server", + "start": "node server/dist/index.js", + "typecheck": "npm run typecheck -w web && npm run typecheck -w server", + "test": "npm run test -w web && npm run test -w server", + "lint": "npm run typecheck", + "mock": "npm run mock -w server", + "dev:mock": "concurrently -n mock,server,web -c yellow,blue,magenta \"npm run mock -w server\" \"STALWART_URL=http://127.0.0.1:8788 npm run dev -w server\" \"npm run dev -w web\"" + }, + "devDependencies": { + "concurrently": "^9.1.2", + "typescript": "^5.7.3" + } +} diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index d4f37b1..0000000 --- a/pyproject.toml +++ /dev/null @@ -1,30 +0,0 @@ -[build-system] -requires = ["setuptools>=61.0"] -build-backend = "setuptools.build_meta" - -[project] -name = "ihasmail" -version = "0.2.0" -description = "ihasmail — JMAP webmail for Stalwart (FastAPI, HTMX/Jinja)" -authors = [{name = "John Coffey", email = "john@example.com"}] -readme = "README.md" -requires-python = ">=3.10" -license = {text = "GPL-3.0-or-later"} -dependencies = [ - "fastapi>=0.111", - "uvicorn[standard]>=0.30", - "httpx>=0.27", - "jinja2>=3.1", - "bleach>=6.1", - "python-multipart>=0.0.9", -] - -[project.optional-dependencies] -dev = [ - "pytest>=8.2", - "anyio>=4.4", - "httpx>=0.27", -] - -[tool.pytest.ini_options] -addopts = "-q" diff --git a/server/package.json b/server/package.json new file mode 100644 index 0000000..a70f9d8 --- /dev/null +++ b/server/package.json @@ -0,0 +1,24 @@ +{ + "name": "@ihasmail/server", + "version": "2.0.0", + "private": true, + "type": "module", + "main": "dist/index.js", + "scripts": { + "dev": "tsx watch --clear-screen=false src/index.ts", + "build": "tsc -p tsconfig.json", + "start": "node dist/index.js", + "typecheck": "tsc -p tsconfig.json --noEmit", + "test": "tsx --test src/*.test.ts", + "mock": "tsx src/mock/index.ts" + }, + "dependencies": { + "@hono/node-server": "^1.13.8", + "hono": "^4.7.4" + }, + "devDependencies": { + "@types/node": "^22.13.10", + "tsx": "^4.19.3", + "typescript": "^5.7.3" + } +} diff --git a/server/src/app.test.ts b/server/src/app.test.ts new file mode 100644 index 0000000..97aaefa --- /dev/null +++ b/server/src/app.test.ts @@ -0,0 +1,37 @@ +import { test } from "node:test"; +import assert from "node:assert/strict"; +process.env.STALWART_URL = "http://127.0.0.1:1"; +const { createApp } = await import("./app.js"); + +test("CSRF guard rejects API POSTs without the custom header", async () => { + const app = createApp(); + const res = await app.request("/api/auth/login", { method: "POST", headers: { "content-type": "application/json" }, body: "{}" }); + assert.equal(res.status, 403); +}); + +test("unauthenticated JMAP calls are rejected", async () => { + const app = createApp(); + const res = await app.request("/api/jmap", { method: "POST", headers: { "content-type": "application/json", "x-requested-with": "ihasmail" }, body: "{}" }); + assert.equal(res.status, 401); +}); + +test("cross-site fetches are rejected", async () => { + const app = createApp(); + const res = await app.request("/api/health", { headers: { "sec-fetch-site": "cross-site" } }); + assert.equal(res.status, 403); +}); + +test("health and security headers", async () => { + const app = createApp(); + const res = await app.request("/api/health"); + assert.equal(res.status, 200); + assert.equal(res.headers.get("x-content-type-options"), "nosniff"); + assert.equal(res.headers.get("x-frame-options"), "DENY"); +}); + +test("image proxy refuses private targets", async () => { + const app = createApp(); + // no session -> 401 first; so exercise the handler directly via a logged-in-less path is not possible; check the URL validation ordering instead + const res = await app.request("/api/image?url=http://127.0.0.1/x"); + assert.equal(res.status, 401); +}); diff --git a/server/src/app.ts b/server/src/app.ts new file mode 100644 index 0000000..78a7828 --- /dev/null +++ b/server/src/app.ts @@ -0,0 +1,404 @@ +import { Hono } from "hono"; +import type { Context, MiddlewareHandler } from "hono"; +import { getCookie, setCookie, deleteCookie } from "hono/cookie"; +import { getConnInfo } from "@hono/node-server/conninfo"; +import { config } from "./config.js"; +import { SessionStore, type LiveSession } from "./sessions.js"; +import { RateLimiter } from "./ratelimit.js"; +import { + UpstreamError, + absoluteUpstream, + expandTemplate, + fetchUpstreamSession, + forgetUpstreamSession, + getUpstreamSession, + localizeSession, +} from "./upstream.js"; +import { imageProxyHandler } from "./imageproxy.js"; +import { staticHandler } from "./static.js"; + +type Env = { Variables: { session: LiveSession } }; + +export const sessions = new SessionStore(config.sessionFile); +const loginLimiter = new RateLimiter(config.loginRateLimit, 15 * 60_000); + +const HOP_BY_HOP = new Set([ + "connection", + "keep-alive", + "proxy-authenticate", + "proxy-authorization", + "te", + "trailer", + "transfer-encoding", + "upgrade", + "content-encoding", + "content-length", +]); + +export function clientIp(c: Context): string { + if (config.trustProxy) { + const xff = c.req.header("x-forwarded-for"); + if (xff) return xff.split(",")[0]!.trim(); + const realIp = c.req.header("x-real-ip"); + if (realIp) return realIp.trim(); + } + try { + return getConnInfo(c).remote.address ?? "unknown"; + } catch { + return "unknown"; + } +} + +function isSecureRequest(c: Context): boolean { + if (config.secureCookies === "1" || config.secureCookies === "true") return true; + if (config.secureCookies === "0" || config.secureCookies === "false") return false; + if (config.trustProxy) { + const proto = c.req.header("x-forwarded-proto"); + if (proto) return proto.split(",")[0]!.trim() === "https"; + } + return new URL(c.req.url).protocol === "https:"; +} + +/** Security headers for every response. */ +const securityHeaders: MiddlewareHandler = async (c, next) => { + await next(); + const h = c.res.headers; + h.set("X-Content-Type-Options", "nosniff"); + h.set("X-Frame-Options", "DENY"); + h.set("Referrer-Policy", "no-referrer"); + h.set("Permissions-Policy", "camera=(), microphone=(), geolocation=(), payment=(), usb=()"); + h.set("Cross-Origin-Opener-Policy", "same-origin"); + if (!h.has("Cache-Control")) h.set("Cache-Control", "no-store"); + if (isSecureRequest(c)) h.set("Strict-Transport-Security", "max-age=31536000; includeSubDomains"); +}; + +/** CSRF: require our custom header on all API calls; reject cross-site fetches. */ +const csrfGuard: MiddlewareHandler = async (c, next) => { + const site = c.req.header("sec-fetch-site"); + if (site && site !== "same-origin" && site !== "none") { + return c.json({ error: "cross_site_request" }, 403); + } + if (c.req.method !== "GET" && c.req.method !== "HEAD") { + if (c.req.header("x-requested-with") !== "ihasmail") { + return c.json({ error: "missing_csrf_header" }, 403); + } + } + await next(); +}; + +const requireSession: MiddlewareHandler = async (c, next) => { + const cookie = getCookie(c, config.cookieName); + const session = sessions.resolve(cookie); + if (!session) { + return c.json({ error: "unauthenticated" }, 401); + } + c.set("session", session); + await next(); +}; + +function setSessionCookie(c: Context, value: string, remember: boolean) { + setCookie(c, config.cookieName, value, { + httpOnly: true, + sameSite: "Lax", + secure: isSecureRequest(c), + path: "/", + ...(remember ? { maxAge: config.sessionRememberTtl } : {}), + }); +} + +function upstreamFailure(c: Context, err: unknown) { + if (err instanceof UpstreamError) { + return c.json({ error: err.status === 401 ? "invalid_credentials" : "upstream_error", message: err.message }, err.status as 401 | 502); + } + const name = (err as Error)?.name ?? ""; + if (name === "TimeoutError" || name === "AbortError") { + return c.json({ error: "upstream_timeout", message: "The mail server did not respond in time" }, 504); + } + console.error("[ihasmail] upstream failure:", err); + return c.json({ error: "upstream_error", message: "Could not reach the mail server" }, 502); +} + +export function createApp(): Hono { + const app = new Hono(); + app.use("*", securityHeaders); + + const api = new Hono(); + api.use("*", csrfGuard); + + api.get("/health", (c) => c.json({ ok: true, name: config.appName, version: "2.0.0" })); + + api.get("/config", (c) => + c.json({ + appName: config.appName, + imageProxy: config.imageProxy, + maxUploadBytes: config.maxUploadBytes, + }), + ); + + // ---------- Auth ---------- + api.post("/auth/login", async (c) => { + const ip = clientIp(c); + let body: { username?: string; password?: string; totp?: string; remember?: boolean }; + try { + body = await c.req.json(); + } catch { + return c.json({ error: "bad_request" }, 400); + } + const username = (body.username ?? "").trim(); + const password = body.password ?? ""; + const totp = (body.totp ?? "").trim(); + if (!username || !password) return c.json({ error: "missing_credentials" }, 400); + if (username.length > 320 || password.length > 1024) return c.json({ error: "bad_request" }, 400); + + const limitKey = `${ip}|${username.toLowerCase()}`; + if (!loginLimiter.check(limitKey) || !loginLimiter.check(ip)) { + c.header("Retry-After", String(loginLimiter.retryAfterSeconds(limitKey))); + return c.json({ error: "rate_limited", message: "Too many login attempts. Please wait and try again." }, 429); + } + + // Stalwart accepts TOTP codes appended to the password as "password$123456". + const effectivePassword = totp ? `${password}$${totp}` : password; + const authorization = `Basic ${Buffer.from(`${username}:${effectivePassword}`, "utf8").toString("base64")}`; + try { + const upstream = await fetchUpstreamSession(authorization); + loginLimiter.reset(limitKey); + const { cookie, session } = sessions.create({ + username, + password: effectivePassword, + remember: Boolean(body.remember), + userAgent: c.req.header("user-agent") ?? "", + ip, + }); + setSessionCookie(c, cookie, session.remember); + return c.json(localizeSession(upstream, sessionExtras(session))); + } catch (err) { + return upstreamFailure(c, err); + } + }); + + api.get("/auth/session", requireSession, async (c) => { + const session = c.get("session"); + try { + const upstream = await getUpstreamSession(session.id, session.authorization, c.req.query("refresh") === "1"); + return c.json(localizeSession(upstream, sessionExtras(session))); + } catch (err) { + if (err instanceof UpstreamError && err.status === 401) { + sessions.destroy(session.id); + deleteCookie(c, config.cookieName, { path: "/" }); + } + return upstreamFailure(c, err); + } + }); + + api.post("/auth/logout", async (c) => { + const cookie = getCookie(c, config.cookieName); + const session = sessions.resolve(cookie); + if (session) { + sessions.destroy(session.id); + forgetUpstreamSession(session.id); + } + deleteCookie(c, config.cookieName, { path: "/" }); + return c.json({ ok: true }); + }); + + api.get("/auth/sessions", requireSession, (c) => { + const session = c.get("session"); + return c.json({ current: session.id, sessions: sessions.listForUser(session.username) }); + }); + + api.post("/auth/sessions/revoke-others", requireSession, (c) => { + const session = c.get("session"); + const n = sessions.destroyAllForUser(session.username, session.id); + return c.json({ revoked: n }); + }); + + // ---------- JMAP API proxy ---------- + api.post("/jmap", requireSession, async (c) => { + const session = c.get("session"); + const ct = c.req.header("content-type") ?? ""; + if (!ct.toLowerCase().startsWith("application/json")) { + return c.json({ error: "unsupported_media_type" }, 415); + } + try { + const upstream = await getUpstreamSession(session.id, session.authorization); + const res = await fetch(absoluteUpstream(upstream.apiUrl), { + method: "POST", + headers: { + authorization: session.authorization, + "content-type": "application/json", + accept: "application/json", + }, + body: c.req.raw.body, + duplex: "half", + signal: AbortSignal.timeout(config.upstreamTimeout), + }); + if (res.status === 401) { + sessions.destroy(session.id); + forgetUpstreamSession(session.id); + deleteCookie(c, config.cookieName, { path: "/" }); + return c.json({ error: "unauthenticated" }, 401); + } + return passthrough(res); + } catch (err) { + return upstreamFailure(c, err); + } + }); + + // ---------- Blob upload ---------- + api.post("/upload/:accountId", requireSession, async (c) => { + const session = c.get("session"); + const accountId = c.req.param("accountId"); + const len = Number(c.req.header("content-length") ?? "0"); + if (len > config.maxUploadBytes) return c.json({ error: "too_large" }, 413); + try { + const upstream = await getUpstreamSession(session.id, session.authorization); + const url = absoluteUpstream(expandTemplate(upstream.uploadUrl, { accountId })); + const res = await fetch(url, { + method: "POST", + headers: { + authorization: session.authorization, + "content-type": c.req.header("content-type") ?? "application/octet-stream", + accept: "application/json", + }, + body: c.req.raw.body, + duplex: "half", + signal: AbortSignal.timeout(Math.max(config.upstreamTimeout, 5 * 60_000)), + }); + return passthrough(res); + } catch (err) { + return upstreamFailure(c, err); + } + }); + + // ---------- Blob download ---------- + api.get("/blob/:accountId/:blobId/:name", requireSession, async (c) => { + const session = c.get("session"); + const { accountId, blobId, name } = c.req.param(); + const accept = c.req.query("accept") ?? "application/octet-stream"; + const inline = c.req.query("inline") === "1"; + try { + const upstream = await getUpstreamSession(session.id, session.authorization); + const url = absoluteUpstream(expandTemplate(upstream.downloadUrl, { accountId, blobId, name, type: accept })); + const res = await fetch(url, { + headers: { authorization: session.authorization }, + signal: AbortSignal.timeout(Math.max(config.upstreamTimeout, 5 * 60_000)), + }); + if (!res.ok) return c.json({ error: "not_found" }, res.status === 404 ? 404 : 502); + const headers = new Headers(); + const type = sanitizeContentType(res.headers.get("content-type") ?? accept); + headers.set("Content-Type", type); + const cl = res.headers.get("content-length"); + if (cl) headers.set("Content-Length", cl); + const safeInline = inline && isInlineSafe(type); + headers.set( + "Content-Disposition", + `${safeInline ? "inline" : "attachment"}; filename*=UTF-8''${encodeURIComponent(name)}`, + ); + headers.set("X-Content-Type-Options", "nosniff"); + // Sandbox everything except the browser's built-in PDF viewer (which needs scripts to render). + if (!(safeInline && type === "application/pdf")) { + headers.set("Content-Security-Policy", "sandbox; default-src 'none'; style-src 'unsafe-inline'; img-src data:"); + } + headers.set("Cache-Control", "private, max-age=3600"); + return new Response(res.body, { status: 200, headers }); + } catch (err) { + return upstreamFailure(c, err); + } + }); + + // ---------- Push (Server-Sent Events) ---------- + api.get("/events", requireSession, async (c) => { + const session = c.get("session"); + const types = c.req.query("types") ?? "*"; + const closeafter = c.req.query("closeafter") ?? "no"; + const ping = c.req.query("ping") ?? "30"; + try { + const upstream = await getUpstreamSession(session.id, session.authorization); + const url = absoluteUpstream(expandTemplate(upstream.eventSourceUrl, { types, closeafter, ping })); + const controller = new AbortController(); + c.req.raw.signal.addEventListener("abort", () => controller.abort()); + const res = await fetch(url, { + headers: { authorization: session.authorization, accept: "text/event-stream" }, + signal: controller.signal, + }); + if (!res.ok || !res.body) return c.json({ error: "upstream_error" }, 502); + const headers = new Headers({ + "Content-Type": "text/event-stream", + "Cache-Control": "no-cache, no-transform", + Connection: "keep-alive", + "X-Accel-Buffering": "no", + }); + return new Response(res.body, { status: 200, headers }); + } catch (err) { + return upstreamFailure(c, err); + } + }); + + // ---------- Remote image privacy proxy ---------- + api.get("/image", requireSession, imageProxyHandler); + + api.notFound((c) => c.json({ error: "not_found" }, 404)); + api.onError((err, c) => { + console.error("[ihasmail] api error:", err); + return c.json({ error: "internal_error" }, 500); + }); + + app.route("/api", api); + + // ---------- Static SPA ---------- + app.get("*", staticHandler(config.staticDir)); + return app; +} + +function sessionExtras(session: LiveSession) { + return { + ihasmail: { + appName: config.appName, + imageProxy: config.imageProxy, + maxUploadBytes: config.maxUploadBytes, + sessionId: session.id, + loginName: session.username, + remember: session.remember, + }, + }; +} + +function passthrough(res: Response): Response { + const headers = new Headers(); + res.headers.forEach((v, k) => { + if (!HOP_BY_HOP.has(k.toLowerCase())) headers.set(k, v); + }); + if (!headers.has("content-type")) headers.set("content-type", "application/json"); + headers.set("Cache-Control", "no-store"); + return new Response(res.body, { status: res.status, headers }); +} + +function sanitizeContentType(ct: string): string { + const lower = ct.split(";")[0]!.trim().toLowerCase(); + // Never let the browser render HTML/SVG/XML/JS served from the blob endpoint. + if ( + lower === "text/html" || + lower === "application/xhtml+xml" || + lower === "image/svg+xml" || + lower.includes("javascript") || + lower === "text/xml" || + lower === "application/xml" + ) { + return "application/octet-stream"; + } + if (lower.startsWith("text/")) return `${lower}; charset=utf-8`; + return lower || "application/octet-stream"; +} + +function isInlineSafe(type: string): boolean { + const t = type.split(";")[0]!.trim(); + return ( + (t.startsWith("image/") && t !== "image/svg+xml") || + t.startsWith("video/") || + t.startsWith("audio/") || + t === "application/pdf" || + t === "text/plain" || + t === "text/calendar" || + t === "text/vcard" + ); +} diff --git a/server/src/config.ts b/server/src/config.ts new file mode 100644 index 0000000..be3e13f --- /dev/null +++ b/server/src/config.ts @@ -0,0 +1,81 @@ +import { randomBytes } from "node:crypto"; +import { fileURLToPath } from "node:url"; +import { existsSync, readFileSync } from "node:fs"; +import { resolve } from "node:path"; + +/** Minimal .env loader (no dependency): first match wins, never overrides real env. */ +function loadDotEnv() { + const candidates = [resolve(process.cwd(), ".env"), fileURLToPath(new URL("../../.env", import.meta.url)), fileURLToPath(new URL("../.env", import.meta.url))]; + for (const file of candidates) { + if (!existsSync(file)) continue; + for (const line of readFileSync(file, "utf8").split(/\r?\n/)) { + const m = /^\s*(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)\s*$/.exec(line); + if (!m || line.trim().startsWith("#")) continue; + let v = m[2]!; + if ((v.startsWith('"') && v.endsWith('"')) || (v.startsWith("'") && v.endsWith("'"))) v = v.slice(1, -1); + if (process.env[m[1]!] === undefined) process.env[m[1]!] = v; + } + break; + } +} +loadDotEnv(); + +function env(name: string, fallback?: string): string { + const v = process.env[name]; + if (v === undefined || v === "") { + if (fallback === undefined) throw new Error(`Missing required environment variable ${name}`); + return fallback; + } + return v; +} + +function bool(name: string, fallback: boolean): boolean { + const v = process.env[name]; + if (v === undefined || v === "") return fallback; + return ["1", "true", "yes", "on"].includes(v.toLowerCase()); +} + +function int(name: string, fallback: number): number { + const v = process.env[name]; + if (v === undefined || v === "") return fallback; + const n = Number.parseInt(v, 10); + if (!Number.isFinite(n)) throw new Error(`Invalid integer for ${name}: ${v}`); + return n; +} + +const isProd = process.env.NODE_ENV === "production"; +let appSecret = process.env.APP_SECRET ?? ""; +if (!appSecret || appSecret === "change-me") { + if (isProd) { + throw new Error("APP_SECRET must be set to a strong random value in production"); + } + appSecret = randomBytes(32).toString("base64"); + console.warn( + "[ihasmail] APP_SECRET not set - using an ephemeral secret (persisted sessions will not survive restarts)", + ); +} + +const stalwartUrl = env("STALWART_URL", "https://mail.example.com").replace(/\/+$/, ""); + +export const config = { + isProd, + appName: env("APP_NAME", "ihasmail"), + host: env("HOST", "0.0.0.0"), + port: int("PORT", 8080), + stalwartUrl, + appSecret, + trustProxy: bool("TRUST_PROXY", true), + /** "auto" = Secure when the request arrived over https; "1"/"0" to force. */ + secureCookies: (process.env.SECURE_COOKIES ?? "auto").toLowerCase(), + sessionTtl: int("SESSION_TTL", 12 * 60 * 60), + sessionRememberTtl: int("SESSION_REMEMBER_TTL", 30 * 24 * 60 * 60), + sessionFile: process.env.SESSION_FILE ?? "", + upstreamTimeout: int("UPSTREAM_TIMEOUT", 30_000), + maxUploadBytes: int("MAX_UPLOAD_BYTES", 50 * 1024 * 1024), + imageProxy: bool("IMAGE_PROXY", true), + cookieName: env("COOKIE_NAME", "ihm_session"), + staticDir: process.env.STATIC_DIR ?? fileURLToPath(new URL("../../web/dist", import.meta.url)), + loginRateLimit: int("LOGIN_RATE_LIMIT", 10), +}; + +export type Config = typeof config; diff --git a/server/src/crypto.ts b/server/src/crypto.ts new file mode 100644 index 0000000000000000000000000000000000000000..69541f44209ba4b44ae53861980116fa78270446 GIT binary patch literal 1867 zcmah~O>dh(5bfE&Vu~UaB1{^$jiN+3G-;(uJvz54QWjXu%CJj!2PY`?f6weL80=W7 zFXm(B?R#%N5Ot$8!pjUG)0`o{6HUpr*u=XhKX~@$*)L{F8&R(FV%f>eUTY?ERo`~V zjlD%t3%Oddg8%&6vMQc!q0p*^K&qTyWx8un1=q9L+3D#FPT@}ToJ$m}GQczk!&$|1 zcoJ9wgEj9Ux3uVyL&1_m!}Z*7V}z2BDYX_hi&UV+%T%2TIUv|@)-?V51n%kHaJ}K$ zq8MS&fRa@QHqgsO{*2I6Ezz-fB`F3~_<-qQF&IS*4XTPu0`+_fQ4tW6QX!-qu+^4J z%Ca>GiOM22%$O&obK^v+7J;-YC{>k{aqgg&IGRtrIFnG;*^EECiWRNQ&?@(~{N`Qg zJy<#mu85E(nAplbd}LUKS8&@F1=rDV;d?+ygCN#5-1P4gYj^l~@-ju=emHsA;cg#e z2wE&IgXr3}0k>lJvWG4S15>iaw~HXQN04#EgK`CVTQgA&#hh=>DdNi_BE0SFjbPgu zVN)^kkxDcQr5+iykSH&IDr!TTCOsOSFC5>@N%l3Ti2W%D1IEpqD9=|}O{C}y;=Y+C z;%F5?WemeV9xQ2_oCa#7y0aPN_2ePdyXC~^-{nNg1#-(jB z8sK`xBa+y?^MQUoL)b!4T4LIiY0bLua}0ekh8XX{UeNg>hQ+0`VTj7C_j^GH0eQc= ztfOwbjl1l<$^s2lUjZ{#fH?K1A1}i$r>}d4Q9J_eNQMg+ey%ZU*+-zDM!G?ZV!TUo^C)%Z`#nVd{r z$_~1NIS>2ZNe^D8?xiRoOj$zfbVbYm;|= 16 && b <= 31) return true; + if (a === 192 && b === 168) return true; + if (a === 100 && b >= 64 && b <= 127) return true; + if (a >= 224) return true; + return false; + } + if (v === 6) { + const lower = addr.toLowerCase(); + if (lower === "::1" || lower === "::") return true; + if (lower.startsWith("fe80") || lower.startsWith("fc") || lower.startsWith("fd")) return true; + if (lower.startsWith("::ffff:")) return isPrivateAddress(lower.slice(7)); + return false; + } + return true; +} + +/** + * Gmail-style remote content proxy: hides the reader's IP address and + * user-agent from tracking pixels, and blocks SSRF to internal networks. + */ +export async function imageProxyHandler(c: Context) { + if (!config.imageProxy) return c.json({ error: "disabled" }, 404); + const raw = c.req.query("url") ?? ""; + let url: URL; + try { + url = new URL(raw); + } catch { + return c.json({ error: "bad_url" }, 400); + } + if (url.protocol !== "http:" && url.protocol !== "https:") return c.json({ error: "bad_scheme" }, 400); + if (url.username || url.password) return c.json({ error: "bad_url" }, 400); + + // Resolve and refuse private targets. + try { + const host = url.hostname.replace(/^\[|\]$/g, ""); + if (isIP(host)) { + if (isPrivateAddress(host)) return c.json({ error: "forbidden_target" }, 403); + } else { + const addrs = await lookup(host, { all: true }); + if (!addrs.length || addrs.some((a) => isPrivateAddress(a.address))) { + return c.json({ error: "forbidden_target" }, 403); + } + } + } catch { + return c.json({ error: "dns_failure" }, 502); + } + + let res: Response; + try { + res = await fetch(url, { + redirect: "manual", + headers: { + accept: "image/avif,image/webp,image/*,*/*;q=0.8", + "user-agent": "Mozilla/5.0 (compatible; ihasmail-image-proxy)", + }, + signal: AbortSignal.timeout(15_000), + }); + // Follow a limited number of redirects manually, re-validating each hop. + let hops = 0; + while ([301, 302, 303, 307, 308].includes(res.status) && hops < 3) { + const loc = res.headers.get("location"); + if (!loc) break; + const next = new URL(loc, url); + if (next.protocol !== "http:" && next.protocol !== "https:") return c.json({ error: "bad_redirect" }, 400); + const host = next.hostname.replace(/^\[|\]$/g, ""); + if (isIP(host)) { + if (isPrivateAddress(host)) return c.json({ error: "forbidden_target" }, 403); + } else { + const addrs = await lookup(host, { all: true }); + if (!addrs.length || addrs.some((a) => isPrivateAddress(a.address))) { + return c.json({ error: "forbidden_target" }, 403); + } + } + res = await fetch(next, { + redirect: "manual", + headers: { accept: "image/*", "user-agent": "Mozilla/5.0 (compatible; ihasmail-image-proxy)" }, + signal: AbortSignal.timeout(15_000), + }); + hops++; + } + } catch { + return c.json({ error: "fetch_failed" }, 502); + } + if (!res.ok || !res.body) return c.json({ error: "fetch_failed" }, 502); + const type = (res.headers.get("content-type") ?? "").split(";")[0]!.trim().toLowerCase(); + if (!type.startsWith("image/") || type === "image/svg+xml") return c.json({ error: "not_image" }, 415); + const len = Number(res.headers.get("content-length") ?? "0"); + if (len > MAX_IMAGE_BYTES) return c.json({ error: "too_large" }, 413); + + // Enforce the size limit while streaming. + let total = 0; + const limiter = new TransformStream({ + transform(chunk, controller) { + total += chunk.byteLength; + if (total > MAX_IMAGE_BYTES) controller.error(new Error("too large")); + else controller.enqueue(chunk); + }, + }); + const headers = new Headers({ + "Content-Type": type, + "Cache-Control": "private, max-age=86400", + "X-Content-Type-Options": "nosniff", + "Content-Security-Policy": "sandbox; default-src 'none'", + "Cross-Origin-Resource-Policy": "same-origin", + }); + if (len) headers.set("Content-Length", String(len)); + return new Response(res.body.pipeThrough(limiter), { status: 200, headers }); +} diff --git a/server/src/index.ts b/server/src/index.ts new file mode 100644 index 0000000..b62feef --- /dev/null +++ b/server/src/index.ts @@ -0,0 +1,27 @@ +import { serve } from "@hono/node-server"; +import { config } from "./config.js"; +import { createApp, sessions } from "./app.js"; + +async function main() { + await sessions.init(); + const app = createApp(); + const server = serve({ fetch: app.fetch, hostname: config.host, port: config.port }, (info) => { + console.log(`[ihasmail] ${config.appName} listening on http://${info.address}:${info.port}`); + console.log(`[ihasmail] upstream Stalwart: ${config.stalwartUrl}`); + console.log(`[ihasmail] static dir: ${config.staticDir}`); + }); + + const shutdown = async (signal: string) => { + console.log(`[ihasmail] ${signal} received, shutting down`); + server.close(); + await sessions.close(); + process.exit(0); + }; + process.on("SIGINT", () => void shutdown("SIGINT")); + process.on("SIGTERM", () => void shutdown("SIGTERM")); +} + +main().catch((err) => { + console.error("[ihasmail] fatal:", err); + process.exit(1); +}); diff --git a/server/src/mock/index.ts b/server/src/mock/index.ts new file mode 100644 index 0000000..1800719 --- /dev/null +++ b/server/src/mock/index.ts @@ -0,0 +1,434 @@ +/** + * A tiny in-memory JMAP server that mimics the subset of Stalwart that ihasmail + * uses. For local development and demos only: `npm run mock` then point the + * server at it with STALWART_URL=http://127.0.0.1:8788 (user: demo / pass: demo). + */ +import { createServer, type IncomingMessage, type ServerResponse } from "node:http"; +import { randomUUID } from "node:crypto"; + +const PORT = Number(process.env.MOCK_PORT ?? 8788); +const ACCOUNT = "a1"; +const USER = process.env.MOCK_USER ?? "demo@example.com"; +const PASS = process.env.MOCK_PASS ?? "demo"; + +type Obj = Record; +const state = { n: 1 }; +const nextState = () => String(state.n++); + +/* ---------- data ---------- */ +const mailboxes: Obj[] = [ + mb("inbox", "Inbox", "inbox"), + mb("drafts", "Drafts", "drafts"), + mb("sent", "Sent", "sent"), + mb("junk", "Junk Mail", "junk"), + mb("trash", "Trash", "trash"), + mb("archive", "Archive", "archive"), + mb("work", "Work", null), + mb("work-inv", "Invoices", null, "work"), + mb("news", "Newsletters", null), +]; +function mb(id: string, name: string, role: string | null, parentId: string | null = null): Obj { + return { id, name, parentId, role, sortOrder: 0, totalEmails: 0, unreadEmails: 0, totalThreads: 0, unreadThreads: 0, isSubscribed: true, myRights: { mayReadItems: true, mayAddItems: true, mayRemoveItems: true, maySetSeen: true, maySetKeywords: true, mayCreateChild: true, mayRename: true, mayDelete: true, maySubmit: true } }; +} + +const blobs = new Map(); +function putBlob(data: Buffer | string, type: string): string { + const id = `b${randomUUID().slice(0, 8)}`; + blobs.set(id, { type, data: Buffer.isBuffer(data) ? data : Buffer.from(data) }); + return id; +} + +const people = [ + ["Ada Lovelace", "ada@example.org"], ["Grace Hopper", "grace@example.org"], ["Linus Torvalds", "linus@kernel.example"], + ["Margaret Hamilton", "margaret@nasa.example"], ["Alan Turing", "alan@bletchley.example"], ["GitHub", "noreply@github.example"], + ["Stalwart Labs", "hello@stalw.art"], ["Weekly Digest", "digest@newsletter.example"], ["Finance Team", "finance@example.org"], +]; +const subjects = [ + "Re: Q3 planning document", "Your invoice #4821 is ready", "Welcome to Stalwart!", "Lunch on Thursday?", "[PR] Fix push reconnect backoff", + "Weekly digest: 12 new articles", "Photos from the hike", "Deployment window this weekend", "Contract draft v3 attached", "Can you review my slides?", + "Reminder: dentist appointment", "Flight confirmation – BOS → SFO", "Team offsite agenda", "Re: Re: budget approval", "Security notice: new sign-in", +]; +const emails: Obj[] = []; +let counter = 1; +function addEmail(o: { from: [string, string]; to?: string; subject: string; daysAgo: number; mailbox: string; threadId?: string; unread?: boolean; flagged?: boolean; html?: boolean; attach?: boolean; inReplyTo?: string }) { + const id = `e${counter++}`; + const received = new Date(Date.now() - o.daysAgo * 86400_000 - Math.random() * 3600_000 * 5).toISOString().replace(/\.\d{3}Z$/, "Z"); + const text = `Hi,\n\nThis is a sample message about "${o.subject}". It was generated by the ihasmail mock server so you can try the interface without a real mailbox.\n\nSome highlights:\n- Keyboard shortcuts (press ? )\n- Conversation view\n- Drag & drop to folders\n\nCheers,\n${o.from[0]}\n\n> On Monday, someone wrote:\n> This is the quoted part of an earlier message.\n> It should be collapsed by default.`; + const html = `

Hi,

This is a sample HTML message about “${o.subject}”. It was generated by the ihasmail mock server.

  • Keyboard shortcuts (press ?)
  • Conversation view
  • Drag & drop to folders

logo

Cheers,
${o.from[0]}

On Monday, someone wrote:
This is the quoted part of an earlier message. It should be collapsed by default.
`; + const textBlob = putBlob(text, "text/plain"); + const htmlBlob = putBlob(html, "text/html"); + const attachments: Obj[] = []; + if (o.attach) { + attachments.push({ partId: "3", blobId: putBlob("%PDF-1.4 mock", "application/pdf"), size: 48213, name: "contract-v3.pdf", type: "application/pdf", charset: null, disposition: "attachment", cid: null }); + attachments.push({ partId: "4", blobId: putBlob(Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==", "base64"), "image/png"), size: 68, name: "pixel.png", type: "image/png", charset: null, disposition: "attachment", cid: null }); + } + if (o.html) attachments.push({ partId: "5", blobId: putBlob(Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP4z8DwHwAFAAH/q842iQAAAABJRU5ErkJggg==", "base64"), "image/png"), size: 68, name: "logo.png", type: "image/png", charset: null, disposition: "inline", cid: "logo@mock" }); + const e: Obj = { + id, blobId: putBlob(`From: ${o.from[0]} <${o.from[1]}>\r\nTo: ${USER}\r\nSubject: ${o.subject}\r\nDate: ${received}\r\nMessage-ID: <${id}@mock>\r\n\r\n${text}`, "message/rfc822"), + threadId: o.threadId ?? `t${id}`, mailboxIds: { [o.mailbox]: true }, + keywords: { ...(o.unread ? {} : { $seen: true }), ...(o.flagged ? { $flagged: true } : {}) }, + size: 4000 + Math.floor(Math.random() * 20000), receivedAt: received, sentAt: received, + messageId: [`${id}@mock`], inReplyTo: o.inReplyTo ? [o.inReplyTo] : null, references: o.inReplyTo ? [o.inReplyTo] : null, + from: [{ name: o.from[0], email: o.from[1] }], to: [{ name: "Demo User", email: o.to ?? USER }], cc: null, bcc: null, replyTo: null, sender: null, + subject: o.subject, hasAttachment: Boolean(o.attach), preview: text.slice(0, 120).replace(/\n/g, " "), + textBody: [{ partId: "1", blobId: textBlob, size: text.length, name: null, type: "text/plain", charset: "utf-8", disposition: null, cid: null }], + htmlBody: o.html ? [{ partId: "2", blobId: htmlBlob, size: html.length, name: null, type: "text/html", charset: "utf-8", disposition: null, cid: null }] : [], + attachments, + bodyValues: { "1": { value: text, isEncodingProblem: false, isTruncated: false }, ...(o.html ? { "2": { value: html, isEncodingProblem: false, isTruncated: false } } : {}) }, + bodyStructure: { partId: null, blobId: null, size: 0, type: "multipart/mixed", name: null, charset: null, disposition: null, cid: null, subParts: [{ partId: "1", blobId: textBlob, size: text.length, type: "text/plain", name: null, charset: "utf-8", disposition: null, cid: null }, ...(o.html ? [{ partId: "2", blobId: htmlBlob, size: html.length, type: "text/html", name: null, charset: "utf-8", disposition: null, cid: null }] : []), ...attachments] }, + "header:List-Unsubscribe:asText": o.from[1].includes("newsletter") ? ", " : null, + "header:X-Priority:asText": o.subject.startsWith("Security") ? "1 (Highest)" : null, + }; + emails.push(e); + return e; +} +// Seed +for (let i = 0; i < 45; i++) { + const p = people[i % people.length]!; + const subj = subjects[i % subjects.length]!; + const e = addEmail({ from: [p[0]!, p[1]!], subject: subj, daysAgo: i * 0.7, mailbox: i % 9 === 8 ? "news" : i % 11 === 10 ? "work" : "inbox", unread: i % 3 === 0, flagged: i % 7 === 0, html: i % 2 === 0, attach: i % 5 === 0 }); + if (i % 4 === 0) { + // thread replies + addEmail({ from: ["Demo User", USER], to: p[1]!, subject: `Re: ${subj}`, daysAgo: i * 0.7 - 0.2, mailbox: "sent", threadId: e.threadId as string, inReplyTo: `${e.id}@mock`, html: true }); + addEmail({ from: [p[0]!, p[1]!], subject: `Re: ${subj}`, daysAgo: i * 0.7 - 0.4, mailbox: "inbox", threadId: e.threadId as string, unread: i % 8 === 0, inReplyTo: `${e.id}@mock`, html: i % 3 === 0 }); + } +} +addEmail({ from: ["Demo User", USER], to: "ada@example.org", subject: "Draft: ideas for the retreat", daysAgo: 0.1, mailbox: "drafts", html: true }).keywords = { $draft: true, $seen: true }; +addEmail({ from: ["Spammy", "win@lottery.example"], subject: "You have WON!!!", daysAgo: 2, mailbox: "junk", unread: true }); +// Invitation email +{ + const ics = `BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//mock//EN\r\nMETHOD:REQUEST\r\nBEGIN:VEVENT\r\nUID:inv-1@mock\r\nDTSTAMP:20260820T100000Z\r\nDTSTART:20260825T140000Z\r\nDTEND:20260825T150000Z\r\nSUMMARY:Project kickoff\r\nORGANIZER;CN=Ada Lovelace:mailto:ada@example.org\r\nATTENDEE;CN=Demo User;RSVP=TRUE;PARTSTAT=NEEDS-ACTION:mailto:${USER}\r\nLOCATION:Room 4B\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n`; + const e = addEmail({ from: ["Ada Lovelace", "ada@example.org"], subject: "Invitation: Project kickoff", daysAgo: 0.3, mailbox: "inbox", unread: true }); + const b = putBlob(ics, "text/calendar"); + (e.bodyStructure as Obj).subParts = [...((e.bodyStructure as Obj).subParts as Obj[]), { partId: "9", blobId: b, size: ics.length, type: "text/calendar", name: "invite.ics", charset: "utf-8", disposition: "attachment", cid: null }]; + (e.attachments as Obj[]).push({ partId: "9", blobId: b, size: ics.length, type: "text/calendar", name: "invite.ics", charset: "utf-8", disposition: "attachment", cid: null }); + e.hasAttachment = true; +} + +const identities: Obj[] = [ + { id: "i1", name: "Demo User", email: USER, replyTo: null, bcc: null, textSignature: "-- \nDemo User\nihasmail", htmlSignature: "
--
Demo User
ihasmail
", mayDelete: false }, + { id: "i2", name: "Demo (alias)", email: "alias@example.com", replyTo: null, bcc: null, textSignature: "", htmlSignature: "", mayDelete: true }, +]; +let vacation: Obj = { id: "singleton", isEnabled: false, fromDate: null, toDate: null, subject: null, textBody: null, htmlBody: null }; +const sieveScripts: Obj[] = []; +const calendars: Obj[] = [{ id: "c1", name: "Personal", description: null, color: "#0f766e", sortOrder: 0, isSubscribed: true, isVisible: true, isDefault: true, includeInAvailability: "all", defaultAlertsWithTime: null, defaultAlertsWithoutTime: null, timeZone: "UTC", shareWith: null, myRights: rightsCal() }, { id: "c2", name: "Work", description: null, color: "#2563eb", sortOrder: 1, isSubscribed: true, isVisible: true, isDefault: false, includeInAvailability: "all", defaultAlertsWithTime: null, defaultAlertsWithoutTime: null, timeZone: "UTC", shareWith: null, myRights: rightsCal() }]; +function rightsCal() { return { mayReadFreeBusy: true, mayReadItems: true, mayWriteAll: true, mayWriteOwn: true, mayUpdatePrivate: true, mayRSVP: true, mayShare: true, mayDelete: true }; } +const events: Obj[] = []; +{ + const now = new Date(); + const d = (dayOff: number, h: number) => { const x = new Date(now.getFullYear(), now.getMonth(), now.getDate() + dayOff, h, 0, 0); return x; }; + const local = (x: Date) => `${x.getFullYear()}-${String(x.getMonth() + 1).padStart(2, "0")}-${String(x.getDate()).padStart(2, "0")}T${String(x.getHours()).padStart(2, "0")}:00:00`; + const tz = Intl.DateTimeFormat().resolvedOptions().timeZone; + events.push({ id: "ev1", calendarIds: { c1: true }, "@type": "Event", uid: "ev1", title: "Standup", start: local(d(0, 9)), timeZone: tz, duration: "PT30M", recurrenceRules: [{ "@type": "RecurrenceRule", frequency: "weekly", byDay: [{ day: "mo" }, { day: "tu" }, { day: "we" }, { day: "th" }, { day: "fr" }] }], showWithoutTime: false, status: "confirmed", freeBusyStatus: "busy", privacy: "public" }); + events.push({ id: "ev2", calendarIds: { c2: true }, "@type": "Event", uid: "ev2", title: "Design review", start: local(d(1, 14)), timeZone: tz, duration: "PT1H30M", showWithoutTime: false, locations: { l: { "@type": "Location", name: "Room 2" } }, participants: { me: { "@type": "Participant", name: "Demo User", email: USER, sendTo: { imip: `mailto:${USER}` }, roles: { owner: true, attendee: true }, participationStatus: "accepted" }, p2: { "@type": "Participant", name: "Ada Lovelace", email: "ada@example.org", sendTo: { imip: "mailto:ada@example.org" }, roles: { attendee: true }, participationStatus: "needs-action", expectReply: true } }, replyTo: { imip: `mailto:${USER}` } }); + events.push({ id: "ev3", calendarIds: { c1: true }, "@type": "Event", uid: "ev3", title: "Conference", start: local(d(3, 0)).slice(0, 10) + "T00:00:00", duration: "P2D", showWithoutTime: true, timeZone: null }); + events.push({ id: "ev4", calendarIds: { c1: true }, "@type": "Event", uid: "ev4", title: "Lunch with Grace", start: local(d(2, 12)), timeZone: tz, duration: "PT1H", showWithoutTime: false, color: "#db2777" }); +} +const participantIdentities: Obj[] = [{ id: "pi1", name: "Demo User", calendarAddress: `mailto:${USER}`, sendTo: { imip: `mailto:${USER}` }, isDefault: true }]; +const addressBooks: Obj[] = [{ id: "ab1", name: "Personal", description: null, sortOrder: 0, isDefault: true, isSubscribed: true, shareWith: null, myRights: { mayRead: true, mayWrite: true, mayShare: true, mayDelete: true } }]; +const cards: Obj[] = people.slice(0, 6).map((p, i) => { + const [given, surname] = p[0]!.split(" "); + return { id: `cc${i}`, addressBookIds: { ab1: true }, "@type": "Card", version: "1.0", uid: `uid-cc${i}`, kind: "individual", name: { components: [{ kind: "given", value: given }, { kind: "surname", value: surname ?? "" }], isOrdered: true }, emails: { e1: { address: p[1], contexts: { work: true } } }, phones: i % 2 ? { p1: { number: `+1 555 010${i}`, features: { mobile: true } } } : undefined, organizations: i % 3 ? { o1: { name: "Example Corp" } } : undefined }; +}); +const principals: Obj[] = people.slice(0, 5).map((p, i) => ({ id: `pr${i}`, type: "individual", name: p[0], description: null, email: p[1], timeZone: "UTC" })); +const fileNodes: Obj[] = [ + { id: "f1", parentId: null, nodeType: "directory", blobId: null, size: null, name: "Documents", type: null, created: new Date().toISOString(), modified: new Date().toISOString(), myRights: fr(), role: "documents" }, + { id: "f2", parentId: "f1", nodeType: "file", blobId: putBlob("hello world", "text/plain"), size: 11, name: "notes.txt", type: "text/plain", created: new Date().toISOString(), modified: new Date().toISOString(), myRights: fr() }, + { id: "f3", parentId: null, nodeType: "file", blobId: putBlob("%PDF-1.4 mock", "application/pdf"), size: 14, name: "report.pdf", type: "application/pdf", created: new Date().toISOString(), modified: new Date().toISOString(), myRights: fr() }, +]; +function fr() { return { mayRead: true, mayAddChildren: true, mayRename: true, mayDelete: true, mayModifyContent: true, mayShare: true }; } + +function recount() { + for (const m of mailboxes) { + const inBox = emails.filter((e) => (e.mailboxIds as Obj)[m.id as string]); + m.totalEmails = inBox.length; + m.unreadEmails = inBox.filter((e) => !(e.keywords as Obj).$seen).length; + const threads = new Set(inBox.map((e) => e.threadId)); + m.totalThreads = threads.size; + m.unreadThreads = new Set(inBox.filter((e) => !(e.keywords as Obj).$seen).map((e) => e.threadId)).size; + } +} +recount(); + +/* ---------- helpers ---------- */ +function pick(o: Obj, props?: string[] | null): Obj { + if (!props) return o; + const out: Obj = { id: o.id }; + for (const p of props) if (p in o) out[p] = o[p]; + else if (p.startsWith("header:")) out[p] = null; + return out; +} +function resolveRefs(args: Obj, responses: [string, Obj, string][]): Obj { + const out: Obj = {}; + for (const [k, v] of Object.entries(args)) { + if (k.startsWith("#")) { + const r = v as { resultOf: string; name: string; path: string }; + const resp = responses.find((x) => x[2] === r.resultOf && x[0] === r.name); + out[k.slice(1)] = resp ? jsonPointer(resp[1], r.path) : []; + } else out[k] = v; + } + return out; +} +function jsonPointer(obj: unknown, path: string): unknown { + const parts = path.split("/").filter(Boolean); + let cur: unknown = obj; + for (let i = 0; i < parts.length; i++) { + const p = parts[i]!; + if (p === "*") { + const rest = parts.slice(i + 1).join("/"); + const arr = (cur as unknown[]).flatMap((x) => { const v = jsonPointer(x, "/" + rest); return Array.isArray(v) ? v : [v]; }); + return arr; + } + cur = (cur as Obj)?.[p]; + } + return cur; +} +function matchFilter(e: Obj, f: Obj | undefined): boolean { + if (!f) return true; + if (f.operator) { + const conds = (f.conditions as Obj[]).map((c) => matchFilter(e, c)); + return f.operator === "AND" ? conds.every(Boolean) : f.operator === "OR" ? conds.some(Boolean) : !conds.some(Boolean); + } + const kw = e.keywords as Obj; + if (f.inMailbox && !(e.mailboxIds as Obj)[f.inMailbox as string]) return false; + if (f.hasKeyword && !kw[f.hasKeyword as string]) return false; + if (f.notKeyword && kw[f.notKeyword as string]) return false; + if (f.hasAttachment !== undefined && Boolean(e.hasAttachment) !== f.hasAttachment) return false; + const hay = `${e.subject} ${JSON.stringify(e.from)} ${JSON.stringify(e.to)} ${e.preview}`.toLowerCase(); + for (const k of ["text", "subject", "from", "to", "body"]) if (f[k] && !hay.includes(String(f[k]).toLowerCase())) return false; + if (f.before && String(e.receivedAt) >= String(f.before)) return false; + if (f.after && String(e.receivedAt) < String(f.after)) return false; + if (f.minSize && Number(e.size) < Number(f.minSize)) return false; + if (f.maxSize && Number(e.size) > Number(f.maxSize)) return false; + return true; +} +function applyPatch(obj: Obj, patch: Obj) { + for (const [k, v] of Object.entries(patch)) { + if (k.includes("/")) { + const [root, ...rest] = k.split("/"); + const key = rest.join("/"); + const target = (obj[root!] as Obj) ?? {}; + if (v === null) delete target[key]; + else target[key] = v; + obj[root!] = target; + } else obj[k] = v; + } +} + +/* ---------- method handlers ---------- */ +type Handler = (args: Obj) => Obj | [string, Obj][]; +const setResp = (extra: Obj = {}): Obj => ({ accountId: ACCOUNT, oldState: "1", newState: nextState(), created: {}, updated: {}, destroyed: [], ...extra }); + +function genericGet(list: Obj[]) { + return (a: Obj) => { + const ids = a.ids as string[] | null | undefined; + const found = ids ? ids.map((id) => list.find((x) => x.id === id)).filter(Boolean) as Obj[] : list; + return { accountId: ACCOUNT, state: String(state.n), list: found.map((x) => pick(x, a.properties as string[] | null)), notFound: ids ? ids.filter((id) => !list.some((x) => x.id === id)) : [] }; + }; +} +function genericSet(list: Obj[], prefix: string, onCreate?: (o: Obj) => void) { + return (a: Obj) => { + const created: Obj = {}; + const updated: Obj = {}; + const destroyed: string[] = []; + const notCreated: Obj = {}; + for (const [cid, obj] of Object.entries((a.create as Obj) ?? {})) { + const id = `${prefix}${randomUUID().slice(0, 6)}`; + const o = { ...(obj as Obj), id }; + onCreate?.(o); + list.push(o); + created[cid] = { id }; + } + for (const [id, patch] of Object.entries((a.update as Obj) ?? {})) { + const o = list.find((x) => x.id === id); + if (o) { applyPatch(o, patch as Obj); updated[id] = null; } + } + for (const id of (a.destroy as string[]) ?? []) { + const i = list.findIndex((x) => x.id === id); + if (i >= 0) { list.splice(i, 1); destroyed.push(id); } + } + return setResp({ created, updated, destroyed, ...(Object.keys(notCreated).length ? { notCreated } : {}) }); + }; +} + +const handlers: Record = { + "Mailbox/get": genericGet(mailboxes), + "Mailbox/set": (a) => { const r = genericSet(mailboxes, "m", (o) => Object.assign(o, { ...mb(o.id as string, o.name as string, null, (o.parentId as string) ?? null), ...o }))(a); recount(); return r; }, + "Mailbox/changes": () => ({ accountId: ACCOUNT, oldState: "1", newState: String(state.n), hasMoreChanges: false, created: [], updated: [], destroyed: [] }), + "Email/query": (a) => { + let list = emails.filter((e) => matchFilter(e, a.filter as Obj)); + list.sort((x, y) => String(y.receivedAt).localeCompare(String(x.receivedAt))); + if (a.collapseThreads) { + const seen = new Set(); + list = list.filter((e) => { const t = e.threadId as string; if (seen.has(t)) return false; seen.add(t); return true; }); + } + const pos = Number(a.position ?? 0); + const limit = Number(a.limit ?? 50); + return { accountId: ACCOUNT, queryState: String(state.n), canCalculateChanges: false, position: pos, ids: list.slice(pos, pos + limit).map((e) => e.id), total: list.length, limit }; + }, + "Email/get": (a) => genericGet(emails)(a), + "Email/changes": () => ({ accountId: ACCOUNT, oldState: "1", newState: String(state.n), hasMoreChanges: false, created: [], updated: [], destroyed: [] }), + "Email/set": (a) => { + const r = genericSet(emails, "e", (o) => { + const bv = (o.bodyValues as Record) ?? {}; + const walk = (p: Obj | undefined, acc: Obj[]) => { if (!p) return; if (p.partId && bv[p.partId as string]) acc.push({ ...p, blobId: putBlob(bv[p.partId as string]!.value, p.type as string), size: bv[p.partId as string]!.value.length }); (p.subParts as Obj[] | undefined)?.forEach((s) => walk(s, acc)); }; + const parts: Obj[] = []; + walk(o.bodyStructure as Obj, parts); + o.textBody = parts.filter((p) => p.type === "text/plain"); + o.htmlBody = parts.filter((p) => p.type === "text/html"); + o.attachments = []; + const collect = (p: Obj | undefined) => { if (!p) return; if (p.blobId && !p.partId && p.type !== "multipart/mixed") (o.attachments as Obj[]).push({ ...p, size: p.size ?? 0 }); (p.subParts as Obj[] | undefined)?.forEach(collect); }; + collect(o.bodyStructure as Obj); + o.hasAttachment = (o.attachments as Obj[]).length > 0; + o.threadId = o.inReplyTo ? (emails.find((e) => (e.messageId as string[] | null)?.[0] === (o.inReplyTo as string[])[0])?.threadId ?? `t${o.id}`) : `t${o.id}`; + o.receivedAt = new Date().toISOString().replace(/\.\d{3}Z$/, "Z"); + o.size = 2000; + o.preview = (bv.text?.value ?? "").slice(0, 100); + o.messageId = [`${o.id}@mock`]; + o.blobId = putBlob(`Subject: ${o.subject}\r\n\r\n${bv.text?.value ?? ""}`, "message/rfc822"); + })(a); + recount(); + return r; + }, + "Email/import": (a) => { const created: Obj = {}; for (const [cid, spec] of Object.entries((a.emails as Obj) ?? {})) { const id = `e${counter++}`; emails.push({ id, blobId: (spec as Obj).blobId, threadId: `t${id}`, mailboxIds: (spec as Obj).mailboxIds, keywords: (spec as Obj).keywords ?? {}, size: 100, receivedAt: new Date().toISOString(), subject: "(imported message)", from: [{ name: null, email: "import@example" }], to: null, preview: "", hasAttachment: false, textBody: [], htmlBody: [], attachments: [], bodyValues: {} }); created[cid] = { id }; } recount(); return setResp({ created }); }, + "Thread/get": (a) => { const ids = a.ids as string[]; const list = ids.map((id) => ({ id, emailIds: emails.filter((e) => e.threadId === id).sort((x, y) => String(x.receivedAt).localeCompare(String(y.receivedAt))).map((e) => e.id) })).filter((t) => t.emailIds.length); return { accountId: ACCOUNT, state: String(state.n), list, notFound: ids.filter((id) => !list.some((t) => t.id === id)) }; }, + "Identity/get": genericGet(identities), + "Identity/set": genericSet(identities, "i", (o) => Object.assign(o, { replyTo: null, bcc: null, textSignature: "", htmlSignature: "", mayDelete: true, ...o })), + "EmailSubmission/set": (a) => { + const created: Obj = {}; + for (const [cid, sub] of Object.entries((a.create as Obj) ?? {})) { + const emailId = (sub as Obj).emailId as string; + const e = emails.find((x) => x.id === emailId); + if (!e) continue; + created[cid] = { id: `s${randomUUID().slice(0, 6)}`, sendAt: new Date().toISOString(), undoStatus: "final" }; + const patch = ((a.onSuccessUpdateEmail as Obj) ?? {})[`#${cid}`] as Obj | undefined; + if (patch) applyPatch(e, patch); + } + recount(); + return setResp({ created }); + }, + "VacationResponse/get": () => ({ accountId: ACCOUNT, state: "1", list: [vacation], notFound: [] }), + "VacationResponse/set": (a) => { const p = ((a.update as Obj) ?? {}).singleton as Obj | undefined; if (p) vacation = { ...vacation, ...p }; return setResp({ updated: { singleton: null } }); }, + "Quota/get": () => ({ accountId: ACCOUNT, state: "1", list: [{ id: "q1", resourceType: "octets", used: 734003200, hardLimit: 2147483648, scope: "account", name: "Storage", types: ["Email"] }], notFound: [] }), + "SieveScript/get": genericGet(sieveScripts), + "SieveScript/set": (a) => { const r = genericSet(sieveScripts, "sv", (o) => Object.assign(o, { isActive: false, ...o }))(a); const act = (a.onSuccessActivateScript as string | undefined); if (act) { const id = act.startsWith("#") ? ((r.created as Obj)[act.slice(1)] as Obj)?.id : act; for (const s of sieveScripts) s.isActive = s.id === id; } if (a.onSuccessDeactivateScript) for (const s of sieveScripts) s.isActive = false; return r; }, + "SieveScript/validate": () => ({ accountId: ACCOUNT, error: null }), + "Calendar/get": genericGet(calendars), + "Calendar/set": genericSet(calendars, "c", (o) => Object.assign(o, { color: "#0f766e", isSubscribed: true, isVisible: true, isDefault: false, includeInAvailability: "all", timeZone: null, shareWith: null, myRights: rightsCal(), description: null, sortOrder: 0, ...o })), + "CalendarEvent/query": (a) => ({ accountId: ACCOUNT, queryState: "1", canCalculateChanges: false, position: 0, ids: events.filter((e) => !(a.filter as Obj)?.uid || e.uid === (a.filter as Obj).uid).map((e) => e.id), total: events.length }), + "CalendarEvent/get": genericGet(events), + "CalendarEvent/set": genericSet(events, "ev", (o) => Object.assign(o, { uid: o.uid ?? randomUUID() })), + "CalendarEvent/parse": (a) => { const parsed: Obj = {}; for (const b of a.blobIds as string[]) { const blob = blobs.get(b); if (!blob) continue; const t = blob.data.toString(); const g = (k: string) => new RegExp(`^${k}[^:]*:(.*)$`, "m").exec(t)?.[1]?.trim(); const ds = g("DTSTART") ?? "20260101T000000Z"; const de = g("DTEND") ?? ds; const toLocal = (s: string) => `${s.slice(0, 4)}-${s.slice(4, 6)}-${s.slice(6, 8)}T${s.slice(9, 11)}:${s.slice(11, 13)}:00`; const start = new Date(`${toLocal(ds)}Z`); const end = new Date(`${toLocal(de)}Z`); parsed[b] = { "@type": "Event", uid: g("UID"), title: g("SUMMARY"), start: toLocal(ds), timeZone: "Etc/UTC", duration: `PT${Math.round((end.getTime() - start.getTime()) / 60000)}M`, method: g("METHOD"), locations: g("LOCATION") ? { l: { name: g("LOCATION") } } : undefined, participants: { org: { name: "Ada Lovelace", email: "ada@example.org", sendTo: { imip: "mailto:ada@example.org" }, roles: { owner: true } }, me: { name: "Demo User", email: USER, sendTo: { imip: `mailto:${USER}` }, roles: { attendee: true }, participationStatus: "needs-action" } } }; } return { accountId: ACCOUNT, parsed, notParsable: [] }; }, + "ParticipantIdentity/get": genericGet(participantIdentities), + "Principal/query": () => ({ accountId: ACCOUNT, queryState: "1", canCalculateChanges: false, position: 0, ids: principals.map((p) => p.id) }), + "Principal/get": genericGet(principals), + "Principal/getAvailability": (a) => ({ accountId: ACCOUNT, list: [{ utcStart: String(a.utcStart).slice(0, 11) + "13:00:00Z", utcEnd: String(a.utcStart).slice(0, 11) + "14:30:00Z", busyStatus: "confirmed", event: null }] }), + "AddressBook/get": genericGet(addressBooks), + "AddressBook/set": genericSet(addressBooks, "ab", (o) => Object.assign(o, { description: null, sortOrder: 0, isDefault: false, isSubscribed: true, shareWith: null, myRights: { mayRead: true, mayWrite: true, mayShare: true, mayDelete: true }, ...o })), + "ContactCard/query": () => ({ accountId: ACCOUNT, queryState: "1", canCalculateChanges: false, position: 0, ids: cards.map((c) => c.id), total: cards.length }), + "ContactCard/get": genericGet(cards), + "ContactCard/set": genericSet(cards, "cc"), + "ContactCard/parse": (a) => { const parsed: Obj = {}; for (const b of a.blobIds as string[]) { const t = blobs.get(b)?.data.toString() ?? ""; const fn = /^FN:(.*)$/m.exec(t)?.[1]?.trim() ?? "Imported"; const em = /^EMAIL[^:]*:(.*)$/m.exec(t)?.[1]?.trim(); parsed[b] = [{ "@type": "Card", version: "1.0", uid: randomUUID(), kind: "individual", name: { full: fn }, emails: em ? { e1: { address: em } } : undefined }]; } return { accountId: ACCOUNT, parsed, notParsable: [] }; }, + "FileNode/query": (a) => { const f = (a.filter as Obj) ?? {}; const list = fileNodes.filter((n) => (f.isTopLevel ? n.parentId == null : f.parentId ? n.parentId === f.parentId : true)); return { accountId: ACCOUNT, queryState: "1", canCalculateChanges: false, position: 0, ids: list.map((n) => n.id), total: list.length }; }, + "FileNode/get": genericGet(fileNodes), + "FileNode/set": genericSet(fileNodes, "f", (o) => Object.assign(o, { created: new Date().toISOString(), modified: new Date().toISOString(), myRights: fr(), size: o.blobId ? (blobs.get(o.blobId as string)?.data.length ?? 0) : null, type: o.type ?? null, blobId: o.blobId ?? null, ...o })), +}; + +/* ---------- http ---------- */ +function unauthorized(res: ServerResponse) { + res.writeHead(401, { "content-type": "application/json", "www-authenticate": 'Basic realm="mock"' }); + res.end(JSON.stringify({ type: "about:blank", status: 401, title: "Unauthorized" })); +} +function checkAuth(req: IncomingMessage): boolean { + const h = req.headers.authorization ?? ""; + if (!h.startsWith("Basic ")) return false; + const [u, p] = Buffer.from(h.slice(6), "base64").toString().split(":"); + return u === USER && p === PASS; +} +function readBody(req: IncomingMessage): Promise { + return new Promise((resolve) => { const chunks: Buffer[] = []; req.on("data", (c) => chunks.push(c)); req.on("end", () => resolve(Buffer.concat(chunks))); }); +} + +const session = () => ({ + capabilities: { "urn:ietf:params:jmap:core": { maxSizeUpload: 50000000, maxConcurrentUpload: 4, maxSizeRequest: 10000000, maxConcurrentRequests: 4, maxCallsInRequest: 16, maxObjectsInGet: 500, maxObjectsInSet: 500, collationAlgorithms: ["i;ascii-casemap"] }, "urn:ietf:params:jmap:mail": {}, "urn:ietf:params:jmap:submission": {}, "urn:ietf:params:jmap:vacationresponse": {}, "urn:ietf:params:jmap:sieve": { implementation: "mock" }, "urn:ietf:params:jmap:calendars": {}, "urn:ietf:params:jmap:calendars:parse": {}, "urn:ietf:params:jmap:contacts": {}, "urn:ietf:params:jmap:contacts:parse": {}, "urn:ietf:params:jmap:principals": {}, "urn:ietf:params:jmap:principals:availability": {}, "urn:ietf:params:jmap:quota": {}, "urn:ietf:params:jmap:blob": {}, "urn:ietf:params:jmap:filenode": {} }, + accounts: { [ACCOUNT]: { name: USER, isPersonal: true, isReadOnly: false, accountCapabilities: { "urn:ietf:params:jmap:mail": {}, "urn:ietf:params:jmap:submission": {}, "urn:ietf:params:jmap:vacationresponse": {}, "urn:ietf:params:jmap:sieve": {}, "urn:ietf:params:jmap:calendars": {}, "urn:ietf:params:jmap:contacts": {}, "urn:ietf:params:jmap:principals": {}, "urn:ietf:params:jmap:quota": {}, "urn:ietf:params:jmap:filenode": {} } } }, + primaryAccounts: Object.fromEntries(["mail", "submission", "vacationresponse", "sieve", "calendars", "contacts", "principals", "quota", "filenode", "blob"].map((c) => [`urn:ietf:params:jmap:${c}`, ACCOUNT])), + username: USER, + apiUrl: `http://127.0.0.1:${PORT}/jmap/`, + downloadUrl: `http://127.0.0.1:${PORT}/jmap/download/{accountId}/{blobId}/{name}?accept={type}`, + uploadUrl: `http://127.0.0.1:${PORT}/jmap/upload/{accountId}/`, + eventSourceUrl: `http://127.0.0.1:${PORT}/jmap/eventsource/?types={types}&closeafter={closeafter}&ping={ping}`, + state: String(state.n), +}); + +const sseClients = new Set(); +function broadcast(types: string[]) { + const payload = `event: state\ndata: ${JSON.stringify({ "@type": "StateChange", changed: { [ACCOUNT]: Object.fromEntries(types.map((t) => [t, String(state.n)])) } })}\n\n`; + for (const c of sseClients) c.write(payload); +} + +createServer(async (req, res) => { + const url = new URL(req.url ?? "/", `http://127.0.0.1:${PORT}`); + if (!checkAuth(req)) return unauthorized(res); + if (url.pathname === "/.well-known/jmap" || url.pathname === "/jmap/session") { + res.writeHead(200, { "content-type": "application/json" }); + return res.end(JSON.stringify(session())); + } + if (url.pathname === "/jmap/" && req.method === "POST") { + const body = JSON.parse((await readBody(req)).toString()) as { methodCalls: [string, Obj, string][] }; + const responses: [string, Obj, string][] = []; + const touched = new Set(); + for (const [name, rawArgs, id] of body.methodCalls) { + const h = handlers[name]; + if (!h) { responses.push(["error", { type: "unknownMethod" }, id]); continue; } + try { + const args = resolveRefs(rawArgs, responses); + const r = h(args); + responses.push([name, r as Obj, id]); + if (name.endsWith("/set") || name.endsWith("/import")) touched.add(name.split("/")[0]!); + } catch (err) { + responses.push(["error", { type: "serverFail", description: String(err) }, id]); + } + } + if (touched.size) { nextState(); setTimeout(() => broadcast([...touched, ...(touched.has("Email") ? ["Mailbox", "Thread"] : [])]), 50); } + res.writeHead(200, { "content-type": "application/json" }); + return res.end(JSON.stringify({ methodResponses: responses, sessionState: "1" })); + } + if (url.pathname.startsWith("/jmap/upload/") && req.method === "POST") { + const data = await readBody(req); + const type = req.headers["content-type"] ?? "application/octet-stream"; + const blobId = putBlob(data, type); + res.writeHead(200, { "content-type": "application/json" }); + return res.end(JSON.stringify({ accountId: ACCOUNT, blobId, type, size: data.length })); + } + if (url.pathname.startsWith("/jmap/download/")) { + const [, , , , blobId] = url.pathname.split("/"); + const b = blobs.get(blobId ?? ""); + if (!b) { res.writeHead(404); return res.end(); } + res.writeHead(200, { "content-type": url.searchParams.get("accept") ?? b.type, "content-length": b.data.length }); + return res.end(b.data); + } + if (url.pathname.startsWith("/jmap/eventsource")) { + res.writeHead(200, { "content-type": "text/event-stream", "cache-control": "no-cache" }); + res.write(`event: ping\ndata: {}\n\n`); + sseClients.add(res); + const t = setInterval(() => res.write(`event: ping\ndata: {}\n\n`), 25000); + req.on("close", () => { clearInterval(t); sseClients.delete(res); }); + // Simulate a new message every 90s + return; + } + res.writeHead(404, { "content-type": "application/json" }); + res.end(JSON.stringify({ error: "not found" })); +}).listen(PORT, "127.0.0.1", () => { + console.log(`[mock-stalwart] listening on http://127.0.0.1:${PORT} (login: ${USER} / ${PASS})`); + console.log(`[mock-stalwart] run the app with: STALWART_URL=http://127.0.0.1:${PORT} npm run dev`); +}); + +// Periodically inject a new inbox email to demo push +setInterval(() => { + const p = people[Math.floor(Math.random() * people.length)]!; + addEmail({ from: [p[0]!, p[1]!], subject: `Live update ${new Date().toLocaleTimeString()}`, daysAgo: 0, mailbox: "inbox", unread: true, html: true }); + recount(); + nextState(); + broadcast(["Email", "Mailbox", "Thread"]); +}, 120_000).unref(); diff --git a/server/src/ratelimit.ts b/server/src/ratelimit.ts new file mode 100644 index 0000000..a419f81 --- /dev/null +++ b/server/src/ratelimit.ts @@ -0,0 +1,45 @@ +/** Simple sliding-window rate limiter keyed by arbitrary string (ip, ip+user). */ +export class RateLimiter { + private hits = new Map(); + + constructor( + private readonly max: number, + private readonly windowMs: number, + ) { + const t = setInterval(() => this.prune(), windowMs); + t.unref(); + } + + /** Returns true if the action is allowed, false if the caller should back off. */ + check(key: string): boolean { + const now = Date.now(); + const arr = (this.hits.get(key) ?? []).filter((t) => now - t < this.windowMs); + if (arr.length >= this.max) { + this.hits.set(key, arr); + return false; + } + arr.push(now); + this.hits.set(key, arr); + return true; + } + + reset(key: string): void { + this.hits.delete(key); + } + + retryAfterSeconds(key: string): number { + const arr = this.hits.get(key); + if (!arr || !arr.length) return 0; + const oldest = arr[0]!; + return Math.max(1, Math.ceil((this.windowMs - (Date.now() - oldest)) / 1000)); + } + + private prune(): void { + const now = Date.now(); + for (const [k, arr] of this.hits) { + const kept = arr.filter((t) => now - t < this.windowMs); + if (kept.length) this.hits.set(k, kept); + else this.hits.delete(k); + } + } +} diff --git a/server/src/sessions.test.ts b/server/src/sessions.test.ts new file mode 100644 index 0000000..3a0bdd7 --- /dev/null +++ b/server/src/sessions.test.ts @@ -0,0 +1,48 @@ +import { test } from "node:test"; +import assert from "node:assert/strict"; +import { SessionStore } from "./sessions.js"; +import { deriveKey, open, seal, sha256 } from "./crypto.js"; +import { RateLimiter } from "./ratelimit.js"; +import { randomBytes } from "node:crypto"; + +test("seal/open round-trips and rejects wrong key", () => { + const salt = randomBytes(16); + const k1 = deriveKey("cookie-secret", "app-secret", salt); + const k2 = deriveKey("other", "app-secret", salt); + const ct = seal("hello", k1); + assert.equal(open(ct, k1), "hello"); + assert.equal(open(ct, k2), null); + assert.equal(sha256("a"), sha256("a")); +}); + +test("session store creates, resolves, and refuses tampered cookies", () => { + const store = new SessionStore(""); + const { cookie, session } = store.create({ username: "u@example.com", password: "p4ss", remember: false, userAgent: "ua", ip: "127.0.0.1" }); + assert.equal(session.username, "u@example.com"); + const live = store.resolve(cookie); + assert.ok(live); + assert.equal(live!.authorization, `Basic ${Buffer.from("u@example.com:p4ss").toString("base64")}`); + assert.equal(store.resolve(cookie + "x"), null); + assert.equal(store.resolve("nope"), null); + assert.equal(store.listForUser("u@example.com").length, 1); + store.destroy(live!.id); + assert.equal(store.resolve(cookie), null); +}); + +test("persisted session data does not contain the password", () => { + const store = new SessionStore(""); + store.create({ username: "u", password: "super-secret-pw", remember: true, userAgent: "", ip: "" }); + const json = JSON.stringify(store.listForUser("u")); + assert.ok(!json.includes("super-secret-pw")); +}); + +test("rate limiter blocks after max hits in window", () => { + const rl = new RateLimiter(3, 60_000); + assert.equal(rl.check("k"), true); + assert.equal(rl.check("k"), true); + assert.equal(rl.check("k"), true); + assert.equal(rl.check("k"), false); + assert.ok(rl.retryAfterSeconds("k") > 0); + rl.reset("k"); + assert.equal(rl.check("k"), true); +}); diff --git a/server/src/sessions.ts b/server/src/sessions.ts new file mode 100644 index 0000000..f5c36ae --- /dev/null +++ b/server/src/sessions.ts @@ -0,0 +1,213 @@ +import { mkdir, readFile, writeFile, rename } from "node:fs/promises"; +import { dirname } from "node:path"; +import { randomBytes } from "node:crypto"; +import { config } from "./config.js"; +import { deriveKey, open, randomToken, safeEqual, seal, sha256 } from "./crypto.js"; + +export interface StoredSession { + id: string; + /** sha256 of the cookie secret; used to validate presented cookies. */ + secretHash: string; + /** base64 random salt for key derivation */ + salt: string; + /** sealed JSON {username, password} */ + sealedCredentials: string; + username: string; + createdAt: number; + lastSeenAt: number; + expiresAt: number; + remember: boolean; + userAgent: string; + ip: string; +} + +export interface LiveSession { + id: string; + username: string; + /** Basic Authorization header value for upstream calls. */ + authorization: string; + remember: boolean; + createdAt: number; + lastSeenAt: number; + expiresAt: number; + userAgent: string; + ip: string; +} + +const COOKIE_SEP = "."; + +export class SessionStore { + private sessions = new Map(); + private dirty = false; + private saveTimer: NodeJS.Timeout | null = null; + private sweepTimer: NodeJS.Timeout | null = null; + + constructor(private readonly file: string) {} + + async init(): Promise { + if (this.file) { + try { + const raw = await readFile(this.file, "utf8"); + const arr = JSON.parse(raw) as StoredSession[]; + const now = Date.now(); + for (const s of arr) if (s.expiresAt > now) this.sessions.set(s.id, s); + console.log(`[ihasmail] restored ${this.sessions.size} session(s)`); + } catch (err: unknown) { + if ((err as NodeJS.ErrnoException).code !== "ENOENT") { + console.warn("[ihasmail] could not read session file:", (err as Error).message); + } + } + } + this.sweepTimer = setInterval(() => this.sweep(), 60_000); + this.sweepTimer.unref(); + } + + async close(): Promise { + if (this.sweepTimer) clearInterval(this.sweepTimer); + if (this.saveTimer) clearTimeout(this.saveTimer); + await this.flush(); + } + + private sweep(): void { + const now = Date.now(); + let removed = 0; + for (const [id, s] of this.sessions) { + if (s.expiresAt <= now) { + this.sessions.delete(id); + removed++; + } + } + if (removed) this.scheduleSave(); + } + + private scheduleSave(): void { + this.dirty = true; + if (!this.file || this.saveTimer) return; + this.saveTimer = setTimeout(() => { + this.saveTimer = null; + void this.flush(); + }, 1000); + this.saveTimer.unref(); + } + + private async flush(): Promise { + if (!this.file || !this.dirty) return; + this.dirty = false; + try { + await mkdir(dirname(this.file), { recursive: true }); + const tmp = `${this.file}.tmp`; + await writeFile(tmp, JSON.stringify([...this.sessions.values()]), { mode: 0o600 }); + await rename(tmp, this.file); + } catch (err) { + console.warn("[ihasmail] could not persist sessions:", (err as Error).message); + } + } + + /** Create a session; returns the cookie value to hand to the client. */ + create(params: { + username: string; + password: string; + remember: boolean; + userAgent: string; + ip: string; + }): { cookie: string; session: LiveSession } { + const id = randomToken(18); + const secret = randomToken(32); + const salt = randomBytes(16); + const key = deriveKey(secret, config.appSecret, salt); + const now = Date.now(); + const ttl = (params.remember ? config.sessionRememberTtl : config.sessionTtl) * 1000; + const stored: StoredSession = { + id, + secretHash: sha256(secret), + salt: salt.toString("base64"), + sealedCredentials: seal(JSON.stringify({ u: params.username, p: params.password }), key), + username: params.username, + createdAt: now, + lastSeenAt: now, + expiresAt: now + ttl, + remember: params.remember, + userAgent: params.userAgent.slice(0, 200), + ip: params.ip, + }; + this.sessions.set(id, stored); + this.scheduleSave(); + const cookie = `${id}${COOKIE_SEP}${secret}`; + return { cookie, session: this.toLive(stored, params.username, params.password) }; + } + + /** Resolve a cookie to a live session (with decrypted upstream credentials). */ + resolve(cookie: string | undefined): LiveSession | null { + if (!cookie) return null; + const idx = cookie.indexOf(COOKIE_SEP); + if (idx <= 0) return null; + const id = cookie.slice(0, idx); + const secret = cookie.slice(idx + 1); + const stored = this.sessions.get(id); + if (!stored) return null; + const now = Date.now(); + if (stored.expiresAt <= now) { + this.sessions.delete(id); + this.scheduleSave(); + return null; + } + if (!safeEqual(stored.secretHash, sha256(secret))) return null; + const key = deriveKey(secret, config.appSecret, Buffer.from(stored.salt, "base64")); + const json = open(stored.sealedCredentials, key); + if (!json) return null; + let creds: { u: string; p: string }; + try { + creds = JSON.parse(json) as { u: string; p: string }; + } catch { + return null; + } + // Sliding expiry: bump every few minutes, not on every request. + if (now - stored.lastSeenAt > 60_000) { + stored.lastSeenAt = now; + const ttl = (stored.remember ? config.sessionRememberTtl : config.sessionTtl) * 1000; + stored.expiresAt = now + ttl; + this.scheduleSave(); + } + return this.toLive(stored, creds.u, creds.p); + } + + destroy(id: string): void { + if (this.sessions.delete(id)) this.scheduleSave(); + } + + destroyAllForUser(username: string, exceptId?: string): number { + let n = 0; + for (const [id, s] of this.sessions) { + if (s.username === username && id !== exceptId) { + this.sessions.delete(id); + n++; + } + } + if (n) this.scheduleSave(); + return n; + } + + listForUser(username: string): Array> { + const out = []; + for (const s of this.sessions.values()) { + if (s.username !== username) continue; + const { secretHash: _h, salt: _s, sealedCredentials: _c, ...rest } = s; + out.push(rest); + } + return out; + } + + private toLive(s: StoredSession, username: string, password: string): LiveSession { + return { + id: s.id, + username, + authorization: `Basic ${Buffer.from(`${username}:${password}`, "utf8").toString("base64")}`, + remember: s.remember, + createdAt: s.createdAt, + lastSeenAt: s.lastSeenAt, + expiresAt: s.expiresAt, + userAgent: s.userAgent, + ip: s.ip, + }; + } +} diff --git a/server/src/static.ts b/server/src/static.ts new file mode 100644 index 0000000..d994857 --- /dev/null +++ b/server/src/static.ts @@ -0,0 +1,101 @@ +import { createReadStream } from "node:fs"; +import { stat, readFile } from "node:fs/promises"; +import { extname, join, normalize, resolve, sep } from "node:path"; +import { Readable } from "node:stream"; +import type { Context, Handler } from "hono"; + +const MIME: Record = { + ".html": "text/html; charset=utf-8", + ".js": "text/javascript; charset=utf-8", + ".mjs": "text/javascript; charset=utf-8", + ".css": "text/css; charset=utf-8", + ".json": "application/json; charset=utf-8", + ".webmanifest": "application/manifest+json; charset=utf-8", + ".png": "image/png", + ".jpg": "image/jpeg", + ".jpeg": "image/jpeg", + ".gif": "image/gif", + ".svg": "image/svg+xml", + ".ico": "image/x-icon", + ".webp": "image/webp", + ".woff": "font/woff", + ".woff2": "font/woff2", + ".ttf": "font/ttf", + ".map": "application/json", + ".txt": "text/plain; charset=utf-8", + ".wasm": "application/wasm", +}; + +/** + * Content Security Policy for the app shell. Inline styles are required because + * sanitized HTML email carries style attributes; everything else is strict. + */ +export const APP_CSP = [ + "default-src 'self'", + "script-src 'self'", + "style-src 'self' 'unsafe-inline'", + "img-src 'self' data: blob:", + "font-src 'self' data:", + "connect-src 'self'", + "media-src 'self' blob:", + "frame-src 'self'", + "object-src 'none'", + "base-uri 'self'", + "form-action 'self'", + "frame-ancestors 'none'", + "worker-src 'self'", + "manifest-src 'self'", +].join("; "); + +export function staticHandler(root: string): Handler { + const absRoot = resolve(root); + let indexCache: { body: string; mtime: number } | null = null; + + async function serveIndex(c: Context) { + try { + const p = join(absRoot, "index.html"); + const st = await stat(p); + if (!indexCache || indexCache.mtime !== st.mtimeMs) { + indexCache = { body: await readFile(p, "utf8"), mtime: st.mtimeMs }; + } + c.header("Content-Type", "text/html; charset=utf-8"); + c.header("Cache-Control", "no-cache"); + c.header("Content-Security-Policy", APP_CSP); + return c.body(indexCache.body); + } catch { + c.header("Content-Type", "text/plain; charset=utf-8"); + return c.body("ihasmail: web build not found. Run `npm run build` first.", 503); + } + } + + return async (c) => { + if (c.req.method !== "GET" && c.req.method !== "HEAD") return c.text("Method Not Allowed", 405); + const urlPath = decodeURIComponent(new URL(c.req.url).pathname); + if (urlPath === "/" || urlPath === "/index.html") return serveIndex(c); + const rel = normalize(urlPath).replace(/^(\.\.[/\\])+/, ""); + const filePath = join(absRoot, rel); + if (!filePath.startsWith(absRoot + sep)) return serveIndex(c); + try { + const st = await stat(filePath); + if (!st.isFile()) return serveIndex(c); + const ext = extname(filePath).toLowerCase(); + c.header("Content-Type", MIME[ext] ?? "application/octet-stream"); + c.header("Content-Length", String(st.size)); + if (rel.startsWith("/assets/") || rel.startsWith("assets/")) { + c.header("Cache-Control", "public, max-age=31536000, immutable"); + } else if (ext === ".html") { + c.header("Cache-Control", "no-cache"); + c.header("Content-Security-Policy", APP_CSP); + } else { + c.header("Cache-Control", "public, max-age=3600"); + } + if (c.req.method === "HEAD") return c.body(null); + const stream = Readable.toWeb(createReadStream(filePath)) as ReadableStream; + return c.body(stream); + } catch { + // SPA fallback for client-side routes (no file extension) only. + if (!extname(rel)) return serveIndex(c); + return c.text("Not Found", 404); + } + }; +} diff --git a/server/src/upstream.ts b/server/src/upstream.ts new file mode 100644 index 0000000..87fa0e3 --- /dev/null +++ b/server/src/upstream.ts @@ -0,0 +1,94 @@ +import { config } from "./config.js"; + +export interface UpstreamSession { + capabilities: Record; + accounts: Record; + primaryAccounts: Record; + username: string; + apiUrl: string; + downloadUrl: string; + uploadUrl: string; + eventSourceUrl: string; + state: string; +} + +export class UpstreamError extends Error { + constructor( + message: string, + public readonly status: number, + ) { + super(message); + } +} + +const sessionCache = new Map(); +const SESSION_CACHE_MS = 5 * 60_000; + +export function wellKnownUrl(): string { + return `${config.stalwartUrl}/.well-known/jmap`; +} + +/** + * Fetch the JMAP session resource from Stalwart using the given Authorization + * header. Throws UpstreamError(401) on bad credentials. + */ +export async function fetchUpstreamSession(authorization: string): Promise { + const res = await fetch(wellKnownUrl(), { + headers: { authorization, accept: "application/json" }, + redirect: "follow", + signal: AbortSignal.timeout(config.upstreamTimeout), + }); + if (res.status === 401 || res.status === 403) { + throw new UpstreamError("Invalid credentials", 401); + } + if (!res.ok) { + throw new UpstreamError(`Upstream session request failed (${res.status})`, 502); + } + const session = (await res.json()) as UpstreamSession; + if (!session.apiUrl) throw new UpstreamError("Upstream returned an invalid JMAP session", 502); + return session; +} + +export async function getUpstreamSession(sessionId: string, authorization: string, force = false) { + const cached = sessionCache.get(sessionId); + if (!force && cached && Date.now() - cached.fetchedAt < SESSION_CACHE_MS) return cached.session; + const session = await fetchUpstreamSession(authorization); + sessionCache.set(sessionId, { session, fetchedAt: Date.now() }); + return session; +} + +export function forgetUpstreamSession(sessionId: string): void { + sessionCache.delete(sessionId); +} + +/** + * Rewrite the upstream session so the browser talks to our same-origin proxy + * endpoints instead of Stalwart directly (no CORS, no credentials in browser). + */ +export function localizeSession(s: UpstreamSession, extras: Record): Record { + const caps = { ...s.capabilities }; + // We proxy push as Server-Sent Events; hide the upstream websocket endpoint. + delete caps["urn:ietf:params:jmap:websocket"]; + return { + ...s, + capabilities: caps, + apiUrl: "/api/jmap", + downloadUrl: "/api/blob/{accountId}/{blobId}/{name}?accept={type}", + uploadUrl: "/api/upload/{accountId}", + eventSourceUrl: "/api/events?types={types}&closeafter={closeafter}&ping={ping}", + ...extras, + }; +} + +/** Resolve a possibly-relative upstream URL template against STALWART_URL. */ +export function absoluteUpstream(url: string): string { + try { + return new URL(url, config.stalwartUrl).toString(); + } catch { + return url; + } +} + +export function expandTemplate(template: string, vars: Record): string { + return template.replace(/\{(\w+)\}/g, (_m, k: string) => encodeURIComponent(vars[k] ?? "")); +} diff --git a/server/tsconfig.json b/server/tsconfig.json new file mode 100644 index 0000000..9e44e8c --- /dev/null +++ b/server/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "lib": ["ES2023"], + "types": ["node"], + "outDir": "dist", + "rootDir": "src", + "strict": true, + "noUncheckedIndexedAccess": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "declaration": false, + "sourceMap": true + }, + "include": ["src"], + "exclude": ["src/**/*.test.ts"] +} diff --git a/tests/test_smoke.py b/tests/test_smoke.py deleted file mode 100644 index c7b9b08..0000000 --- a/tests/test_smoke.py +++ /dev/null @@ -1,7 +0,0 @@ -from fastapi.testclient import TestClient -from app.main import app - -def test_root_redirect(): - client = TestClient(app) - r = client.get("/", allow_redirects=False) - assert r.status_code in (302, 303) diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..abb8739 --- /dev/null +++ b/web/index.html @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + ihasmail + + +
+ + + diff --git a/web/package.json b/web/package.json new file mode 100644 index 0000000..759e7ed --- /dev/null +++ b/web/package.json @@ -0,0 +1,31 @@ +{ + "name": "@ihasmail/web", + "version": "2.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -p tsconfig.json --noEmit && vite build", + "preview": "vite preview", + "typecheck": "tsc -p tsconfig.json --noEmit", + "test": "vitest run" + }, + "dependencies": { + "@tanstack/react-virtual": "^3.13.2", + "dompurify": "^3.2.4", + "lucide-react": "^0.477.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "wouter": "^3.6.0", + "zustand": "^5.0.3" + }, + "devDependencies": { + "@types/react": "^19.0.10", + "@types/react-dom": "^19.0.4", + "@vitejs/plugin-react": "^4.3.4", + "jsdom": "^26.0.0", + "typescript": "^5.7.3", + "vite": "^6.2.0", + "vitest": "^3.0.8" + } +} diff --git a/web/public/favicon.ico b/web/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c20ae3f2406e1c4d4c67d766b45faa5eb96cc9c1 GIT binary patch literal 15086 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�&4Af0}o-n>X>68jRusP+Zb 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 KQ7QH_;Qs(34N_qM literal 0 HcmV?d00001 diff --git a/web/public/img/favicon-64.png b/web/public/img/favicon-64.png new file mode 100644 index 0000000000000000000000000000000000000000..3c7e0fe74183588ff8a41c98edf5a9505f54a8cd GIT binary patch literal 4810 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 FV1f!`mSF$@ literal 0 HcmV?d00001 diff --git a/web/public/img/icon-512.png b/web/public/img/icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..1957cc9c6b5b9c2677f3bfb3f6c6fb65b1acb717 GIT binary patch literal 235279 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

xADa(a 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%0DBd^YK(Pw{ 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 literal 0 HcmV?d00001 diff --git a/web/public/img/icon-maskable.png b/web/public/img/icon-maskable.png new file mode 100644 index 0000000000000000000000000000000000000000..80764ba70fc995fdd7b93ed5cfc18246e3658b30 GIT binary patch literal 28375 zcmce7Wl$YK*XHGNae`dj-QC?Cg1fuB6GCuz_u%dh!9BQpaJS&DoA-Nbw`zav-<_(S zGu2b4x_i!<(|w+PIzmZ7>I*zBJOBXrA|oxX@=x~ur@%u0yQ{3*!Tb}%rqU|%0Dw0o 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�aG-t`gd(RQMJIh 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 { + event.waitUntil(caches.open(VERSION).then((c) => c.addAll(SHELL)).then(() => self.skipWaiting())); +}); + +self.addEventListener("activate", (event) => { + event.waitUntil( + caches.keys().then((keys) => Promise.all(keys.filter((k) => k !== VERSION).map((k) => caches.delete(k)))).then(() => self.clients.claim()) + ); +}); + +self.addEventListener("fetch", (event) => { + const req = event.request; + if (req.method !== "GET") return; + const url = new URL(req.url); + if (url.origin !== self.location.origin) return; + if (url.pathname.startsWith("/api/")) return; + + // Hashed build assets: cache-first. + if (url.pathname.startsWith("/assets/")) { + event.respondWith( + caches.match(req).then((hit) => hit || fetch(req).then((res) => { + const copy = res.clone(); + caches.open(VERSION).then((c) => c.put(req, copy)); + return res; + })) + ); + return; + } + + // Navigations & everything else: network-first, fall back to cached shell. + if (req.mode === "navigate") { + event.respondWith(fetch(req).catch(() => caches.match("/"))); + return; + } + event.respondWith(fetch(req).catch(() => caches.match(req))); +}); diff --git a/web/src/App.tsx b/web/src/App.tsx new file mode 100644 index 0000000..e72ad99 --- /dev/null +++ b/web/src/App.tsx @@ -0,0 +1,137 @@ +import { lazy, Suspense, useEffect } from "react"; +import { Route, Switch, Redirect, useLocation } from "wouter"; +import { useSession } from "@/store/session"; +import { useMail } from "@/store/mail"; +import { useContacts } from "@/store/contacts"; +import { useCalendar } from "@/store/calendar"; +import { useFiles } from "@/store/files"; +import { useSieve } from "@/store/sieve"; +import { push } from "@/jmap/push"; +import { client } from "@/jmap/client"; +import { ToastHost } from "@/ui/toast"; +import { ConfirmHost } from "@/ui/dialog"; +import { Spinner } from "@/ui/misc"; +import { LoginPage } from "@/views/Login"; +import { AppShell } from "@/views/AppShell"; +import { MailView } from "@/views/mail/MailView"; +import { ComposerDock } from "@/views/compose/ComposerDock"; +import { setUnreadBadge } from "@/lib/notify"; +import { useSettings } from "@/store/settings"; + +const ContactsView = lazy(() => import("@/views/contacts/ContactsView").then((m) => ({ default: m.ContactsView }))); +const CalendarView = lazy(() => import("@/views/calendar/CalendarView").then((m) => ({ default: m.CalendarView }))); +const FilesView = lazy(() => import("@/views/files/FilesView").then((m) => ({ default: m.FilesView }))); +const SettingsView = lazy(() => import("@/views/settings/SettingsView").then((m) => ({ default: m.SettingsView }))); + +export function App() { + const status = useSession((s) => s.status); + const bootstrap = useSession((s) => s.bootstrap); + useEffect(() => { + void bootstrap(); + }, [bootstrap]); + + if (status === "loading") { + return ( +

+ +
+ ); + } + return ( + <> + {status === "anonymous" ? : } + + + + ); +} + +function AuthedApp() { + const accountId = useSession((s) => s.accountId); + const [location] = useLocation(); + + // Initial data + push wiring + useEffect(() => { + if (!accountId) return; + const mail = useMail.getState(); + void mail.loadMailboxes(); + void mail.loadIdentities(); + void mail.loadQuota(); + void useContacts.getState().init(); + void useCalendar.getState().init(); + void useFiles.getState().init(); + void useSieve.getState().init(); + push.start(); + const pending = new Map>(); + let timer: number | null = null; + const unsub = push.subscribe((acct, type) => { + const set = pending.get(acct) ?? new Set(); + set.add(type); + pending.set(acct, set); + if (timer) return; + timer = window.setTimeout(() => { + timer = null; + for (const [a, types] of pending) { + if (a === useMail.getState().accountId) void useMail.getState().applyChanges(types); + if (a === useContacts.getState().accountId) useContacts.getState().applyChanges(types); + if (a === useCalendar.getState().accountId) useCalendar.getState().applyChanges(types); + if (a === useFiles.getState().accountId) useFiles.getState().applyChanges(types); + if (a === useSieve.getState().accountId) useSieve.getState().applyChanges(types); + } + pending.clear(); + }, 400); + }); + const unsubState = client.onSessionState(() => void useSession.getState().refresh()); + // Poll fallback when push is disconnected (every 2 minutes) + const poll = window.setInterval(() => { + if (!push.connected && document.visibilityState === "visible") { + void useMail.getState().applyChanges(new Set(["Email", "Mailbox"])); + } + }, 120_000); + return () => { + unsub(); + unsubState(); + window.clearInterval(poll); + push.stop(); + }; + }, [accountId]); + + // Unread badge in title/favicon + const inboxUnread = useMail((s) => { + const id = s.roleId("inbox"); + return id ? (s.mailboxes[id]?.unreadEmails ?? 0) : 0; + }); + const appName = useSession((s) => s.session?.ihasmail?.appName ?? "ihasmail"); + useEffect(() => { + void import("@/lib/notify").then((m) => { + m.setBaseTitle(appName); + setUnreadBadge(inboxUnread); + }); + }, [inboxUnread, appName]); + + // Request notification permission lazily when enabled + const notif = useSettings((s) => s.settings.desktopNotifications); + useEffect(() => { + if (notif) void import("@/lib/notify").then((m) => m.requestNotificationPermission()); + }, [notif]); + + return ( + + }> + + {(p) => } + {(p) => } + {(p) => } + {(p) => } + {(p) => } + {(p) => } + + + + {location === "/" ? : } + + + + + ); +} diff --git a/web/src/jmap/client.ts b/web/src/jmap/client.ts new file mode 100644 index 0000000..ca35623 --- /dev/null +++ b/web/src/jmap/client.ts @@ -0,0 +1,348 @@ +import type { Id, Invocation, JmapResponse, JmapSession, MethodError, UploadResponse } from "./types"; + +export const CAP = { + core: "urn:ietf:params:jmap:core", + mail: "urn:ietf:params:jmap:mail", + submission: "urn:ietf:params:jmap:submission", + vacation: "urn:ietf:params:jmap:vacationresponse", + sieve: "urn:ietf:params:jmap:sieve", + contacts: "urn:ietf:params:jmap:contacts", + contactsParse: "urn:ietf:params:jmap:contacts:parse", + calendars: "urn:ietf:params:jmap:calendars", + calendarsParse: "urn:ietf:params:jmap:calendars:parse", + principals: "urn:ietf:params:jmap:principals", + availability: "urn:ietf:params:jmap:principals:availability", + quota: "urn:ietf:params:jmap:quota", + blob: "urn:ietf:params:jmap:blob", + filenode: "urn:ietf:params:jmap:filenode", + websocket: "urn:ietf:params:jmap:websocket", +} as const; + +export class JmapMethodError extends Error { + constructor( + public readonly method: string, + public readonly error: MethodError, + ) { + super(`${method}: ${error.type}${error.description ? ` - ${error.description}` : ""}`); + this.name = "JmapMethodError"; + } + get type() { + return this.error.type; + } +} + +export class ApiError extends Error { + constructor( + public readonly status: number, + public readonly code: string, + message?: string, + ) { + super(message ?? `${code} (${status})`); + this.name = "ApiError"; + } +} + +export interface ApiErrorBody { + error?: string; + message?: string; + type?: string; + detail?: string; + title?: string; +} + +interface Pending { + method: string; + args: Record; + using: Set; + resolve: (v: unknown) => void; + reject: (e: unknown) => void; +} + +export type ResultRef = { resultOf: string; name: string; path: string }; + +const HEADERS = { "content-type": "application/json", accept: "application/json", "x-requested-with": "ihasmail" }; + +/** Generic fetch against our same-origin API with CSRF header + auth handling. */ +export async function apiFetch(path: string, init: RequestInit = {}): Promise { + const res = await fetch(path, { + ...init, + headers: { ...HEADERS, ...(init.headers as Record | undefined) }, + credentials: "same-origin", + }); + if (res.status === 401 && !path.startsWith("/api/auth/login")) { + client.handleUnauthenticated(); + throw new ApiError(401, "unauthenticated", "Your session has expired. Please sign in again."); + } + if (!res.ok) { + let body: ApiErrorBody = {}; + try { + body = (await res.json()) as ApiErrorBody; + } catch { + /* ignore */ + } + throw new ApiError(res.status, body.error ?? body.type ?? "error", body.message ?? body.detail ?? body.title ?? res.statusText); + } + if (res.status === 204) return undefined as T; + return (await res.json()) as T; +} + +export class JmapClient { + session: JmapSession | null = null; + private pending: Pending[] = []; + private flushScheduled = false; + private callCounter = 0; + private unauthHandlers = new Set<() => void>(); + private stateHandlers = new Set<(sessionState: string) => void>(); + + get maxCallsInRequest(): number { + const core = this.session?.capabilities[CAP.core] as { maxCallsInRequest?: number } | undefined; + return core?.maxCallsInRequest ?? 16; + } + + get maxObjectsInGet(): number { + const core = this.session?.capabilities[CAP.core] as { maxObjectsInGet?: number } | undefined; + return core?.maxObjectsInGet ?? 500; + } + + get maxSizeUpload(): number { + const core = this.session?.capabilities[CAP.core] as { maxSizeUpload?: number } | undefined; + return core?.maxSizeUpload ?? 50_000_000; + } + + hasCapability(cap: string): boolean { + return Boolean(this.session?.capabilities && cap in this.session.capabilities); + } + + accountHasCapability(accountId: Id, cap: string): boolean { + const acc = this.session?.accounts[accountId]; + return Boolean(acc && cap in acc.accountCapabilities); + } + + primaryAccount(cap: string): Id | null { + return this.session?.primaryAccounts[cap] ?? null; + } + + onUnauthenticated(fn: () => void): () => void { + this.unauthHandlers.add(fn); + return () => this.unauthHandlers.delete(fn); + } + + onSessionState(fn: (s: string) => void): () => void { + this.stateHandlers.add(fn); + return () => this.stateHandlers.delete(fn); + } + + handleUnauthenticated(): void { + for (const fn of this.unauthHandlers) fn(); + } + + /** + * Queue a single method call; calls made within the same tick are batched + * into one HTTP request (up to maxCallsInRequest). + */ + call>(method: string, args: Record, using: string[] = []): Promise { + return new Promise((resolve, reject) => { + this.pending.push({ + method, + args, + using: new Set([CAP.core, ...usingFor(method), ...using]), + resolve: resolve as (v: unknown) => void, + reject, + }); + if (!this.flushScheduled) { + this.flushScheduled = true; + queueMicrotask(() => void this.flush()); + } + }); + } + + private async flush(): Promise { + this.flushScheduled = false; + const batch = this.pending; + this.pending = []; + const max = this.maxCallsInRequest; + for (let i = 0; i < batch.length; i += max) { + void this.sendBatch(batch.slice(i, i + max)); + } + } + + private async sendBatch(batch: Pending[]): Promise { + const using = new Set(); + const calls: Invocation[] = batch.map((p, idx) => { + for (const u of p.using) using.add(u); + return [p.method, p.args, `c${this.callCounter++}_${idx}`]; + }); + try { + const res = await this.request(calls, [...using]); + const byId = new Map(); + for (const inv of res.methodResponses) { + const arr = byId.get(inv[2]) ?? []; + arr.push(inv); + byId.set(inv[2], arr); + } + batch.forEach((p, idx) => { + const responses = byId.get(calls[idx]![2]); + const first = responses?.[0]; + if (!first) { + p.reject(new JmapMethodError(p.method, { type: "serverFail", description: "No response for call" })); + return; + } + if (first[0] === "error") p.reject(new JmapMethodError(p.method, first[1] as MethodError)); + else p.resolve(first[1]); + }); + } catch (err) { + for (const p of batch) p.reject(err); + } + } + + /** Low-level request: send invocations verbatim, return raw response. */ + async request(methodCalls: Invocation[], using: string[] = [CAP.core, CAP.mail], createdIds?: Record): Promise { + const body: Record = { using, methodCalls }; + if (createdIds) body.createdIds = createdIds; + const res = await apiFetch("/api/jmap", { method: "POST", body: JSON.stringify(body) }); + if (res.sessionState && this.session && res.sessionState !== this.session.state) { + for (const fn of this.stateHandlers) fn(res.sessionState); + } + return res; + } + + /** + * Run a chain of invocations (which may use result references) and return + * responses keyed by call id. Throws if any call errored, unless `allowErrors`. + */ + async chain( + calls: Array<[method: string, args: Record, id: string]>, + opts: { using?: string[]; allowErrors?: boolean } = {}, + ): Promise[]>> { + const using = new Set([CAP.core]); + for (const [m] of calls) for (const u of usingFor(m)) using.add(u); + for (const u of opts.using ?? []) using.add(u); + const res = await this.request(calls, [...using]); + const out = new Map[]>(); + for (const [name, args, id] of res.methodResponses) { + if (name === "error" && !opts.allowErrors) { + const method = calls.find((c) => c[2] === id)?.[0] ?? id; + throw new JmapMethodError(method, args as MethodError); + } + const arr = out.get(id) ?? []; + arr.push(name === "error" ? { __error: args } : args); + out.set(id, arr); + } + return out; + } + + uploadUrl(accountId: Id): string { + return `/api/upload/${encodeURIComponent(accountId)}`; + } + + downloadUrl(accountId: Id, blobId: Id, name: string, type: string, inline = false): string { + const safeName = (name || "attachment").replace(/[/\\?#%]/g, "_"); + const u = `/api/blob/${encodeURIComponent(accountId)}/${encodeURIComponent(blobId)}/${encodeURIComponent(safeName)}?accept=${encodeURIComponent(type || "application/octet-stream")}`; + return inline ? `${u}&inline=1` : u; + } + + /** Upload a blob with progress reporting (XHR because fetch lacks upload progress). */ + upload( + accountId: Id, + data: Blob, + opts: { type?: string; onProgress?: (loaded: number, total: number) => void; signal?: AbortSignal } = {}, + ): Promise { + return new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest(); + xhr.open("POST", this.uploadUrl(accountId)); + xhr.setRequestHeader("content-type", opts.type || data.type || "application/octet-stream"); + xhr.setRequestHeader("x-requested-with", "ihasmail"); + xhr.responseType = "json"; + xhr.upload.onprogress = (e) => { + if (e.lengthComputable) opts.onProgress?.(e.loaded, e.total); + }; + xhr.onload = () => { + if (xhr.status === 401) { + this.handleUnauthenticated(); + reject(new ApiError(401, "unauthenticated")); + return; + } + if (xhr.status >= 200 && xhr.status < 300 && xhr.response) resolve(xhr.response as UploadResponse); + else reject(new ApiError(xhr.status, (xhr.response as ApiErrorBody)?.error ?? "upload_failed", (xhr.response as ApiErrorBody)?.message ?? "Upload failed")); + }; + xhr.onerror = () => reject(new ApiError(0, "network_error", "Network error during upload")); + xhr.onabort = () => reject(new ApiError(0, "aborted", "Upload cancelled")); + opts.signal?.addEventListener("abort", () => xhr.abort()); + xhr.send(data); + }); + } + + /** Fetch a blob's content as text (via the download proxy). */ + async fetchBlobText(accountId: Id, blobId: Id, type = "text/plain"): Promise { + const res = await fetch(this.downloadUrl(accountId, blobId, "blob.txt", type), { credentials: "same-origin" }); + if (res.status === 401) { + this.handleUnauthenticated(); + throw new ApiError(401, "unauthenticated"); + } + if (!res.ok) throw new ApiError(res.status, "download_failed"); + return await res.text(); + } + + async fetchBlob(accountId: Id, blobId: Id, type = "application/octet-stream"): Promise { + const res = await fetch(this.downloadUrl(accountId, blobId, "blob", type), { credentials: "same-origin" }); + if (res.status === 401) { + this.handleUnauthenticated(); + throw new ApiError(401, "unauthenticated"); + } + if (!res.ok) throw new ApiError(res.status, "download_failed"); + return await res.blob(); + } +} + +/** Map method name prefix → required capability URNs. */ +function usingFor(method: string): string[] { + const type = method.split("/")[0] ?? ""; + switch (type) { + case "Mailbox": + case "Thread": + case "Email": + case "SearchSnippet": + case "Identity": + return [CAP.mail]; + case "EmailSubmission": + return [CAP.mail, CAP.submission]; + case "VacationResponse": + return [CAP.mail, CAP.vacation]; + case "SieveScript": + return [CAP.sieve]; + case "AddressBook": + case "ContactCard": + return [CAP.contacts, CAP.contactsParse]; + case "Calendar": + case "CalendarEvent": + case "ParticipantIdentity": + case "CalendarEventNotification": + return [CAP.calendars, CAP.calendarsParse]; + case "Principal": + return [CAP.principals, CAP.availability]; + case "Quota": + return [CAP.quota]; + case "Blob": + return [CAP.blob]; + case "FileNode": + return [CAP.filenode]; + case "PushSubscription": + return []; + default: + return []; + } +} + +export const client = new JmapClient(); + +/** Build a JMAP result reference argument ("#ids": {...}). */ +export function ref(resultOf: string, name: string, path: string): ResultRef { + return { resultOf, name, path }; +} + +/** Chunk ids for /get calls to respect maxObjectsInGet. */ +export function chunk(arr: T[], size: number): T[][] { + const out: T[][] = []; + for (let i = 0; i < arr.length; i += size) out.push(arr.slice(i, i + size)); + return out; +} diff --git a/web/src/jmap/push.ts b/web/src/jmap/push.ts new file mode 100644 index 0000000..23fe199 --- /dev/null +++ b/web/src/jmap/push.ts @@ -0,0 +1,104 @@ +import type { Id, StateChange } from "./types"; + +export type PushListener = (accountId: Id, type: string, newState: string) => void; + +/** + * JMAP push over Server-Sent Events (proxied through our server). + * Emits per-type state changes so stores can refresh incrementally. + */ +class PushManager { + private es: EventSource | null = null; + private listeners = new Set(); + private connectionListeners = new Set<(connected: boolean) => void>(); + private backoff = 1000; + private reconnectTimer: number | null = null; + private stopped = true; + private lastStates = new Map(); + connected = false; + + start(): void { + this.stopped = false; + this.connect(); + document.addEventListener("visibilitychange", this.onVisibility); + window.addEventListener("online", this.onOnline); + } + + stop(): void { + this.stopped = true; + document.removeEventListener("visibilitychange", this.onVisibility); + window.removeEventListener("online", this.onOnline); + if (this.reconnectTimer) window.clearTimeout(this.reconnectTimer); + this.reconnectTimer = null; + this.es?.close(); + this.es = null; + this.setConnected(false); + } + + subscribe(fn: PushListener): () => void { + this.listeners.add(fn); + return () => this.listeners.delete(fn); + } + + onConnection(fn: (connected: boolean) => void): () => void { + this.connectionListeners.add(fn); + return () => this.connectionListeners.delete(fn); + } + + private setConnected(v: boolean) { + if (this.connected === v) return; + this.connected = v; + for (const fn of this.connectionListeners) fn(v); + } + + private onVisibility = () => { + if (document.visibilityState === "visible" && !this.es && !this.stopped) this.connect(); + }; + + private onOnline = () => { + if (!this.es && !this.stopped) this.connect(); + }; + + private connect(): void { + if (this.stopped || this.es) return; + const url = `/api/events?types=*&closeafter=no&ping=30`; + const es = new EventSource(url, { withCredentials: true }); + this.es = es; + es.onopen = () => { + this.backoff = 1000; + this.setConnected(true); + }; + es.addEventListener("state", (ev) => { + try { + const data = JSON.parse((ev as MessageEvent).data as string) as StateChange; + if (data["@type"] !== "StateChange") return; + for (const [accountId, types] of Object.entries(data.changed)) { + for (const [type, state] of Object.entries(types)) { + const key = `${accountId}/${type}`; + if (this.lastStates.get(key) === state) continue; + this.lastStates.set(key, state); + for (const fn of this.listeners) fn(accountId, type, state); + } + } + } catch { + /* ignore malformed */ + } + }); + es.addEventListener("ping", () => { + /* keepalive */ + }); + es.onerror = () => { + es.close(); + this.es = null; + this.setConnected(false); + if (this.stopped) return; + const delay = Math.min(this.backoff, 60_000); + this.backoff = Math.min(this.backoff * 2, 60_000); + this.reconnectTimer = window.setTimeout(() => { + this.reconnectTimer = null; + this.connect(); + }, delay); + }; + } +} + +export const push = new PushManager(); diff --git a/web/src/jmap/types.ts b/web/src/jmap/types.ts new file mode 100644 index 0000000..474dbd0 --- /dev/null +++ b/web/src/jmap/types.ts @@ -0,0 +1,775 @@ +/* ------------------------------------------------------------------ */ +/* JMAP core (RFC 8620) */ +/* ------------------------------------------------------------------ */ + +export type Id = string; +export type UTCDate = string; // "2024-01-01T10:00:00Z" +export type LocalDate = string; // "2024-01-01T10:00:00" + +export interface Account { + name: string; + isPersonal: boolean; + isReadOnly: boolean; + accountCapabilities: Record; +} + +export interface JmapSession { + capabilities: Record; + accounts: Record; + primaryAccounts: Record; + username: string; + apiUrl: string; + downloadUrl: string; + uploadUrl: string; + eventSourceUrl: string; + state: string; + ihasmail?: { + appName: string; + imageProxy: boolean; + maxUploadBytes: number; + sessionId: string; + loginName: string; + remember: boolean; + }; +} + +export interface CoreCapabilities { + maxSizeUpload: number; + maxConcurrentUpload: number; + maxSizeRequest: number; + maxConcurrentRequests: number; + maxCallsInRequest: number; + maxObjectsInGet: number; + maxObjectsInSet: number; + collationAlgorithms: string[]; +} + +export interface MailCapabilities { + maxMailboxesPerEmail: number | null; + maxMailboxDepth: number | null; + maxSizeMailboxName: number; + maxSizeAttachmentsPerEmail: number; + emailQuerySortOptions: string[]; + mayCreateTopLevelMailbox: boolean; +} + +export type Invocation = [name: string, args: Record, callId: string]; + +export interface JmapResponse { + methodResponses: Invocation[]; + sessionState: string; + createdIds?: Record; +} + +export interface MethodError { + type: string; + description?: string; + [k: string]: unknown; +} + +export interface SetError { + type: string; + description?: string; + properties?: string[]; + [k: string]: unknown; +} + +export interface SetResponse> { + accountId: Id; + oldState: string | null; + newState: string; + created?: Record; + updated?: Record; + destroyed?: Id[]; + notCreated?: Record; + notUpdated?: Record; + notDestroyed?: Record; +} + +export interface GetResponse { + accountId: Id; + state: string; + list: T[]; + notFound: Id[]; +} + +export interface QueryResponse { + accountId: Id; + queryState: string; + canCalculateChanges: boolean; + position: number; + ids: Id[]; + total?: number; + limit?: number; +} + +export interface ChangesResponse { + accountId: Id; + oldState: string; + newState: string; + hasMoreChanges: boolean; + created: Id[]; + updated: Id[]; + destroyed: Id[]; +} + +export interface StateChange { + "@type": "StateChange"; + changed: Record>; +} + +/* ------------------------------------------------------------------ */ +/* Mail (RFC 8621) */ +/* ------------------------------------------------------------------ */ + +export type MailboxRole = + | "inbox" + | "archive" + | "drafts" + | "sent" + | "trash" + | "junk" + | "important" + | "all" + | "flagged" + | "subscribed" + | null; + +export interface MailboxRights { + mayReadItems: boolean; + mayAddItems: boolean; + mayRemoveItems: boolean; + maySetSeen: boolean; + maySetKeywords: boolean; + mayCreateChild: boolean; + mayRename: boolean; + mayDelete: boolean; + maySubmit: boolean; +} + +export interface Mailbox { + id: Id; + name: string; + parentId: Id | null; + role: MailboxRole; + sortOrder: number; + totalEmails: number; + unreadEmails: number; + totalThreads: number; + unreadThreads: number; + myRights: MailboxRights; + isSubscribed: boolean; + shareWith?: Record> | null; +} + +export interface EmailAddress { + name: string | null; + email: string; +} + +export interface EmailAddressGroup { + name: string | null; + addresses: EmailAddress[]; +} + +export interface EmailHeader { + name: string; + value: string; +} + +export interface EmailBodyPart { + partId: string | null; + blobId: Id | null; + size: number; + headers?: EmailHeader[]; + name: string | null; + type: string; + charset: string | null; + disposition: string | null; + cid: string | null; + language?: string[] | null; + location?: string | null; + subParts?: EmailBodyPart[] | null; +} + +export interface EmailBodyValue { + value: string; + isEncodingProblem: boolean; + isTruncated: boolean; +} + +export interface Email { + id: Id; + blobId: Id; + threadId: Id; + mailboxIds: Record; + keywords: Record; + size: number; + receivedAt: UTCDate; + messageId?: string[] | null; + inReplyTo?: string[] | null; + references?: string[] | null; + sender?: EmailAddress[] | null; + from?: EmailAddress[] | null; + to?: EmailAddress[] | null; + cc?: EmailAddress[] | null; + bcc?: EmailAddress[] | null; + replyTo?: EmailAddress[] | null; + subject?: string | null; + sentAt?: string | null; + hasAttachment?: boolean; + preview?: string; + bodyStructure?: EmailBodyPart; + bodyValues?: Record; + textBody?: EmailBodyPart[]; + htmlBody?: EmailBodyPart[]; + attachments?: EmailBodyPart[]; + headers?: EmailHeader[]; + // convenience header fetches + "header:List-Unsubscribe:asText"?: string | null; + "header:List-Unsubscribe-Post:asText"?: string | null; + "header:List-Id:asText"?: string | null; + "header:Disposition-Notification-To:asAddresses"?: EmailAddress[] | null; + "header:X-Priority:asText"?: string | null; + "header:Importance:asText"?: string | null; + "header:Auto-Submitted:asText"?: string | null; + "header:Return-Path:asText"?: string | null; + "header:Authentication-Results:asText"?: string | null; + "header:Received:asText:all"?: string[] | null; + "header:X-Spam-Status:asText"?: string | null; + "header:X-Spam-Result:asText"?: string | null; +} + +export interface Thread { + id: Id; + emailIds: Id[]; +} + +export interface Identity { + id: Id; + name: string; + email: string; + replyTo: EmailAddress[] | null; + bcc: EmailAddress[] | null; + textSignature: string; + htmlSignature: string; + mayDelete: boolean; +} + +export interface EmailSubmission { + id: Id; + identityId: Id; + emailId: Id; + threadId: Id; + envelope: { mailFrom: { email: string; parameters?: Record | null }; rcptTo: { email: string }[] } | null; + sendAt: UTCDate; + undoStatus: "pending" | "final" | "canceled"; + deliveryStatus: Record | null; +} + +export interface VacationResponse { + id: "singleton"; + isEnabled: boolean; + fromDate: UTCDate | null; + toDate: UTCDate | null; + subject: string | null; + textBody: string | null; + htmlBody: string | null; +} + +export interface SearchSnippet { + emailId: Id; + subject: string | null; + preview: string | null; +} + +export interface EmailFilterCondition { + inMailbox?: Id; + inMailboxOtherThan?: Id[]; + before?: UTCDate; + after?: UTCDate; + minSize?: number; + maxSize?: number; + allInThreadHaveKeyword?: string; + someInThreadHaveKeyword?: string; + noneInThreadHaveKeyword?: string; + hasKeyword?: string; + notKeyword?: string; + hasAttachment?: boolean; + text?: string; + from?: string; + to?: string; + cc?: string; + bcc?: string; + subject?: string; + body?: string; + header?: string[]; +} + +export interface FilterOperator { + operator: "AND" | "OR" | "NOT"; + conditions: Array>; +} + +export type EmailFilter = EmailFilterCondition | FilterOperator; + +export interface Comparator { + property: string; + isAscending?: boolean; + collation?: string; + keyword?: string; +} + +/* ------------------------------------------------------------------ */ +/* Quota (RFC 9425) */ +/* ------------------------------------------------------------------ */ + +export interface Quota { + id: Id; + resourceType: "count" | "octets"; + used: number; + hardLimit: number; + scope: "account" | "domain" | "global"; + name: string; + types: string[]; + warnLimit?: number | null; + softLimit?: number | null; + description?: string | null; +} + +/* ------------------------------------------------------------------ */ +/* Sieve (RFC 9661) */ +/* ------------------------------------------------------------------ */ + +export interface SieveScript { + id: Id; + name: string; + blobId: Id; + isActive: boolean; +} + +/* ------------------------------------------------------------------ */ +/* Principals (RFC 9670) */ +/* ------------------------------------------------------------------ */ + +export interface Principal { + id: Id; + type: "individual" | "group" | "resource" | "location" | "other"; + name: string; + description: string | null; + email: string | null; + timeZone: string | null; + capabilities?: Record; + accounts?: Record | null; +} + +export interface BusyPeriod { + utcStart: UTCDate; + utcEnd: UTCDate; + busyStatus: "confirmed" | "tentative" | "unavailable"; + event: JSCalendarEvent | null; +} + +/* ------------------------------------------------------------------ */ +/* Contacts (RFC 9610 / JSContact RFC 9553) */ +/* ------------------------------------------------------------------ */ + +export interface AddressBookRights { + mayRead: boolean; + mayWrite: boolean; + mayShare: boolean; + mayDelete: boolean; +} + +export interface AddressBook { + id: Id; + name: string; + description: string | null; + sortOrder: number; + isDefault: boolean; + isSubscribed: boolean; + shareWith: Record | null; + myRights: AddressBookRights; +} + +export interface JSContactNameComponent { + "@type"?: "NameComponent"; + kind: "title" | "given" | "given2" | "surname" | "surname2" | "credential" | "generation" | "separator"; + value: string; +} + +export interface JSContactName { + "@type"?: "Name"; + components?: JSContactNameComponent[]; + isOrdered?: boolean; + full?: string; + defaultSeparator?: string; + sortAs?: Record; +} + +export interface JSContactEmail { + "@type"?: "EmailAddress"; + address: string; + contexts?: Record; + pref?: number; + label?: string; +} + +export interface JSContactPhone { + "@type"?: "Phone"; + number: string; + features?: Record; + contexts?: Record; + pref?: number; + label?: string; +} + +export interface JSContactAddressComponent { + "@type"?: "AddressComponent"; + kind: string; + value: string; +} + +export interface JSContactAddress { + "@type"?: "Address"; + components?: JSContactAddressComponent[]; + isOrdered?: boolean; + countryCode?: string; + coordinates?: string; + timeZone?: string; + contexts?: Record; + full?: string; + defaultSeparator?: string; + pref?: number; +} + +export interface JSContactOrganization { + "@type"?: "Organization"; + name?: string; + units?: { "@type"?: "OrgUnit"; name: string }[]; + sortAs?: string; + contexts?: Record; +} + +export interface JSContactTitle { + "@type"?: "Title"; + name: string; + kind?: "title" | "role"; + organizationId?: string; +} + +export interface JSContactAnniversary { + "@type"?: "Anniversary"; + kind: "birth" | "death" | "wedding" | string; + date: { "@type"?: "PartialDate" | "Timestamp"; year?: number; month?: number; day?: number; utc?: string }; + place?: JSContactAddress; +} + +export interface JSContactNote { + "@type"?: "Note"; + note: string; + created?: string; + author?: { name?: string; uri?: string }; +} + +export interface JSContactOnlineService { + "@type"?: "OnlineService"; + service?: string; + uri?: string; + user?: string; + contexts?: Record; + pref?: number; + label?: string; +} + +export interface JSContactMedia { + "@type"?: "Media"; + kind: "photo" | "sound" | "logo"; + uri?: string; + blobId?: Id; + mediaType?: string; + contexts?: Record; + pref?: number; + label?: string; +} + +export interface JSContactRelation { + "@type"?: "Relation"; + relation?: Record; +} + +export interface ContactCard { + id: Id; + addressBookIds: Record; + "@type"?: "Card"; + version?: "1.0"; + uid: string; + kind?: "individual" | "group" | "org" | "location" | "device" | "application"; + created?: UTCDate; + updated?: UTCDate; + language?: string; + prodId?: string; + members?: Record; + name?: JSContactName; + nicknames?: Record; pref?: number }>; + organizations?: Record; + titles?: Record; + emails?: Record; + phones?: Record; + addresses?: Record; + onlineServices?: Record; + anniversaries?: Record; + notes?: Record; + keywords?: Record; + media?: Record; + relatedTo?: Record; + links?: Record; + preferredLanguages?: Record }>; + speakToAs?: { "@type"?: "SpeakToAs"; grammaticalGender?: string; pronouns?: Record }; + calendars?: Record; + schedulingAddresses?: Record; + personalInfo?: Record; +} + +/* ------------------------------------------------------------------ */ +/* Calendars (draft-ietf-jmap-calendars / JSCalendar RFC 8984) */ +/* ------------------------------------------------------------------ */ + +export interface CalendarRights { + mayReadFreeBusy: boolean; + mayReadItems: boolean; + mayWriteAll: boolean; + mayWriteOwn: boolean; + mayUpdatePrivate: boolean; + mayRSVP: boolean; + mayShare: boolean; + mayDelete: boolean; +} + +export interface Calendar { + id: Id; + name: string; + description: string | null; + color: string | null; + sortOrder: number; + isSubscribed: boolean; + isVisible: boolean; + isDefault: boolean; + includeInAvailability: "all" | "attending" | "none"; + defaultAlertsWithTime: Record | null; + defaultAlertsWithoutTime: Record | null; + timeZone: string | null; + shareWith: Record | null; + myRights: CalendarRights; +} + +export interface JSCalendarAlert { + "@type"?: "Alert"; + trigger: + | { "@type"?: "OffsetTrigger"; offset: string; relativeTo?: "start" | "end" } + | { "@type"?: "AbsoluteTrigger"; when: UTCDate }; + acknowledged?: UTCDate; + action?: "display" | "email"; + relatedTo?: Record; +} + +export interface JSCalendarNDay { + "@type"?: "NDay"; + day: "mo" | "tu" | "we" | "th" | "fr" | "sa" | "su"; + nthOfPeriod?: number; +} + +export interface JSCalendarRecurrenceRule { + "@type"?: "RecurrenceRule"; + frequency: "yearly" | "monthly" | "weekly" | "daily" | "hourly" | "minutely" | "secondly"; + interval?: number; + rscale?: string; + skip?: string; + firstDayOfWeek?: string; + byDay?: JSCalendarNDay[]; + byMonthDay?: number[]; + byMonth?: string[]; + byYearDay?: number[]; + byWeekNo?: number[]; + byHour?: number[]; + byMinute?: number[]; + bySecond?: number[]; + bySetPosition?: number[]; + count?: number; + until?: LocalDate; +} + +export interface JSCalendarParticipant { + "@type"?: "Participant"; + name?: string; + email?: string; + description?: string; + sendTo?: Record; + kind?: "individual" | "group" | "location" | "resource"; + roles: Record; + locationId?: string; + language?: string; + participationStatus?: "needs-action" | "accepted" | "declined" | "tentative" | "delegated"; + participationComment?: string; + expectReply?: boolean; + scheduleAgent?: "server" | "client" | "none"; + scheduleForceSend?: boolean; + scheduleSequence?: number; + scheduleStatus?: string[]; + scheduleUpdated?: UTCDate; + sentBy?: string; + invitedBy?: string; + delegatedTo?: Record; + delegatedFrom?: Record; + memberOf?: Record; + links?: Record; + progress?: string; + percentComplete?: number; +} + +export interface JSCalendarLocation { + "@type"?: "Location"; + name?: string; + description?: string; + locationTypes?: Record; + relativeTo?: "start" | "end"; + timeZone?: string; + coordinates?: string; + links?: Record; +} + +export interface JSCalendarVirtualLocation { + "@type"?: "VirtualLocation"; + name?: string; + description?: string; + uri: string; + features?: Record; +} + +export interface JSCalendarEvent { + "@type"?: "Event"; + uid: string; + relatedTo?: Record; + prodId?: string; + created?: UTCDate; + updated?: UTCDate; + sequence?: number; + method?: string; + title?: string; + description?: string; + descriptionContentType?: string; + showWithoutTime?: boolean; + locations?: Record; + virtualLocations?: Record; + links?: Record; + locale?: string; + keywords?: Record; + categories?: Record; + color?: string; + recurrenceId?: LocalDate; + recurrenceIdTimeZone?: string; + recurrenceRules?: JSCalendarRecurrenceRule[]; + excludedRecurrenceRules?: JSCalendarRecurrenceRule[]; + recurrenceOverrides?: Record | null>; + excluded?: boolean; + priority?: number; + freeBusyStatus?: "free" | "busy"; + privacy?: "public" | "private" | "secret"; + replyTo?: Record; + sentBy?: string; + participants?: Record; + requestStatus?: string; + useDefaultAlerts?: boolean; + alerts?: Record; + localizations?: Record>; + timeZone?: string | null; + start: LocalDate; + duration?: string; + status?: "confirmed" | "cancelled" | "tentative"; +} + +export interface CalendarEvent extends JSCalendarEvent { + id: Id; + baseEventId?: Id | null; + calendarIds: Record; + isDraft?: boolean; + isOrigin?: boolean; + utcStart?: UTCDate; + utcEnd?: UTCDate; + mayInviteSelf?: boolean; + mayInviteOthers?: boolean; + hideAttendees?: boolean; +} + +export interface ParticipantIdentity { + id: Id; + name: string; + calendarAddress: string; + sendTo: Record; + isDefault: boolean; +} + +export interface CalendarEventNotification { + id: Id; + created: UTCDate; + changedBy: { name: string; email: string | null; principalId: Id | null; calendarAddress?: string | null }; + comment: string | null; + type: "created" | "updated" | "destroyed"; + calendarEventId: Id; + isDraft?: boolean; + event: JSCalendarEvent; + eventPatch?: Record; +} + +/* ------------------------------------------------------------------ */ +/* Files (draft-ietf-jmap-filenode) */ +/* ------------------------------------------------------------------ */ + +export interface FilesRights { + mayRead: boolean; + mayAddChildren: boolean; + mayRename: boolean; + mayDelete: boolean; + mayModifyContent: boolean; + mayShare: boolean; +} + +export interface FileNode { + id: Id; + parentId: Id | null; + nodeType: "file" | "directory" | "symlink"; + blobId: Id | null; + target?: string[] | null; + size: number | null; + name: string; + type: string | null; + created: UTCDate; + modified: UTCDate | null; + accessed?: UTCDate | null; + changed?: UTCDate; + executable?: boolean; + isSubscribed?: boolean; + myRights: FilesRights; + shareWith?: Record | null; + role?: string | null; +} + +/* ------------------------------------------------------------------ */ +/* Blob (RFC 9404) */ +/* ------------------------------------------------------------------ */ + +export interface UploadResponse { + accountId: Id; + blobId: Id; + type: string; + size: number; +} + +export interface BlobGetResponse { + id: Id; + "data:asText"?: string | null; + "data:asBase64"?: string | null; + size?: number; + isEncodingProblem?: boolean; + isTruncated?: boolean; +} diff --git a/web/src/lib/__tests__/address.test.ts b/web/src/lib/__tests__/address.test.ts new file mode 100644 index 0000000..daa48e6 --- /dev/null +++ b/web/src/lib/__tests__/address.test.ts @@ -0,0 +1,23 @@ +import { describe, expect, it } from "vitest"; +import { formatAddress, initials, isValidEmail, parseAddressList } from "../address"; + +describe("address parsing", () => { + it("parses mixed lists", () => { + const list = parseAddressList('Ann Example , bob@example.org; "Smith, John" '); + expect(list).toEqual([ + { name: "Ann Example", email: "ann@example.com" }, + { name: null, email: "bob@example.org" }, + { name: "Smith, John", email: "j@x.io" }, + ]); + }); + it("formats with quoting when needed", () => { + expect(formatAddress({ name: "Smith, John", email: "j@x.io" })).toBe('"Smith, John" '); + expect(formatAddress({ name: null, email: "j@x.io" })).toBe("j@x.io"); + }); + it("validates and initials", () => { + expect(isValidEmail("a@b.co")).toBe(true); + expect(isValidEmail("nope")).toBe(false); + expect(initials({ name: "Grace Hopper", email: "" })).toBe("GH"); + expect(initials({ name: null, email: "linus@kernel.org" })).toBe("LK"); + }); +}); diff --git a/web/src/lib/__tests__/dates.test.ts b/web/src/lib/__tests__/dates.test.ts new file mode 100644 index 0000000..403a6f6 --- /dev/null +++ b/web/src/lib/__tests__/dates.test.ts @@ -0,0 +1,23 @@ +import { describe, expect, it } from "vitest"; +import { formatDuration, parseDuration, zonedToDate, dateToZonedLocal, monthGrid } from "../dates"; + +describe("dates", () => { + it("parses and formats ISO durations", () => { + expect(parseDuration("PT1H30M")).toBe(5400); + expect(parseDuration("P1DT2H")).toBe(93600); + expect(parseDuration("-PT15M")).toBe(-900); + expect(formatDuration(5400)).toBe("PT1H30M"); + expect(formatDuration(-600)).toBe("-PT10M"); + expect(formatDuration(86400)).toBe("P1D"); + }); + it("converts zoned local times to instants", () => { + const d = zonedToDate("2024-07-01T12:00:00", "America/New_York"); + expect(d.toISOString()).toBe("2024-07-01T16:00:00.000Z"); + expect(dateToZonedLocal(d, "Europe/Berlin")).toBe("2024-07-01T18:00:00"); + }); + it("builds a 42-day month grid starting on week start", () => { + const g = monthGrid(new Date(2024, 1, 15), 1); + expect(g).toHaveLength(42); + expect(g[0]!.getDay()).toBe(1); + }); +}); diff --git a/web/src/lib/__tests__/html.test.ts b/web/src/lib/__tests__/html.test.ts new file mode 100644 index 0000000..3892dcd --- /dev/null +++ b/web/src/lib/__tests__/html.test.ts @@ -0,0 +1,34 @@ +import { describe, expect, it } from "vitest"; +import { sanitizeEmailHtml, sanitizeEditorHtml } from "../html"; + +describe("sanitizeEmailHtml", () => { + it("removes scripts and event handlers", () => { + const r = sanitizeEmailHtml('
hi
'); + expect(r.html).not.toContain("script"); + expect(r.html).not.toContain("onclick"); + expect(r.html).not.toContain("iframe"); + }); + it("blocks remote images until allowed and maps cid", () => { + const src = '
x
'; + const blocked = sanitizeEmailHtml(src, { cidMap: { "logo@x": "/api/blob/a/b/logo.png" } }); + expect(blocked.remoteCount).toBe(2); + expect(blocked.html).toContain('data-ihm-blocked="1"'); + expect(blocked.html).toContain("/api/blob/a/b/logo.png"); + expect(blocked.html).not.toMatch(/src="https:\/\/t\.example/); + expect(blocked.html).not.toContain("url(https://t.example"); + const allowed = sanitizeEmailHtml(src, { allowRemote: true, proxyRemote: true }); + expect(allowed.html).toContain("/api/image?url=https%3A%2F%2Ft.example%2Fp.gif"); + }); + it("forces links to open in new tabs", () => { + const r = sanitizeEmailHtml('
x'); + expect(r.html).toContain('target="_blank"'); + expect(r.html).toContain("noopener"); + }); + it("strips javascript: urls", () => { + const r = sanitizeEmailHtml('x'); + expect(r.html).not.toContain("javascript:"); + }); + it("editor sanitizer keeps basic formatting", () => { + expect(sanitizeEditorHtml("x")).toBe("x"); + }); +}); diff --git a/web/src/lib/__tests__/search.test.ts b/web/src/lib/__tests__/search.test.ts new file mode 100644 index 0000000..5024d2e --- /dev/null +++ b/web/src/lib/__tests__/search.test.ts @@ -0,0 +1,42 @@ +import { describe, expect, it } from "vitest"; +import { buildFilter, parseQuery } from "../search"; +import type { Mailbox } from "@/jmap/types"; + +const mb = (id: string, name: string, role: Mailbox["role"] = null): Mailbox => + ({ id, name, role, parentId: null, sortOrder: 0, totalEmails: 0, unreadEmails: 0, totalThreads: 0, unreadThreads: 0, isSubscribed: true, myRights: {} as Mailbox["myRights"] }); + +describe("parseQuery", () => { + it("parses gmail-style operators", () => { + const p = parseQuery('from:ada subject:"q3 plan" has:attachment is:unread in:work before:2024-01-02 larger:2M hello world'); + expect(p.from).toBe("ada"); + expect(p.subject).toBe("q3 plan"); + expect(p.hasAttachment).toBe(true); + expect(p.unread).toBe(true); + expect(p.in).toBe("work"); + expect(p.before).toMatch(/^2024-01-0[12]T/); + expect(p.larger).toBe(2 * 1024 * 1024); + expect(p.text).toEqual(["hello", "world"]); + }); + it("handles labels and negation", () => { + const p = parseQuery("label:work -label:done is:starred"); + expect(p.label).toEqual(["work"]); + expect(p.notLabel).toEqual(["done"]); + expect(p.starred).toBe(true); + }); +}); + +describe("buildFilter", () => { + const mailboxes = { inbox: mb("inbox", "Inbox", "inbox"), work: mb("work", "Work") }; + it("builds a simple condition", () => { + const f = buildFilter(parseQuery("invoice"), mailboxes, "inbox"); + expect(f).toEqual({ text: "invoice", inMailbox: "inbox" }); + }); + it("resolves in: to a mailbox by name and ANDs keyword conditions", () => { + const f = buildFilter(parseQuery("in:work is:starred label:foo"), mailboxes, "inbox"); + expect(f).toEqual({ operator: "AND", conditions: [{ inMailbox: "work" }, { hasKeyword: "$flagged" }, { hasKeyword: "foo" }] }); + }); + it("maps is:unread to notKeyword $seen", () => { + const f = buildFilter(parseQuery("is:unread"), mailboxes, null); + expect(f).toEqual({ notKeyword: "$seen" }); + }); +}); diff --git a/web/src/lib/__tests__/sieve.test.ts b/web/src/lib/__tests__/sieve.test.ts new file mode 100644 index 0000000..e2613f2 --- /dev/null +++ b/web/src/lib/__tests__/sieve.test.ts @@ -0,0 +1,31 @@ +import { describe, expect, it } from "vitest"; +import { newRule, rulesToSieve, sieveToRules, testToSieve, sieveString } from "../sieve"; + +describe("sieve codec", () => { + it("escapes strings", () => { + expect(sieveString('a "quoted" \\ value')).toBe('"a \\"quoted\\" \\\\ value"'); + }); + it("generates tests", () => { + expect(testToSieve({ type: "header", header: "subject", op: "contains", value: "hi" })).toBe('header :contains "subject" "hi"'); + expect(testToSieve({ type: "header", header: "x-foo", op: "notexists", value: "" })).toBe('not exists "x-foo"'); + expect(testToSieve({ type: "address", header: "from", part: "domain", op: "is", value: "example.com" })).toBe('address :domain :is "from" "example.com"'); + expect(testToSieve({ type: "size", op: "over", value: 2048 })).toBe("size :over 2048"); + }); + it("round-trips rules through a script", () => { + const rules = [ + newRule({ id: "r1", name: "Newsletters", tests: [{ type: "header", header: "list-id", op: "exists", value: "" }], actions: [{ type: "fileinto", mailbox: "Newsletters" }, { type: "markread" }, { type: "stop" }] }), + newRule({ id: "r2", name: "Big", enabled: false, join: "anyof", tests: [{ type: "size", op: "over", value: 5_000_000 }], actions: [{ type: "addflag", flag: "big" }] }), + ]; + const script = rulesToSieve(rules); + expect(script).toContain('require ["fileinto", "imap4flags"];'); + expect(script).toContain('if exists "list-id"'); + expect(script).toContain('fileinto "Newsletters";'); + expect(script).toContain('addflag "\\\\Seen";'); + expect(script).toContain("# (disabled) Big"); + expect(sieveToRules(script)).toEqual(rules); + }); + it("reports hand-written scripts as raw", () => { + expect(sieveToRules('require ["fileinto"];\nif true { keep; }')).toBeNull(); + expect(sieveToRules("")).toEqual([]); + }); +}); diff --git a/web/src/lib/__tests__/sieveApply.test.ts b/web/src/lib/__tests__/sieveApply.test.ts new file mode 100644 index 0000000..b0a3e5e --- /dev/null +++ b/web/src/lib/__tests__/sieveApply.test.ts @@ -0,0 +1,31 @@ +import { describe, expect, it } from "vitest"; +import { evaluateRule, evaluateTest } from "../sieveApply"; +import type { Email } from "@/jmap/types"; +import type { SieveRule } from "../sieve"; + +const email = { + id: "e1", blobId: "b", threadId: "t", mailboxIds: { inbox: true }, keywords: {}, size: 5000, receivedAt: "2026-01-01T00:00:00Z", + from: [{ name: "Ada Lovelace", email: "ada@example.org" }], to: [{ name: null, email: "me@x.io" }], subject: "Invoice #42 is ready", preview: "Please find attached", + "header:List-Id:asText": "", +} as unknown as Email; + +describe("sieve client-side evaluation", () => { + it("evaluates header/address/size/body tests", () => { + expect(evaluateTest(email, { type: "header", header: "from", op: "contains", value: "ada@" })).toBe(true); + expect(evaluateTest(email, { type: "header", header: "subject", op: "matches", value: "invoice*ready" })).toBe(true); + expect(evaluateTest(email, { type: "header", header: "subject", op: "regex", value: "^Invoice #\\d+" })).toBe(true); + expect(evaluateTest(email, { type: "header", header: "list-id", op: "exists", value: "" })).toBe(true); + expect(evaluateTest(email, { type: "header", header: "x-none", op: "notexists", value: "" })).toBe(true); + expect(evaluateTest(email, { type: "address", header: "from", part: "domain", op: "is", value: "example.org" })).toBe(true); + expect(evaluateTest(email, { type: "address", header: "from", part: "localpart", op: "is", value: "ada" })).toBe(true); + expect(evaluateTest(email, { type: "size", op: "over", value: 1000 })).toBe(true); + expect(evaluateTest(email, { type: "size", op: "under", value: 1000 })).toBe(false); + expect(evaluateTest(email, { type: "body", op: "contains", value: "attached" }, "Please find attached the file")).toBe(true); + }); + it("combines with allof/anyof", () => { + const base: SieveRule = { id: "r", name: "r", enabled: true, join: "allof", tests: [{ type: "header", header: "from", op: "contains", value: "ada" }, { type: "header", header: "subject", op: "contains", value: "nope" }], actions: [] }; + expect(evaluateRule(email, base)).toBe(false); + expect(evaluateRule(email, { ...base, join: "anyof" })).toBe(true); + expect(evaluateRule(email, { ...base, tests: [{ type: "true" }] })).toBe(true); + }); +}); diff --git a/web/src/lib/__tests__/signatureHtml.test.ts b/web/src/lib/__tests__/signatureHtml.test.ts new file mode 100644 index 0000000..8671260 --- /dev/null +++ b/web/src/lib/__tests__/signatureHtml.test.ts @@ -0,0 +1,26 @@ +import { describe, expect, it } from "vitest"; +import { buildMarkerSignature, compactHtml, markerOf, SIGNATURE_LIMIT } from "../signatureHtml"; + +describe("signature compaction", () => { + it("strips office cruft and non-essential styles but keeps colours and links", () => { + const src = `

John Ellis

linuxexpert.org
`; + const out = compactHtml(src); + expect(out).not.toContain("mso-"); + expect(out).not.toContain("class="); + expect(out).not.toContain("John Ellis
"); + expect(out).toContain('href="https://linuxexpert.org"'); + expect(out).toContain('width="100"'); + expect(out.length).toBeLessThan(src.length / 2); + }); + it("builds marker signatures within the limit", () => { + const big = `
${"x".repeat(1000)}
`; + const m = buildMarkerSignature("blob123", big); + expect(m.htmlSignature.length).toBeLessThanOrEqual(SIGNATURE_LIMIT); + expect(m.textSignature.length).toBeLessThanOrEqual(SIGNATURE_LIMIT); + expect(markerOf(m.htmlSignature)).toEqual({ blobId: "blob123", type: "text/html" }); + expect(markerOf("
plain
")).toBeNull(); + }); +}); diff --git a/web/src/lib/__tests__/text.test.ts b/web/src/lib/__tests__/text.test.ts new file mode 100644 index 0000000..b25408a --- /dev/null +++ b/web/src/lib/__tests__/text.test.ts @@ -0,0 +1,27 @@ +import { describe, expect, it } from "vitest"; +import { htmlToText, quoteText, replySubject, textToHtml } from "../text"; + +describe("text helpers", () => { + it("linkifies and escapes", () => { + const html = textToHtml("see now"); + expect(html).toContain("<"); + expect(html).toContain(' { + expect(textToHtml("> hi\n>> there")).toContain('class="q1"'); + expect(textToHtml("> hi\n>> there")).toContain('class="q2"'); + }); + it("converts html to text", () => { + const t = htmlToText("

Hello world

  • one
  • two
q
link"); + expect(t).toContain("Hello world"); + expect(t).toContain("- one"); + expect(t).toContain("> q"); + expect(t).toContain("link "); + }); + it("quotes and subjects", () => { + expect(quoteText("a\n> b")).toBe("> a\n>> b"); + expect(replySubject("Re: Hi", "Re")).toBe("Re: Hi"); + expect(replySubject("Fwd: Hi", "Re")).toBe("Re: Hi"); + expect(replySubject("Hi", "Fwd")).toBe("Fwd: Hi"); + }); +}); diff --git a/web/src/lib/address.ts b/web/src/lib/address.ts new file mode 100644 index 0000000..e7475f6 --- /dev/null +++ b/web/src/lib/address.ts @@ -0,0 +1,116 @@ +import type { EmailAddress } from "@/jmap/types"; + +const EMAIL_RE = /^[^\s@<>"',;]+@[^\s@<>"',;]+\.[^\s@<>"',;]+$/; + +export function isValidEmail(s: string): boolean { + return EMAIL_RE.test(s.trim()); +} + +/** + * Parse a free-form recipient string ("Ann , bob@y.org; \"C, D\" ") + * into a list of EmailAddress. Lenient by design. + */ +export function parseAddressList(input: string): EmailAddress[] { + const out: EmailAddress[] = []; + let buf = ""; + let inQuote = false; + let inAngle = false; + const flush = () => { + const a = parseOne(buf); + if (a) out.push(a); + buf = ""; + }; + for (const ch of input) { + if (ch === '"' && !inAngle) inQuote = !inQuote; + if (ch === "<" && !inQuote) inAngle = true; + if (ch === ">" && !inQuote) inAngle = false; + if ((ch === "," || ch === ";" || ch === "\n") && !inQuote && !inAngle) { + flush(); + continue; + } + buf += ch; + } + flush(); + return out; +} + +export function parseOne(raw: string): EmailAddress | null { + const s = raw.trim(); + if (!s) return null; + const m = /^(.*?)\s*<([^<>]+)>\s*$/.exec(s); + if (m) { + let name = m[1]!.trim(); + if (name.startsWith('"') && name.endsWith('"')) name = name.slice(1, -1).replace(/\\(.)/g, "$1"); + return { name: name || null, email: m[2]!.trim() }; + } + return { name: null, email: s.replace(/^<|>$/g, "") }; +} + +export function formatAddress(a: EmailAddress | null | undefined): string { + if (!a) return ""; + if (!a.name) return a.email; + const needsQuote = /[,;<>"()\\]/.test(a.name); + const name = needsQuote ? `"${a.name.replace(/(["\\])/g, "\\$1")}"` : a.name; + return `${name} <${a.email}>`; +} + +export function formatAddressList(list: EmailAddress[] | null | undefined): string { + return (list ?? []).map(formatAddress).join(", "); +} + +export function displayName(a: EmailAddress | null | undefined, fallback = "(unknown)"): string { + if (!a) return fallback; + if (a.name?.trim()) return a.name.trim(); + return a.email || fallback; +} + +export function shortName(a: EmailAddress | null | undefined): string { + const n = displayName(a, ""); + if (!n) return ""; + if (n.includes("@")) return n.split("@")[0]!; + return n.split(/\s+/)[0]!; +} + +export function initials(a: EmailAddress | { name?: string | null; email?: string } | string | null | undefined): string { + const name = typeof a === "string" ? a : a?.name || a?.email || ""; + const parts = name + .replace(/[<>"]/g, "") + .split(/[\s._@-]+/) + .filter(Boolean); + if (!parts.length) return "?"; + if (parts.length === 1) return parts[0]!.slice(0, 2).toUpperCase(); + return (parts[0]![0]! + parts[1]![0]!).toUpperCase(); +} + +const PALETTE = [ + "#0f766e", "#b45309", "#7c3aed", "#be185d", "#1d4ed8", "#047857", + "#c2410c", "#4338ca", "#a21caf", "#0e7490", "#b91c1c", "#15803d", +]; + +export function avatarColor(seed: string | null | undefined): string { + const s = (seed ?? "").toLowerCase(); + let h = 0; + for (let i = 0; i < s.length; i++) h = (h * 31 + s.charCodeAt(i)) >>> 0; + return PALETTE[h % PALETTE.length]!; +} + +export function sameAddress(a: string | null | undefined, b: string | null | undefined): boolean { + return (a ?? "").trim().toLowerCase() === (b ?? "").trim().toLowerCase(); +} + +export function uniqueAddresses(list: EmailAddress[]): EmailAddress[] { + const seen = new Set(); + const out: EmailAddress[] = []; + for (const a of list) { + const k = a.email.trim().toLowerCase(); + if (!k || seen.has(k)) continue; + seen.add(k); + out.push(a); + } + return out; +} + +export function domainOf(email: string): string { + const i = email.lastIndexOf("@"); + return i >= 0 ? email.slice(i + 1).toLowerCase() : ""; +} diff --git a/web/src/lib/contacts.ts b/web/src/lib/contacts.ts new file mode 100644 index 0000000..f369cfc --- /dev/null +++ b/web/src/lib/contacts.ts @@ -0,0 +1,149 @@ +import type { ContactCard, EmailAddress, JSContactName } from "@/jmap/types"; + +/** Best display name for a card. */ +export function contactDisplayName(c: ContactCard): string { + const n = c.name; + if (n?.full?.trim()) return n.full.trim(); + const comps = n?.components ?? []; + const ordered = comps.filter((x) => ["given", "given2", "surname", "surname2"].includes(x.kind)); + if (ordered.length) { + // Prefer given + surname order regardless of isOrdered for display. + const given = comps.filter((x) => x.kind === "given" || x.kind === "given2").map((x) => x.value).join(" "); + const sur = comps.filter((x) => x.kind === "surname" || x.kind === "surname2").map((x) => x.value).join(" "); + const s = `${given} ${sur}`.trim(); + if (s) return s; + } + if (c.kind === "group" || c.kind === "org") { + const org = Object.values(c.organizations ?? {})[0]?.name; + if (org) return org; + } + const nick = Object.values(c.nicknames ?? {})[0]?.name; + if (nick) return nick; + const org = Object.values(c.organizations ?? {})[0]?.name; + if (org) return org; + const email = primaryEmail(c); + if (email) return email; + return "(no name)"; +} + +export function nameParts(c: ContactCard): { given: string; surname: string; prefix: string; suffix: string; middle: string } { + const comps = c.name?.components ?? []; + const pick = (k: string) => comps.filter((x) => x.kind === k).map((x) => x.value).join(" "); + return { given: pick("given"), middle: pick("given2"), surname: pick("surname"), prefix: pick("title"), suffix: pick("credential") || pick("generation") }; +} + +export function buildName(parts: { given?: string; middle?: string; surname?: string; prefix?: string; suffix?: string }): JSContactName | undefined { + const components: JSContactName["components"] = []; + if (parts.prefix?.trim()) components.push({ "@type": "NameComponent", kind: "title", value: parts.prefix.trim() }); + if (parts.given?.trim()) components.push({ "@type": "NameComponent", kind: "given", value: parts.given.trim() }); + if (parts.middle?.trim()) components.push({ "@type": "NameComponent", kind: "given2", value: parts.middle.trim() }); + if (parts.surname?.trim()) components.push({ "@type": "NameComponent", kind: "surname", value: parts.surname.trim() }); + if (parts.suffix?.trim()) components.push({ "@type": "NameComponent", kind: "credential", value: parts.suffix.trim() }); + if (!components.length) return undefined; + const full = [parts.prefix, parts.given, parts.middle, parts.surname, parts.suffix].map((s) => s?.trim()).filter(Boolean).join(" "); + return { "@type": "Name", components, isOrdered: true, full }; +} + +export function primaryEmail(c: ContactCard): string | null { + const emails = Object.values(c.emails ?? {}); + if (!emails.length) return null; + const sorted = [...emails].sort((a, b) => (a.pref ?? 100) - (b.pref ?? 100)); + return sorted[0]!.address; +} + +export function contactEmails(c: ContactCard): EmailAddress[] { + const name = contactDisplayName(c); + return Object.values(c.emails ?? {}).map((e) => ({ name: name.includes("@") ? null : name, email: e.address })); +} + +export function contactPhoto(c: ContactCard, accountId: string): string | null { + const m = Object.values(c.media ?? {}).find((x) => x.kind === "photo"); + if (!m) return null; + if (m.uri) return m.uri.startsWith("data:") ? m.uri : null; + if (m.blobId) return `/api/blob/${encodeURIComponent(accountId)}/${encodeURIComponent(m.blobId)}/photo?accept=${encodeURIComponent(m.mediaType ?? "image/jpeg")}&inline=1`; + return null; +} + +export function sortKey(c: ContactCard, by: "surname" | "given" = "given"): string { + const p = nameParts(c); + const k = by === "surname" ? `${p.surname} ${p.given}` : `${p.given} ${p.surname}`; + return (k.trim() || contactDisplayName(c)).toLowerCase(); +} + +export function formatAddressLines(a: { components?: Array<{ kind: string; value: string }>; full?: string }): string[] { + if (a.full) return a.full.split(/\n/); + const get = (k: string) => + (a.components ?? []) + .filter((c) => c.kind === k) + .map((c) => c.value) + .join(" "); + const lines: string[] = []; + const street = [get("number"), get("name"), get("apartment"), get("building"), get("floor"), get("room")].filter(Boolean).join(" "); + const pobox = get("postOfficeBox"); + if (pobox) lines.push(pobox); + if (street) lines.push(street); + const city = [get("locality"), get("region")].filter(Boolean).join(", "); + const cityLine = [city, get("postcode")].filter(Boolean).join(" "); + if (cityLine) lines.push(cityLine); + if (get("country")) lines.push(get("country")); + return lines; +} + +/** Generate a vCard 4.0 for export. */ +export function toVCard(c: ContactCard): string { + const esc = (s: string) => s.replace(/\\/g, "\\\\").replace(/;/g, "\\;").replace(/,/g, "\\,").replace(/\n/g, "\\n"); + const lines = ["BEGIN:VCARD", "VERSION:4.0"]; + lines.push(`UID:${c.uid}`); + if (c.kind && c.kind !== "individual") lines.push(`KIND:${c.kind}`); + lines.push(`FN:${esc(contactDisplayName(c))}`); + const p = nameParts(c); + if (p.given || p.surname) lines.push(`N:${esc(p.surname)};${esc(p.given)};${esc(p.middle)};${esc(p.prefix)};${esc(p.suffix)}`); + for (const n of Object.values(c.nicknames ?? {})) lines.push(`NICKNAME:${esc(n.name)}`); + for (const e of Object.values(c.emails ?? {})) { + const types = Object.keys(e.contexts ?? {}).join(","); + lines.push(`EMAIL${types ? `;TYPE=${types}` : ""}${e.pref ? `;PREF=${e.pref}` : ""}:${e.address}`); + } + for (const ph of Object.values(c.phones ?? {})) { + const types = [...Object.keys(ph.contexts ?? {}), ...Object.keys(ph.features ?? {})].join(","); + lines.push(`TEL${types ? `;TYPE=${types}` : ""}${ph.pref ? `;PREF=${ph.pref}` : ""}:${ph.number}`); + } + for (const a of Object.values(c.addresses ?? {})) { + const get = (k: string) => + (a.components ?? []) + .filter((x) => x.kind === k) + .map((x) => x.value) + .join(" "); + const street = [get("number"), get("name"), get("apartment")].filter(Boolean).join(" "); + const types = Object.keys(a.contexts ?? {}).join(","); + lines.push(`ADR${types ? `;TYPE=${types}` : ""}:${esc(get("postOfficeBox"))};;${esc(street)};${esc(get("locality"))};${esc(get("region"))};${esc(get("postcode"))};${esc(get("country"))}`); + } + for (const o of Object.values(c.organizations ?? {})) lines.push(`ORG:${esc(o.name ?? "")}${(o.units ?? []).map((u) => `;${esc(u.name)}`).join("")}`); + for (const t of Object.values(c.titles ?? {})) lines.push(`${t.kind === "role" ? "ROLE" : "TITLE"}:${esc(t.name)}`); + for (const an of Object.values(c.anniversaries ?? {})) { + const d = an.date; + const v = d.utc ? d.utc.slice(0, 10).replace(/-/g, "") : `${d.year ?? "--"}${String(d.month ?? 0).padStart(2, "0")}${String(d.day ?? 0).padStart(2, "0")}`; + if (an.kind === "birth") lines.push(`BDAY:${v}`); + else if (an.kind === "wedding") lines.push(`ANNIVERSARY:${v}`); + } + for (const n of Object.values(c.notes ?? {})) lines.push(`NOTE:${esc(n.note)}`); + for (const l of Object.values(c.links ?? {})) lines.push(`URL:${l.uri}`); + for (const s of Object.values(c.onlineServices ?? {})) if (s.uri) lines.push(`IMPP:${s.uri}`); + if (c.members) for (const m of Object.keys(c.members)) lines.push(`MEMBER:${m}`); + lines.push("END:VCARD"); + return lines.map(fold).join("\r\n") + "\r\n"; +} + +function fold(line: string): string { + if (line.length <= 75) return line; + const out: string[] = []; + let i = 0; + while (i < line.length) { + out.push((i ? " " : "") + line.slice(i, i + 74)); + i += 74; + } + return out.join("\r\n"); +} + +export function newKey(prefix = "k"): string { + return `${prefix}${Math.random().toString(36).slice(2, 8)}`; +} diff --git a/web/src/lib/dates.ts b/web/src/lib/dates.ts new file mode 100644 index 0000000..5b772a6 --- /dev/null +++ b/web/src/lib/dates.ts @@ -0,0 +1,250 @@ +export const DAY_MS = 86_400_000; + +export function startOfDay(d: Date): Date { + const x = new Date(d); + x.setHours(0, 0, 0, 0); + return x; +} + +export function endOfDay(d: Date): Date { + const x = new Date(d); + x.setHours(23, 59, 59, 999); + return x; +} + +export function addDays(d: Date, n: number): Date { + const x = new Date(d); + x.setDate(x.getDate() + n); + return x; +} + +export function addMonths(d: Date, n: number): Date { + const x = new Date(d); + const day = x.getDate(); + x.setDate(1); + x.setMonth(x.getMonth() + n); + const dim = daysInMonth(x.getFullYear(), x.getMonth()); + x.setDate(Math.min(day, dim)); + return x; +} + +export function addMinutes(d: Date, n: number): Date { + return new Date(d.getTime() + n * 60_000); +} + +export function daysInMonth(year: number, month: number): number { + return new Date(year, month + 1, 0).getDate(); +} + +export function startOfMonth(d: Date): Date { + return new Date(d.getFullYear(), d.getMonth(), 1); +} + +export function endOfMonth(d: Date): Date { + return new Date(d.getFullYear(), d.getMonth() + 1, 0, 23, 59, 59, 999); +} + +/** weekStart: 0 = Sunday, 1 = Monday */ +export function startOfWeek(d: Date, weekStart = 1): Date { + const x = startOfDay(d); + const diff = (x.getDay() - weekStart + 7) % 7; + return addDays(x, -diff); +} + +export function isSameDay(a: Date, b: Date): boolean { + return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate(); +} + +export function isToday(d: Date): boolean { + return isSameDay(d, new Date()); +} + +/** 6x7 grid of dates covering the month view. */ +export function monthGrid(anchor: Date, weekStart = 1): Date[] { + const first = startOfWeek(startOfMonth(anchor), weekStart); + const out: Date[] = []; + for (let i = 0; i < 42; i++) out.push(addDays(first, i)); + return out; +} + +export function weekDays(anchor: Date, weekStart = 1, count = 7): Date[] { + const first = startOfWeek(anchor, weekStart); + const out: Date[] = []; + for (let i = 0; i < count; i++) out.push(addDays(first, i)); + return out; +} + +function pad(n: number, w = 2): string { + return String(n).padStart(w, "0"); +} + +/** Format a Date's wall-clock (browser local) as JSCalendar LocalDateTime. */ +export function toLocalDateTime(d: Date): string { + return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}T${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`; +} + +export function toLocalDateOnly(d: Date): string { + return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`; +} + +/** Date → "YYYY-MM-DDTHH:MM:SSZ" (JMAP UTCDate, no millis). */ +export function toUTCDate(d: Date): string { + return d.toISOString().replace(/\.\d{3}Z$/, "Z"); +} + +export function parseLocalDateTime(s: string): { y: number; mo: number; d: number; h: number; mi: number; se: number } | null { + const m = /^(\d{4})-(\d{2})-(\d{2})(?:T(\d{2}):(\d{2})(?::(\d{2}))?)?/.exec(s); + if (!m) return null; + return { y: +m[1]!, mo: +m[2]! - 1, d: +m[3]!, h: +(m[4] ?? 0), mi: +(m[5] ?? 0), se: +(m[6] ?? 0) }; +} + +const dtfCache = new Map(); +function dtf(tz: string): Intl.DateTimeFormat | null { + let f = dtfCache.get(tz); + if (f) return f; + try { + f = new Intl.DateTimeFormat("en-US", { + timeZone: tz, + hourCycle: "h23", + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + }); + dtfCache.set(tz, f); + return f; + } catch { + return null; + } +} + +/** Offset (ms) of timezone `tz` at instant `date`. */ +export function tzOffsetMs(date: Date, tz: string): number { + const f = dtf(tz); + if (!f) return -date.getTimezoneOffset() * 60_000; + const parts = f.formatToParts(date); + const get = (t: string) => Number(parts.find((p) => p.type === t)?.value ?? "0"); + const asUTC = Date.UTC(get("year"), get("month") - 1, get("day"), get("hour") % 24, get("minute"), get("second")); + return asUTC - Math.floor(date.getTime() / 1000) * 1000; +} + +/** Interpret a JSCalendar LocalDateTime in timezone `tz` (or browser local if null) as an instant. */ +export function zonedToDate(local: string, tz: string | null | undefined): Date { + const p = parseLocalDateTime(local); + if (!p) return new Date(NaN); + if (!tz) { + return new Date(p.y, p.mo, p.d, p.h, p.mi, p.se); + } + const asUTC = Date.UTC(p.y, p.mo, p.d, p.h, p.mi, p.se); + // Two-pass offset resolution handles DST edges reasonably. + let off = tzOffsetMs(new Date(asUTC), tz); + off = tzOffsetMs(new Date(asUTC - off), tz); + return new Date(asUTC - off); +} + +/** Format an instant as LocalDateTime in timezone `tz` (browser local if null). */ +export function dateToZonedLocal(d: Date, tz: string | null | undefined): string { + if (!tz) return toLocalDateTime(d); + const f = dtf(tz); + if (!f) return toLocalDateTime(d); + const parts = f.formatToParts(d); + const get = (t: string) => parts.find((p) => p.type === t)?.value ?? "00"; + return `${get("year")}-${get("month")}-${get("day")}T${String(Number(get("hour")) % 24).padStart(2, "0")}:${get("minute")}:${get("second")}`; +} + +/** Parse ISO 8601 duration (e.g. "P1DT2H30M") into seconds. */ +export function parseDuration(dur: string | null | undefined): number { + if (!dur) return 0; + const m = /^([+-])?P(?:(\d+)W)?(?:(\d+)D)?(?:T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:\.\d+)?)S)?)?$/.exec(dur); + if (!m) return 0; + const sign = m[1] === "-" ? -1 : 1; + const w = Number(m[2] ?? 0), d = Number(m[3] ?? 0), h = Number(m[4] ?? 0), mi = Number(m[5] ?? 0), s = Number(m[6] ?? 0); + return sign * (w * 7 * 86400 + d * 86400 + h * 3600 + mi * 60 + s); +} + +export function formatDuration(seconds: number): string { + const neg = seconds < 0; + let s = Math.abs(Math.round(seconds)); + const d = Math.floor(s / 86400); + s -= d * 86400; + const h = Math.floor(s / 3600); + s -= h * 3600; + const m = Math.floor(s / 60); + s -= m * 60; + let out = "P"; + if (d) out += `${d}D`; + if (h || m || s) { + out += "T"; + if (h) out += `${h}H`; + if (m) out += `${m}M`; + if (s) out += `${s}S`; + } + if (out === "P") out = "PT0S"; + return (neg ? "-" : "") + out; +} + +export function humanDuration(seconds: number): string { + const abs = Math.abs(seconds); + if (abs === 0) return "at time of event"; + const parts: string[] = []; + const d = Math.floor(abs / 86400); + const h = Math.floor((abs % 86400) / 3600); + const m = Math.floor((abs % 3600) / 60); + if (d) parts.push(`${d} day${d === 1 ? "" : "s"}`); + if (h) parts.push(`${h} hour${h === 1 ? "" : "s"}`); + if (m) parts.push(`${m} minute${m === 1 ? "" : "s"}`); + return parts.join(" ") || `${abs} seconds`; +} + +export const browserTimeZone = (() => { + try { + return Intl.DateTimeFormat().resolvedOptions().timeZone || "UTC"; + } catch { + return "UTC"; + } +})(); + +export function listTimeZones(): string[] { + try { + const sv = (Intl as unknown as { supportedValuesOf?: (k: string) => string[] }).supportedValuesOf; + if (sv) return sv("timeZone"); + } catch { + /* ignore */ + } + return ["UTC", "Europe/London", "Europe/Paris", "Europe/Berlin", "America/New_York", "America/Chicago", "America/Denver", "America/Los_Angeles", "Asia/Tokyo", "Asia/Kolkata", "Australia/Sydney"]; +} + +export function formatTimeRange(start: Date, end: Date, allDay: boolean): string { + if (allDay) { + const lastDay = new Date(end.getTime() - 1); + if (isSameDay(start, lastDay)) return start.toLocaleDateString(undefined, { weekday: "long", month: "long", day: "numeric" }); + return `${start.toLocaleDateString(undefined, { month: "short", day: "numeric" })} – ${lastDay.toLocaleDateString(undefined, { month: "short", day: "numeric" })}`; + } + const t = (d: Date) => d.toLocaleTimeString(undefined, { hour: "numeric", minute: "2-digit" }); + if (isSameDay(start, end)) { + return `${start.toLocaleDateString(undefined, { weekday: "long", month: "long", day: "numeric" })} · ${t(start)} – ${t(end)}`; + } + return `${start.toLocaleString(undefined, { month: "short", day: "numeric", hour: "numeric", minute: "2-digit" })} – ${end.toLocaleString(undefined, { month: "short", day: "numeric", hour: "numeric", minute: "2-digit" })}`; +} + +/** For */ +export function toInputDateTime(d: Date): string { + return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}T${pad(d.getHours())}:${pad(d.getMinutes())}`; +} + +export function fromInputDateTime(s: string): Date { + const p = parseLocalDateTime(s); + if (!p) return new Date(NaN); + return new Date(p.y, p.mo, p.d, p.h, p.mi, 0); +} + +export function roundToNext(d: Date, minutes: number): Date { + const x = new Date(d); + x.setSeconds(0, 0); + const m = x.getMinutes(); + const r = Math.ceil(m / minutes) * minutes; + x.setMinutes(r); + return x; +} diff --git a/web/src/lib/format.ts b/web/src/lib/format.ts new file mode 100644 index 0000000..f97a2b2 --- /dev/null +++ b/web/src/lib/format.ts @@ -0,0 +1,108 @@ +const rtf = typeof Intl !== "undefined" && "RelativeTimeFormat" in Intl ? new Intl.RelativeTimeFormat(undefined, { numeric: "auto" }) : null; + +export function formatSize(bytes: number | null | undefined): string { + if (bytes == null || !Number.isFinite(bytes)) return ""; + if (bytes < 1024) return `${bytes} B`; + const units = ["KB", "MB", "GB", "TB"]; + let v = bytes / 1024; + let i = 0; + while (v >= 1024 && i < units.length - 1) { + v /= 1024; + i++; + } + return `${v < 10 ? v.toFixed(1) : Math.round(v)} ${units[i]}`; +} + +export function isSameDay(a: Date, b: Date): boolean { + return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate(); +} + +/** Gmail-style compact date for list views. */ +export function formatListDate(iso: string | null | undefined, now = new Date()): string { + if (!iso) return ""; + const d = new Date(iso); + if (Number.isNaN(d.getTime())) return ""; + if (isSameDay(d, now)) return d.toLocaleTimeString(undefined, { hour: "numeric", minute: "2-digit" }); + if (d.getFullYear() === now.getFullYear()) return d.toLocaleDateString(undefined, { month: "short", day: "numeric" }); + return d.toLocaleDateString(undefined, { year: "numeric", month: "short", day: "numeric" }); +} + +/** Full date for message headers, e.g. "Sat, Aug 22, 2026, 3:14 PM" */ +export function formatFullDate(iso: string | null | undefined): string { + if (!iso) return ""; + const d = new Date(iso); + if (Number.isNaN(d.getTime())) return iso; + return d.toLocaleString(undefined, { + weekday: "short", + year: "numeric", + month: "short", + day: "numeric", + hour: "numeric", + minute: "2-digit", + }); +} + +export function formatRelative(iso: string | null | undefined, now = new Date()): string { + if (!iso) return ""; + const d = new Date(iso); + const diff = (d.getTime() - now.getTime()) / 1000; + const abs = Math.abs(diff); + if (!rtf) return formatListDate(iso, now); + if (abs < 60) return rtf.format(Math.round(diff), "second"); + if (abs < 3600) return rtf.format(Math.round(diff / 60), "minute"); + if (abs < 86400) return rtf.format(Math.round(diff / 3600), "hour"); + if (abs < 86400 * 7) return rtf.format(Math.round(diff / 86400), "day"); + return formatListDate(iso, now); +} + +export function formatDateShort(d: Date): string { + return d.toLocaleDateString(undefined, { weekday: "short", month: "short", day: "numeric" }); +} + +export function formatTime(d: Date): string { + return d.toLocaleTimeString(undefined, { hour: "numeric", minute: "2-digit" }); +} + +export function formatMonthYear(d: Date): string { + return d.toLocaleDateString(undefined, { month: "long", year: "numeric" }); +} + +export function plural(n: number, one: string, many = `${one}s`): string { + return `${n} ${n === 1 ? one : many}`; +} + +export function clamp(n: number, min: number, max: number): number { + return Math.min(max, Math.max(min, n)); +} + +export function truncate(s: string, n: number): string { + return s.length > n ? `${s.slice(0, n - 1)}…` : s; +} + +export function uid(prefix = "u"): string { + return `${prefix}${Math.random().toString(36).slice(2, 10)}${Date.now().toString(36)}`; +} + +export function debounce void>(fn: T, ms: number): T & { cancel(): void } { + let t: number | null = null; + const wrapped = ((...args: Parameters) => { + if (t) window.clearTimeout(t); + t = window.setTimeout(() => { + t = null; + fn(...args); + }, ms); + }) as T & { cancel(): void }; + wrapped.cancel = () => { + if (t) window.clearTimeout(t); + t = null; + }; + return wrapped; +} + +export function sleep(ms: number): Promise { + return new Promise((r) => setTimeout(r, ms)); +} + +export function cx(...parts: Array): string { + return parts.filter(Boolean).join(" "); +} diff --git a/web/src/lib/html.ts b/web/src/lib/html.ts new file mode 100644 index 0000000..dc0a4b7 --- /dev/null +++ b/web/src/lib/html.ts @@ -0,0 +1,169 @@ +import DOMPurify from "dompurify"; + +export interface SanitizeOptions { + /** Map of Content-ID (without angle brackets) → URL for inline images. */ + cidMap?: Record; + /** Whether remote content (http/https images, css urls) may load. */ + allowRemote?: boolean; + /** Route remote images through the privacy proxy. */ + proxyRemote?: boolean; +} + +export interface SanitizeResult { + html: string; + remoteCount: number; + bodyStyle: string; +} + +const REMOTE_URL_RE = /^(https?:)?\/\//i; +const CSS_URL_RE = /url\(\s*(['"]?)([^'")]+)\1\s*\)/gi; + +let hooked = false; +function ensureHooks() { + if (hooked) return; + hooked = true; + DOMPurify.addHook("uponSanitizeElement", (node, data) => { + // Strip `; + // Collapse quoted content + const container = root.querySelector(".ihm-email-root") as HTMLElement | null; + let found = false; + if (container) { + let q: Element | null = null; + for (const sel of QUOTE_SELECTORS) { + q = container.querySelector(sel); + if (q) break; + } + if (!q) { + // Heuristic: a blockquote preceded by text ending in "wrote:" + const bqs = Array.from(container.querySelectorAll("blockquote")); + for (const bq of bqs) { + const prev = bq.previousElementSibling; + if (prev && /wrote:\s*$|Original Message|Von:|De :|From:/i.test(prev.textContent ?? "")) { + q = prev; + break; + } + } + if (!q && bqs.length === 1 && (bqs[0]!.textContent?.length ?? 0) > 200) q = bqs[0]!; + } + if (q && q.parentElement) { + // Move q and subsequent siblings into a hidden wrapper (only if q isn't the whole body) + const parent = q.parentElement; + const textBefore = (container.textContent ?? "").indexOf((q.textContent ?? "").slice(0, 40)); + if (textBefore > 0 || q.previousElementSibling) { + const wrap = root.ownerDocument.createElement("div"); + wrap.className = "ihm-quoted"; + wrap.hidden = true; + const nodes: ChildNode[] = []; + let n: ChildNode | null = q.classList.contains("moz-cite-prefix") ? q : q; + while (n) { + nodes.push(n); + n = n.nextSibling; + } + parent.insertBefore(wrap, q); + for (const node of nodes) wrap.appendChild(node); + found = true; + } + } + } + setHasQuote(found); + setQuoteOpen(false); + root.addEventListener("click", onClick); + return () => root.removeEventListener("click", onClick); + }, [html, bodyStyle, onClick]); + + useEffect(() => { + const root = hostRef.current?.shadowRoot; + const q = root?.querySelector(".ihm-quoted"); + if (q) q.hidden = !quoteOpen; + }, [quoteOpen]); + + return ( + <> +
+ {hasQuote && ( + + )} + + ); +} + +function TextBody({ text }: { text: string }) { + const hostRef = useRef(null); + const [quoteOpen, setQuoteOpen] = useState(false); + const openCompose = useCompose((s) => s.open); + const { main, quoted } = useMemo(() => { + const lines = text.replace(/\r\n?/g, "\n").split("\n"); + const idx = findQuoteStart(lines); + if (idx > 2) return { main: lines.slice(0, idx).join("\n"), quoted: lines.slice(idx).join("\n") }; + return { main: text, quoted: "" }; + }, [text]); + + useEffect(() => { + const host = hostRef.current; + if (!host) return; + const root = host.shadowRoot ?? host.attachShadow({ mode: "open" }); + root.innerHTML = `
${textToHtml(main)}${quoted ? `
\n${textToHtml(quoted)}
` : ""}
`; + const onClick = (ev: Event) => { + const a = (ev.target as HTMLElement).closest("a"); + if (a && a.getAttribute("href")?.startsWith("mailto:")) { + ev.preventDefault(); + openCompose({ to: [{ name: null, email: a.getAttribute("href")!.slice(7) }] }); + } + }; + root.addEventListener("click", onClick); + return () => root.removeEventListener("click", onClick); + }, [main, quoted, quoteOpen, openCompose]); + + return ( + <> +
+ {quoted && ( + + )} + + ); +} + +/* ---------- Attachments ---------- */ + +export function attachmentIcon(type: string, name?: string | null) { + const t = type.toLowerCase(); + const n = (name ?? "").toLowerCase(); + if (t.startsWith("image/")) return ; + if (t.startsWith("video/")) return ; + if (t.startsWith("audio/")) return ; + if (t === "application/pdf") return ; + if (/zip|tar|gzip|7z|rar|compressed/.test(t) || /\.(zip|tgz|gz|7z|rar)$/.test(n)) return ; + if (/spreadsheet|excel|csv/.test(t) || /\.(xlsx?|csv)$/.test(n)) return ; + if (t === "text/calendar") return ; + if (t.includes("vcard")) return ; + if (t.startsWith("text/") || /word|document/.test(t)) return ; + return ; +} + +function AttachmentList({ attachments, accountId, email }: { attachments: EmailBodyPart[]; accountId: Id; email: Email }) { + const [preview, setPreview] = useState(null); + const viewable = (a: EmailBodyPart) => (a.type.startsWith("image/") && a.type !== "image/svg+xml") || a.type === "application/pdf" || a.type === "text/plain"; + return ( + <> +
+ {attachments.map((a, i) => { + const url = a.blobId ? client.downloadUrl(accountId, a.blobId, a.name ?? "attachment", a.type) : "#"; + const inlineUrl = a.blobId ? client.downloadUrl(accountId, a.blobId, a.name ?? "attachment", a.type, true) : "#"; + return ( + { if (viewable(a)) { ev.preventDefault(); setPreview(a); } }}> + {a.type.startsWith("image/") && a.type !== "image/svg+xml" && a.blobId ? : attachmentIcon(a.type, a.name)} + + {a.name ?? "(unnamed)"} + {formatSize(a.size)} + + + {viewable(a) && } + + + + ); + })} + {attachments.length > 1 && ( + + )} +
+ setPreview(null)} title={preview?.name ?? "Preview"} size="xl" footer={preview && Download}> + {preview?.type.startsWith("image/") && {preview.name} + {preview?.type === "application/pdf" &&