From 0db4274f468b0bf91a3ac045805574084d2db410 Mon Sep 17 00:00:00 2001 From: ergosteur <1992147+ergosteur@users.noreply.github.com> Date: Fri, 14 Aug 2026 01:59:19 -0400 Subject: [PATCH] fix: security, performance and correctness pass; add sidecar archive support Security - Fix path traversal in GET /api/archives/:name/files. Express decodes route params after segment matching, so `..%2f..%2fetc` escaped ARCHIVES_DIR and returned a recursive listing of arbitrary directories. - Add CSP and baseline security headers; disable x-powered-by. - Stop baking GEMINI_API_KEY into the client bundle (the SDK was unused). - Run the container as `node` instead of root. Performance - Add a directory-mtime-keyed archive index, warmed in the background and persisted. Listing 110k files went from ~52s to ~0.1s; the largest archive (24k files) serves in ~0.3s. Per-file stat over CIFS costs ~1.4ms and does not parallelise, so it is now done once rather than per request. - Build media URLs from the File directly instead of `new Blob([await file.arrayBuffer()])`, which read every media file fully into memory (a 20GB archive tried to become 20GB of resident blobs). - Track and revoke object URLs; previously none were ever revoked. - Give `requestThumbnail` a stable identity so a completed thumbnail stops re-running the effect in every mounted thumbnail. - Namespace IndexedDB keys so listing archives no longer deserializes every cached thumbnail blob, and thumbnails no longer collide across archives. - Serve real file sizes: RemoteArchiveFile was constructed with size 0, which silently disabled high-res thumbnailing for every server archive. Correctness - Local archives cached media as blob: URLs, which die with the document, so a cached local archive restored as an archive of broken images. Media now carries a stable path and is rehydrated from a persisted directory handle (File System Access API), falling back to re-prompting for the folder. - Fix permalinks: the URL-writing effect erased ?a= on mount before the archive list arrived to consume it, so deep links never resolved. - Make cache invalidation detect nested changes via a directory signature. - Add an error boundary and tolerate unparseable dates, which previously threw a RangeError and blanked the app. - Default video to muted so autoplay is not blocked by Safari/Firefox. Features - Fold sidecar directories into their base profile: ` - reels`, `story - ` and `story highlights - - ` now appear as reels, the story ring and Instagram-style highlight circles rather than as separate archives. Housekeeping - Add @types/react; React was previously type-checked against its JavaScript source, so `npm run lint` gave almost no type safety on components. - Vendor fonts and PWA icons locally; the app made third-party CDN requests despite advertising offline support and local-only processing. - Drop unused better-sqlite3 (a native module that broke `npm install`). - Add vitest with 36 tests over the filename and directory-naming rules. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011uBWhwV3wFQ5MBCcMHHem7 --- CLAUDE.md | 66 + Dockerfile | 15 +- compose.yml | 6 + dist-server/server.js | 137 -- package-lock.json | 1643 +++++------------ package.json | 11 +- public/fonts/fonts.css | 56 + .../fonts/inter-300_700-normal-6ab57b.woff2 | Bin 0 -> 48256 bytes .../fonts/inter-300_700-normal-b6db4a.woff2 | Bin 0 -> 85068 bytes ...ayfair-display-400_900-italic-2d6d99.woff2 | Bin 0 -> 23380 bytes ...ayfair-display-400_900-italic-d14361.woff2 | Bin 0 -> 38804 bytes ...ayfair-display-400_900-normal-61a963.woff2 | Bin 0 -> 38404 bytes ...ayfair-display-400_900-normal-ca7410.woff2 | Bin 0 -> 21140 bytes public/icon-192.png | Bin 0 -> 2993 bytes public/icon-512.png | Bin 0 -> 10573 bytes server.ts | 171 +- src/App.tsx | 368 +++- src/components/ArchiveDashboard.tsx | 12 +- src/components/ErrorBoundary.tsx | 55 + src/components/MediaRenderer.tsx | 3 +- src/components/PostModal.tsx | 5 +- src/components/StoryViewer.tsx | 43 +- src/hooks/useArchiveScanner.ts | 156 +- src/hooks/useThumbnailQueue.ts | 116 +- src/index.css | 3 +- src/lib/archive-cache.ts | 170 ++ src/lib/archive-files.ts | 42 +- src/lib/archive-grouping.test.ts | 89 + src/lib/archive-grouping.ts | 71 + src/lib/archive-index.ts | 232 +++ src/lib/archive-patterns.test.ts | 118 ++ src/lib/archive-patterns.ts | 99 + src/lib/directory-handle.ts | 86 + src/lib/utils.ts | 20 + src/main.tsx | 5 +- src/types/index.ts | 87 + src/types/react-augment.d.ts | 12 + vite.config.ts | 32 +- 38 files changed, 2291 insertions(+), 1638 deletions(-) create mode 100644 CLAUDE.md delete mode 100644 dist-server/server.js create mode 100644 public/fonts/fonts.css create mode 100644 public/fonts/inter-300_700-normal-6ab57b.woff2 create mode 100644 public/fonts/inter-300_700-normal-b6db4a.woff2 create mode 100644 public/fonts/playfair-display-400_900-italic-2d6d99.woff2 create mode 100644 public/fonts/playfair-display-400_900-italic-d14361.woff2 create mode 100644 public/fonts/playfair-display-400_900-normal-61a963.woff2 create mode 100644 public/fonts/playfair-display-400_900-normal-ca7410.woff2 create mode 100644 public/icon-192.png create mode 100644 public/icon-512.png create mode 100644 src/components/ErrorBoundary.tsx create mode 100644 src/lib/archive-cache.ts create mode 100644 src/lib/archive-grouping.test.ts create mode 100644 src/lib/archive-grouping.ts create mode 100644 src/lib/archive-index.ts create mode 100644 src/lib/archive-patterns.test.ts create mode 100644 src/lib/archive-patterns.ts create mode 100644 src/lib/directory-handle.ts create mode 100644 src/types/react-augment.d.ts diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..30e4d57 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,66 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +InstaArchive Viewer is a React 19 + Vite 6 PWA for browsing archived Instagram data (both official Instagram exports and Instaloader archives). All archive parsing and media processing happens client-side in the browser — the Express backend only lists/serves files from disk, it never parses archive contents. + +## Commands + +- `npm install` — install dependencies +- `npm run dev` — start Vite dev server on port 3000 (proxies `/api` and `/archives` to `http://localhost:3001`) +- `npm run server` — start the Express backend (`tsx server.ts`) on port 3001, serving archives from `ARCHIVES_DIR` (defaults to `./_sample-archives`) +- `npm run build` — build frontend to `dist/` (`vite build`) and backend to `dist-server/` (`tsc server.ts ...`) +- `npm run lint` — type-check only (`tsc --noEmit`); there is no separate test suite or linter config +- `npm run clean` — remove `dist/` + +For local development you typically need both `npm run dev` and `npm run server` running concurrently — the frontend alone has nothing to talk to for server-mode archives (local-folder mode works without the backend). + +## Architecture + +### Two archive sources, one data model + +The app supports loading archives two ways, unified behind the `ArchiveFile` interface (`src/types/index.ts`, implementations in `src/lib/archive-files.ts`): + +- **`LocalArchiveFile`** — wraps a browser `File` from a local folder picker (`webkitdirectory`). Fully offline, media is never uploaded anywhere. +- **`RemoteArchiveFile`** — wraps a file served from the Express backend's `/archives/:name/...` static route, fetched on demand. + +All downstream parsing code (`useArchiveScanner`) operates only on `ArchiveFile[]` and doesn't care which backing implementation it got. + +### Scanning pipeline (`src/hooks/useArchiveScanner.ts`) + +This is the core of the app — a single large `handleFiles` function that: +1. **Indexes** all files, detecting archive format by filename regex: Instagram "export" format (`YYYY-MM-DD_user - post_id[- idx][- story].ext`), Instaloader format (`YYYY-MM-DD_HH-MM-SS_UTC[_idx][_story].ext`), or a generic JSON-manifest format (`posts_1.json`, `reels_1.json`, `stories_1.json`, possibly `.json.xz`-compressed via `xz-decompress`). +2. **Parses** according to detected format, building a `Map<postId, Partial<Post>>`. For JSON-manifest format, media files are matched to JSON entries by URI substring match, then by ID substring match, then by filename-derived heuristic — in that fallback order. +3. **Falls back** to generic filename-prefix grouping when no posts were found via regex/JSON matching (treats files sharing a common basename as one carousel post, chunked into groups of 20). +4. Detects a **profile picture** from `*_profile_pic.jpg` / `<username>.jpg` files, or falls back to the oldest image in the archive by filename sort ("Smart Fallback"). +5. **Caches** the final `{ posts, stories, profileMetadata, ... }` result to IndexedDB via `idb-keyval`, keyed by archive name (or `local_archive` for unnamed local folders) — this is what makes repeat visits load instantly. Both server and local archives are cached; the cache shape is documented inline in `useArchiveScanner`'s state (mirrors the `CacheData` interface in `GEMINI.md`). + +When modifying format-detection or media-matching logic, be aware the three code paths (JSON-manifest, filename-regex export/instaloader, generic fallback) are largely independent and a change to one rarely needs to touch the others — but all three write into the same `postsMap`. + +### Thumbnail generation (`src/hooks/useThumbnailQueue.ts` + `src/lib/thumbnail-worker.ts`) + +High-res images (>1MiB) are downscaled off the main thread: +- `useThumbnailQueue` maintains a **serial** (one-at-a-time) queue — this is deliberate, not a bug: decoding multiple 50MP+ images concurrently causes OOM crashes in the browser. +- Actual resizing happens in `thumbnail-worker.ts` using `OffscreenCanvas`/`createImageBitmap` inside a Web Worker. +- Results are cached in IndexedDB under a `thumb_<id>` key, checked before falling back to the worker, so thumbnails persist across sessions. + +### URL state sync (`src/App.tsx`) + +App state (selected archive, active tab, selected post) is synchronized with URL query params (`?a=`, `?t=`, `?p=`) via `URLSearchParams` + `window.history.replaceState` in a cluster of `useEffect` hooks — this is what enables permalinks/deep-linking. When adding new shareable state, follow this pattern rather than introducing a router. + +### Backend (`server.ts`) + +Minimal Express server, three responsibilities only: +- `GET /api/archives` — lists subdirectories of `ARCHIVES_DIR` (skipping dotfiles/`@`/`_`-prefixed dirs) as `ServerArchive[]`, guessing a thumbnail per archive. +- `GET /api/archives/:name/files` — recursively lists all files in one archive directory. +- Static-serves `ARCHIVES_DIR` under `/archives` and, in production, serves the built `dist/` frontend with an SPA fallback. + +It does no parsing of archive/JSON contents — that's entirely client-side in `useArchiveScanner`. `ARCHIVES_DIR` is resolved from the `ARCHIVES_DIR` env var (see `.env` / Docker volume mount at `/archives`). + +### PWA / build quirks + +- `vite.config.ts` sets `hmr: process.env.DISABLE_HMR !== 'true'` — this is intentionally left alone; it exists to disable file-watch flicker when running under AI Studio-style agent editing. Don't "clean up" or remove it. +- `workbox.navigateFallbackDenylist` excludes `/api` and `/archives` from the SPA fallback so those routes hit the real server/static files instead of `index.html` (needed for "open original file in new tab"). +- Service worker uses `registerType: 'autoUpdate'` with hourly periodic checks — new deployments propagate to open clients automatically. diff --git a/Dockerfile b/Dockerfile index db651a8..9db550b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,6 +18,9 @@ FROM node:20-slim AS runtime ENV NODE_ENV=production ENV PORT=3000 ENV ARCHIVES_DIR=/archives +# Where the archive index is persisted; mount a volume here so a restart does +# not have to re-walk the whole archive root. +ENV CACHE_DIR=/cache WORKDIR /app @@ -25,12 +28,16 @@ WORKDIR /app COPY package*.json ./ RUN npm ci --omit=dev -# Copy built assets and server +# Copy built assets and server. The whole dist-server tree is needed: the +# server imports shared archive-grouping logic emitted alongside it. COPY --from=build /app/dist ./dist -COPY --from=build /app/dist-server/server.js ./server.js +COPY --from=build /app/dist-server/ ./ -# Ensure archives directory exists -RUN mkdir -p /archives +# Ensure archives and cache directories exist, writable by the runtime user. +RUN mkdir -p /archives /cache && chown node:node /cache + +# Drop root: the server reads the archives volume and writes only its index. +USER node EXPOSE 3000 diff --git a/compose.yml b/compose.yml index 698cd29..9ea9362 100644 --- a/compose.yml +++ b/compose.yml @@ -5,7 +5,13 @@ services: - "3000:3000" volumes: - ./archives:/archives:ro,z + # Persists the archive index so restarts don't re-walk every file. + - instaarchive-cache:/cache environment: - PORT=3000 - ARCHIVES_DIR=/archives + - CACHE_DIR=/cache restart: unless-stopped + +volumes: + instaarchive-cache: diff --git a/dist-server/server.js b/dist-server/server.js deleted file mode 100644 index 80c3c16..0000000 --- a/dist-server/server.js +++ /dev/null @@ -1,137 +0,0 @@ -import express from 'express'; -import fs from 'fs'; -import path from 'path'; -import { fileURLToPath } from 'url'; -import dotenv from 'dotenv'; -import os from 'os'; -dotenv.config(); -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); -const app = express(); -const PORT = process.env.PORT || 3001; -const ARCHIVES_DIR = path.resolve(process.env.ARCHIVES_DIR || path.join(__dirname, '_sample-archives')); -console.log(`[Server] Initializing...`); -console.log(`[Server] Running as user: ${os.userInfo().username} (UID: ${os.userInfo().uid}, GID: ${os.userInfo().gid})`); -console.log(`[Server] Environment ARCHIVES_DIR: ${process.env.ARCHIVES_DIR}`); -console.log(`[Server] Resolved ARCHIVES_DIR: ${ARCHIVES_DIR}`); -// Ensure archives directory exists -if (!fs.existsSync(ARCHIVES_DIR)) { - console.warn(`[Server] Warning: Archives directory not found at ${ARCHIVES_DIR}. Creating it...`); - try { - fs.mkdirSync(ARCHIVES_DIR, { recursive: true }); - } - catch (err) { - console.error(`[Server] Failed to create archives directory:`, err); - } -} -else { - console.log(`[Server] Archives directory exists.`); -} -app.use(express.json()); -// API: List archives (subdirectories in ARCHIVES_DIR) -app.get('/api/archives', (req, res) => { - try { - console.log(`[API] Listing archives from ${ARCHIVES_DIR}...`); - const items = fs.readdirSync(ARCHIVES_DIR, { withFileTypes: true }); - console.log(`[API] Found ${items.length} total items in archives directory.`); - const archives = items - .filter(item => { - const isDir = item.isDirectory(); - const isHidden = item.name.startsWith('.') || item.name.startsWith('@') || item.name.startsWith('_'); - if (!isDir) - return false; - if (isHidden) { - console.log(`[API] Skipping system/hidden directory: ${item.name}`); - return false; - } - return true; - }) - .map(item => { - // Try to find a profile pic or first image for the thumbnail - const archivePath = path.join(ARCHIVES_DIR, item.name); - try { - const files = fs.readdirSync(archivePath); - console.log(`[API] Found archive: ${item.name} (${files.length} files)`); - let thumbnail = ''; - const profilePic = files.find(f => f.toLowerCase().includes('_profile_pic.jpg') || f.toLowerCase() === `${item.name.toLowerCase()}.jpg`); - if (profilePic) { - thumbnail = `/archives/${item.name}/${profilePic}`; - } - else { - const firstImage = files.find(f => /\.(jpg|jpeg|png|webp)$/i.test(f)); - if (firstImage) - thumbnail = `/archives/${item.name}/${firstImage}`; - } - return { - name: item.name, - thumbnail, - path: item.name, - fileCount: files.length - }; - } - catch (e) { - console.error(`[API] Could not read subdirectory ${item.name}:`, e); - return null; - } - }) - .filter(Boolean); - console.log(`[API] Returning ${archives.length} validated archives.`); - res.json(archives); - } - catch (err) { - if (err.code === 'EACCES') { - console.error(`[API] Permission Denied! The server (UID ${os.userInfo().uid}) cannot read ${ARCHIVES_DIR}.`); - console.error(`[API] Hint: If using Linux/Docker, check folder permissions (chmod 755) or SELinux context (append :z to your volume mount).`); - } - else { - console.error('[API] Error listing archives:', err); - } - res.status(500).json({ error: 'Permission denied or failed to list archives' }); - } -}); -// API: List all files in an archive (recursive) -app.get('/api/archives/:name/files', (req, res) => { - const archiveName = req.params.name; - const archivePath = path.join(ARCHIVES_DIR, archiveName); - if (!fs.existsSync(archivePath)) { - return res.status(404).json({ error: 'Archive not found' }); - } - try { - const walk = (dir, base = '') => { - let results = []; - const list = fs.readdirSync(dir); - list.forEach(file => { - const filePath = path.join(dir, file); - const relativePath = path.join(base, file); - const stat = fs.statSync(filePath); - if (stat && stat.isDirectory()) { - results = results.concat(walk(filePath, relativePath)); - } - else { - results.push(relativePath); - } - }); - return results; - }; - const files = walk(archivePath); - res.json(files); - } - catch (err) { - console.error('Error listing files:', err); - res.status(500).json({ error: 'Failed to list files' }); - } -}); -// Serve archive files -app.use('/archives', express.static(ARCHIVES_DIR)); -// Serve production frontend -const distPath = path.join(__dirname, 'dist'); -if (fs.existsSync(distPath)) { - app.use(express.static(distPath)); - app.get('*', (req, res) => { - res.sendFile(path.join(distPath, 'index.html')); - }); -} -app.listen(PORT, () => { - console.log(`Server running at http://localhost:${PORT}`); - console.log(`Serving archives from: ${ARCHIVES_DIR}`); -}); diff --git a/package-lock.json b/package-lock.json index f086c8b..ca0677f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,15 @@ { - "name": "react-example", - "version": "0.0.0", + "name": "instaarchive-viewer", + "version": "1.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "react-example", - "version": "0.0.0", + "name": "instaarchive-viewer", + "version": "1.2.0", "dependencies": { - "@google/genai": "^1.29.0", "@tailwindcss/vite": "^4.1.14", "@vitejs/plugin-react": "^5.0.4", - "better-sqlite3": "^12.4.1", "clsx": "^2.1.1", "date-fns": "^4.1.0", "dotenv": "^17.2.3", @@ -22,18 +20,21 @@ "react": "^19.0.0", "react-dom": "^19.0.0", "tailwind-merge": "^3.5.0", + "tsx": "^4.21.0", "vite": "^6.2.0", "xz-decompress": "^0.2.3" }, "devDependencies": { "@types/express": "^4.17.21", "@types/node": "^22.14.0", + "@types/react": "^19.2.18", + "@types/react-dom": "^19.2.4", "autoprefixer": "^10.4.21", "tailwindcss": "^4.1.14", - "tsx": "^4.21.0", "typescript": "~5.8.2", "vite": "^6.2.0", - "vite-plugin-pwa": "^1.2.0" + "vite-plugin-pwa": "^1.2.0", + "vitest": "^3.2.7" } }, "node_modules/@apideck/better-ajv-errors": { @@ -2007,46 +2008,6 @@ "node": ">=18" } }, - "node_modules/@google/genai": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.44.0.tgz", - "integrity": "sha512-kRt9ZtuXmz+tLlcNntN/VV4LRdpl6ZOu5B1KbfNgfR65db15O6sUQcwnwLka8sT/V6qysD93fWrgJHF2L7dA9A==", - "license": "Apache-2.0", - "dependencies": { - "google-auth-library": "^10.3.0", - "p-retry": "^4.6.2", - "protobufjs": "^7.5.4", - "ws": "^8.18.0" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "@modelcontextprotocol/sdk": "^1.25.2" - }, - "peerDependenciesMeta": { - "@modelcontextprotocol/sdk": { - "optional": true - } - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -2103,80 +2064,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", - "license": "BSD-3-Clause" - }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-rc.3", "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz", @@ -2911,6 +2798,17 @@ "@types/node": "*" } }, + "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/connect": { "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", @@ -2921,6 +2819,13 @@ "@types/node": "*" } }, + "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.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -2971,6 +2876,7 @@ "version": "22.19.13", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.13.tgz", "integrity": "sha512-akNQMv0wW5uyRpD2v2IEyRSZiR+BeGuoB6L310EgGObO44HSMNT8z1xzio28V8qOrgYaopIDNA18YgdXd+qTiw==", + "devOptional": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -2990,6 +2896,26 @@ "dev": true, "license": "MIT" }, + "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==", + "dev": 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/resolve": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", @@ -2997,12 +2923,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "license": "MIT" - }, "node_modules/@types/send": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", @@ -3063,6 +2983,131 @@ "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/mocker/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/@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/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -3089,15 +3134,6 @@ "node": ">=0.4.0" } }, - "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==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, "node_modules/ajv": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", @@ -3115,30 +3151,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", @@ -3184,6 +3196,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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/async": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", @@ -3310,26 +3332,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "dev": true, "license": "MIT" }, "node_modules/baseline-browser-mapping": { @@ -3344,49 +3347,6 @@ "node": ">=6.0.0" } }, - "node_modules/better-sqlite3": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.6.2.tgz", - "integrity": "sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "bindings": "^1.5.0", - "prebuild-install": "^7.1.1" - }, - "engines": { - "node": "20.x || 22.x || 23.x || 24.x || 25.x" - } - }, - "node_modules/bignumber.js": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", - "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "license": "MIT", - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "node_modules/body-parser": { "version": "1.20.4", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", @@ -3430,6 +3390,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -3468,36 +3429,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "license": "BSD-3-Clause" - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -3514,6 +3445,16 @@ "node": ">= 0.8" } }, + "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/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", @@ -3582,11 +3523,32 @@ ], "license": "CC-BY-4.0" }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "license": "ISC" + "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/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/clsx": { "version": "2.1.1", @@ -3597,24 +3559,6 @@ "node": ">=6" } }, - "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==", - "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==", - "license": "MIT" - }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -3692,6 +3636,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -3712,14 +3657,12 @@ "node": ">=8" } }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "license": "MIT", - "engines": { - "node": ">= 12" - } + "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==", + "dev": true, + "license": "MIT" }, "node_modules/data-view-buffer": { "version": "1.0.2", @@ -3802,28 +3745,14 @@ } } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "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": ">=4.0.0" + "node": ">=6" } }, "node_modules/deepmerge": { @@ -3926,21 +3855,6 @@ "node": ">= 0.4" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -3969,12 +3883,6 @@ "integrity": "sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg==", "license": "ISC" }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", @@ -3984,15 +3892,6 @@ "node": ">= 0.8" } }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/enhanced-resolve": { "version": "5.20.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.0.tgz", @@ -4093,6 +3992,13 @@ "node": ">= 0.4" } }, + "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/es-object-atoms": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", @@ -4143,7 +4049,6 @@ "version": "0.27.3", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", - "devOptional": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -4222,13 +4127,14 @@ "node": ">= 0.6" } }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "license": "(MIT OR WTFPL)", + "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": ">=6" + "node": ">=12.0.0" } }, "node_modules/express": { @@ -4292,12 +4198,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "license": "MIT" - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -4346,35 +4246,6 @@ } } }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "license": "MIT" - }, "node_modules/filelist": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", @@ -4451,6 +4322,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", @@ -4463,18 +4335,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "license": "MIT", - "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -4534,12 +4394,6 @@ "node": ">= 0.6" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "license": "MIT" - }, "node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -4610,35 +4464,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gaxios": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.3.tgz", - "integrity": "sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==", - "license": "Apache-2.0", - "dependencies": { - "extend": "^3.0.2", - "https-proxy-agent": "^7.0.1", - "node-fetch": "^3.3.2", - "rimraf": "^5.0.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/gcp-metadata": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-8.1.2.tgz", - "integrity": "sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==", - "license": "Apache-2.0", - "dependencies": { - "gaxios": "^7.0.0", - "google-logging-utils": "^1.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/generator-function": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", @@ -4724,7 +4549,6 @@ "version": "4.13.6", "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.6.tgz", "integrity": "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==", - "devOptional": true, "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -4733,33 +4557,6 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "license": "MIT" - }, - "node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/globalthis": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", @@ -4777,32 +4574,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/google-auth-library": { - "version": "10.6.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.6.1.tgz", - "integrity": "sha512-5awwuLrzNol+pFDmKJd0dKtZ0fPLAtoA5p7YO4ODsDu6ONJUVqbYwvv8y2ZBO5MBNp9TJXigB19710kYpBPdtA==", - "license": "Apache-2.0", - "dependencies": { - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "gaxios": "7.1.3", - "gcp-metadata": "8.1.2", - "google-logging-utils": "1.1.3", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/google-logging-utils": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.3.tgz", - "integrity": "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==", - "license": "Apache-2.0", - "engines": { - "node": ">=14" - } - }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -4923,19 +4694,6 @@ "url": "https://opencollective.com/express" } }, - "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==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -4961,38 +4719,12 @@ "integrity": "sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==", "license": "Apache-2.0" }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, "node_modules/internal-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", @@ -5168,15 +4900,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-generator-function": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", @@ -5436,23 +5159,9 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, "license": "ISC" }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, "node_modules/jake": { "version": "10.9.4", "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", @@ -5498,15 +5207,6 @@ "node": ">=6" } }, - "node_modules/json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "license": "MIT", - "dependencies": { - "bignumber.js": "^9.0.0" - } - }, "node_modules/json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", @@ -5556,27 +5256,6 @@ "node": ">=0.10.0" } }, - "node_modules/jwa": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", - "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", - "license": "MIT", - "dependencies": { - "buffer-equal-constant-time": "^1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", - "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", - "license": "MIT", - "dependencies": { - "jwa": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -5857,11 +5536,12 @@ "dev": true, "license": "MIT" }, - "node_modules/long": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", - "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", - "license": "Apache-2.0" + "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", @@ -5959,57 +5639,16 @@ "node": ">= 0.6" } }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/minipass": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "license": "MIT" - }, "node_modules/motion": { "version": "12.35.0", "resolved": "https://registry.npmjs.org/motion/-/motion-12.35.0.tgz", @@ -6075,12 +5714,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/napi-build-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", - "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", - "license": "MIT" - }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -6090,68 +5723,6 @@ "node": ">= 0.6" } }, - "node_modules/node-abi": { - "version": "3.87.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.87.0.tgz", - "integrity": "sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==", - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-abi/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "deprecated": "Use your platform's native DOMException instead", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "license": "MIT", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, "node_modules/node-releases": { "version": "2.0.36", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", @@ -6213,15 +5784,6 @@ "node": ">= 0.8" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, "node_modules/own-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", @@ -6240,23 +5802,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "license": "MIT", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/package-json-from-dist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/parseurl": { @@ -6272,6 +5822,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6284,34 +5835,29 @@ "dev": true, "license": "MIT" }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/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==", - "license": "ISC" - }, "node_modules/path-to-regexp": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "license": "MIT" }, + "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", @@ -6375,33 +5921,6 @@ "dev": true, "license": "MIT" }, - "node_modules/prebuild-install": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", - "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", - "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", - "license": "MIT", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^2.0.0", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/pretty-bytes": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", @@ -6415,30 +5934,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/protobufjs": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", - "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", - "hasInstallScript": true, - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -6452,16 +5947,6 @@ "node": ">= 0.10" } }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -6521,21 +6006,6 @@ "node": ">= 0.8" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, "node_modules/react": { "version": "19.2.4", "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", @@ -6566,20 +6036,6 @@ "node": ">=0.10.0" } }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -6717,36 +6173,11 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "devOptional": true, "license": "MIT", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/rimraf": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", - "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", - "license": "ISC", - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/rollup": { "version": "4.59.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", @@ -7010,6 +6441,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -7022,6 +6454,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7099,10 +6532,18 @@ "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/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -7111,51 +6552,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "node_modules/smob": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/smob/-/smob-1.6.1.tgz", @@ -7218,6 +6614,13 @@ "dev": true, "license": "MIT" }, + "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/statuses": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", @@ -7227,6 +6630,13 @@ "node": ">= 0.8" } }, + "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/stop-iteration-iterator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", @@ -7241,74 +6651,6 @@ "node": ">= 0.4" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "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==", - "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/string-width-cjs/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==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/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==", - "license": "MIT" - }, - "node_modules/string-width-cjs/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==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/string.prototype.matchall": { "version": "4.0.12", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", @@ -7411,43 +6753,6 @@ "node": ">=4" } }, - "node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/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==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/strip-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", @@ -7458,15 +6763,26 @@ "node": ">=10" } }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "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", - "engines": { - "node": ">=0.10.0" + "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-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -7509,34 +6825,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/tar-fs": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", - "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", - "license": "MIT", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/temp-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", @@ -7585,6 +6873,20 @@ "node": ">=10" } }, + "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.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", @@ -7601,6 +6903,36 @@ "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/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -7630,7 +6962,6 @@ "version": "4.21.0", "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", - "devOptional": true, "license": "MIT", "dependencies": { "esbuild": "~0.27.0", @@ -7646,18 +6977,6 @@ "fsevents": "~2.3.3" } }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, "node_modules/type-fest": { "version": "0.16.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", @@ -7799,6 +7118,7 @@ "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "devOptional": true, "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { @@ -7918,12 +7238,6 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -8016,6 +7330,29 @@ } } }, + "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-plugin-pwa": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-1.2.0.tgz", @@ -8504,13 +7841,77 @@ "@esbuild/win32-x64": "0.25.12" } }, - "node_modules/web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "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": ">= 8" + "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/webidl-conversions": { @@ -8536,6 +7937,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -8636,6 +8038,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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/workbox-background-sync": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-7.4.0.tgz", @@ -9082,124 +8501,6 @@ "workbox-core": "7.4.0" } }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "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==", - "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/wrap-ansi-cjs/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==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/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==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/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==", - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/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==", - "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/wrap-ansi-cjs/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==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", - "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", - "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/xz-decompress": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/xz-decompress/-/xz-decompress-0.2.3.tgz", diff --git a/package.json b/package.json index 7c5ad2a..98f31e3 100644 --- a/package.json +++ b/package.json @@ -10,13 +10,13 @@ "preview": "vite preview", "server": "tsx server.ts", "clean": "rm -rf dist", - "lint": "tsc --noEmit" + "lint": "tsc --noEmit", + "test": "vitest run", + "test:watch": "vitest" }, "dependencies": { - "@google/genai": "^1.29.0", "@tailwindcss/vite": "^4.1.14", "@vitejs/plugin-react": "^5.0.4", - "better-sqlite3": "^12.4.1", "clsx": "^2.1.1", "date-fns": "^4.1.0", "dotenv": "^17.2.3", @@ -34,10 +34,13 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/node": "^22.14.0", + "@types/react": "^19.2.18", + "@types/react-dom": "^19.2.4", "autoprefixer": "^10.4.21", "tailwindcss": "^4.1.14", "typescript": "~5.8.2", "vite": "^6.2.0", - "vite-plugin-pwa": "^1.2.0" + "vite-plugin-pwa": "^1.2.0", + "vitest": "^3.2.7" } } diff --git a/public/fonts/fonts.css b/public/fonts/fonts.css new file mode 100644 index 0000000..bb1afed --- /dev/null +++ b/public/fonts/fonts.css @@ -0,0 +1,56 @@ +/* Self-hosted subset of Inter + Playfair Display. + Vendored so the PWA works offline and makes no third-party requests. */ +/* latin-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 300 700; + font-display: swap; + src: url(/fonts/inter-300_700-normal-b6db4a.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 300 700; + font-display: swap; + src: url(/fonts/inter-300_700-normal-6ab57b.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* latin-ext */ +@font-face { + font-family: 'Playfair Display'; + font-style: italic; + font-weight: 400 900; + font-display: swap; + src: url(/fonts/playfair-display-400_900-italic-2d6d99.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Playfair Display'; + font-style: italic; + font-weight: 400 900; + font-display: swap; + src: url(/fonts/playfair-display-400_900-italic-d14361.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* latin-ext */ +@font-face { + font-family: 'Playfair Display'; + font-style: normal; + font-weight: 400 900; + font-display: swap; + src: url(/fonts/playfair-display-400_900-normal-ca7410.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Playfair Display'; + font-style: normal; + font-weight: 400 900; + font-display: swap; + src: url(/fonts/playfair-display-400_900-normal-61a963.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/public/fonts/inter-300_700-normal-6ab57b.woff2 b/public/fonts/inter-300_700-normal-6ab57b.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..d15208de03cd1ad7c5199f0a0ce915fe841e4722 GIT binary patch literal 48256 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∾Na#*TBTU(!jF?9zmR-!C*+RdvGrd0&{`| z!nipr`K70{m0;mZfs++H&xu<;V;(1SE|+r!TRFhJOmm?gm8-v%s6s7Dh*U=6WlK&) zC>hc(wUUwchV19Gxwd(0Le0hY-uAsswcmCJy3hWX{bWBq)Wa7MBv?Wsi2sRLiZDai zARG`L2q+>PfkV&{v54&U=V}XL9C01-f7ubpIAjTO8u=7ug~Fk9sH^B8v<kf+J%zr2 zet`Z9)B9Y4pb@MA9E1P_5&(b`Yf`1FJ_|IA8i{OwPpsu=K&=M)5(-KlvEcit(NKto z9J1dA&%Pb`{4tbKD<m`EMES8_nhq*^G$aUb@oUUBlMoRll3|5tb2JM50!5(;Q9d01 zM+nMQd!o>-K?tH+E$tA{R|y7rfMm>)3O>5hn|XxGC5boX2=_Pot%TcGfy9LC3I_y~ z6ETjn6|x|L=TPnCWcZZJ9w9&w8g3s%v=2fS00<@u6cWy^Py{RrY?t5w!Jjm;{u0CO z6R%@5R>eQqFP3f8xPWJG`dtlPnnvc`7$0s2{&Vf>blg)Vp4wlw{Tt9EuaE_v@R0~k zANvIoOQL%88Y}la@W2bbGVuK-)=GTz%F5$oL1$nN+)6vc;bHG;{pA?4!)>uR^owM} z|98H-NSX}X&`959c2sEz=NJ7s0461Kr5c%rzYt6JF?6aopPF+&a{PxbPZV{?Y=^SG z9dJBntAABsR@l$4-454=YibT_2oQ1hErC2EO_IE*0CDf_wEk6rdR7gW_otm;Ns7!R zyK1XeWN@8VR*<YOhykeE3f&Gk+UV9|)miPJKn6y2O}P;F&a)RmUoXj_3D%kBzJgfW z_TpHQL9WmBy>LKteIGU{r>@Yrw6De=4*kcQxBz|>XA3!u{c?Dhy+kv;I~GzPvgOCh z1#oCbKrm)zxMtuw7u}XC5Fy)i$*RDRv^mYBSVc&tAIu8<k3tkaoOAOADP5nS`qZb# zf`#}VFsE?#Xby0(!x`nwb2YjHc)XaCNov*t_En-pIJqsHWb;OyE~uYw!{xlL@0W=o znbooys_Wb*2mOn8fz^-)RVBJBG@T<7;SN-eiWcM5{_DP?06D<y34eM$`+f<>c$0HU zdnPxrA&RngA6s*U-?`_k*u~9^*52^PMFyB*EvU72jV{f;)el$~rUXsyKh|ECWnU4< z^LC%vQ?gpf`!prC`kM|l0g34KLZsVFLp}7@K-a)o{QvN#U+lXdhqgYZ33Pu?RGw++ z6z&IpG*(IN3xN~OPlE+kKDH?SiN_S*!l>eJc!6R$p1=BKR<(#HPb_$Ifwc+_xOQ4o zOax7V1S!`c0(DkZ4(%Q|J@88lYtzl2?c9ass3^Ywhzo8u%gm{E4vXOy)7ewRwXv6E zIWoyZ*6(NHnxSFahjLh!j>NXoM(4&MkA<}XzS|%~82|kc-54u_ls!xC(QpP_J!7q& z-&}6@*U?P|eD;bHEP(G)nv1GciUVe8g{iZ~M9YCOYTUa<E)N@TAF8dQ@5OUUrIZ1( z@#s^st_dCPL}oD((Z5hEv3iiYwaH7%Q9AFZdxkp$fiKzSmHfMu#Pv7t1GB7rToF_c z<i1K&{wVP7eedpj`~Ckxv*3;t@IQrUkG}RC4I!@uJR}I0KE(sQkL0sF-xRpsT_BGG z0>%kAmlT-fkS;|qOb}^wqOIFnEBb~&*M3fbZE~b?e8n!TSNsx_il^~8#Xs=4B8w{( zS72S^Rjbm(EnQ7NZvzKJ427^$9JEy$X^X5x|7RD#CGqSr%IBljMX)lHO6Y8{jqSXw zBRY_nvuR;s!JHr>Hf6gJyHhxaa^&Z8jT9=A{?Ry@f?P_xKm;nCA;)aq5XBuR6T>v9 zt$V`nGVa^+!Rves5om~1ac=p)L$5U|AqsU^-D}e+sN!#rau)||N3r@}3gQr^imm=) zlh97Q&OZMB8!3U{w?q;xgfFJ*%E*cV^htt1l8O2!7rG+y8|}A=td4AqgP#?ChLMKo zD0Eop0O@AfYC(q}ngj@5j)OqP0X}ayJ@o!Wxdl+ws?xBv-KICSj51<c;RRkP$lMZ) zB~&6|<Vn2a%{~BuXQXf+JX;484kyIKK3x@~#Y6*SUx%p#BwzlNxI0dj3`xk#Ox}?H z7rTe@MYYaR9j}RoLjfFsjv|VfWKp&w^Q3cR!Y^4K9>r;4X_I1UYI-<pZzLYUK<$3e zXk+^0x%X)@6rLy`r7rj!qWVsPPTq_Zi%EH_m-%W{v!l$;P(c|(lSWsr|Mcu4F(IDr z>+kute1`I!B2{wVdPt+Egjky9)Uxur5=7Jq#pSuxTQJ|riiE=$D0RmQyRzX>KUEdA zM18QdlJ{u0WwHp*_GnBA<u#xI%5It-L*p{X$dJlXkdFnu`-NZ~=EcLkO{aeijWF*B zqHwt7*$cU3g74743)>h-_29lfUM_dGPx)Prq`}%_$uOcoM_twG>3yppV}iL}R2D)F zFv(AGTZx9x&DaQajukV)cOSC)+#VZauI!<o-~9BUu`Sl@<25HyUX&(SnIi5jha_`; zEd<~Q%z?nklYUe^zPGvRgQbcwhVc51aG|8@d!+RlfVEi(j8;C*SNs>3H-2bUlKAkM zrten5b+Fhp_U1&|5LhU3kcNObaa-{$;z-_W{YXANYZsUhXQKv;{&G0u1rP}#d6v3N z_^*L^bIxDx#$kj|eKsZuTM<MZQ-!Aw*;Zi-?+QfOfG}O}^xQM%d#QfUGEmug{lpdw ze}|FLgNR!Z*ft<G=arUqfLoIg32)N+M!@mrJz$=dk0%sKoK^fC8x-HhGR6J)g5sCB zI%tkdkZR4x-ChA-`%QzTxN7z5t=JK_9bfRpJZlxKhhr9s4QJ_|JzjC@P5b@PM*$!- z7A9F)0JIuF5WzCS+VE|*+H3~XYQ;gMU+hg+9D{N>bLG6)<C~0N1d5JJjk90~i+Z28 zvDxxWoF1ld`<DVU6eB)cP3kXdZZEG*XF#fACB&g(YHjw9`p%Fr+8L{2KYRO<Aa-J~ zFAu2D8I2DJ?F}&J#&No_p}0eUKcN3nEgH+Hhpz!ji!|YI_ln_7Puw_b{Mys*)E0H~ z?=m1$<ZN=C&6BWzZYN^hwnV%YaFV~(zr&FT){^Osm~mkg6R5Fb!+c{35KbOiL+581 z%Y?;RXjdO~&N4$9P+6kzDZy`xcY`&s6gIr8oj2Thf`93!`kZmUc|k9CDj{yz$iL-c z?KyoJ3Wn=_BpNmN@9}*psL@G)?(iB`o&aV35QUo2dc_MA1s$Bo?xE3_T%cWYwq&)* z8A$~FkqEV$idVKi>i`mJ8W0K!8gPVjXB_MYsry4t>`IaOxj3}o_KI%r(_Vp=D7ik{ zf+Q7P_%PVE-;-dM0g2shO+W8~Tj4<)+lf5wa6P9oB`%a`YZC$Em>k_;BU#4G!&<{S z2X@PSSqlr%KJc1uF{XJNJGue1x(mi6f*{t5Vyas^NWR?@D^5tQN@S#%%Glm}or9Q^ zF$k{PHM6v%iHQ~AG~0_`Sa0tK`Pmllx}EnU2}G#hCE}W?Jr$;8Wij_T@69n^X_N>t z_Sm5F5q%O?Wow<)y>bvr!6<J|Q-Q+WG@QIM7GG+{#v#p`*B<N&q*~d1#z7ZR#Gm{C z5-#c{+JdE}wal!P+#muptu~(!+E?M6xT?Kz8{kO3R=_8X>9IBM>o>OlAKrwcK%M_3 zpo-s~xB!ln6$J6!roCT=5UQYn`a(@c1+@{*ezs_vhJIq7Is<xS!$`_P$?tW(hhb+v zD=Oj128097CI6bAXy<sbzWjzuGet_M)u(keBWe^Jkd3I+TAhLd4Gb#8*gRK6!+HwV z<5cw@dR1W88;IyP(C27#yT<*DkB=)pj=L2<!Gnt3xI{64M}O12pWq(FOE})>w`x>e zyKBK?eby?N3i<)u$p6IyKs3=48|$}HKn*WDtJXY%=r*7)LeSFEZOqi#S^?D%>x1_| z7<K>5<{vVpRKCm+xUHl7&`d6bsekyp4uKXYuJ!55dJB@!98RbBeXqo3KWgwyuu)5F z9$2x}Tg!_!ixu&E9G1SZcHws8u|!R*Ri{}?&L-))vUkq&cl^G^x^RpF>LLWTFbTP* zTx}*-;9j3~{hig(*p&1g+Zq~oNLk+l`u2|(|4=EzpEPo2(4NU0f3B3K^V0EWt9W*M zYBW~5i=@Z1@pZ>-3^G6yC~3{@5`nQ5B<&J{@`z*$_@i{bEIyw?V|buP4^q2hv`zfi zk7=`6pfi~Jv4pDfje<vEf^WBO!B<wng?GE`9B38!3lgoKfq^w?7DNz4-mN`Q08kIh z&M{B47%wJ7`|0#jZ93kjF=;1Pw<#2e=C=6P({`g}t}a^F-Y=#bzzc)gZ%QFDvq)o& zMr~SA`n6|4_FwU=^<k&+AUeYqs-M6kHwL7Yk}UX$lbxA<Cgib#(7rQhCMxQ3W!F9N z={~Mlry-)I^~(y9K{2TIOL*3%mYX!0C{L?BfWEu`DeHbQRiuIsA0;CwN+`Rp1K{9= z!I(z?0$&7RlZohwnUlY&Hu+mdLmu=6r4mF61Fy*I19QshE3=Xkyt2xINO~H7@e$Q( zj@3B1d(Ua~Fvy^eL$!zrFyvK6qx70#Y^MHCZ5Di`oh7G1q(VSqaR_|%1pV4mST%m4 z65Ou&l|p+8g~qUT3%<C*O;8LA=T<_~%RDl_g}tw8;jH9`dX$Lt&|L4g2oVaexf?tz zEURMAGg`V>YlbnHAV2xSP*N_Tc%OvOyU+Sdwxm5lvc6^C_u{9Zm4?`0XlM;J&ifbu zm&s3iXc`z$d=dp@YyK_8Qb{1bm_|`?kJH}ps9J4fpk-!B${LJM42OUmmr{$k?GWm3 zpkNa`WX5_bI2HeHv!`vK+Oo}fG}<YBWdZ-X!N>$>WelDrQ=?0i!;{}B!Mb@7<F1#= zb!^Rm+FAjl%#Z#!*Mx?HOloLvBE&=1QsxCw)-)H3WJ_`|Z@P9?gzv1V<xO`vtY)K* znt+n<L<L#!kHLZ9Z&|5ri2Lbj*Inr?Tt`AmJ-gQ2eS4c2NXcM~_0Es+bkI?~X?VqD z4SPq;?JaGlU<T)Xiw^g=5anf<_j5xj6W3J|^VW#e9~oV3mbt*d1^ApZaxgUyQQa(h zV^Sd!OO0kH<c5%}I@FM~MtnT@t{H-9RzCh$@eIBMxrzf6_uV5o_)tn##dW}%Vsa&7 zUc?uDj!4LS#>R1f2HX==3O~a?xzg@35~^pTQg429Qm%jk<A6A?x!mTNX|w*-LId6i zNs7+t_>>G|W0q|9!S^ot@EN?J!Zjy$A;)O}Iy^TLEs+!q6E24_PtEzQc1Wql%&C&b zQ(afeI-WnK>elgw>&>m;_HvjF{~s!2&%T4XfN)*K${w-jdg*0j?CEPsWI6iVCm})M z69DZcH%!BWth2Bi@mO4Lwy9i{V@FB&u$|6FmznzZN6ZrxDoOCR-lDv`=@%*eV5G%j zO!QJDUE6|dT2jGv;o|VB2V*5#VjUX@Xim$?*ppN+7zY1$4a&<XA5xV?DIfnaMb=Nt zI_0wkvS{31PMzV~Ui%Qyv%9wxtxLL5EOnagRMn77w!dq3ook)91^>?{N`D(!lB#Ih z2ID54hzDFqq5Pnap$_hH<k(NzFB&|a4UV^I19O&x%yX^~HC;l9_7mzc0bgYtB*s9a zI1KGxn>}9goO(b8V-saSg27||S54H7^J+M<4Cm;Ha`Is0d?IKTp3yHlOy}ULZedp~ zNcGl+bOCbbx(gRY!<lb(RWTq~;I!~ofnqtB5vEM>0Pd4INr$6i;GkqAkNAMGb_$%@ z353$29tNB5BsRw0%tu`Phwx=_MM?kA(R31)@HYrRJ-VI(_8u9fjXeb|mxeCP*w%XU z?4sq!as|^)TuHRsLtg7!(UJ5Rd|PW#ZrfT>?JPw^=gb5plYxqC2rrMQt9InH=AGJU z8;1@Gbd%xC8HH=Qk~Km*|J7g{(`8)5z#?8av)mR<U^h2MnRjotQ!<d0%V)|sB`F<t zuVbK$5)nl@)Zl?5_%otez(78468O5OQx9w@`2%wDvEW-lTmkh-!MCH%@}Uk^wmE{* zPDC`t*jV;O-2&RC8wz>YRwe}hw#PhDk@mFflFq>@F!UX*LjLobnk-nGU4hUN`ns;E zlU)-zY@~a|w_QFs3)&|&l@6E1a{R$3OfI`pzisOGgA8x3`<64XNwW{Y+LoeNE@mVd zWK^v%X$&P5TWor{Q+Llhm%zW<OO2Pn>a`WfUhMqQbm}b3g~d7Nuw1V+EexvRlqb~| z>z6F@?+OBTL1|9S(VNi}C5fNJ`$TYEe2vIfWt|8wJpkpYTH3_hOPd9G+k7k`eMPch zZfs%Ldz9Oe#tV6|@Ap=)pm^C7<fTM5=A81pa8^AF0w=eBQB#G?S=ux8ov`@$-=i?G zeeO#ew)_TMqr7lq23++;E9^*F_==xkmEuu+Rq-c0vvHAC!Q$?#3x3>Tt%6Oi^H%R` zgd0RdF_c9nzKrGf{5bT5X%~e`jLV0VqADr`3U&<<D-2qf8{`?uGFR5I*R^YuS95}< z#7yxzod(`;yt{({);E@76&f-T2uSdr7^*(BSdYZ6UVtX+o~~4@Lv^X4#g2vz&{8XM zq9Rl4zpo#T<8A&@yS_J&_UO@AQf*SJpHDtE<e{3&UjCHFINTvT9UxP<bV#axAuGx0 z?#c|^W!J<es=TpOjBGfxt;S)2#UYuyBYhapXQ|mW>u{bOcD;@0cD5#KT|BLTf%w(! z%Auh_iVeC_O>G-&Jf*ftt;*@KT2D&kspZ_}fYDg<EPZfU?JR8x4vNns4mK|P>dKO; zYlkwI>FNnDMa#6R6()?Kq|B~9(11;I-mz=YtKI1JO~YtjJ*SN{pBDV~L`FbWYBoP; z1B75kiarz2HLgsiQD+YNyzS61wm^fQ1dk-X!N5lXWRD}ojnvk+#I46@FQ0t`rm41v zkp#mlD3s{)KxJBdvvwfiNhSDFFqBvWssCPJ4Tw!C=vTR~Yd;MM4q4*C0pZNwDtKnN zpPtAN*x=*9j$54sABDa-Nm#D+pc~TA(d_H_sAx`H_Y)Zhx1{>{icw4{?#75>79UkS zj*AsHV|fq)VosdxoZcBYSd(6Ee=-a{8jnx13s&!F_${ztpElwD(Bt-YCSf=z?)8Ix z;;hfQ#0%^x)7~Hny8858lk<GnJRjuHYb0hi3-4pu+whYn^(KrZD`C-R%e_%;4Fy|p zsu_o_S8``oDzZs+a@g#f8&(S3Msl$nYZ4r?oV^Y5`ZV=mc>RFIyMr^jX$kG~xcgyn zcJH0IrZ7QVZ9t*12M?_Ag-4;h)!J;nRI-zys1Oa3g-3^!i<k(T!v>&(Fw&FzfF(R0 zzUpyXL})FjXhLSUYQ;LmOwnU){f_n%I)HibK-_)j-~$)K1nT0+emH=5+%CkW3wlJ} zLSokpx>cr!{j)R!d@C_)FrCVrd^E*~#aI$}d7lUExWf#$Pu;uwZau4Rsjm&{FntMP zc9pbDXl@LvIu3pbjU=?vPIIA`pRXauN|w=3@PR&0Ib>_7h6ct3%tRtBV&*OzUC5Xp ze=Rsxij#~y2Ux#T#GBF;HAQex{>|0;?90mZct3nv&<&DtrEa*mzZ-Rfv;tu*_{gK{ zEs4Qu{`|Nq##AVTRR&h?uvN?4U~>Y8t&n2*iZJ%@2P=>uKiKehsDwrBMq4-I*Q|zU zK@u5##kv~?N4)I#6c`d;Dl%DGMs3m(6YKEU|IRVFXGx7o0!#c$7t6`nOm2K@)|sM) zphFz{%&9j8+H8dDE*+T1z&O%<DPx<5J=SfGHAO%>XUh&8i${>*sNjY0e&4EJOq5lO zZy0nwkyBt#D#H)r8ZqeWfnXeT9~3TEz%I<XzP5TSRXmH&EB=M68dq75LfqQ9;LlsF zdoUB!-HtDJwZ8u(&4Nov!#Of5rF=RdSo|&+fI4W7J94cLJtwrNZmXozu0`Z1w6s&8 z+A8?S$?S1FJg!wv!Ck@ANi9VvG(2OCYP-VVE7;VyUwDO35mRxnvd8h_GFG=(&old_ z=@)g31}m3+9W`@3c>YNyckibxCl{-p`Ba)r$NgG7=j>uV&s<@pk6eHsRi%OQuxiu3 zhBMliOG{;~Vf!>kBdy8HlyjLtfRYfS=H^^Ry~)U(55x9zuvLkpU{1u5CH+=+fTvN( zwL18GFnOK6VlD%P_dwB%hfiPc6oN<}nj-bW$Wd<QUT8Y=7gz*$GQB6o4u*Nd)^NFM zYZ>$FZ3|mEKxl_)W+5>XUNiA~k*gbxBYJjKCx{omVe0kNzZVtcQa9TF&uZm>Nh?O8 zI;jY*$k#;<<y;nn)f47&ZR}F*d80{z3gvIDunq4+rn8rQ>RxxvR!#M`BUr{MzUo~Z zT{lUrRkI*z1PZ(Iwg|^8;ImFBVMx~7$*y7?vTE0RP^sQJXN<ILu9h=@t&whbBoa^T z8O3bizHo8x5V)s;+sXad)cG%137d3rxCs4tG%%~}773(Xwss;w3PtUPCz?9VuONI^ zRzn$`HYh>2H~h|lzc7~9fH^rxLnrjoxi=e)7g`G*K&qeGSBw57V;zx|E!nf)#@#x+ zQx>Q*K<{+so#aOI_grRmQAPjm3XY!1sc)O{Zs-;#Xp6QNHBb;|C!R=5g|T|FSto}V zlWCqz(&EE^A1>U4XkO>7^M79G)?(^}_I-g!x>2PJULc;VbmF7}1?%z8i@DU1sT_tP z4bqt4QWHL(9)x?|c=(%gzcyeRox1WrM6A2MP1Ow_I~152L2G(~K4r?8DVf(@<SK85 z0|+WdZtEGU%uj^G6=f_DOlChdUpn>>jdDgb0IG7ai|`$11P!RH@g^pn7xFq9y)BQ` zl(E^){%U?$Bby}!1F~~<972@5?bA|dV<1ezXUOl=fOF7cHkmrz*{F4gW@#8wQ#dj+ zTjw!XC=E7<v&ec*36+;=FvUDc0mM5y#G-yN%_6J2+mOcnG%n<#q!4~k8O(s&lGdhD zHRCz5@VcPClEDZ?i3ew}Sa#ncj9AmO%XN|_3H}d_V{!w$jf*&Y`{ha-f_vJ!MXHpc z4jZj2Kf;7^;m4zeYmQXk2Y2T=gqUnYvKhBAfwpRDfIBKQx@ez<3WzyOBC!<#arF$u zj7d#V)Q_jY=lv+BPK?)imZTDK5DsL*(Zo`gdQvX=T!*cE%qa44|4PpDBEG%{36<+g zQPJGMBN_Nx${{d_06n;WrA+#KFAdpUP&-yp&VMri#wB<UF~jk=e?US(KMwVy?zq5i z)|<4f;-ms`11m`6MWE4>_gh)ENJ2&*!1hgmV=zlmE^a%P=w%Dpz)fe%iZs*Tv8L7Y zrWyafukI?c=z<ne`I3L!H~x+ACFs8lkJ3K_z74tujQ+QyQLPR~#yH$xH2iPPdm7U{ z`r))Ci^^LP6yH-Bt70^iABn)ZKY>1|M`AuUm>6lu?Y4LKLwuZ}(ol+^Nq10zMtW<` zcggh*UzOe!O%qTgI4prgI@c$&*+LIm{Ykhx<IZ)eZuhDa#Dkg5DPf{`_(xeh_$ER3 z6Ul*%DLY^B0M;}@R*j4Mx|_QG4&^ZY{}g!>`8e*0!CSuteeNG(Qs|!dJsx-AK`u4+ z_1Z*lzZh$PE)3dnbBgy$^8eZ4=@lamMgLXunynLry}rJ70(TmWa6eqfWe%%h-s-cS zIfJl>2><ceNsq%h%c8Lnpc4sE7}WF?oHs*t7ExDL>ju!5Z$9OHoBBy4@>XjCkG?KI z1HXZQLNw<~0bnvAFI^E62Ys&$IbnC3&{TTgG&$<W(g+U6<O$!c63K10KU2Ji?7cW{ z|4@Rn4szuO_{Umo!H90yjMuYC6Z-{`{0nE%#3e4#jl9<#WkCXMfm!9KBqbtgw^HZg zE!iXMx1%zWzn#TODh#cF>zPgs;TaUX*183gysCVVI#G!zJV708N?(n?R0+fjLDZz6 zP3fSKvqEZoi)$_i1QRECxS>Lho37n0c*Pi={uwXqPA6y+gFifZw>5y5-XszUvrwRg zNC+aKu=j7$O0~{A?o3Dk1Gl{q`6p3DZlmBHN=6btcXPjk$Y>SyZ#Mn2Ex3Y|G55(Y z>NZ_@$TZ=KQGJ@`7qU2fg2$t}Rs_n5oV)Wv+vx8Tj4kvjk-l8^-CU7Z(Q^zE_jBlg z@zY{MvOFFz-@2U~(|yfgmzG-}>s)NWX34pc!ooaG95JMUKZ?eDyW(4`ku@5I8(~u^ zDcMuEA?|Wo>oWR_ie_X9U|(*`sN{_!k+3>b$wXo3>belxtFcV`nuE>;Xs5RMue<y^ z00}LQS{3Kbtlz)2#$}d#XV(M)S3usOsQzwS>FOFze2c<s!wM2y=@G+MpO~)}&iim? zcanxNcQB|aqC>$6Bd(=>`l~A8+cS-*hX<yAHqBswpNX7ETO$fn%l><&=`et@73g~( zck154O4cJiH~Pc&!sM>Yp@2?F33Xj1b?Ca@@x{8@^sa>jC`n-hJo%b&Nh-hAMijo< z_i?9*BT<DNd^hjy$U=?x?!PXg3t=9tdG)xZ(hgG~?J6PJt960X>2_aFyLw0l0VtSG zBA0J=oFJg_vcqKB?EbEHj-os}phFD4d^NZ%<a!_HzaN=_e{032_IMgeOGWMNfcx-6 zSIJIPeEGiasgr-ygAN|rPqQ}P2@u4ya8%yQ-*GZ@bsDu=VF_xR3*coKYhl=8Qo&w4 zVA3eqYx~JXqcs%nZ*l}FYIt91P`e&1uXdR-oOkV$B9XthMToh*OlgkRduJGn@E_c^ zMY{rs^!WO;XNFY5;a#>{(>dp8L=-SMsk4{fNP-|9zjwC!8W@yvJGKLJzLz-nGDS6= zwV68&9b^u($G*w6Nmy-$W|zKhuzqa<u)8m%ozvPlT{{z1rw>G{#0e<sT|yQ`vV%*< z+HlysmV&#kbacrI*TWi`JlQE9(Wmc6WVTt9{KEa(L=fxtbLVS3nb9$jF2a@S>j}Xa z&Q$iP)6{+ID~-SXwXQ(}zhRoFyBhRdDvA`2`z|$Pp$=PIf#L5Cm`-`oFy67s=Sk;X zvaZ@;Ycgo%4`8&nZ?xH%8T<+6-!kN^I>&8G+B^;%5X?_;)!@P#u)M7phdzDq5DwMN z8(2hUU_-@~Y%6;#FIB_=d1>HdYbiibSMYWvaY{TyHa}JsVQ(0Tb?Eb=1;lU>lCvEI z9kK-)WdAvHC#!%6;K9G#7s2YLhBNR?fs=<~vOob5f{YMKs6R=+&6sWPvDyAjq235} z>z+;iVqAVF1Dg@Ne^yNLU@W1`2np!Eaedzth){^n-MCTlpaD%LnL7ukGoKp=LKg6O z5zuCVfDx|^O*Q(VYhaW!3@nyF+3iv?-}egBU=gjeSY*C<Vc9ux!5O9_w?!@dAgr0D zv$h=x<=OjBDNv`dnXlD<-K{qjENWOsP@b2k6F6Dom7Kxk4x~gP;oJ^W%N6T7haUzD z@)z^`S3JoZ+mme?D&{YW<p<^X6+JRlg8Rjg=;zGwE4o?h3D@#)qFLf^+C;Oh+{u{7 zxe<*BqGx1mEZhu_*%X}0N?7w#Wws8g!nhNNU9;a9*v;+8v(pX*H)x|}tqGa(Z;rbm zv{Grg+H6yO4%8LC5+Zr^`ltxPJs5BGl%gFycoP$nXU?4CJW5JOfKSK?1Y|PfCUTQ^ zvAyICi&Ft7>xY|7+r+;v8Q4*G<JL~;CHF~iTm9u_5^B1&(}=XVE890%^>6054g=Mn zW`b<>cvqaQEUGnT7|2))ntG#gk2<;0Xjea7uVYeJbQDgIURdJs-h?V=FhodAe6`Y2 z6LbZxwE<we5G7am9WQ9(jl+j!&aGJ1y&|A3$p0OVMn<;2sIA=&$U~2Fj$^}*9(nsr zeQ}2YeJGRX=g>s2fKP>fd}gmst3ExDm-;EV(Rsf&j=Qr~2T~xZhlORnPNwA_3-3C# zk*Qm4{J`x~DhzbUp{ammj{~1JCj^nXI3Nn)8p&zPoh*gNl*--E_?^au<D3@KgK=>e zyI65#tx*A`vg=)zBd*^|&8%aZzDNL%y;CSYj@lPjt7$bP0=!%tz0lOMwj3XdbL9E8 z#z2cgX+a;?Np+KkfgYkn2ofx`Co}gm4q?0f)OwReEwsMjUU-(mI}Bm4$g_}fFE&&w zP-PO!&$5#nRXUYQh7cTAnUzKQR2hAU0-b0&=N!zN7hF<AXTmGIO-3LqoGWK#gSwUR z3+o}I^u#7e_KwG?%0Q!y&W#Hd@W7we4!p=ku(1knm_HDT$egN)0l$qC!Aop#K811& z%h=(o1#1nr9UR=n$jmP)DdN7<;>!|hX3$f;(vf&WKX9C^E=+Y>i9^nSORRG{Xp}hY z3%aGau80{*_*3%tYq^4D2Yb?h72v4Sx0^O(L+fToMuxx~-}MAasT@?m%uZyUWf*0D zPL_dDG1it=Yk&lQa66wA5BYvlJ2aT!_7o<NRIs|eULKQhAG~FjUXiJ^Aq>u7(5)iK zocHTDhyYFdYvV-20AI0J6U*>CJX}tM#`uQk7qKwO`^U=W);lNz2gPT=MRu6TW(1Qo zFm$%^%mzV4IdrA$B!Y+j_KpfQQw$r^q!1XDwCb2%F0`;tHQy#jOzBj!;#?2su^f-* z#qQXl_|pHxsKQ2;#>OTK5!+-4tvD}|Q71MtoZ25>$-pGdX!^WbX1s<wJY$G2W*}jM zy2NcEj)~6@=v<XWk%qp=q_Z_w7G5~p38|vG0=LhGWG47u3uV*aY>F={uLpEPzGW50 z099fr!vxd~cfdmqncblV`{HF;buXP86S9gYsjRBCzu>w?KOqyeLc3efWrqAwxk6Gf zcD;UfXOB$gXn&%2LNNL7_m4N3+OVmew~|g|L7SRi0BC?o67i}Tu>Br-W8|;swyZyL zWW{cpRqQx@&JHQSFur%EjJu-KnLKXIN-WdE2yTmQmcT&Y@=7aj>n&T%fNRaZ@gDEY z?&R#@`xXlh$<0<*#LDRe4S!Km_GQHdd?Ipn!lPLt4?|3eDcBb&Wb@}lbaRuu>z%Pd z|J0sIbR{CT8dN}&X`I{{j2GdjCOOjz(ZSS6UpcW#7IDj5Pj?*rIn=JGA`iDpa8IHm zb9NS<U?c*4Roe`EpLQl2cxQo-%Y<>X$}OIOl3qM6$QFhPOeNM-2?T~D^kMmN^CURA zB@h}Js*7ON%>-y|0SnxzNwnIpB5L(2lVzq}4#vcw$7ST1w<PyN&%wT0{djWebjOy+ zLC4yLUqArqfCsm;Le`m3mdopvcJe``UwN0(c0OOJotG+|;uTlf?}AJaO@q!Sq(v(t z0DR!Tc0i<sz`4ys2b2X7_5ed-+@SZiH(@}yrGT|!&pOB(`KmtfcaPW?*oIZz9+js- zCzD^Wk`Py}M!3GA4q)JKZF_)4e}_e|GVh*kwj0HtUCKaE*jJ1sjvOevD<AL8ZZ?ni zAbJ>D=6t^>y}55a6OBJQ(1{3nX*yzmnGJJNV@hzwiF*$*%+(6Lg(bdX)9DU;Odr_U z{hC=VXaCG!CWf&V6$fMo4w%N*v$*<1u5W7qbStx{=ZrMJ=gYCvJhU&5O`$6AlRUCx zoe^(YnSag^IrwA1@1LW{F)rw{{59CuqksDNv2T)c<iEJQ-Qi+?&gT>UZ#Am>!;8lK z_1+wc)05#qVQQ%Di%!!d*ClabHanNgWF(N@jn@4%n#tV6e49Uywde;%1#8xPyMrrE zRm|~B<yWlqx(wovGEAtgoYynlqM?7iH<x(b3ND+a&%fB#`r$FJC(+F21-?>9k*O4a zHMHj*wkL^??clvTjQ?{nb%kPUAQ)eI$w7nn2_8RwtUXx3w_7+MZp^8y=?4BS+)QhL zH8>4PrN8ajdSm9mQ$hWJwxQfka5JqZ0$bBnc!O)3CFMz_VP2(loLB!=IFVfGll!{_ z$<&H_x{PW#1A@41aMilSMXoT+BUU9`8(e#`KJPv>qS4y+MkRECJ30OjTUud}jXzom zJ?I~J0zNdAXB+DKAtyo%-DB3veO}G`Lb^x~fe*e=FLeKRr^OQL2;H!22&+Lfd|5sh zff1>husg0#?3qi!G%SJp3ZIwF4P8t1>4r-ktf9Jsqrkq!>akHNG)m%cR?DqgT*ano zFgkr^YSs!Ch9)bRN~NhRqs9+1*cMOQf?TR^q;;dVxePq5+~+J^)nr!7WdiDVj?aw< z5s0$J7prym4+Pyt8X`BS>S2p!PJ>azJ5V{jk9PQs50ELa+PrL)2(?5cob{<;XtJzG zGI7vNYi*0&gDU489npu=JyLreR)m}m?Lw?>a<_9@hlL(aMW<3ptgjQ0%z5wn>{K=F z?L~QEUvBs=B=ztEC2t01CjRl>1<)_+p!_LBL<azX_<qr6NUx>4Qqu)XExu%^u$Lr~ zh62AhV<;Ea3l`Mta^79phzbZ_NuhK)@QD@uvubnpDrdGI#%>?`l@SJ-?v~VBu?#J9 zNqK1rJkkV*3b9{9&Diku1=hI@<Jm5<f;EuR31?&tUN0$fV#*MUQdAS+F`<hHVV(;i z*VASj<N2nwKtiT8uT0qt(luxN%a?r>&1zVccV3L?iC)d4Vcy9Xw)D}4!+@<|?i+Ic ze`YGK4i|bwbU>cYC0Wv5BskNOXJ(j!lvj9Wa#o}^rG-TkOS*3V%!LHOSPM7t-toXf z1|@tD4%oeyy2_S0)G{enyXu<2PV4t;HB4>#NTXGZsY9Bh;~9}dc5EXu!)j>L1<xjc ziTDxy7j1UN7Q7`~q4+%3=Et)rfvj{5dX4AEf=H?xExWYL15@~wpA2ezmWsh6a;f<D zwMi56$m0TS7;AH(=5b!Ox^q^Mx*Q+gZ#67sRrkkRJaF6qlU!m#%S?eeaIfIn9Y|}& z2fwX04PT2~*O6S`@^l82w4KyibObc;sgIJ?heRbQ-#-zkV}Rk5E*q;3V>EO-<w&Kj z*Xk)eLZmLSYZ;v3vawt20tkT5hEFMZ!<a(M!v|3wO)}+k*79*3%muI1Ot)<^Duc95 z`EJD(x-q4$PIKRPIi0RIFVnzC3iGfzAOBLF7}%b|SOTu}xqO2IPbN=6!+H7vI|NO+ zPcJ1TS2%rN`n96dFjoU(VR@(MK2L!aMVzlYJSOp7{2l5bMM<d9avl=WV>FMKs^xne zl`AnMKrz<m2)GKFpHv32cIj;NLSW0qCZFM%ew>D0{;``0`Ru735J%%$3#uli^$cV? zxql&UoH(8odyVJW_X-n_42>#)+nz+}IO^<&#rJh^TJe{S8s4|~=w+Drx9_(XWLkfY zVY-(XTK8F&SEE3IKeguayz!DGH0VSvD6Mq4MQxnVx1b{^dRw86(LM6Al$=+M?JX}x z8(pDx?n3G{lt}2Z_h1QZDe%5G*seE-ztU{ZTBkg^-MMJWzuuc3{qIF5U08j(`d&Ki z{9E^+#Wx5^)phwrm)tTE3k1RkSF@m*!KgZY*RX#s2zM@5qKev_uib6+$f<ML5a}Tz z<zBJ|;dkhwN{_ZV?Aioa9kM>i9dEUpwR_6LJ67{m@1!B<R1&DsD4jR-JDrQ=Ft1iL z0`%AP<;HKW+2!>3{tGZ8-Uly`^d4q<4Z=9Cfc`dYJGK>YsdZCg^9emp1^F@o-o<fB zmik#sSmO28nMopxhEgtT{20ZL)JsJD|8P>WWm1^REAt1)>1-V@u9@ttiAxX8iOP3n zC%%b9PhAh2x#WuFqLR!pDaUXdlR}Xl(OM<Sbn!FTZ$tjU>ar)+7lf`wO)jXNjPWHH zUnm@=kpN2e;mtmq%K(SNpYZ#lS!Z#NMo})W^ii<T5}q4M4noH8Dqpt2LaY*!s;_8e zXR7dTt;NqtSy|r93b1R>oLEVWmI;8yOVe?JAf$HA9$*t{+nxCOWu$Cy_CnM#IVgEP z$yXKD4VP0mY~hDctM;2-_Ug;4re#H5>MOn!SP*Xo0yD)}!e_L7&C_ThuM6Bv>q>j? ze##@z6h_k(7Xk=*R9i9f(r^{51HWfr1Y;FhB!8E!d$PduBfEV(#{iTf;k@1UTPC~w zoz~mZvyS+G%stuMaP+T*u}2$oK7!b$^yA&bpT>W#)}K=-tbyeed&q~8YywEk=kYjA zTHWM)ubnZ*ii?edo&~8uxj42%THA91`&zbT*JZ<xUHxL$Mv^ak2MxFiho;K6k9@Su zJr341mU_;e(-#MheNapNd4G!ePxFlV%>JL$!22U4l!OZl@b>Wz2*Z(R+_<FVq&O~( zgvX#EFnAJ)&N)FkDU-lZFbJ6n_$C*;%O*G;z#%C+cu63@qA>Q{Wi6rzP&UxlC+m~G z>08M;gf%Jx5#UY)Z`ukd@J)%(lqu^cL*Tu&%v_86d8BkY1NYtUc{J=FfO=mk^>4pZ z%=36ztHFK%`KjVuVqNkQQxplvFg_NjmD49gv%GEr)t%6*5AKthTWsq{ZQoJk!aRpg z&3F!E?B7=8sX3RqHBRlf)<0n$i{Rns538Q$AT=(6VLO+DNEJC8yVpVvxmE8L55TSM zzavDq;>~#=2u4>i+)<^_jmLY4_jW7C&+3+5nUgp`IQH@n9BEYw0SLw$A3l=}051Cc z1d-p!ED&47c2R(YAm3v{sCT&^-~ia$W$@A|TA(d@SBQuN_@35Gb-5rTHFgMr!2MV* z_eL1p&KY+5veNr9=B@)A_-x;F5B$p?7yFPRS}b{@@H&1QR5S!V>8aSV%@RS!M^l3^ z>-=hH@VOq}MiuDqL6t~Zbi7$F;AU}r4<GVNv>Vh9F45UF5{$rPxCsQ(QrL0&mEmCG zlOc=wlEBPt=x!}=`Ln{znR%I6o})@M-H~~GP0b=&p&bR0H3x!tBRysV?FmYbi#FV# zxoAR0Yc?R#hw!+Fge^<EPM1bD%!1_`6fePJ-=XsDJ@@r}@_@j>alQ3^kW&<fCK$oT zZLoyDTB9N(OQl6TX&Uhn!jEgV1@m=)BQ|Y=SbI)XEC~9A=sRf3msZGX{{cwF<oS~< zB#K(OSt$6T8yl{`kUHU68Y#!{7xQ%1>1=b%!<T1LQ){(Cz=$u}*XqS>hno^Q{k zC?FKU{(sD*T{WhnivMoJAJ6(g6)_+xIlg2YhY1oxM+3rkiDy+y4khH1p6%;w!R=y6 z-hxzQ{m1{2B`ul!lS;e)vh64u1|`r7yGI6Els|<!1m8Zpo>U*xqAIWki;_u4)+|~O z=<&YP`5w4kkmNsU$()71{w+n8;OUmL;F+7l4u^+t`{(d;11kUhzW)x9tJPn;umcnp zM-lcgnw{y&BS#khlz+PR$QQug@z?3Ckp$#@;J(*@o??5OY|}@pKmMci*S*{BxUCNS z?uoCH=R9=p5B>&7k@$YW?xvDIUcc+_RGjMi5rRI`msEcmPv=X12zuqY90!oAyPzx6 zEW!70rMGO+_niB|6QJ_Gn7()YiyimAsYeK-iZn?Gk2EHHI;&H(zh8hJE4=iE_DXxG zv)$eq|MR~ql50J+<A%=>eG4rIK!1JwPV^{zAySjEWOY_<<Rx#jvD8ihk`^@G?D_g< z?5E@HAxEN%){mygx0G{N{Vvy6(6i&JA!Q%M!n*q8HwT+lAN02FKL4!^lPKUG{V@mr z&u>V{|DNav){&#NPf&tN<_PF%GY#cc*Q|CE(jMoxOt3e=%1j<IL@v{y*Tunsc~>NF zKO3HN%(4z8tX8{noLs486z=rW?kJYnC8?7|+P{H#zvAJ{O98j9xYp#$<bYmi{D~f( zs}u?q^C;+H#lJ}!^;~4ac#~?7K)nDV^vYi42MdzI{DQw$xt2X%0bdyRhYZ86A3=n$ z=t8pOUe7nZvZ9W+buf7wc{+IDE2tbrul_f1kPpk6iFM+70yF4~1?}Vh)?QJ>!Ym?j zaV8}PNG=w)pkR&-H*+8BEGN0FFfM1N*`7bl)Zq3L<POW`CYY~Y|9gX72~LQe3x(fw zaaYxK7mxY(2KQWEyt?O@6Z|K}jk`L*mP1-4_ixX&ptB?11|{_bgspM5@y>{uq#Am1 z&#ZoG2|bh3C(<LUyEEu1@I=N_+_>#1Xw}vR#ZdgUm4p+QaC|7U;fkvSKW%IqM^u!i z5qws)y`u!`nqM*Mse3-Q3;)UhwVImrjL%SAP1Y^5703C#&C$@+PHgV_D9`<OawDDq z8OtLC@L3eRv5WVezn3<TtTCSqd}U7`4C*5dcZ7~xKI)>K1`G?(5(+%~N>>#Mp*#yN zUUx84Q+GwL#<xf>Rx*nOR6*}6dP}6_5QW6=464eFZ`qSmU{U2^fxW)ynw>LVQh*?= zy2@rn8ObEuz5@#e%UPJArVv7zt&t!|(x2gyLR>Re7Ik)ldAd#>kUGYsa1{k;j;{6; zF0jS_whpQmsnya9-zLZ^ho@u_d6aueIWGt;&4(s5bE{6vBalQE1z}Qfo;rk`2i>7> z(sRUjRH|5>eNN_Cg02!E0hR!JJxf>N_vhMe@6^d5ic-;Za!LucY)LOrf5eEu+ab*% zS+P39COQ`<vA1piRdcF$(Mj*O$x%7??1H<7uCZ8{iAGKD)-RnNi|wmaI-BjT)z~~( z@O)_`4wF*@`G4H;_;TWVaV3dEyX{JNuM;GT0D*sDng*5>Sd)e-vjpUG!E{ZYrb$q! z?(^MR96;st04}HTu>>f59GnxJ(<oG-sxFlhs3Aqlh_Rgyr0rarisMwd{49<~^0@<* zn>pK3Pfa;PPj8#$C~ug<<@!eoiBLJTJPK4w=q)P0mrxAdjCNLFN)lR4?)Tq>MAl#{ z9j-h>w!dvSi!zyPFoild=BkcfG8zLncHte?!8$WME+<?1UB-JR+jKVFZp)yh0P|1} z=~*xnI8UV&dwx=;C1jjU`mMoP188#BXd&`lyCD$5C|=kZXoN8A7(_|YaAOVjjIq^@ z#urYV{L5Kfm>&w*p`qhFa?e@Pxh=qbA<XMwn`pbO+VWJ;!S(v5>sbQt3gT{fPbTOh zY~psMz0uhgu%&k4mWs60TQZ_Sk@m6)f{7ET)PCZLSfNpFnrU}}SitEmE+L9iQRzxh z8&shx3K)CA99lvFxtLi?m@%<zDkCPwMS4kRQ$GpDU4AW}$;1x?Hol+8JbHJfZ>&UD z_+ZjQ<LFo=xss3)4<XeFgD;Qp83@<BNOX$5zWV6BTUP;-T8??R#?>R!FihhKjssd; zURv|Djn>6<wBeX8!CWHaxKDgj6|K?)2hCLL1BoJY%ohF-JI<bvS}o~WCqoaim;Fa5 zRS9clb_T52rp}NR(wub53|Wxkzzg1t>eIlS_?o0xC>TI1oK8JrzXX~DThc6)D-MKI z`y5w%5vD9XuSWA&q99c)q0*`>y*Gq|`JU-`>yN0<lPMQMR>~Z=jN95?2guVB;Asza zp`jG9Cl+(H+47`K%wanG=irMCe(aRlU=D`Qy$D+WtN>r3eQZFE_i3fr`yAJEbW<2f z=FNWSK3le=g$R@#6z0oW;}QRAWSKcfYhHz=@Qx@%DaG6G#2}sON|mq6M+EuH7q{Bd zqMt7}Xxu9L!?4x6cQxXSc;R@NUAT10S$Fnoyf1#fjikmpIwK{bu}XigJg&H+H+`b! zp(6di<$1$Wx&JDbMI;JhRx826BdB+vVlt&`B+HG$EbgBzBMYgi|1G57K6yZTYDh2P z%3Sc+2qY4VEXY{(SGUZNwwjYuJ;ji2drW2UhDk3+>k`r22kBfJ-_pHdb@@{*s|ChN zuT{%ZhiNX1O>e9$b#rLlce@T55q?;Ls?$(HS*(K{0~**Ba}UTZo<m%N0zCUEKCAtW zXgss5u7Qj~iDO7PxCKO1%o}{vF#I|K)Y_<;l*8l5X|Y0_R{GC)i5wbh#A#;spqL|2 z4THm%#k;UgUZYVz#;O+hjUT?yWJgVdTl_GGvp-5S-tQDE0u?l^)lP0VnvxNE0jZrq z!ZQy^d#bxBg;*MGy~7BmTq6JJT)d6a*h`f;xqOs!QWE1WgD3n|EH*p6V651|lO!xd z=bx#6n5k<LK{kb*oA^!jw!PkpVwVh`S!4tw7SSnFnITPnFeFURU?}~tO7*fdumV;v z{m0`iD)o!H<Y<YL9P+ja|C^-QBgi`KSg1kf5W~0?+2!+@^ftaO5UQ<mxj0Xb{yT*< z5O1}iE-5WGC5cIqE+wvxM1?QFteS)|ku=iVZAPJ&d0|Xy#-<^6Brf3h#s=ASW4Out zLQ;0Dd9#AZCY34}v9a!fm2Mr*Qk}yQu0&d7@CfPBnDMXYM?|rV`Kq|gL<I#fYN8-( zbcS8a$UajJN=t;p)hgWm76B-Ld_!}htco;_t3Q!47cvTI2saM0IzYVUPl;(P=!JpD zN>d*k?Txj$2}Bp{L*zmmxh(bCN|#D9n|xAg*kac)_Q6c?xsqy=g`prVh{rjyAo-LU zX^f{)!>Q_iLCfZA4Y>yVTA*LH(-}PstFo$9Z<K_A)qrUOE$cf=W%R5pPzo_hrBLwK z+L|RD4XM>vI)nkTMrRYmxu14^nE-!?E%>o+Ovs@QW!O(&_SkaCo(#&oTU8}oasrn@ zGq8$Tm7;dpf_Z&}!3A{hIi<7^5bqU~GGr`>kSjc1jU|;33_Nz-9<}yh87yJ?jzuaW z{A2pmcu6gJ32I0Gl~c0^yz`7Z7mGsh=5zqf>%muLw}E7BnG%s9UK~Q|WhxZ8O|K!7 zLMM?81`)5vd5Gr)A)4U0cy21~FkZQBbDz*7Qm{e#bG>5jQi#oG2iuyxR)|TBw_V6G z7&|Ve6sS}9Mq$_QFDgX}*%cYIPLfZ(#1ah8m*woiba)Dc65Cv<5y=5ou%2_7q_XP_ z+3``8*~}3je%uQDm1o)k!w-~hv)PUT(HR(iH0wM=U+WPbjZ`TI9F#vqgJr3_%ZFKZ zzx!rf2GdPrR3yxVnM}(eBF__i)L1hhb;rS6(6Eun=6~52qHW=5)a#%r3blj!S`}O| zqUe9)N`r|m>rje6gyE}Qd!4uII0;2#sSHW4anqxma9>ft#foKZDRletGu(OAunBoa zjgMGu^oO7{wF<_XEg19!kxW|IDC^4Vl|$^Mh+56=<hANJy#m3Ae{QjPz{!AlIvcP< zhB38#8t(Bf2Lo=4%T4Q5NU?slI<2eLWxJ^=-3z?6c}g_w6kASp3zOsdj-bNO8fs;k zAT-hV<U}`~mBGvr&M6<cl@^9#0%vJJ8uN?t&&J9cbB%`GoEr)0q(~;U(49t;LgOw@ zDCdDSg>MwK^*TwrqsS~f9@>?S;jqxoG8;4mUN0>s%UqJmDsrzmfs#|k@e>~%sq~kW z5%h?0{4Uo)_`0^NOEw$F?bYOgDOH?)K{&*AYY5guvsrYdLa3ThYZyjP5n{ok#&x2; zrY4b2$!!SV@JNDr=b$ve%N)|w6P{6L{h-hNQ(~4~<|9#_<+%ufcv*{5e_}@>d?Gth zetEi|%_?LJv+z`lmdznn7)Z!!Rk!MtQ_nyYa(NB|M5%aSDVjz|W3gzNcGH1H$LrPg zV2zSgC&?v4=P!2T1(6iKS7;gBu*`~4r<58NhK8c#Sj9ATZKFg3tJR<qMlv)NXVqvF zf;h!yp->uCwJoQ4M~A7Jg8tN<>W>sAvQn&|R#O$ppN7M(Nfk3O9*Q@Mq3?-LHx9E0 zcnjY=F2!P&Pav9dN~KEfkYITnfjnN_%DIA01KMxGi3axqLo6uWjUxqb$S3YEw2SCc zAb_RzY4m79l8>b^dwwA^&ny@C933u7xO_4eV6`M$tr+cg-z*86Q5N^B9a0j_sA-K> zJ%OZ-=QoF}N`-WQSE$PMp|m&Y2Wh9H?*J+Pecu1K0)F>3LnmqeropRw65=mgPc+eg z5%$5ouzO`iLHgDo57cG(XE%$R)X(3l>YYzb9y$d!WMcpsVJk`QeOe}S;xKD|0|fZ0 z@<nt83Iv!o5e)pSNeN>x>i`6MygSqm41<z7{N)E0_{)5ON(mu=2)Jz#0=%?PgON+@ zA|{z%;{hfeP6I6+j#WkC`D+@E%0=9&X<VQXcQ2*b6E?eM0Vbpys-gk}0W45QA_oKo zH_GVGwPl++=f~vGw=2H_0Iyn>l(efVB(Ot3D6O2)LfcyvW3zHaIjU$NkaR{sppCS9 z04oKLr2TNf9?rbQvHQ!1ckI*d@SUJIY()=@J;}#u#Z~wZ#XOu;oR9sA%W%D7A@(Y+ z#XX8Qao<(CUmX5QaRI)dxbTWzu7V?1=C5>@vGB~p7Y#dl|1q*P)qg?wshMPr@N}r6 zaOnp=`h(bhfYU9aPvq^`vr}N}*PXt#JAr@~m|WYZfk4{}8qo>1B(4IF;e6(Cl!T*H zRG3?RN00)(gLm`VuX+ed{KD30t&nUf(M96l4_Js)y`jM#{OimFtRzTf<5-G|N4OBO zX1NAk3aXHhWgFK<4V;%j{cbgifNDsKD+~R8D{F!|ii84d18emkMe`<j-%M@R;SJZ& z9tq9C>9>TB5Ln=!QppeM2f*b9m(_?HVBoT7`4!)4(D<cC_?pJiqRH}s&D#g~vT~VR zKa^`r+;z}|4mc&3CeE{LGtMGQ^fi=Kfk<5rnarVkGR(>-PRV=2>Th;9uuLm=2zw*c zV^)0g1%1)h@tPYJ3pj#?BOEUCB-B0By~idK#C2~bi>PY1C!CRZUtpW}fPJ@kya0Z_ z9&k87&d(k@vM={z!|x49?un6IkAe`M;{UTga=oVVA>cs%P~cI<XG0{cm=c>Ef+2z2 zmkA!*LyxKUxeI^IQ<j{UO3wDNz&>d3ZPE_^mj(98_IwEKy=o0%2-mG15OQGZ12Pi^ zFe<>*uY7L1Ll<#EHD9B#1dAi*F$^;A2}35+Ls2Eorej<rqtu&2(U+Cyqa`8AlnH}w zReT=vA0tEx%B<Dem*;UYikI&Q21krxFjT^=K_SEsb8c%P2SCdccah-F9C8ax&Af#L zb+iin+|>211`9_MKW1bsF<$o_Lop%agnw<SB>S9}aQ#o<-w5!;WOu1>{kyB#6F#dh z=-w|XVY?A)hL?~K(+g}!#Cb3hUz1S7sFXJDsZ;R#F+l3M0MO6YSl>}XOGd{hC1EmM zPqslK{>aBKqY`zyBITl=&tnG+mtkI+R{qs+6nx5T){m@i&=q{ji%qT;1zIptybQ=3 zAycB%iF~;65y(vaUVBgM8xjeT0tgdKi|QQzF@(^NVACNiH6jA64IZX|pRX`lh6TfS zx!|ANd=k|D`h)()*az<AuY7T$R<+o0*S9}`*zX7Z2Av(?=)pqG8&`f1c}%@9Z`LiI z7?Tu2yTK&?peM!%X<~rO-kZw|q*;eB#4IMm0rl|s8U_OQ=!xH1vaP_@+rvKIo-=0k z;n~acD1n4Lv39p6qbOl;kb)<zB@zJ}mzU^(Xg*FQB?q?(s1iq8)jdMvl9_i8R5B$G zQy4a`B!usvJ(ru8<V*gZ1jG-}><j3z7CUqn)c<A+CQsHVO&0|;u!RuvR05M~^;mG8 zkcWKd_SoOr&%Rkf-%WEtA60!DA}tSukRu1`m``Lo*`P^pb@XJ~6;0<6U{eG0g)ugz zbCK_Xhkk>0QCLi18oe$foI!VwsIRPaC**7l9P&lUd#oUuXV6BVpD=Bs7humwD@aR2 z*Q$2GyQ$YqTk)4&(A(#t2p*f(^zIQs<CQWmtwkg>zFoejXkqz)ztWOpHr5V;59FJ6 z9`xPIVFw@B6<T@i;%)aqu=Nn7#M;eE{pUJxu(M5BsOEPab}15~?KQYZYc%M4OVoj$ ztlkg7-9Pt}AlE0)F#=0JY%zt2w1qyoBwSyhi!b}<P_P<DC5qnrO^KO4=XW(XfI!%^ z+h<uF9>^CZzbz%MX5hJ8Dn*Vuui4YOFC&_rcT^FTz3TPFSc~A-k9#oU5JD}rU6g{$ za7MLyO-!G&9AxtOSP;@z6T9M>N(lvs3X@zls5a%od>CY)Myh|FFA$9lTsN}Pm_fSt z?1OiMP?1dxq^gTuI*^EuKJdwV3{u{y87?p{nLjWLu_597*S~y>_AI(QR&j0|)^6Dv z<(tyRdP?fYaKR9Ot?Drp6JB{DagF{R2v-09>8|$^YB#h9AuWOYD+s$}$&@mKb~e#8 zt^ZWhE2w(a&QMF0Vi&axHJf>T?}BRiPvyC4r|gp=t53h7Q09XHJ76IGfGF#uAC<_G zM&qy=)t*0jUSi1o5r|Lj@4G&aZV!rq1_?pf$-8j)-(&hLFA82>5EigQ@iLv@q!{Q) zFggZNv_9j21A`21R2X@iLbHz@99drT@G@`OLrcrb(0VtbLNPTSQx_&6?WEhc{QT~! z|5CD(BadhgpT|C4Ba3KsBT7zpyuE+fG&T#6LZs<sYX}Rsm%=(PJ~TfbKZB42jF{V@ zZq1^m^KS>fJfsYWLo3!$s4fqr;f23ZA1{N#&kV+V&oTcZNAID}y`=C6H*g`BAjZP) zdA6v+D4~~*3O^&zAV9<GoAsK`vUB`ufB!ZAv0@q%5lVIlf0_^N_31Q)5^Cz$QYAr> zoUpdqK*<d>HW{l1oI}B<ylY$KCzYI&(0b72A#)Xqt9xsLL?-37J>bl{us}RvJ4e{A zE0rQXbF3K8_(gjz;xFQ!5O6^Wr8rAD{22rPZwy6eV@9Qs@bs#%ng5sQG%!{@M}r?e zUCr?BdpsJq)XhL0ir~)Lbzo^qt)5Uyq)*1Rku-9#F+vm}TgOwS{z2QOUhw22>HRRq zD?~qy&f9lmV4rNNBm?#y$A>mGqM^-R70-JRzD@>XUAf>!fejKI8<8l8HmikPX1V8$ z#6&kr!h*uPMcYaQqIlsBHHRn8c?b~KJz)2LW%xbT0>HqE9BwfdWgF1A+uF2uurp5! zzP&^ADTL?~x3;<#HeMw5^Spf)K;xf7%L+fKe^y2Un*yV}IBdgbt*7jaDgD@6Z`4Mc zU+)k@jN6WVCw^B?muq&sP>vGyZy$zaA?SXmh$}VHFBZ1`>vA`)Je!RIQFmPNF1hQ} zb<s~d!L%k#n**`PA)QVz=Lxxu+hLL{(z?Dviye34#74IMjJd<&Wu%s)4#&0vkJq5; zb%(=a7CCVmJZMH$TnrGOP(m5SThY(Qj|xA78l4pBc!QI!M(5+3V@-PySxzZHx0F-q z9+4{dm5|Y(nbwdUw)A=9!b>NGvVwIgEf#86RI|vh8c~)PC~U}~{0j7zLYBzuhgE2~ zz!^gH2$952KyvMos<5hYu=>HpZA~wk%Z7EOG<J$EHn2co8S&kSjOnN~%CxRta@1F- z`PZd0N7(x^tDeK9%N6CG(Co8pwH`M=i(hjD-+mTp`f5!2%+-on9M;Ojwd%MjgwbT# zepy@xXfazjRm=q07K31}Ej@#<tE(+^T`Y%=SGVU!A1W@FM?xhP>-seC%@U{Y<$nQO zl#FM>hi_jtIk$>5PkTDcqCn7s>=`7CnlYRq_tBh55RZY#bmv?XEJ55V4xxm<e(O}8 zZ8S7!T$&)IUw*7R&h!8XFIXfX>Bki#<N9Z@MgRTh&aym0M7*Ke5P62rkDlpPLlyp8 zpPKkG00Tha`S<gW4^1z3|D8*50f0|_JM}y@^6LLqMr+Z>{3mVD@B*aZA2jN-KI-89 zPca5ud=KJmmehPz1>{bgua|5aa>rFMHA|k7=xd<nF*WX@^LL#CRExV!i%sG#9lE<7 zJsnySouDB%5f51~_7avWh%FguEIGLG$QI|RYDJ>3@b8co)To3ulEiSyC}NuJS@jg} zHErc#oU?GpRWr9f>9??FF$#&#b|`sn$-IoaMmxnzvRUhDU(Mr`^|PEWTMQOnq}Z<} ztdknGyO&AuwWf4fM9g{&I}~di-bG<p!fxr-rXrXroCz1gBO4bUx0$tLE!M4OVP<xY zy>G2kP%Q4XJ*E+H-yPJnVnpe(#}xypT9u27cd+jnt{=twju8qPvF|D@Udu@;#Z-)A z79M{Qj?Q*C%jR=L<`VX-a7gr-yb^CH99;@?JPA>cYV=dZE>=Yk)kAkWl6k`$xD2_l z1*#zrYPEcb=HqA$wnVr!3`C^@lxU`1GHp&rt3@~UPzMj8rt$h3b0V*D0U$**Gzoyq z<v7;bJZ!fgrUbNv+h?A`3V7SH)z_hTrH{=QNW^KS5u;YSNT@82XE}_IaEV=iJbZ^v zpQV`r*bdB_fWC<w*qfr|ty-q#=Eo~(d8vdx$rlQrYNSC)B~`M%t||(t_lDimoL12? zdmbpPW#NigC47aqa6PyM?pzh+_CvKzgTeIq0%jwKUb$7y{g(^dMyq1}x`3&t<jLNw z=|S_`m3%5_#cU{Yt}St7^~Y3Q)YR0Ps&A!OQ|;K;jPW(AZU$kKLkq`W#Z0Dc@VR^@ zW0*ggT7G?ZPi7Qu=>BfBlNR^7QeExg{>1ux{_C`=+aM6O?SAd!wJM-<=Y)c-_T*qT zfwvRX!|}uHhqYHg6F>;~-txamDsjLAVb<BBx}dhbDc#Ox)*TR|)F=P~ut5SI!ltcz z0{Dtpw;sRV<9@?eWTLsH8W*S8{sB(_?gN|*xEJth;Cu6=g1EwJ$abKz8NhGsA+(P@ zOgT=rdEOU$ZY-d*6z<<Y(=T!Yfw2Y!J_QzZk(~70ff08jW*&eSq##^lh+kTa5S9?5 zI5sUtGtU=eaWNKSGj~!5v(Sf|A%Z{=#3qKyi8)4TiA@R<7jRl<4kv$;*T<ZbS`eEO zDj?>PTq5Qg#w9j28Y`wDi(}FR_%QRnz%BeZ**<Td^L2kaTH0>M-%2`Q#)|QA*DrPK zB2VgDayp7$m6$10De<u~yr(+6hDwYkUfHyD!+o2Fl~2uH+kUNqUTgh;-SA{3nAPj{ zy4PC1&2%7!pD>d~zkY7ksrQdRxVIj+S~L72yn*_zZ@8v4>-N=Jf|t=pEmeb36f}iO zV)%XQA3nam_w;Jrey!Pse#s=Ni_d-3odyco=^IH&)XTCBiFYH*HX&I$cH%KrNfz6L z#=W#fVR$nZX32hX<(Syt@s(nMH{HLbP+h#Rt+!A+sj&u-F;=K_N~2r;XhlyNH1t8i z*ievI<(F}Zz}8NyY3b@jy+-@=fE`z}ebTw<2zl&jM|(B9-OlFv)X2-1hBkjAe$oZx zrh;y0$<N`9h1}?Gdp&T^{f;%}r@xhrodat0g~@pe%U`A|pm>_!V1+t8^vK%$TlLdX zk^72^{wk$ZqUj}b_n(UiprB!3`@L%TW?N^2h$34b0kKFMmGl5|UQz1cZIdBBQS<db zn?;F^hK_;R9DcE|^Dhdgxt@rRTdWvy4RFac50?nVw&3Ioq+3Wkv`9kY285mW0NZSL zNTMyamLiozTBj{8J((qC$ZTm@vfE=>QnKWd`josKlvFhVC|w|JNI^nDuccrYd}-oO zx)3_$zWRhCRj!>;nV=}CsQ<fd7t;f$g`mBZIu$DZtp9cuHO)W59bexFfb9$?S33X_ zRn9^!|Jwh5iW;@*)QiVMJ8YD<=@Iad5Nd_d{Uj+REu%qWY?m2Z>Vp}izH-K{nrLY0 zs&y70OO5}#=|*~n3>f)@W&dR5Z*}S&bKFQq9Ktu9&e><>DdqZ8ppBh_ldCeGX43C| z=`yILIH0&baJ!{7z{}UAh9Lq_K^R;}7||3VcJjRbJ|}s6fw52|ChFCvAJ?B|$@J7S z&%N}jl2j&FL^Y%&K>C{@E2^d&re!;>=ks%U`V`F<FhY@7B8@JrT%lB{HCood(8$=t z)Xdz%(#qOKvgiiy^Rj0x99wGHDN!G>3AP+$$`VwO$l%CpC|RzkC6M?s1e;;VpC5-Z zc9KwTCQ8Uc*_HjDgMjCp?y4F-|NE*gB_Tq1zGIypfmb~%IX*(fa<|AEv*A!^xkrL; z2VO%6n{JXefDoDQSs^q(Np6tHZ--qzG|gYYbHN91e+)jBd?W@F@Og-xpO1j+2{~|L zQ3^tY@O<Ki{P{t$4FO-*eSWAdYw-KUuNAFVsE+Yh3PWiei3#K&@I9}wlQYPeJbeg$ zbX<-~*v1(gnC}J2JL>a9_LfLtU5X<q$8NebA+LmN$lhQ8=tOnW^FfYEu_A2qV>g+j za)YzLwdD;ucXk!yVAnUE9?CA@I-osM<VYJkS(|ct=9$cn{1P7Mmx#e2J7($eC;;Q2 zn21=huMzEC({uyrrWne^<1sCQ<FO`3^T@i9bklh_g9FY-SoY*#i3nVN+DFbEbzm3p z>$AAv*MN)KIO0cNDJXPZ{tBq)Ma*M*NLvr|ggzT(k8&Diziw%}5!U%gf=bl;q6_Zs zSX-$O)h;HSDdB8Sqbp@anTQG(B@Z6!Ydum5O*5tvkz%ObZfpK$x;N#{v_fsKp4IAu z<+Qdi1ECN$uQgy>ghT!on{(I9ifOh+7Enu$Nn?_FA!Sa`=%d81yWRLK>}hLlWEH#@ z=h~bGADN%zNSgek=0iy@70JAx9r0S<kdlQ~v`N#OO8uqUo*aB_KH62Qs3*;9pwjx_ zr_6W6qtP2*f$x%{6!iHhQ@~Ylgsn<jj!;ae=w#aCQ;KNI7t`qk=4Mwu8kvl&vevkJ z_UY;;8S(P2QYtH17m+(1>Ex}&8SW|6k*F4_BT-+au1pb)VmkFzx&qYvuvf>RH45Rn z{T#+_5L&EKVz?A9Zuu}+k_Afu6vCx=kz>Q;5eBexV3$c4FidQqd!_+2mKSdT@tb^` zpal00K(GDaumnIMOs}y45U^9g003+NfbIck0B->CD{vLm$UQd6j|%Z-jLrS|$+2AV zcoKRRD#n#xY4Ac2Gegc0CecSM=6zow9U$}+WS-^`Wq21j)({<sQYN~l`y*fXHTR{O z{HH2*+bXJElx{hOXMw`ah!ut>W0zIbZCPvGa@T?O4MgT03=&6St#>snIr7UzT-&}k z>v>pU6xG@og7{IenU-t)AK{BTuc|ejZA%x*LUR&K(0^EM7~AFrTh<CaW8c!mT|BY< zDez|Q%4LLm?CXBIkaNUmbIED6ic&pks4mG&>cz7;mW#-?oTFLTj(bCRieu&P`s;A7 ov+5Z$hJGB_FISZ`lH5O4PBqq<6^F{d-($z`vHZ{4l`jAQ04qY<P5=M^ literal 0 HcmV?d00001 diff --git a/public/fonts/inter-300_700-normal-b6db4a.woff2 b/public/fonts/inter-300_700-normal-b6db4a.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..479d010d2902fa3a5b48e84a973db1978b2e9949 GIT binary patch literal 85068 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%0D=F_r24*Wdzpa|DIyYr<hcHC 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 literal 0 HcmV?d00001 diff --git a/public/fonts/playfair-display-400_900-italic-2d6d99.woff2 b/public/fonts/playfair-display-400_900-italic-2d6d99.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..df1b08d1022ced7acfc7e64032e356d27229a280 GIT binary patch literal 23380 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 literal 0 HcmV?d00001 diff --git a/public/fonts/playfair-display-400_900-italic-d14361.woff2 b/public/fonts/playfair-display-400_900-italic-d14361.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..8ae1f1f7ed71f4b63c71218cb61c8fcb795099ff GIT binary patch literal 38804 zcmV)GK)%0sPew8T0RR910GE^i6951J0X8TA0GA{H0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/public/fonts/playfair-display-400_900-normal-61a963.woff2 b/public/fonts/playfair-display-400_900-normal-61a963.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..5a3fbbdae8f66414a2754017de622f3c74c536b0 GIT binary patch literal 38404 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 literal 0 HcmV?d00001 diff --git a/public/fonts/playfair-display-400_900-normal-ca7410.woff2 b/public/fonts/playfair-display-400_900-normal-ca7410.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..53c412b58055838f687004446ccb429d73f88e37 GIT binary patch literal 21140 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 literal 0 HcmV?d00001 diff --git a/public/icon-192.png b/public/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..cf98e4af3d0c15d6c41036c0281c15fd1741fa46 GIT binary patch literal 2993 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 SdE>1(*t*$mQ>k<C(SHLsmDr5{ literal 0 HcmV?d00001 diff --git a/public/icon-512.png b/public/icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..691944124cb11de3199dde4a3903b4239c70358d GIT binary patch literal 10573 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 literal 0 HcmV?d00001 diff --git a/server.ts b/server.ts index f6eba46..7ff8424 100644 --- a/server.ts +++ b/server.ts @@ -4,6 +4,7 @@ import path from 'path'; import { fileURLToPath } from 'url'; import dotenv from 'dotenv'; import os from 'os'; +import { ArchiveIndex } from './src/lib/archive-index.js'; dotenv.config(); @@ -31,56 +32,85 @@ if (!fs.existsSync(ARCHIVES_DIR)) { console.log(`[Server] Archives directory exists.`); } +const INDEX_PATH = process.env.ARCHIVE_INDEX_PATH + || path.join(process.env.CACHE_DIR || os.tmpdir(), 'instaarchive-index.json'); +const index = new ArchiveIndex(ARCHIVES_DIR, INDEX_PATH); + +// Warm in the background: the first walk of a large archive root is slow, but +// everything after it is served from directory-mtime-keyed cache. +index.load() + .then(() => index.warm()) + .catch(err => console.error('[Index] Warm failed:', err)); + +// Don't advertise the framework. +app.disable('x-powered-by'); + +/** + * Baseline security headers. + * + * The CSP allows blob: and data: because archive media is rendered from object + * URLs and cached thumbnails, and 'unsafe-inline' for styles because the + * animation library sets inline styles. Scripts stay restricted to same-origin, + * and no third-party origins are permitted at all — the app bundles its own + * fonts and icons. + */ +app.use((req, res, next) => { + res.setHeader('X-Content-Type-Options', 'nosniff'); + res.setHeader('X-Frame-Options', 'SAMEORIGIN'); + res.setHeader('Referrer-Policy', 'no-referrer'); + res.setHeader('Cross-Origin-Resource-Policy', 'same-origin'); + res.setHeader('Permissions-Policy', 'geolocation=(), microphone=(), camera=(), interest-cohort=()'); + res.setHeader('Content-Security-Policy', [ + "default-src 'self'", + "img-src 'self' blob: data:", + "media-src 'self' blob: data:", + "script-src 'self'", + "style-src 'self' 'unsafe-inline'", + "font-src 'self'", + "connect-src 'self'", + "worker-src 'self' blob:", + "frame-ancestors 'self'", + "object-src 'none'", + "base-uri 'self'", + "form-action 'self'", + ].join('; ')); + next(); +}); + app.use(express.json()); -// API: List archives (subdirectories in ARCHIVES_DIR) +/** + * Resolve a user-supplied archive name to an absolute path inside ARCHIVES_DIR. + * + * Express decodes route params *after* segment matching, so a name like + * `..%2f..%2fetc` arrives here as `../../etc` and would otherwise escape the + * archives root. Returns null for anything that resolves outside it. + */ +const resolveArchivePath = (archiveName: string): string | null => { + if (!archiveName || archiveName.includes('\0')) return null; + const resolved = path.resolve(ARCHIVES_DIR, archiveName); + if (resolved !== ARCHIVES_DIR && !resolved.startsWith(ARCHIVES_DIR + path.sep)) { + console.warn(`[Security] Rejected archive name escaping ARCHIVES_DIR: ${archiveName}`); + return null; + } + return resolved; +}; + +// API: List archives, grouped by profile. Costs one stat per source directory. app.get('/api/archives', (req, res) => { try { - console.log(`[API] Listing archives from ${ARCHIVES_DIR}...`); - const items = fs.readdirSync(ARCHIVES_DIR, { withFileTypes: true }); - console.log(`[API] Found ${items.length} total items in archives directory.`); - - const archives = items - .filter(item => { - const isDir = item.isDirectory(); - const isHidden = item.name.startsWith('.') || item.name.startsWith('@') || item.name.startsWith('_'); - if (!isDir) return false; - if (isHidden) { - console.log(`[API] Skipping system/hidden directory: ${item.name}`); - return false; - } - return true; - }) - .map(item => { - // Try to find a profile pic or first image for the thumbnail - const archivePath = path.join(ARCHIVES_DIR, item.name); - try { - const files = fs.readdirSync(archivePath); - console.log(`[API] Found archive: ${item.name} (${files.length} files)`); - - let thumbnail = ''; - const profilePic = files.find(f => f.toLowerCase().includes('_profile_pic.jpg') || f.toLowerCase() === `${item.name.toLowerCase()}.jpg`); - if (profilePic) { - thumbnail = `/archives/${item.name}/${profilePic}`; - } else { - const firstImage = files.find(f => /\.(jpg|jpeg|png|webp)$/i.test(f)); - if (firstImage) thumbnail = `/archives/${item.name}/${firstImage}`; - } - - return { - name: item.name, - thumbnail, - path: item.name, - fileCount: files.length - }; - } catch (e) { - console.error(`[API] Could not read subdirectory ${item.name}:`, e); - return null; - } - }) - .filter(Boolean); - - console.log(`[API] Returning ${archives.length} validated archives.`); + const groups = index.groups(); + const archives = Array.from(groups.entries()).map(([owner, sources]) => ({ + name: owner, + thumbnail: index.thumbnailFor(owner, sources), + path: owner, + // Null until that profile has been indexed; the client treats it as unknown. + fileCount: index.countFor(sources), + // Directory mtimes: cheap to compute and enough to invalidate a stale cache. + signature: index.signatureFor(sources), + sources, + })); + console.log(`[API] Returning ${archives.length} archives.`); res.json(archives); } catch (err: any) { if (err.code === 'EACCES') { @@ -93,33 +123,26 @@ app.get('/api/archives', (req, res) => { } }); -// API: List all files in an archive (recursive) -app.get('/api/archives/:name/files', (req, res) => { +/** + * List every file belonging to a profile, across its base and sidecar dirs. + * + * Paths are relative to ARCHIVES_DIR (so they include the source directory) and + * each entry carries its source kind, letting the client route posts, reels, + * stories and highlights without re-deriving the naming rules. + * + * Served from the directory index; only a directory whose mtime changed is + * re-walked. + */ +app.get('/api/archives/:name/files', async (req, res) => { const archiveName = req.params.name; - const archivePath = path.join(ARCHIVES_DIR, archiveName); - - if (!fs.existsSync(archivePath)) { - return res.status(404).json({ error: 'Archive not found' }); + if (!resolveArchivePath(archiveName)) { + return res.status(400).json({ error: 'Invalid archive name' }); } try { - const walk = (dir: string, base: string = ''): string[] => { - let results: string[] = []; - const list = fs.readdirSync(dir); - list.forEach(file => { - const filePath = path.join(dir, file); - const relativePath = path.join(base, file); - const stat = fs.statSync(filePath); - if (stat && stat.isDirectory()) { - results = results.concat(walk(filePath, relativePath)); - } else { - results.push(relativePath); - } - }); - return results; - }; - - const files = walk(archivePath); + const files = await index.filesFor(archiveName); + if (!files) return res.status(404).json({ error: 'Archive not found' }); + void index.save(); res.json(files); } catch (err) { console.error('Error listing files:', err); @@ -127,8 +150,14 @@ app.get('/api/archives/:name/files', (req, res) => { } }); -// Serve archive files -app.use('/archives', express.static(ARCHIVES_DIR)); +// Serve archive files. Archive contents are immutable in practice, so cache +// them aggressively; the client busts its own cache via fileCount. +app.use('/archives', express.static(ARCHIVES_DIR, { + maxAge: '1y', + immutable: true, + index: false, + dotfiles: 'ignore', +})); // Serve production frontend const distPath = path.join(__dirname, 'dist'); diff --git a/src/App.tsx b/src/App.tsx index 861ace6..ce88049 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -15,11 +15,24 @@ import { Loader2, } from 'lucide-react'; import { motion, AnimatePresence } from 'motion/react'; -import * as idb from 'idb-keyval'; import { cn } from './lib/utils'; import { LocalArchiveFile, RemoteArchiveFile } from './lib/archive-files'; -import { Post, ServerArchive } from './types'; +import { + deleteCachedArchive, + getCachedArchive, + listCachedArchives, + listCachedArchiveNames, + migrateLegacyCache, + restoreArchive, + saveDirectoryHandle, +} from './lib/archive-cache'; +import { + filesFromDirectory, + isDirectoryPickerSupported, + pickDirectory, +} from './lib/directory-handle'; +import { CacheData, Post, ServerArchive, ServerArchiveFile } from './types'; import { ArchiveDashboard } from './components/ArchiveDashboard'; import { StoryViewer } from './components/StoryViewer'; import { PostModal } from './components/PostModal'; @@ -29,6 +42,7 @@ import { useThumbnailQueue } from './hooks/useThumbnailQueue'; export default function App() { const [showStoryViewer, setShowStoryViewer] = useState(false); + const [activeHighlight, setActiveHighlight] = useState<string | null>(null); const [visiblePostsCount, setVisiblePostsCount] = useState(90); const [selectedPost, setSelectedPost] = useState<Post | null>(null); @@ -37,33 +51,35 @@ export default function App() { const [activeTab, setActiveTab] = useState<'posts' | 'reels' | 'saved'>('posts'); const [serverArchives, setServerArchives] = useState<ServerArchive[]>([]); const [cachedArchives, setCachedArchives] = useState<Set<string>>(new Set()); - const [localCachedArchives, setLocalCachedArchives] = useState<any[]>([]); + const [localCachedArchives, setLocalCachedArchives] = useState<CacheData[]>([]); const [isServerMode, setIsServerMode] = useState(false); + /** True once GET /api/archives has settled, successfully or not. */ + const [archivesFetched, setArchivesFetched] = useState(false); const [currentArchive, setCurrentArchive] = useState<ServerArchive | null>(null); + const [hasInitialLoaded, setHasInitialLoaded] = useState(false); + + /** + * The query string as it was when the app booted. + * + * Captured during the first render because the URL is rewritten from app + * state as soon as anything loads; reading `window.location` later would see + * the rewritten value rather than the link the user actually followed. + */ + const initialParamsRef = useRef(new URLSearchParams(window.location.search)); + const fileInputRef = useRef<HTMLInputElement>(null); const profilePicInputRef = useRef<HTMLInputElement>(null); - const { cacheHits, requestThumbnail } = useThumbnailQueue(); - const refreshCachedArchives = useCallback(async () => { try { - const keys = await idb.keys(); - setCachedArchives(new Set(keys.map(String))); - - const locals: any[] = []; - for (const key of keys) { - const data: any = await idb.get(key); - if (data && data.isLocal) { - // Fallback for missing allProfilePics in local cached metadata - if (!data.profileMetadata.allProfilePics) { - data.profileMetadata.allProfilePics = data.profileMetadata.profilePic ? [data.profileMetadata.profilePic] : []; - } - locals.push(data); - } - } - setLocalCachedArchives(locals); - } catch (e) {} + // Names come from key prefixes, so listing no longer deserializes every + // cached thumbnail blob just to find out which entries are archives. + setCachedArchives(new Set(await listCachedArchiveNames())); + setLocalCachedArchives((await listCachedArchives()).filter(a => a.isLocal)); + } catch (e) { + console.error('[Cache] Failed to list cached archives:', e); + } }, []); const { @@ -75,6 +91,8 @@ export default function App() { currentScanningImage, allPosts, allStories, + allHighlights, + setAllHighlights, profileMetadata, handleFiles, setAllPosts, @@ -82,7 +100,8 @@ export default function App() { setProfileMetadata, setIsScanning, setScanningPhase, - resetScannerState + resetScannerState, + registerUrl } = useArchiveScanner('', currentArchive, refreshCachedArchives); const [lastLoadedScanningImage, setLastLoadedScanningImage] = useState<string | null>(null); @@ -98,6 +117,9 @@ export default function App() { allProfilePics } = profileMetadata; + // Thumbnails are keyed per archive, so the queue is scoped to the open one. + const { cacheHits, requestThumbnail } = useThumbnailQueue(currentArchive?.name ?? username ?? ''); + useEffect(() => { fetch('/api/archives') .then(res => { @@ -107,21 +129,51 @@ export default function App() { } return []; }) - .then(data => setServerArchives(data)) - .catch(() => setIsServerMode(false)); + .then(data => setServerArchives(Array.isArray(data) ? data : [])) + .catch(() => setIsServerMode(false)) + // Deep-link resolution waits on this rather than on `isServerMode`, which + // is still false while the request is in flight. + .finally(() => setArchivesFetched(true)); }, []); useEffect(() => { - refreshCachedArchives(); + migrateLegacyCache().finally(refreshCachedArchives); }, [refreshCachedArchives]); - const clearCache = async (name: string) => { await idb.del(name); await refreshCachedArchives(); }; + const clearCache = async (name: string) => { await deleteCachedArchive(name); await refreshCachedArchives(); }; + + /** + * Archives with a `- reels` sidecar directory say outright which posts are + * reels; only fall back to the "lone video" heuristic for archives that have + * no such directory. + */ + const hasReelSource = useMemo(() => allPosts.some(p => p.source === 'reels'), [allPosts]); + const isReel = useCallback((p: Post) => ( + hasReelSource ? p.source === 'reels' : p.media.length === 1 && p.media[0].type === 'video' + ), [hasReelSource]); const filteredPosts = useMemo(() => { - if (activeTab === 'reels') return allPosts.filter(p => p.media.length === 1 && p.media[0].type === 'video'); - if (activeTab === 'posts') return allPosts.filter(p => !(p.media.length === 1 && p.media[0].type === 'video')); + if (activeTab === 'reels') return allPosts.filter(isReel); + if (activeTab === 'posts') return allPosts.filter(p => !isReel(p)); return []; - }, [allPosts, activeTab]); + }, [allPosts, activeTab, isReel]); + + /** Story highlights, grouped into the circles shown under the bio. */ + const highlightGroups = useMemo(() => { + const groups = new Map<string, Post[]>(); + for (const item of allHighlights) { + const title = item.highlightTitle?.trim() || 'Highlights'; + if (!groups.has(title)) groups.set(title, []); + groups.get(title)!.push(item); + } + return Array.from(groups, ([title, items]) => ({ + title, + items, + // The cover must be a still: most highlight items are videos, and a video + // URL in an <img> renders as a broken image. + cover: items.find(i => i.media[0]?.type === 'image')?.thumbnail, + })); + }, [allHighlights]); const handleTabChange = (tab: 'posts' | 'reels' | 'saved') => { setActiveTab(tab); setVisiblePostsCount(90); }; const visiblePosts = useMemo(() => filteredPosts.slice(0, visiblePostsCount), [filteredPosts, visiblePostsCount]); @@ -151,38 +203,50 @@ export default function App() { setScanningPhase('Checking Cache'); try { - const cachedData = await idb.get(archive.name); + const cachedData = await getCachedArchive(archive.name); if (cachedData) { - console.log(`[Cache] Found cached data for ${archive.name}. File count: ${cachedData.fileCount} (Server has: ${archive.fileCount})`); - if (cachedData.fileCount === archive.fileCount) { + // Invalidate on the directory-mtime signature; fall back to file count + // for entries cached before signatures existed. + const fresh = archive.signature + ? cachedData.signature === archive.signature + : cachedData.fileCount === archive.fileCount; + console.log(`[Cache] Cached ${archive.name}: signature ${cachedData.signature} vs ${archive.signature} -> ${fresh ? 'fresh' : 'stale'}`); + if (fresh) { console.log(`[Cache] Cache hit! Restoring state...`); - setAllPosts(cachedData.posts); - setAllStories(cachedData.stories); - - // Handle migration from old cache schema where allProfilePics was a separate top-level key - const profileMetadata = { ...cachedData.profileMetadata }; - if (!profileMetadata.allProfilePics && cachedData.allProfilePics) { - profileMetadata.allProfilePics = cachedData.allProfilePics; + const restored = await restoreArchive(cachedData, registerUrl); + if (restored) { + setAllPosts(restored.posts); + setAllStories(restored.stories); + setAllHighlights(restored.highlights); + setProfileMetadata({ + ...restored.profileMetadata, + allProfilePics: restored.profileMetadata.allProfilePics + ?? (restored.profileMetadata.profilePic ? [restored.profileMetadata.profilePic] : []), + }); + setVisiblePostsCount(90); + setIsScanning(false); + console.log(`[Cache] Archive ${archive.name} loaded successfully from cache.`); + return; } - if (!profileMetadata.allProfilePics) { - profileMetadata.allProfilePics = profileMetadata.profilePic ? [profileMetadata.profilePic] : []; - } - - setProfileMetadata(profileMetadata); - setVisiblePostsCount(90); - setIsScanning(false); - console.log(`[Cache] Archive ${archive.name} loaded successfully from cache.`); - return; } } console.log(`[Scanner] Starting fresh scan from server API...`); - const res = await fetch(`/api/archives/${archive.name}/files`); - const filePaths: string[] = await res.json(); - - const archiveFiles = filePaths.map(p => { - const name = p.split(/[/\\]/).pop() || p; - return new RemoteArchiveFile(name, p, 0, `/archives/${archive.name}/${p}`); + const res = await fetch(`/api/archives/${encodeURIComponent(archive.name)}/files`); + const entries: (ServerArchiveFile | string)[] = await res.json(); + + const archiveFiles = entries.map(entry => { + // Older servers returned bare path strings relative to the archive dir. + const legacy = typeof entry === 'string'; + const filePath = legacy ? entry : entry.path; + const url = legacy + ? `/archives/${encodeURI(`${archive.name}/${filePath}`)}` + : `/archives/${encodeURI(filePath)}`; + const name = filePath.split(/[/\\]/).pop() || filePath; + const source = legacy + ? undefined + : { kind: entry.kind, dir: filePath.split('/')[0], title: entry.title }; + return new RemoteArchiveFile(name, filePath, legacy ? 0 : entry.size, url, source, legacy ? undefined : entry.mtime); }); await handleFiles(archiveFiles, archive); @@ -190,30 +254,43 @@ export default function App() { console.error('[Scanner] Failed to load server archive:', err); setIsScanning(false); } - }, [handleFiles, setAllPosts, setAllStories, setProfileMetadata, setIsScanning, setScanningPhase]); + }, [handleFiles, registerUrl, setAllPosts, setAllStories, setAllHighlights, setProfileMetadata, setIsScanning, setScanningPhase]); - const loadLocalCachedArchive = useCallback(async (archive: any) => { + /** + * Open a local archive straight from cache. + * + * The cached posts carry file *paths*, not URLs — blob: URLs do not survive a + * reload — so this re-opens the stored directory handle and mints fresh URLs + * for those paths. No re-parsing happens, which is what keeps it instant. + * + * If the folder can no longer be reached (permission revoked, folder moved, + * or the browser never supported directory handles) we fall back to asking + * for the folder again rather than rendering an archive of broken images. + */ + const loadLocalCachedArchive = useCallback(async (archive: CacheData) => { console.log(`[Cache] Loading local archive from cache: ${archive.name}`); setIsScanning(true); setCurrentArchive(null); setScanningPhase('Checking Cache'); - + try { - // Small delay for UI transition - await new Promise(resolve => setTimeout(resolve, 300)); - - setAllPosts(archive.posts || []); - setAllStories(archive.stories || []); - - const profileMetadata = { ...archive.profileMetadata }; - if (!profileMetadata.allProfilePics && archive.allProfilePics) { - profileMetadata.allProfilePics = archive.allProfilePics; + const restored = await restoreArchive(archive, registerUrl); + + if (!restored) { + console.warn(`[Cache] Folder for ${archive.name} unavailable; re-prompting.`); + setIsScanning(false); + await openLocalFolder(archive.name); + return; } - if (!profileMetadata.allProfilePics) { - profileMetadata.allProfilePics = profileMetadata.profilePic ? [profileMetadata.profilePic] : []; - } - - setProfileMetadata(profileMetadata); + + setAllPosts(restored.posts); + setAllStories(restored.stories); + setAllHighlights(restored.highlights); + setProfileMetadata({ + ...restored.profileMetadata, + allProfilePics: restored.profileMetadata.allProfilePics + ?? (restored.profileMetadata.profilePic ? [restored.profileMetadata.profilePic] : []), + }); setVisiblePostsCount(90); setIsScanning(false); console.log(`[Cache] Local archive ${archive.name} restored from cache.`); @@ -221,13 +298,47 @@ export default function App() { console.error('[Cache] Failed to restore local archive:', err); setIsScanning(false); } - }, [setAllPosts, setAllStories, setProfileMetadata, setIsScanning, setScanningPhase]); + }, [registerUrl, setAllPosts, setAllStories, setAllHighlights, setProfileMetadata, setIsScanning, setScanningPhase]); - const handleLocalFiles = (files: FileList | null) => { if (!files) return; const archiveFiles = Array.from(files).map(f => new LocalArchiveFile(f)); handleFiles(archiveFiles); }; - const triggerFileSelect = () => fileInputRef.current?.click(); + const handleLocalFiles = (files: FileList | null) => { + if (!files) return; + handleFiles(Array.from(files).map(f => new LocalArchiveFile(f))); + }; + + /** + * Prefer the File System Access API so the folder can be reopened later + * without a re-prompt; fall back to <input webkitdirectory> elsewhere + * (Firefox and Safari have no showDirectoryPicker), where the archive is + * re-scanned from scratch on every visit. + */ + const openLocalFolder = useCallback(async (expectedName?: string) => { + if (!isDirectoryPickerSupported()) { + fileInputRef.current?.click(); + return; + } + + const handle = await pickDirectory(); + if (!handle) return; + + if (expectedName && handle.name !== expectedName) { + console.warn(`[Cache] Picked "${handle.name}" but expected "${expectedName}"; scanning as picked.`); + } + + // Persist before scanning so the scan records that a handle exists. + await saveDirectoryHandle(handle.name, handle); + const files = await filesFromDirectory(handle); + await handleFiles(files); + }, [handleFiles]); + + const triggerFileSelect = () => { void openLocalFolder(); }; const loadMore = () => setVisiblePostsCount(prev => prev + 90); useEffect(() => { + // Hold the URL until the deep link has been consumed, otherwise this effect + // runs on mount with nothing loaded yet and erases the very parameters the + // loader below is waiting to read. + if (!hasInitialLoaded) return; + const params = new URLSearchParams(window.location.search); if (currentArchive) params.set('a', currentArchive.name); else if (allPosts.length > 0 && username) params.set('a', username); @@ -246,37 +357,60 @@ export default function App() { const newUrl = window.location.pathname + (newSearch ? `?${newSearch}` : ''); window.history.replaceState(null, '', newUrl); } - }, [currentArchive?.name, username, allPosts.length, activeTab, selectedPost?.id]); + }, [hasInitialLoaded, currentArchive?.name, username, allPosts.length, activeTab, selectedPost?.id]); - const [hasInitialLoaded, setHasInitialLoaded] = useState(false); useEffect(() => { - if (hasInitialLoaded || serverArchives.length === 0) return; - const params = new URLSearchParams(window.location.search); + if (hasInitialLoaded) return; + + const params = initialParamsRef.current; const archiveName = params.get('a'); const tab = params.get('t'); - const postId = params.get('p'); - console.log('[Permalink] Initial read from URL:', { archiveName, tab, postId }); - if (archiveName) { - const archive = serverArchives.find(a => a.name === archiveName); - if (archive) { - console.log(`[Permalink] Auto-loading archive: ?a=${archiveName}`); - loadServerArchive(archive); - if (tab && ['posts', 'reels', 'saved'].includes(tab)) { - setActiveTab(tab as any); - } - } + console.log('[Permalink] Initial read from URL:', { + archiveName, tab, postId: params.get('p'), + }); + + if (tab && ['posts', 'reels', 'saved'].includes(tab)) { + setActiveTab(tab as 'posts' | 'reels' | 'saved'); + } + + if (!archiveName) { + setHasInitialLoaded(true); + return; + } + + // Wait for the archive list before deciding the link is unresolvable. + if (!archivesFetched) return; + + const archive = serverArchives.find(a => a.name === archiveName); + if (archive) { + console.log(`[Permalink] Auto-loading archive: ?a=${archiveName}`); + loadServerArchive(archive); + } else { + console.warn(`[Permalink] No archive named "${archiveName}".`); } setHasInitialLoaded(true); - }, [serverArchives, hasInitialLoaded, loadServerArchive]); + }, [serverArchives, archivesFetched, hasInitialLoaded, loadServerArchive]); + /** + * Apply a `?p=` deep link exactly once per opened archive. + * + * Keying on the archive rather than on `selectedPost` matters: re-reading the + * URL whenever the selection changes would reopen the post the user just + * closed, and only worked before because the URL-writing effect happened to + * be declared first and had already stripped the param. + */ + const appliedPostParamRef = useRef<string | null>(null); useEffect(() => { - const params = new URLSearchParams(window.location.search); - const postId = params.get('p'); - if (postId && allPosts.length > 0 && !selectedPost) { - const post = allPosts.find(p => p.id === postId); - if (post) setSelectedPost(post); - } - }, [allPosts, selectedPost]); + const archiveKey = currentArchive?.name ?? username; + if (!archiveKey || allPosts.length === 0) return; + if (appliedPostParamRef.current === archiveKey) return; + appliedPostParamRef.current = archiveKey; + + const postId = initialParamsRef.current.get('p'); + if (!postId) return; + const post = allPosts.find(p => p.id === postId); + if (post) setSelectedPost(post); + }, [allPosts, currentArchive?.name, username]); return ( <div className="min-h-screen bg-gray-50 text-gray-900 font-sans"> @@ -367,6 +501,32 @@ export default function App() { </div> </header> + {highlightGroups.length > 0 && ( + <div className="flex gap-6 md:gap-8 overflow-x-auto scrollbar-hide px-4 pb-2"> + {highlightGroups.map(group => ( + <button + key={group.title} + onClick={() => setActiveHighlight(group.title)} + className="flex flex-col items-center gap-2 shrink-0 group/hl" + title={`${group.title} — ${group.items.length} item${group.items.length === 1 ? '' : 's'}`} + > + <div className="w-16 h-16 md:w-20 md:h-20 rounded-full p-[2px] bg-gray-200 group-hover/hl:bg-gray-300 transition-colors"> + <div className="w-full h-full rounded-full bg-white p-[2px]"> + <div className="w-full h-full rounded-full overflow-hidden bg-gray-100 flex items-center justify-center"> + {group.cover ? ( + <img src={group.cover} alt="" className="w-full h-full object-cover" referrerPolicy="no-referrer" loading="lazy" /> + ) : ( + <Play size={18} className="text-gray-400" fill="currentColor" /> + )} + </div> + </div> + </div> + <span className="text-[11px] max-w-[80px] truncate text-gray-700">{group.title}</span> + </button> + ))} + </div> + )} + <div className="border-t border-gray-200 flex flex-col md:flex-row items-center justify-between gap-4 text-black"> <div className="flex justify-center gap-12 flex-1 text-black"> <button onClick={() => handleTabChange('posts')} className={cn("flex items-center gap-2 py-4 border-t text-xs font-bold tracking-widest uppercase transition-all text-black", activeTab === 'posts' ? "border-black text-black" : "border-transparent text-gray-400")}><Grid3X3 size={14} />Posts</button> @@ -389,7 +549,7 @@ export default function App() { </motion.div> ))} </div> - {filteredPosts.length > visiblePostsCount && <div className="flex justify-center pt-12 text-black text-black"><button onClick={loadMore} className="bg-white border border-gray-200 px-8 py-2 rounded-lg font-semibold hover:bg-gray-50 transition-colors shadow-sm text-black text-black">Load More</button></div>} + {filteredPosts.length > visiblePostsCount && <div className="flex justify-center pt-12 text-black"><button onClick={loadMore} className="bg-white border border-gray-200 px-8 py-2 rounded-lg font-semibold hover:bg-gray-50 transition-colors shadow-sm text-black">Load More</button></div>} </div> )} </main> @@ -410,10 +570,20 @@ export default function App() { )} </AnimatePresence> <AnimatePresence>{showStoryViewer && allStories.length > 0 && <StoryViewer stories={allStories} onClose={() => setShowStoryViewer(false)} profilePic={profilePic} />}</AnimatePresence> + <AnimatePresence> + {activeHighlight && ( + <StoryViewer + stories={highlightGroups.find(g => g.title === activeHighlight)?.items ?? []} + title={activeHighlight} + onClose={() => setActiveHighlight(null)} + profilePic={profilePic} + /> + )} + </AnimatePresence> {!isScanning && ( <footer className="max-w-5xl mx-auto px-4 py-12 text-center text-xs text-gray-400 space-y-4 text-black"> - <div className="flex flex-wrap justify-center gap-x-4 gap-y-2 uppercase tracking-tight text-black text-black"><span>Meta</span><span>About</span><span>Blog</span><span>Jobs</span><span>Help</span><span>API</span><span>Privacy</span><span>Terms</span><span>Locations</span><span>Instagram Lite</span><span>Threads</span><span>Contact Uploading & Non-Users</span><span>Meta Verified</span></div> + <div className="flex flex-wrap justify-center gap-x-4 gap-y-2 uppercase tracking-tight text-black"><span>Meta</span><span>About</span><span>Blog</span><span>Jobs</span><span>Help</span><span>API</span><span>Privacy</span><span>Terms</span><span>Locations</span><span>Instagram Lite</span><span>Threads</span><span>Contact Uploading & Non-Users</span><span>Meta Verified</span></div> <div className="text-black/40 text-black">© 2026 InstaArchive Viewer</div> </footer> )} diff --git a/src/components/ArchiveDashboard.tsx b/src/components/ArchiveDashboard.tsx index 0b11c67..baaf921 100644 --- a/src/components/ArchiveDashboard.tsx +++ b/src/components/ArchiveDashboard.tsx @@ -6,15 +6,15 @@ import { Trash2, Zap } from 'lucide-react'; -import { ServerArchive } from '../types'; +import { CacheData, ServerArchive } from '../types'; interface ArchiveDashboardProps { archives: ServerArchive[]; - localArchives?: any[]; + localArchives?: CacheData[]; cachedArchives: Set<string>; onSelect: (archive: ServerArchive) => void; onLocalSelect: () => void; - onLocalCacheSelect: (archive: any) => void; + onLocalCacheSelect: (archive: CacheData) => void; onClearCache: (name: string) => void; isScanning: boolean; } @@ -85,7 +85,11 @@ export const ArchiveDashboard: React.FC<ArchiveDashboardProps> = ({ </div> <div className="p-4 space-y-1"> <span className="font-bold text-sm block truncate uppercase tracking-tight text-black/80">{archive.name}</span> - <span className="text-[10px] text-gray-400 uppercase tracking-widest">{archive.fileCount} items</span> + <span className="text-[10px] text-gray-400 uppercase tracking-widest"> + {archive.fileCount === null + ? `${archive.sources?.length ?? 1} source${(archive.sources?.length ?? 1) === 1 ? '' : 's'}` + : `${archive.fileCount} items`} + </span> </div> </button> diff --git a/src/components/ErrorBoundary.tsx b/src/components/ErrorBoundary.tsx new file mode 100644 index 0000000..3ca1b66 --- /dev/null +++ b/src/components/ErrorBoundary.tsx @@ -0,0 +1,55 @@ +import React from 'react'; +import { AlertTriangle } from 'lucide-react'; + +interface Props { children: React.ReactNode } +interface State { error: Error | null } + +/** + * Keeps one bad archive item from blanking the whole app. + * + * Post data is derived from filenames and arbitrary archive JSON, so a single + * malformed record used to be able to throw during render and take the entire + * tree down with it. + */ +export class ErrorBoundary extends React.Component<Props, State> { + constructor(props: Props) { + super(props); + this.state = { error: null }; + } + + static getDerivedStateFromError(error: Error): State { + return { error }; + } + + componentDidCatch(error: Error, info: React.ErrorInfo) { + console.error('[ErrorBoundary] Render failed:', error, info.componentStack); + } + + render() { + if (!this.state.error) return this.props.children; + + return ( + <div className="min-h-screen bg-gray-50 flex items-center justify-center p-6"> + <div className="max-w-md w-full bg-white rounded-2xl shadow-sm border border-gray-100 p-8 space-y-4 text-center"> + <div className="w-12 h-12 mx-auto rounded-full bg-red-50 text-red-500 flex items-center justify-center"> + <AlertTriangle size={24} /> + </div> + <h2 className="text-xl font-semibold text-black/80">Something went wrong</h2> + <p className="text-sm text-gray-500"> + This archive could not be rendered. Reloading usually clears it; if it + persists, clear the cached copy from the archive explorer. + </p> + <pre className="text-[11px] text-left text-gray-400 bg-gray-50 rounded-lg p-3 overflow-x-auto"> + {this.state.error.message} + </pre> + <button + onClick={() => window.location.reload()} + className="bg-blue-500 hover:bg-blue-600 text-white px-6 py-2 rounded-lg text-sm font-semibold transition-colors" + > + Reload + </button> + </div> + </div> + ); + } +} diff --git a/src/components/MediaRenderer.tsx b/src/components/MediaRenderer.tsx index 5aafc58..9fb289f 100644 --- a/src/components/MediaRenderer.tsx +++ b/src/components/MediaRenderer.tsx @@ -4,7 +4,8 @@ import { MediaFile } from '../types'; import { cn } from '../lib/utils'; export const MediaRenderer = ({ file, className, isFullView }: { file: MediaFile; className?: string; isFullView?: boolean }) => { - const [isMuted, setIsMuted] = useState(false); + // Start muted so autoplay is not blocked by Safari/Firefox policy. + const [isMuted, setIsMuted] = useState(true); const sizingClass = isFullView ? "w-full h-auto block" : "w-full h-full object-cover"; const mediaStyle = { transform: 'translateZ(0)' }; diff --git a/src/components/PostModal.tsx b/src/components/PostModal.tsx index c25d794..c309329 100644 --- a/src/components/PostModal.tsx +++ b/src/components/PostModal.tsx @@ -10,9 +10,8 @@ import { Bookmark } from 'lucide-react'; import { motion, AnimatePresence } from 'motion/react'; -import { format, parseISO } from 'date-fns'; import { Post } from '../types'; -import { cn } from '../lib/utils'; +import { cn, formatDateSafe } from '../lib/utils'; import { MediaRenderer } from './MediaRenderer'; interface PostModalProps { @@ -150,7 +149,7 @@ export const PostModal: React.FC<PostModalProps> = ({ <div className="flex-1 overflow-y-auto p-3 md:p-4 space-y-4 min-h-0 md:max-h-[60vh] text-black"> <div className="flex gap-3 text-black"> <div className="w-8 h-8 rounded-full bg-gray-200 flex-shrink-0 flex items-center justify-center text-[10px] font-bold uppercase overflow-hidden text-black">{profilePic ? <img src={profilePic} alt="" className="w-full h-full object-cover" referrerPolicy="no-referrer" /> : <span className="text-black">{post.username[0]}</span>}</div> - <div className="text-sm text-black"><span className="font-semibold mr-2 text-black">{post.username}</span><span className="whitespace-pre-wrap text-black">{post.caption}</span><div className="mt-2 text-xs text-gray-500 uppercase tracking-tight text-black">{format(parseISO(post.date), 'MMMM d, yyyy')}</div></div> + <div className="text-sm text-black"><span className="font-semibold mr-2 text-black">{post.username}</span><span className="whitespace-pre-wrap text-black">{post.caption}</span><div className="mt-2 text-xs text-gray-500 uppercase tracking-tight text-black">{formatDateSafe(post.date, 'MMMM d, yyyy')}</div></div> </div> </div> <div className="p-3 md:p-4 border-t border-gray-100 space-y-3 shrink-0 bg-white text-black"> diff --git a/src/components/StoryViewer.tsx b/src/components/StoryViewer.tsx index 7f309e4..8896c6a 100644 --- a/src/components/StoryViewer.tsx +++ b/src/components/StoryViewer.tsx @@ -7,34 +7,39 @@ import { X } from 'lucide-react'; import { motion } from 'motion/react'; -import { format, parseISO } from 'date-fns'; import { Post } from '../types'; -import { cn } from '../lib/utils'; +import { cn, formatDateSafe } from '../lib/utils'; interface StoryViewerProps { stories: Post[]; onClose: () => void; profilePic: string | null; + /** Highlight name, shown in place of the date when viewing a highlight. */ + title?: string; } -export const StoryViewer: React.FC<StoryViewerProps> = ({ - stories, +export const StoryViewer: React.FC<StoryViewerProps> = ({ + stories, onClose, - profilePic + profilePic, + title }) => { const [currentStoryIndex, setCurrentStoryIndex] = useState(0); const [progress, setProgress] = useState(0); - const [isMuted, setIsMuted] = useState(false); + // Start muted: Safari and Firefox refuse to autoplay audible media, which + // would stall the reel on its first video. + const [isMuted, setIsMuted] = useState(true); const videoRef = useRef<HTMLVideoElement>(null); const story = stories[currentStoryIndex]; + const primary = story?.media?.[0]; useEffect(() => { setProgress(0); let duration = 5000; const interval = 50; - + const updateProgress = () => { - if (story.media[0].type === 'video' && videoRef.current) { + if (primary?.type === 'video' && videoRef.current) { const currentTime = videoRef.current.currentTime; const totalTime = videoRef.current.duration; if (totalTime) { @@ -54,7 +59,7 @@ export const StoryViewer: React.FC<StoryViewerProps> = ({ }, interval); return () => clearInterval(timer); - }, [currentStoryIndex, story.media]); + }, [currentStoryIndex, primary]); useEffect(() => { if (progress >= 100) { @@ -80,6 +85,9 @@ export const StoryViewer: React.FC<StoryViewerProps> = ({ } }; + // An empty or exhausted reel has nothing to show; bail before dereferencing. + if (!story || !primary) return null; + return ( <motion.div initial={{ opacity: 0 }} @@ -90,8 +98,8 @@ export const StoryViewer: React.FC<StoryViewerProps> = ({ > <div className="absolute inset-0 z-0 text-white"> <img - src={story.media[0].url} - alt="" + src={primary.url} + alt="" className="w-full h-full object-cover blur-3xl opacity-30" /> </div> @@ -146,12 +154,13 @@ export const StoryViewer: React.FC<StoryViewerProps> = ({ </div> <div className="flex items-center gap-2 text-white"> <span className="text-xs font-semibold">{story.username}</span> - <span className="text-[10px] opacity-60 font-medium">{format(parseISO(story.date), 'MMM d')}</span> + {title && <span className="text-[10px] opacity-80 font-medium truncate max-w-[120px]">{title}</span>} + <span className="text-[10px] opacity-60 font-medium">{formatDateSafe(story.date, 'MMM d')}</span> </div> </div> <div className="flex items-center gap-1 text-white"> - {story.media[0].type === 'video' && ( + {primary.type === 'video' && ( <button onClick={(e) => { e.stopPropagation(); setIsMuted(!isMuted); }} className="p-2 hover:bg-white/10 rounded-full transition-colors text-white" @@ -166,10 +175,10 @@ export const StoryViewer: React.FC<StoryViewerProps> = ({ </div> <div className="w-full h-full flex items-center justify-center pointer-events-none text-white"> - {story.media[0].type === 'video' ? ( + {primary.type === 'video' ? ( <video ref={videoRef} - src={story.media[0].url} + src={primary.url} className="w-full h-full object-contain" autoPlay muted={isMuted} @@ -179,8 +188,8 @@ export const StoryViewer: React.FC<StoryViewerProps> = ({ /> ) : ( <img - src={story.media[0].url} - alt="" + src={primary.url} + alt="" className="w-full h-full object-contain" referrerPolicy="no-referrer" /> diff --git a/src/hooks/useArchiveScanner.ts b/src/hooks/useArchiveScanner.ts index e7f6b2c..f2faab8 100644 --- a/src/hooks/useArchiveScanner.ts +++ b/src/hooks/useArchiveScanner.ts @@ -1,8 +1,11 @@ -import { useState, useCallback, useRef } from 'react'; +import { useState, useCallback, useRef, useEffect } from 'react'; // @ts-ignore import { XzReadableStream } from 'xz-decompress'; -import * as idb from 'idb-keyval'; -import { ArchiveFile, Post, ServerArchive } from '../types'; +import { ArchiveFile, CacheData, Post, ServerArchive } from '../types'; +import { setCachedArchive, getDirectoryHandle } from '../lib/archive-cache'; +import { parseArchiveFilename, scopedPostId, EXPORT_RE, INSTALOADER_RE } from '../lib/archive-patterns'; + +const hasDirectoryHandle = async (name: string) => Boolean(await getDirectoryHandle(name)); export const useArchiveScanner = ( detectedUsername: string, @@ -19,6 +22,7 @@ export const useArchiveScanner = ( // Result state const [allPosts, setAllPosts] = useState<Post[]>([]); const [allStories, setAllStories] = useState<Post[]>([]); + const [allHighlights, setAllHighlights] = useState<Post[]>([]); const [profileMetadata, setProfileMetadata] = useState<{ username: string; fullName: string; @@ -39,9 +43,33 @@ export const useArchiveScanner = ( allProfilePics: [], }); + /** + * Blob URLs minted for the archive currently in state. They stay alive as long + * as that archive is on screen and are released when it is torn down — + * otherwise every archive ever opened stays resident for the tab's lifetime. + */ + const createdUrlsRef = useRef<string[]>([]); + + const revokeCreatedUrls = useCallback(() => { + for (const url of createdUrlsRef.current) { + try { URL.revokeObjectURL(url); } catch { /* already gone */ } + } + createdUrlsRef.current = []; + }, []); + + // Release the last archive's URLs when the app unmounts. + useEffect(() => revokeCreatedUrls, [revokeCreatedUrls]); + + /** Hand ownership of an externally-minted blob URL to the scanner's cleanup. */ + const registerUrl = useCallback((url: string) => { + createdUrlsRef.current.push(url); + }, []); + const resetScannerState = useCallback(() => { + revokeCreatedUrls(); setAllPosts([]); setAllStories([]); + setAllHighlights([]); setProfileMetadata({ username: '', fullName: '', @@ -52,7 +80,7 @@ export const useArchiveScanner = ( profilePic: null, allProfilePics: [], }); - }, []); + }, [revokeCreatedUrls]); const handleFiles = useCallback(async (files: ArchiveFile[], archiveContext?: ServerArchive) => { if (!files || files.length === 0) return; @@ -66,6 +94,19 @@ export const useArchiveScanner = ( console.log(`[Scanner] Starting scan of ${files.length} files...`); await new Promise(resolve => setTimeout(resolve, 100)); + /** + * Mint a URL for a media file, remembering it if it needs revoking later. + * Synchronous and allocation-free: no file contents are read here. + */ + const mintUrl = (file: ArchiveFile, mimeHint?: string) => { + const url = file.createObjectUrl(mimeHint); + if (file.revocable) createdUrlsRef.current.push(url); + return url; + }; + + /** Stable identity for a media file, used to rehydrate URLs after a reload. */ + const mediaPath = (file: ArchiveFile) => file.webkitRelativePath || file.name; + const parseXZFile = async (file: ArchiveFile) => { try { const stream = new XzReadableStream(file.stream()); @@ -100,8 +141,6 @@ export const useArchiveScanner = ( let localFollowingCount = 0; let localProfilePic: string | null = null; - const exportRegex = /^(\d{4}-\d{2}-\d{2})_(.+?) - (.+?)(?: - (\d+))?(?: - (story))?\.(.+)$/; - const instaloaderRegex = /^(\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}_UTC)(?:_(\d+))?(?:_(story))?\.(.+)$/; const checkIsStory = (obj: any): boolean => { if (!obj) return false; const typeName = obj.__typename || obj.typename || ''; @@ -140,15 +179,15 @@ export const useArchiveScanner = ( continue; } - if (file.name.match(exportRegex)) format = 'export'; - else if (file.name.match(instaloaderRegex)) format = 'instaloader'; + if (EXPORT_RE.test(file.name)) format = 'export'; + else if (INSTALOADER_RE.test(file.name)) format = 'instaloader'; + // Highlight items match neither pattern, so a profile made up only of + // sidecar directories would otherwise never reach the filename parser. + else if (format === 'unknown' && file.source && file.source.kind !== 'posts') format = 'export'; if (lowerName.includes('_profile_pic.jpg') || (currentUsername && lowerName === `${currentUsername.toLowerCase()}.jpg`)) { try { - const url = file.url || (await (async () => { - const blob = new Blob([await file.arrayBuffer()], { type: 'image/jpeg' }); - return URL.createObjectURL(blob); - })()); + const url = mintUrl(file, 'image/jpeg'); discoveredProfilePics.push({ name: file.name, url }); if (format === 'unknown' && lowerName.includes('_profile_pic.jpg')) format = 'instaloader'; } catch(e) {} @@ -205,10 +244,10 @@ export const useArchiveScanner = ( if (matchedFile) { const type = isVideo(matchedFile.name) ? 'video' : 'image'; - const url = matchedFile.url || URL.createObjectURL(new Blob([await matchedFile.arrayBuffer()], { type: type === 'video' ? 'video/mp4' : 'image/jpeg' })); + const url = mintUrl(matchedFile, type === 'video' ? 'video/mp4' : 'image/jpeg'); const existingMedia = post.media!.find(media => media.index === mIdx + 1); - if (existingMedia) { if (type === 'video' && existingMedia.type === 'image') post.media = post.media!.map(media => media.index === mIdx + 1 ? { name: matchedFile!.name, url, type, index: mIdx + 1, size: matchedFile!.size } : media); } - else post.media!.push({ name: matchedFile.name, url, type, index: mIdx + 1, size: matchedFile.size }); + if (existingMedia) { if (type === 'video' && existingMedia.type === 'image') post.media = post.media!.map(media => media.index === mIdx + 1 ? { name: matchedFile!.name, path: mediaPath(matchedFile!), url, type, index: mIdx + 1, size: matchedFile!.size } : media); } + else post.media!.push({ name: matchedFile.name, path: mediaPath(matchedFile), url, type, index: mIdx + 1, size: matchedFile.size }); } } if (post.media!.length > 0) postsMap.set(postId, post); @@ -228,21 +267,25 @@ export const useArchiveScanner = ( setScannedFilesLog(prev => [`Batch ${Math.floor(j_start/CHUNK_SIZE) + 1} processing...`, ...prev.slice(0, 19)]); for (let j = j_start; j < end; j++) { const file = files[j]; const lowerName = file.name.toLowerCase(); - const expMatch = file.name.match(exportRegex); - const insMatch = file.name.match(instaloaderRegex); - if (!expMatch && !insMatch) continue; + const kind = file.source?.kind ?? 'posts'; + const parsed = parseArchiveFilename(file.name, kind, file.mtime); + if (!parsed) continue; - let postId = '', date = '', user = currentUsername || 'archived_user', index = 1, ext = '', isStory = lowerName.includes('story') || file.webkitRelativePath.toLowerCase().includes('stories'); - if (expMatch) { - const [_, dMatch, uMatch, pMatch, iStrMatch, sMatch, eMatch] = expMatch; - date = dMatch; user = uMatch; postId = pMatch; index = iStrMatch ? parseInt(iStrMatch, 10) : 1; if (sMatch) isStory = true; ext = eMatch; - } else if (insMatch) { - const [_, pMatch, iStrMatch, sMatch, eMatch] = insMatch; - postId = pMatch; date = pMatch.split('_')[0]; index = iStrMatch ? parseInt(iStrMatch, 10) : 1; if (sMatch) isStory = true; ext = eMatch; - } + const { date, index, ext } = parsed; + const user = parsed.username || currentUsername || 'archived_user'; + let isStory = parsed.isStory + || lowerName.includes('story') + || file.webkitRelativePath.toLowerCase().includes('stories'); + + const postId = scopedPostId(parsed.postId, kind, file.source?.dir); + if (kind === 'stories') isStory = true; + if (kind === 'highlight') isStory = false; let post = postsMap.get(postId); - if (!post) { post = { id: postId, date, username: user, caption: '', media: [], isStory }; postsMap.set(postId, post); } + if (!post) { + post = { id: postId, date, username: user, caption: '', media: [], isStory, source: kind, highlightTitle: file.source?.title }; + postsMap.set(postId, post); + } else if (isStory) post.isStory = true; const lowerExt = ext.toLowerCase(); @@ -260,11 +303,11 @@ export const useArchiveScanner = ( } catch (e) {} } else if (isMedia(file.name)) { const type = isVideo(file.name) ? 'video' : 'image'; - const url = file.url || URL.createObjectURL(new Blob([await file.arrayBuffer()], { type: type === 'video' ? 'video/mp4' : 'image/jpeg' })); + const url = mintUrl(file, type === 'video' ? 'video/mp4' : 'image/jpeg'); if (type === 'image') throttledSetScanningImage(url); const existingMedia = post.media!.find(m => m.index === index); - if (existingMedia) { if (type === 'video' && existingMedia.type === 'image') post.media = post.media!.map(m => m.index === index ? { name: file.name, url, type, index, size: file.size } : m); } - else post.media!.push({ name: file.name, url, type, index, size: file.size }); + if (existingMedia) { if (type === 'video' && existingMedia.type === 'image') post.media = post.media!.map(m => m.index === index ? { name: file.name, path: mediaPath(file), url, type, index, size: file.size } : m); } + else post.media!.push({ name: file.name, path: mediaPath(file), url, type, index, size: file.size }); } } await new Promise(resolve => setTimeout(resolve, 0)); @@ -307,9 +350,9 @@ export const useArchiveScanner = ( const post: Post = { id: postId, date: new Date().toISOString().split('T')[0], username: currentUsername || 'archived_user', caption: baseName, media: [], thumbnail: '' }; for (const [idx, file] of batch.entries()) { const type = isVideo(file.name) ? 'video' : 'image'; - const url = file.url || URL.createObjectURL(new Blob([await file.arrayBuffer()], { type: type === 'video' ? 'video/mp4' : 'image/jpeg' })); + const url = mintUrl(file, type === 'video' ? 'video/mp4' : 'image/jpeg'); if (type === 'image') throttledSetScanningImage(url); - post.media.push({ name: file.name, url, type, index: idx + 1, size: file.size }); + post.media.push({ name: file.name, path: mediaPath(file), url, type, index: idx + 1, size: file.size }); } post.thumbnail = post.media[0].url; postsMap.set(postId, post); @@ -327,7 +370,7 @@ export const useArchiveScanner = ( allImageFiles.sort((a, b) => a.name.localeCompare(b.name)); const oldestFile = allImageFiles[0]; try { - const url = oldestFile.url || URL.createObjectURL(new Blob([await oldestFile.arrayBuffer()], { type: 'image/jpeg' })); + const url = mintUrl(oldestFile, 'image/jpeg'); localProfilePic = url; setProfileMetadata(prev => ({ ...prev, profilePic: localProfilePic, allProfilePics: [url] })); } catch(e) {} @@ -339,11 +382,17 @@ export const useArchiveScanner = ( return { ...p, username: (p.username === 'archived_user' || !p.username) ? finalUsername : p.username, media: sortedMedia, thumbnail: sortedMedia[0].url } as Post; }); - const posts = allItems.filter(p => !p.isStory).sort((a, b) => b.date.localeCompare(a.date)); - const stories = allItems.filter(p => p.isStory).sort((a, b) => b.date.localeCompare(a.date)); // Fixed bug here + const byNewest = (a: Post, b: Post) => b.date.localeCompare(a.date); + // Highlights are story-shaped but live behind their own circles, so they + // are kept out of both the grid and the profile-ring story reel. + const highlights = allItems.filter(p => p.source === 'highlight').sort(byNewest); + const rest = allItems.filter(p => p.source !== 'highlight'); + const posts = rest.filter(p => !p.isStory).sort(byNewest); + const stories = rest.filter(p => p.isStory).sort(byNewest); setAllPosts(posts); setAllStories(stories); + setAllHighlights(highlights); setProfileMetadata(prev => ({ ...prev, username: finalUsername, @@ -377,24 +426,30 @@ export const useArchiveScanner = ( } catch (e) {} } - const cacheData = { - name: cacheKey, isLocal, fileCount: archiveToCache ? archiveToCache.fileCount : files.length, - posts: posts, // Enable caching for local archives + const cacheData: CacheData = { + name: cacheKey, isLocal, + fileCount: (archiveToCache ? archiveToCache.fileCount : files.length) ?? files.length, + signature: archiveToCache?.signature, + posts: posts, stories: stories, - profileMetadata: { - username: finalUsername, - fullName: localFullName, - bio: localBio, - followerCount: localFollowerCount, - followingCount: localFollowingCount, - externalUrl: localExternalUrl, + highlights: highlights, + profileMetadata: { + username: finalUsername, + fullName: localFullName, + bio: localBio, + followerCount: localFollowerCount, + followingCount: localFollowingCount, + externalUrl: localExternalUrl, + // Local blob: URLs die with the document, so persist a data: URL for + // the dashboard card instead. Media URLs are rehydrated from `path`. profilePic: isLocal ? cacheThumbnail : localProfilePic, allProfilePics: isLocal ? (cacheThumbnail ? [cacheThumbnail] : []) : discoveredProfilePics.map(p => p.url) - }, - timestamp: Date.now() + }, + hasDirectoryHandle: isLocal ? await hasDirectoryHandle(cacheKey) : false, + timestamp: Date.now() }; try { - await idb.set(cacheKey, cacheData); + await setCachedArchive(cacheData); console.log(`[Cache] Data saved successfully.`); await refreshCachedArchives(); } catch (e) { console.error(`[Cache] Save error:`, e); } @@ -411,10 +466,12 @@ export const useArchiveScanner = ( currentScanningImage, allPosts, allStories, + allHighlights, profileMetadata, handleFiles, setAllPosts, setAllStories, + setAllHighlights, setProfileMetadata, setIsScanning, setScanningPhase, @@ -422,6 +479,7 @@ export const useArchiveScanner = ( setTotalFiles, setScannedFilesLog, setCurrentScanningImage, - resetScannerState + resetScannerState, + registerUrl }; }; diff --git a/src/hooks/useThumbnailQueue.ts b/src/hooks/useThumbnailQueue.ts index d3ef0ac..bde8896 100644 --- a/src/hooks/useThumbnailQueue.ts +++ b/src/hooks/useThumbnailQueue.ts @@ -1,47 +1,38 @@ import { useState, useCallback, useRef, useEffect } from 'react'; import * as idb from 'idb-keyval'; +import { thumbKey } from '../lib/archive-cache'; interface ThumbnailRequest { id: string; + key: string; url: string; blob?: Blob; } const THUMBNAIL_WIDTH = 400; -export const useThumbnailQueue = () => { +export const useThumbnailQueue = (archiveName: string) => { const [cacheHits, setCacheHits] = useState<Map<string, string>>(new Map()); const queueRef = useRef<ThumbnailRequest[]>([]); const isProcessingRef = useRef(false); const workerRef = useRef<Worker | null>(null); - useEffect(() => { - // Initialize worker with relative URL (vite will handle this) - workerRef.current = new Worker(new URL('../lib/thumbnail-worker.ts', import.meta.url), { - type: 'module' - }); + /** + * Mirrors `cacheHits` for reads inside callbacks. + * + * `requestThumbnail` is a dependency of every PostThumbnail effect, so it must + * keep a stable identity — closing over `cacheHits` state directly would give + * it a new identity per completed thumbnail and re-run the effect in all + * ~90 mounted thumbnails each time. + */ + const cacheHitsRef = useRef<Map<string, string>>(new Map()); + /** Blob URLs handed out for thumbnails, released when the archive changes. */ + const createdUrlsRef = useRef<string[]>([]); - workerRef.current.onmessage = async (e) => { - const { id, blob, error } = e.data; - - if (!error && blob) { - const url = URL.createObjectURL(blob); - setCacheHits(prev => new Map(prev).set(id, url)); - - // Persist to IndexedDB (as dataURL for simple retrieval or keep as Blob) - try { - await idb.set(`thumb_${id}`, blob); - } catch (err) {} - } - - // Process next in queue - isProcessingRef.current = false; - processNext(); - }; - - return () => { - workerRef.current?.terminate(); - }; + const publish = useCallback((id: string, url: string) => { + createdUrlsRef.current.push(url); + cacheHitsRef.current.set(id, url); + setCacheHits(new Map(cacheHitsRef.current)); }, []); const processNext = useCallback(async () => { @@ -51,53 +42,84 @@ export const useThumbnailQueue = () => { const request = queueRef.current.shift()!; try { - // 1. Double check cache before expensive work - const cached = await idb.get(`thumb_${request.id}`); + // Re-check the store: the entry may have landed since being queued. + const cached = await idb.get(request.key); if (cached instanceof Blob) { - const url = URL.createObjectURL(cached); - setCacheHits(prev => new Map(prev).set(request.id, url)); + publish(request.id, URL.createObjectURL(cached)); isProcessingRef.current = false; processNext(); return; } - // 2. Fetch original if no blob provided let blob = request.blob; if (!blob) { const res = await fetch(request.url); blob = await res.blob(); } - // 3. Send to worker - workerRef.current.postMessage({ - id: request.id, - blob, - width: THUMBNAIL_WIDTH - }); + // One image at a time: decoding several 50MP+ files concurrently is a + // reliable way to OOM the tab. + workerRef.current.postMessage({ id: request.key, blob, width: THUMBNAIL_WIDTH }); } catch (err) { console.error('[ThumbnailQueue] Failed to process:', request.id, err); isProcessingRef.current = false; processNext(); } - }, []); + }, [publish]); + + useEffect(() => { + workerRef.current = new Worker(new URL('../lib/thumbnail-worker.ts', import.meta.url), { + type: 'module' + }); + + workerRef.current.onmessage = async (e) => { + const { id: key, blob, error } = e.data; + + if (!error && blob) { + const id = key.split(':').slice(2).join(':'); + publish(id, URL.createObjectURL(blob)); + try { + await idb.set(key, blob); + } catch (err) { /* quota exceeded; the in-memory hit still stands */ } + } + + isProcessingRef.current = false; + processNext(); + }; + + return () => { + workerRef.current?.terminate(); + }; + }, [publish, processNext]); + + // Switching archives invalidates every thumbnail URL handed out so far. + useEffect(() => { + return () => { + queueRef.current = []; + for (const url of createdUrlsRef.current) { + try { URL.revokeObjectURL(url); } catch { /* already gone */ } + } + createdUrlsRef.current = []; + cacheHitsRef.current = new Map(); + setCacheHits(new Map()); + }; + }, [archiveName]); const requestThumbnail = useCallback(async (id: string, url: string, blob?: Blob) => { - // 1. Sync check state - if (cacheHits.has(id)) return; + if (cacheHitsRef.current.has(id)) return; - // 2. Async check idb - const cached = await idb.get(`thumb_${id}`); + const key = thumbKey(archiveName, id); + const cached = await idb.get(key); if (cached instanceof Blob) { - setCacheHits(prev => new Map(prev).set(id, URL.createObjectURL(cached))); + publish(id, URL.createObjectURL(cached)); return; } - // 3. Add to queue if not already there if (!queueRef.current.some(r => r.id === id)) { - queueRef.current.push({ id, url, blob }); + queueRef.current.push({ id, key, url, blob }); processNext(); } - }, [cacheHits, processNext]); + }, [archiveName, publish, processNext]); return { cacheHits, diff --git a/src/index.css b/src/index.css index 47eb8d7..aecf157 100644 --- a/src/index.css +++ b/src/index.css @@ -1,4 +1,5 @@ -@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Playfair+Display:ital,wght@0,400..900;1,400..900&display=swap'); +/* Self-hosted: no third-party font requests, works fully offline. */ +@import url('/fonts/fonts.css'); @import "tailwindcss"; @theme { diff --git a/src/lib/archive-cache.ts b/src/lib/archive-cache.ts new file mode 100644 index 0000000..953b335 --- /dev/null +++ b/src/lib/archive-cache.ts @@ -0,0 +1,170 @@ +import * as idb from 'idb-keyval'; +import { CacheData, Post } from '../types'; +import { DirectoryHandle, ensureReadPermission, filesFromDirectory } from './directory-handle'; +import { LocalArchiveFile } from './archive-files'; + +/** + * Persistent archive cache. + * + * Keys are namespaced so that listing archives does not require deserializing + * every thumbnail blob in the store: `archive:` entries are metadata, `thumb:` + * entries are image blobs, `handle:` entries are directory handles. + */ +const ARCHIVE_PREFIX = 'archive:'; +const THUMB_PREFIX = 'thumb:'; +const HANDLE_PREFIX = 'handle:'; + +export const archiveKey = (name: string) => `${ARCHIVE_PREFIX}${name}`; +export const handleKey = (name: string) => `${HANDLE_PREFIX}${name}`; +/** Thumbnails are scoped per archive; post IDs alone collide across archives. */ +export const thumbKey = (archive: string, postId: string) => `${THUMB_PREFIX}${archive}:${postId}`; + +export const getCachedArchive = (name: string): Promise<CacheData | undefined> => + idb.get(archiveKey(name)); + +export const setCachedArchive = (data: CacheData) => idb.set(archiveKey(data.name), data); + +/** Names of all cached archives, without loading their contents. */ +export const listCachedArchiveNames = async (): Promise<string[]> => + (await idb.keys()) + .map(String) + .filter(k => k.startsWith(ARCHIVE_PREFIX)) + .map(k => k.slice(ARCHIVE_PREFIX.length)); + +export const listCachedArchives = async (): Promise<CacheData[]> => { + const names = await listCachedArchiveNames(); + const entries = await Promise.all(names.map(getCachedArchive)); + return entries.filter((e): e is CacheData => Boolean(e)); +}; + +/** Remove an archive along with its handle and every thumbnail it owns. */ +export const deleteCachedArchive = async (name: string) => { + const thumbPrefix = `${THUMB_PREFIX}${name}:`; + const stale = (await idb.keys()).map(String).filter(k => k.startsWith(thumbPrefix)); + await idb.delMany([archiveKey(name), handleKey(name), ...stale]); +}; + +export const saveDirectoryHandle = (name: string, handle: DirectoryHandle) => + idb.set(handleKey(name), handle); + +export const getDirectoryHandle = (name: string): Promise<DirectoryHandle | undefined> => + idb.get(handleKey(name)); + +/** + * One-time migration from the flat key layout (archive name as a bare key, + * `thumb_<postId>` for thumbnails). + * + * Old local entries are dropped rather than migrated: their media URLs are + * dead blob: URLs, so restoring them would render an archive of broken images. + */ +export const migrateLegacyCache = async () => { + const keys = (await idb.keys()).map(String); + const legacyThumbs = keys.filter(k => k.startsWith('thumb_')); + const legacyArchives = keys.filter( + k => !k.startsWith(ARCHIVE_PREFIX) && !k.startsWith(THUMB_PREFIX) && + !k.startsWith(HANDLE_PREFIX) && !k.startsWith('thumb_') + ); + if (!legacyThumbs.length && !legacyArchives.length) return; + + const drop: string[] = [...legacyThumbs]; + for (const key of legacyArchives) { + const data = await idb.get(key); + drop.push(key); + if (data && typeof data === 'object' && 'posts' in data && !(data as CacheData).isLocal) { + // Server archives keep working: their URLs are plain HTTP paths. + await setCachedArchive({ ...(data as CacheData), name: key }); + } + } + await idb.delMany(drop); + console.log(`[Cache] Migrated legacy cache: dropped ${drop.length} stale keys.`); +}; + +/** + * Rebuild a server archive's media URLs, which are stable HTTP paths. + * + * `path` is relative to the archives root and already carries the source + * directory (which may be a sidecar such as `story - user`), so it is not + * prefixed with the archive name. Entries cached before `path` existed fall + * back to their stored URL. + */ +const rehydrateRemote = (posts: Post[]): Post[] => + posts.map(post => { + const media = post.media.map(m => ({ + ...m, + url: m.path ? `/archives/${encodeURI(m.path)}` : m.url, + })); + return { ...post, media, thumbnail: media[0]?.url ?? post.thumbnail }; + }); + +/** + * Rebuild a local archive's media URLs from a live directory handle, minting + * fresh blob: URLs for the paths recorded at scan time. + * + * Returns null when the folder is no longer reachable (permission declined, or + * the handle no longer resolves), signalling the caller to re-prompt. + */ +const rehydrateLocal = async ( + posts: Post[], + handle: DirectoryHandle, + onUrl: (url: string) => void, +): Promise<Post[] | null> => { + if (!(await ensureReadPermission(handle))) return null; + + let files: LocalArchiveFile[]; + try { + files = await filesFromDirectory(handle); + } catch (err) { + console.warn('[Cache] Directory handle no longer readable:', err); + return null; + } + + const byPath = new Map(files.map(f => [f.webkitRelativePath, f])); + + return posts.map(post => { + const media = post.media.map(m => { + const file = byPath.get(m.path); + if (!file) return { ...m, url: '' }; + const url = file.createObjectUrl(m.type === 'video' ? 'video/mp4' : 'image/jpeg'); + onUrl(url); + return { ...m, url }; + }); + return { ...post, media, thumbnail: media[0]?.url ?? '' }; + }); +}; + +export interface RestoredArchive { + posts: Post[]; + stories: Post[]; + highlights: Post[]; + profileMetadata: CacheData['profileMetadata']; +} + +/** + * Turn a cache entry back into displayable state. + * + * `onUrl` receives every blob: URL minted so the caller can revoke them later. + * Returns null if a local archive's folder can no longer be reached. + */ +export const restoreArchive = async ( + data: CacheData, + onUrl: (url: string) => void, +): Promise<RestoredArchive | null> => { + if (!data.isLocal) { + return { + posts: rehydrateRemote(data.posts), + stories: rehydrateRemote(data.stories), + highlights: rehydrateRemote(data.highlights ?? []), + profileMetadata: data.profileMetadata, + }; + } + + const handle = await getDirectoryHandle(data.name); + if (!handle) return null; + + const posts = await rehydrateLocal(data.posts, handle, onUrl); + if (!posts) return null; + const stories = (await rehydrateLocal(data.stories, handle, onUrl)) ?? []; + const highlights = (await rehydrateLocal(data.highlights ?? [], handle, onUrl)) ?? []; + + return { posts, stories, highlights, profileMetadata: data.profileMetadata }; +}; diff --git a/src/lib/archive-files.ts b/src/lib/archive-files.ts index 1da78b3..699236e 100644 --- a/src/lib/archive-files.ts +++ b/src/lib/archive-files.ts @@ -1,21 +1,51 @@ -import { ArchiveFile } from '../types'; +import { ArchiveFile, ArchiveSource } from '../types'; export class LocalArchiveFile implements ArchiveFile { - constructor(private file: File) {} + /** Blob URLs minted here are revocable and must be released when done. */ + readonly revocable = true; + + /** + * @param explicitPath Set when the file came from the File System Access API, + * whose File objects carry an empty webkitRelativePath. + */ + constructor(private file: File, private explicitPath?: string) {} get name() { return this.file.name; } - get webkitRelativePath() { return this.file.webkitRelativePath; } + get webkitRelativePath() { return this.explicitPath ?? this.file.webkitRelativePath; } get size() { return this.file.size; } text() { return this.file.text(); } arrayBuffer() { return this.file.arrayBuffer(); } stream() { return this.file.stream(); } + + /** + * A blob: URL backed directly by the on-disk File. + * + * Deliberately does NOT go through arrayBuffer() — a File is already a Blob, + * so this hands the browser a disk-backed handle instead of pulling the whole + * file into memory. Doing otherwise means a 20GB archive tries to become 20GB + * of resident blobs. + * + * When the picker gave us no MIME type, slice() re-tags the blob with a hint. + * slice() is a zero-copy view, so this stays memory-free either way. + */ + createObjectUrl(mimeHint?: string) { + const source = this.file.type || !mimeHint + ? this.file + : this.file.slice(0, this.file.size, mimeHint); + return URL.createObjectURL(source); + } } export class RemoteArchiveFile implements ArchiveFile { + /** Served over HTTP; there is no object URL to release. */ + readonly revocable = false; + constructor( public name: string, public webkitRelativePath: string, public size: number, - public url: string + public url: string, + public source?: ArchiveSource, + public mtime?: number ) {} async text() { const res = await fetch(this.url); @@ -33,4 +63,8 @@ export class RemoteArchiveFile implements ArchiveFile { }); return transform.readable; } + + createObjectUrl() { + return this.url; + } } diff --git a/src/lib/archive-grouping.test.ts b/src/lib/archive-grouping.test.ts new file mode 100644 index 0000000..1f814b9 --- /dev/null +++ b/src/lib/archive-grouping.test.ts @@ -0,0 +1,89 @@ +import { describe, expect, it } from 'vitest'; +import { classifyDirectory, groupArchiveDirectories } from './archive-grouping'; + +describe('classifyDirectory', () => { + it('treats a bare profile directory as the base', () => { + expect(classifyDirectory('0ct0ber19')).toEqual({ + owner: '0ct0ber19', + source: { kind: 'posts', dir: '0ct0ber19' }, + }); + }); + + it('recognises a reels sidecar', () => { + expect(classifyDirectory('0ct0ber19 - reels')).toEqual({ + owner: '0ct0ber19', + source: { kind: 'reels', dir: '0ct0ber19 - reels' }, + }); + }); + + it('recognises a stories sidecar', () => { + expect(classifyDirectory('story - cher_ryppo')).toEqual({ + owner: 'cher_ryppo', + source: { kind: 'stories', dir: 'story - cher_ryppo' }, + }); + }); + + it('splits highlight owner from title', () => { + const { owner, source } = classifyDirectory('story highlights - 0ct0ber19 - Heestory'); + expect(owner).toBe('0ct0ber19'); + expect(source.kind).toBe('highlight'); + expect(source.title).toBe('Heestory'); + }); + + it.each([ + ['story highlights - theoldtaylorswiftinsta - 💙2014-1989 era', 'theoldtaylorswiftinsta', '💙2014-1989 era'], + ['story highlights - heejin_theworld - [Dall]', 'heejin_theworld', '[Dall]'], + ['story highlights - official_artms - Cosmo Schedule', 'official_artms', 'Cosmo Schedule'], + ['story highlights - 0ct0ber19 - Drawheeing⠀', '0ct0ber19', 'Drawheeing⠀'], + ['story highlights - official_artms - G.C.I', 'official_artms', 'G.C.I'], + ])('handles real-world title %s', (dir, owner, title) => { + const result = classifyDirectory(dir); + expect(result.owner).toBe(owner); + expect(result.source.title).toBe(title); + }); + + it('keeps titles containing " - " intact', () => { + // The username is matched as a non-space run, so only the first separator + // splits owner from title. + const { owner, source } = classifyDirectory('story highlights - user - a - b'); + expect(owner).toBe('user'); + expect(source.title).toBe('a - b'); + }); + + it('does not mistake a profile with spaces for a sidecar', () => { + expect(classifyDirectory('Heejin_Bubble heejinmedia').source.kind).toBe('posts'); + }); +}); + +describe('groupArchiveDirectories', () => { + const dirs = [ + '0ct0ber19', + '0ct0ber19 - reels', + 'story - 0ct0ber19', + 'story highlights - 0ct0ber19 - Heestory', + 'story highlights - 0ct0ber19 - Drawheeing⠀', + 'carlyraejepsen', + ]; + + it('folds sidecars into their base profile', () => { + const groups = groupArchiveDirectories(dirs); + expect([...groups.keys()].sort()).toEqual(['0ct0ber19', 'carlyraejepsen']); + expect(groups.get('0ct0ber19')).toHaveLength(5); + expect(groups.get('carlyraejepsen')).toHaveLength(1); + }); + + it('orders sources posts, reels, stories, then highlights by title', () => { + const sources = groupArchiveDirectories(dirs).get('0ct0ber19')!; + expect(sources.map(s => s.kind)).toEqual(['posts', 'reels', 'stories', 'highlight', 'highlight']); + expect(sources.slice(3).map(s => s.title)).toEqual(['Drawheeing⠀', 'Heestory']); + }); + + it('still groups a sidecar whose base profile is missing', () => { + const groups = groupArchiveDirectories(['story - orphan']); + expect(groups.get('orphan')).toEqual([{ kind: 'stories', dir: 'story - orphan' }]); + }); + + it('is stable for an empty archive root', () => { + expect(groupArchiveDirectories([]).size).toBe(0); + }); +}); diff --git a/src/lib/archive-grouping.ts b/src/lib/archive-grouping.ts new file mode 100644 index 0000000..caca3a0 --- /dev/null +++ b/src/lib/archive-grouping.ts @@ -0,0 +1,71 @@ +/** + * Archive directory naming rules. + * + * Shared by the server (to fold sidecar directories into one profile) and the + * test suite. Kept free of Node built-ins so it can be imported from either. + */ + +export type SourceKind = 'posts' | 'reels' | 'stories' | 'highlight'; + +export interface ArchiveSource { + kind: SourceKind; + /** Directory name relative to the archives root. */ + dir: string; + /** Highlight title, for kind === 'highlight'. */ + title?: string; +} + +/** + * Sidecar directories sit next to the profile directory they belong to: + * + * 0ct0ber19 -> posts (base) + * 0ct0ber19 - reels -> reels + * story - 0ct0ber19 -> stories + * story highlights - 0ct0ber19 - Heestory -> highlight "Heestory" + * + * Instagram usernames cannot contain spaces, so matching the username as a + * run of non-space characters reliably separates it from a highlight title + * (titles may themselves contain spaces, dashes and emoji). + */ +export const classifyDirectory = (dirName: string): { owner: string; source: ArchiveSource } => { + const highlight = /^story highlights - ([^ ]+) - (.+)$/.exec(dirName); + if (highlight) { + return { owner: highlight[1], source: { kind: 'highlight', dir: dirName, title: highlight[2] } }; + } + + const stories = /^story - ([^ ]+)$/.exec(dirName); + if (stories) { + return { owner: stories[1], source: { kind: 'stories', dir: dirName } }; + } + + const reels = /^([^ ]+) - reels$/.exec(dirName); + if (reels) { + return { owner: reels[1], source: { kind: 'reels', dir: dirName } }; + } + + return { owner: dirName, source: { kind: 'posts', dir: dirName } }; +}; + +const RANK: Record<SourceKind, number> = { posts: 0, reels: 1, stories: 2, highlight: 3 }; + +/** + * Group the archive root's directories by profile. + * + * A sidecar whose owner has no base directory still forms a group of its own, + * so nothing becomes invisible just because the base profile is missing. + */ +export const groupArchiveDirectories = (dirNames: string[]): Map<string, ArchiveSource[]> => { + const groups = new Map<string, ArchiveSource[]>(); + + for (const dirName of dirNames) { + const { owner, source } = classifyDirectory(dirName); + if (!groups.has(owner)) groups.set(owner, []); + groups.get(owner)!.push(source); + } + + for (const sources of groups.values()) { + sources.sort((a, b) => RANK[a.kind] - RANK[b.kind] || (a.title ?? '').localeCompare(b.title ?? '')); + } + + return groups; +}; diff --git a/src/lib/archive-index.ts b/src/lib/archive-index.ts new file mode 100644 index 0000000..a7bf6e8 --- /dev/null +++ b/src/lib/archive-index.ts @@ -0,0 +1,232 @@ +import fs from 'fs'; +import fsp from 'fs/promises'; +import path from 'path'; +import { ArchiveSource, SourceKind, groupArchiveDirectories } from './archive-grouping.js'; + +/** + * On-disk archive index. + * + * Archives live on network storage where per-file `stat` costs ~1.4ms and does + * not parallelise well, so walking every file on each request is unaffordable: + * measured against a real 110k-file archive root, listing took ~52s. + * + * Directory `stat` is effectively free, so each source directory is indexed + * once and re-used until its mtime changes. The index is warmed in the + * background at startup and persisted, making steady-state requests instant. + */ + +export interface IndexedFile { + path: string; + size: number; + mtime: number; + kind: SourceKind; + title?: string; +} + +interface DirIndex { + dir: string; + /** Directory mtime the index was built from; the cache key. */ + mtimeMs: number; + files: IndexedFile[]; +} + +const MEDIA_RE = /\.(jpg|jpeg|png|webp|gif|bmp|tiff|mp4|webm|ogv|mov)$/i; +const STAT_CONCURRENCY = 16; + +export class ArchiveIndex { + private dirs = new Map<string, DirIndex>(); + private inFlight = new Map<string, Promise<DirIndex>>(); + private dirty = false; + + constructor(private archivesDir: string, private cachePath: string) {} + + /** Visible (non-system) directories at the archive root. */ + private listRootDirs(): string[] { + return fs.readdirSync(this.archivesDir, { withFileTypes: true }) + .filter(e => e.isDirectory() && !/^[.@_]/.test(e.name)) + .map(e => e.name); + } + + groups(): Map<string, ArchiveSource[]> { + return groupArchiveDirectories(this.listRootDirs()); + } + + private dirMtime(dir: string): number { + try { + return fs.statSync(path.join(this.archivesDir, dir)).mtimeMs; + } catch { + return 0; + } + } + + /** Recursively list relative file paths without stat()ing them. */ + private walk(absDir: string, base = ''): string[] { + let out: string[] = []; + let entries: fs.Dirent[]; + try { + entries = fs.readdirSync(absDir, { withFileTypes: true }); + } catch { + return out; + } + for (const entry of entries) { + const rel = base ? `${base}/${entry.name}` : entry.name; + if (entry.isDirectory()) out = out.concat(this.walk(path.join(absDir, entry.name), rel)); + else if (entry.isFile()) out.push(rel); + } + return out; + } + + private async buildDir(source: ArchiveSource): Promise<DirIndex> { + const started = Date.now(); + const mtimeMs = this.dirMtime(source.dir); + const absDir = path.join(this.archivesDir, source.dir); + const relPaths = this.walk(absDir); + + // Only media needs a size (the client thumbnails anything over 1MiB), and + // only highlights need an mtime (their filenames carry no date). Skipping + // the rest avoids thousands of pointless round trips. + const needsStat = (rel: string) => MEDIA_RE.test(rel) || source.kind === 'highlight'; + + const files: IndexedFile[] = relPaths.map(rel => ({ + path: `${source.dir}/${rel}`, + size: 0, + mtime: 0, + kind: source.kind, + ...(source.title ? { title: source.title } : {}), + })); + + const targets = files.filter((_, i) => needsStat(relPaths[i])); + let cursor = 0; + const worker = async () => { + while (cursor < targets.length) { + const file = targets[cursor++]; + try { + const stat = await fsp.stat(path.join(this.archivesDir, file.path)); + file.size = stat.size; + file.mtime = stat.mtimeMs; + } catch { /* raced with a delete */ } + } + }; + await Promise.all(Array.from({ length: STAT_CONCURRENCY }, worker)); + + console.log( + `[Index] ${source.dir}: ${files.length} files (${targets.length} statted) in ${((Date.now() - started) / 1000).toFixed(1)}s` + ); + this.dirty = true; + return { dir: source.dir, mtimeMs, files }; + } + + /** Index for one source directory, rebuilding only if its mtime moved. */ + private async ensureDir(source: ArchiveSource): Promise<DirIndex> { + const cached = this.dirs.get(source.dir); + const mtimeMs = this.dirMtime(source.dir); + if (cached && cached.mtimeMs === mtimeMs) return cached; + + // Collapse concurrent requests for the same directory into one walk. + const existing = this.inFlight.get(source.dir); + if (existing) return existing; + + const build = this.buildDir(source).then(index => { + this.dirs.set(source.dir, index); + this.inFlight.delete(source.dir); + return index; + }).catch(err => { + this.inFlight.delete(source.dir); + throw err; + }); + this.inFlight.set(source.dir, build); + return build; + } + + /** All files for one profile, across its base and sidecar directories. */ + async filesFor(owner: string): Promise<IndexedFile[] | null> { + const sources = this.groups().get(owner); + if (!sources?.length) return null; + const indexes = await Promise.all(sources.map(s => this.ensureDir(s))); + return indexes.flatMap(i => i.files); + } + + /** + * A cheap change signature for a profile, used by the client to decide + * whether its cached copy is stale. Built from directory mtimes only, so it + * costs one stat per source directory rather than a full walk. + */ + signatureFor(sources: ArchiveSource[]): string { + return sources.map(s => `${s.dir}:${this.dirMtime(s.dir)}`).join('|'); + } + + /** File count for a profile, if its directories are already indexed. */ + countFor(sources: ArchiveSource[]): number | null { + let total = 0; + for (const source of sources) { + const cached = this.dirs.get(source.dir); + if (!cached) return null; + total += cached.files.length; + } + return total; + } + + /** + * Best-effort profile picture. + * + * Probes the conventional filenames first (one stat each) and only falls back + * to the indexed listing, so an unindexed archive still gets a thumbnail + * without triggering a walk. + */ + thumbnailFor(owner: string, sources: ArchiveSource[]): string { + const base = sources.find(s => s.kind === 'posts') ?? sources[0]; + if (!base) return ''; + + for (const candidate of [`${owner}.jpg`, `${owner}_profile_pic.jpg`, `${owner}.jpeg`, `${owner}.png`]) { + if (fs.existsSync(path.join(this.archivesDir, base.dir, candidate))) { + return `/archives/${encodeURI(`${base.dir}/${candidate}`)}`; + } + } + + const cached = this.dirs.get(base.dir); + if (cached) { + const pick = cached.files.find(f => /_profile_pic\.jpg$/i.test(f.path)) + ?? cached.files.find(f => /\.(jpg|jpeg|png|webp)$/i.test(f.path)); + if (pick) return `/archives/${encodeURI(pick.path)}`; + } + return ''; + } + + /** Walk every directory once, in the background, so first opens are fast. */ + async warm(): Promise<void> { + const started = Date.now(); + const sources = [...this.groups().values()].flat(); + console.log(`[Index] Warming ${sources.length} source directories...`); + for (const source of sources) { + try { + await this.ensureDir(source); + } catch (err) { + console.error(`[Index] Failed to index ${source.dir}:`, err); + } + } + await this.save(); + console.log(`[Index] Warm complete in ${((Date.now() - started) / 1000).toFixed(1)}s`); + } + + async load(): Promise<void> { + try { + const raw = await fsp.readFile(this.cachePath, 'utf8'); + const parsed: DirIndex[] = JSON.parse(raw); + for (const entry of parsed) this.dirs.set(entry.dir, entry); + console.log(`[Index] Loaded ${this.dirs.size} directories from ${this.cachePath}`); + } catch { + console.log('[Index] No usable index cache; will build from scratch.'); + } + } + + async save(): Promise<void> { + if (!this.dirty) return; + try { + await fsp.writeFile(this.cachePath, JSON.stringify([...this.dirs.values()]), 'utf8'); + this.dirty = false; + console.log(`[Index] Persisted ${this.dirs.size} directories to ${this.cachePath}`); + } catch (err) { + console.warn('[Index] Could not persist index (continuing in memory):', err); + } + } +} diff --git a/src/lib/archive-patterns.test.ts b/src/lib/archive-patterns.test.ts new file mode 100644 index 0000000..6d4e32e --- /dev/null +++ b/src/lib/archive-patterns.test.ts @@ -0,0 +1,118 @@ +import { describe, expect, it } from 'vitest'; +import { parseArchiveFilename, scopedPostId } from './archive-patterns'; + +describe('parseArchiveFilename — Instagram export format', () => { + it('parses a single-image post', () => { + expect(parseArchiveFilename('2023-04-19_0ct0ber19 - CrORBIcJJbM.mp4')).toEqual({ + postId: 'CrORBIcJJbM', + date: '2023-04-19', + username: '0ct0ber19', + index: 1, + ext: 'mp4', + isStory: false, + }); + }); + + it('parses a carousel slide index', () => { + const parsed = parseArchiveFilename('2023-04-12_0ct0ber19 - Cq8LrxSJAJE - 3.jpg'); + expect(parsed).toMatchObject({ postId: 'Cq8LrxSJAJE', index: 3, ext: 'jpg' }); + }); + + it('groups a carousel under one post id', () => { + const ids = ['1', '2', '3'].map( + n => parseArchiveFilename(`2023-04-12_user - Cq8LrxSJAJE - ${n}.jpg`)!.postId, + ); + expect(new Set(ids).size).toBe(1); + }); + + it('parses caption sidecar files', () => { + expect(parseArchiveFilename('2023-04-12_0ct0ber19 - Cq8LrxSJAJE.txt')).toMatchObject({ + postId: 'Cq8LrxSJAJE', + ext: 'txt', + }); + }); + + it('flags an explicit story suffix', () => { + expect(parseArchiveFilename('2023-04-12_user - ABC - story.jpg')?.isStory).toBe(true); + }); + + it('parses the story sidecar layout (date_user - N - shortcode)', () => { + // Files in `story - <user>` carry a per-day ordinal before the shortcode. + const parsed = parseArchiveFilename('2025-10-26_0ct0ber19 - 2 - DQRuDx9iW5Q.jpg', 'stories'); + expect(parsed).toMatchObject({ date: '2025-10-26', username: '0ct0ber19', ext: 'jpg' }); + expect(parsed!.postId).toContain('DQRuDx9iW5Q'); + }); + + it('gives each story item a distinct id', () => { + const a = parseArchiveFilename('2026-08-13_u - 1 - Db-UTJcCUUr.mp4', 'stories')!.postId; + const b = parseArchiveFilename('2026-08-13_u - 2 - Db-oNJ1CWQ4.mp4', 'stories')!.postId; + expect(a).not.toBe(b); + }); +}); + +describe('parseArchiveFilename — Instaloader format', () => { + it('parses a timestamped filename', () => { + expect(parseArchiveFilename('2024-01-01_12-00-00_UTC.jpg')).toMatchObject({ + postId: '2024-01-01_12-00-00_UTC', + date: '2024-01-01', + index: 1, + }); + }); + + it('parses the carousel suffix', () => { + expect(parseArchiveFilename('2024-01-01_12-00-00_UTC_2.jpg')?.index).toBe(2); + }); + + it('flags the story suffix', () => { + expect(parseArchiveFilename('2024-01-01_12-00-00_UTC_story.jpg')?.isStory).toBe(true); + }); +}); + +describe('parseArchiveFilename — story highlights', () => { + it('parses the dateless highlight layout', () => { + expect(parseArchiveFilename('0ct0ber19 - C5dQPEYpd9W.mp4', 'highlight')).toMatchObject({ + postId: 'C5dQPEYpd9W', + username: '0ct0ber19', + ext: 'mp4', + isStory: false, + }); + }); + + it('dates a highlight from mtime when the filename has none', () => { + const mtime = Date.UTC(2024, 4, 17, 12, 0, 0); + expect(parseArchiveFilename('user - ABC.jpg', 'highlight', mtime)?.date).toBe('2024-05-17'); + }); + + it('leaves the date empty when no mtime is available', () => { + expect(parseArchiveFilename('user - ABC.jpg', 'highlight')?.date).toBe(''); + }); + + it('does not apply the loose highlight pattern outside highlight directories', () => { + // Would otherwise swallow ordinary "a - b.jpg" filenames. + expect(parseArchiveFilename('user - ABC.jpg', 'posts')).toBeNull(); + }); +}); + +describe('parseArchiveFilename — non-matching files', () => { + it.each(['0ct0ber19.jpg', 'profile_pic.jpg', 'README.md', 'no-separator.png'])( + 'returns null for %s', + name => expect(parseArchiveFilename(name)).toBeNull(), + ); +}); + +describe('scopedPostId', () => { + it('leaves base-profile ids untouched so permalinks keep working', () => { + expect(scopedPostId('Cq8LrxSJAJE', 'posts')).toBe('Cq8LrxSJAJE'); + }); + + it('namespaces sidecar ids by directory', () => { + expect(scopedPostId('C5dQ', 'highlight', 'story highlights - u - Heestory')) + .toBe('story highlights - u - Heestory/C5dQ'); + }); + + it('keeps the same shortcode distinct across sources', () => { + const inPosts = scopedPostId('ABC', 'posts'); + const inHighlight = scopedPostId('ABC', 'highlight', 'story highlights - u - H'); + expect(inPosts).not.toBe(inHighlight); + }); +}); diff --git a/src/lib/archive-patterns.ts b/src/lib/archive-patterns.ts new file mode 100644 index 0000000..0f65c8c --- /dev/null +++ b/src/lib/archive-patterns.ts @@ -0,0 +1,99 @@ +import { SourceKind } from '../types'; + +/** + * Filename parsing rules for the archive formats the viewer understands. + * + * Kept as pure functions so the riskiest part of the scanner — deriving post + * identity, date and carousel order from a filename — can be tested directly. + */ + +/** Instagram export: `2023-04-12_user - Cq8LrxSJAJE - 2.jpg` */ +export const EXPORT_RE = /^(\d{4}-\d{2}-\d{2})_(.+?) - (.+?)(?: - (\d+))?(?: - (story))?\.(.+)$/; + +/** Instaloader: `2024-01-01_12-00-00_UTC_2.jpg` */ +export const INSTALOADER_RE = /^(\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}_UTC)(?:_(\d+))?(?:_(story))?\.(.+)$/; + +/** + * Story highlight: `user - C5dQPEYpd9W.mp4` — no date prefix. + * + * Loose enough to match ordinary filenames, so it is only applied to files the + * server has already tagged as coming from a highlight directory. + */ +export const HIGHLIGHT_RE = /^(.+?) - ([A-Za-z0-9_-]+)\.(\w+)$/; + +export interface ParsedFilename { + postId: string; + /** ISO date (YYYY-MM-DD), or '' when the filename carries none. */ + date: string; + username: string; + /** 1-based carousel position. */ + index: number; + ext: string; + isStory: boolean; +} + +/** + * Parse an archive filename into post identity. + * + * `kind` selects which patterns apply; `mtime` supplies a date for formats that + * have none (highlights), so those items still sort and render sensibly. + * Returns null when no pattern matches — e.g. a profile picture. + */ +export const parseArchiveFilename = ( + fileName: string, + kind: SourceKind = 'posts', + mtime?: number, +): ParsedFilename | null => { + const exp = EXPORT_RE.exec(fileName); + if (exp) { + const [, date, username, postId, indexStr, story, ext] = exp; + return { + postId, + date, + username, + index: indexStr ? parseInt(indexStr, 10) : 1, + ext, + isStory: Boolean(story), + }; + } + + const ins = INSTALOADER_RE.exec(fileName); + if (ins) { + const [, postId, indexStr, story, ext] = ins; + return { + postId, + date: postId.split('_')[0], + username: '', + index: indexStr ? parseInt(indexStr, 10) : 1, + ext, + isStory: Boolean(story), + }; + } + + if (kind === 'highlight') { + const hl = HIGHLIGHT_RE.exec(fileName); + if (hl) { + const [, username, shortcode, ext] = hl; + return { + postId: shortcode, + date: mtime ? new Date(mtime).toISOString().split('T')[0] : '', + username, + index: 1, + ext, + isStory: false, + }; + } + } + + return null; +}; + +/** + * Namespace a post ID by its source directory. + * + * Base-profile IDs are left untouched so existing permalinks keep working; + * sidecar IDs are prefixed so a shortcode appearing in both the profile and a + * highlight stays two distinct posts. + */ +export const scopedPostId = (postId: string, kind: SourceKind, dir?: string): string => + kind === 'posts' ? postId : `${dir ?? kind}/${postId}`; diff --git a/src/lib/directory-handle.ts b/src/lib/directory-handle.ts new file mode 100644 index 0000000..b375bf8 --- /dev/null +++ b/src/lib/directory-handle.ts @@ -0,0 +1,86 @@ +import { LocalArchiveFile } from './archive-files'; + +/** + * File System Access API helpers. + * + * A `blob:` URL dies with the document, so a cached local archive whose media + * URLs are blob: URLs is worthless after a reload. A FileSystemDirectoryHandle, + * by contrast, is structured-cloneable and survives in IndexedDB — so we can + * re-open the same folder on a return visit and mint fresh URLs from it. + * + * Only Chromium implements showDirectoryPicker today; callers must handle the + * unsupported case by falling back to the <input webkitdirectory> flow. + */ + +// Minimal typings — TS's lib.dom does not ship these in the configured version. +type PermissionState = 'granted' | 'denied' | 'prompt'; +interface FileSystemHandlePermissionDescriptor { mode?: 'read' | 'readwrite' } +export interface DirectoryHandle { + name: string; + kind: 'directory'; + values(): AsyncIterableIterator<DirectoryHandle | FileHandle>; + queryPermission?(d?: FileSystemHandlePermissionDescriptor): Promise<PermissionState>; + requestPermission?(d?: FileSystemHandlePermissionDescriptor): Promise<PermissionState>; +} +interface FileHandle { + name: string; + kind: 'file'; + getFile(): Promise<File>; +} + +export const isDirectoryPickerSupported = () => + typeof window !== 'undefined' && 'showDirectoryPicker' in window; + +export const pickDirectory = async (): Promise<DirectoryHandle | null> => { + if (!isDirectoryPickerSupported()) return null; + try { + return await (window as any).showDirectoryPicker({ mode: 'read' }); + } catch (err) { + // AbortError simply means the user dismissed the picker. + return null; + } +}; + +/** + * Confirm we may still read this handle. Returns false when the user declines + * or the grant has lapsed, in which case the caller should re-prompt. + * + * `requestPermission` must be called from a user gesture, so only call this + * while handling a click. + */ +export const ensureReadPermission = async (handle: DirectoryHandle): Promise<boolean> => { + try { + if (!handle.queryPermission) return true; + if ((await handle.queryPermission({ mode: 'read' })) === 'granted') return true; + if (!handle.requestPermission) return false; + return (await handle.requestPermission({ mode: 'read' })) === 'granted'; + } catch { + return false; + } +}; + +/** + * Recursively collect every file in the directory. + * + * Paths are prefixed with the root directory's name so they line up with the + * `webkitRelativePath` values produced by <input webkitdirectory>, keeping + * cached media paths valid regardless of which picker created them. + */ +export const filesFromDirectory = async (handle: DirectoryHandle): Promise<LocalArchiveFile[]> => { + const out: LocalArchiveFile[] = []; + + const walk = async (dir: DirectoryHandle, prefix: string) => { + for await (const entry of dir.values()) { + const entryPath = `${prefix}/${entry.name}`; + if (entry.kind === 'directory') { + await walk(entry as DirectoryHandle, entryPath); + } else { + const file = await (entry as FileHandle).getFile(); + out.push(new LocalArchiveFile(file, entryPath)); + } + } + }; + + await walk(handle, handle.name); + return out; +}; diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 2819a83..abec61d 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -1,6 +1,26 @@ import { clsx, type ClassValue } from 'clsx'; import { twMerge } from 'tailwind-merge'; +import { format, parseISO } from 'date-fns'; export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); } + +/** + * Format an archive date, tolerating junk. + * + * Dates are derived from filenames and arbitrary archive JSON, and date-fns + * `format` throws a RangeError on an invalid date — which would take down the + * whole modal for one malformed name. Story highlights in particular carry no + * date at all when file mtimes are unavailable. + */ +export function formatDateSafe(date: string | undefined, pattern: string): string { + if (!date) return ''; + try { + const parsed = parseISO(date); + if (Number.isNaN(parsed.getTime())) return ''; + return format(parsed, pattern); + } catch { + return ''; + } +} diff --git a/src/main.tsx b/src/main.tsx index d5b002c..b1e7fbf 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,6 +1,7 @@ import {StrictMode} from 'react'; import {createRoot} from 'react-dom/client'; import App from './App.tsx'; +import { ErrorBoundary } from './components/ErrorBoundary'; import './index.css'; import { registerSW } from 'virtual:pwa-register'; @@ -26,6 +27,8 @@ const updateSW = registerSW({ createRoot(document.getElementById('root')!).render( <StrictMode> - <App /> + <ErrorBoundary> + <App /> + </ErrorBoundary> </StrictMode>, ); diff --git a/src/types/index.ts b/src/types/index.ts index 067292a..269accb 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,11 +1,32 @@ export interface MediaFile { name: string; + /** + * Path relative to the archive root (matching webkitRelativePath for local + * folders). Unlike `url`, this survives a page reload, so it is what the + * cache persists and what URLs are rehydrated from. + */ + path: string; url: string; type: 'image' | 'video'; index: number; size?: number; } +/** + * Which sidecar directory a post came from. Archives store reels, stories and + * each story highlight in directories alongside the base profile; the viewer + * folds them into one profile and routes them by kind. + */ +export type SourceKind = 'posts' | 'reels' | 'stories' | 'highlight'; + +export interface ArchiveSource { + kind: SourceKind; + /** Directory name relative to the archives root. */ + dir: string; + /** Highlight title, for kind === 'highlight'. */ + title?: string; +} + export interface Post { id: string; date: string; @@ -14,6 +35,10 @@ export interface Post { media: MediaFile[]; thumbnail: string; isStory?: boolean; + /** Defaults to 'posts' for archives without sidecar directories. */ + source?: SourceKind; + /** Highlight this post belongs to, for source === 'highlight'. */ + highlightTitle?: string; } /** @@ -27,11 +52,73 @@ export interface ArchiveFile { arrayBuffer(): Promise<ArrayBuffer>; stream(): ReadableStream<Uint8Array>; url?: string; + /** + * A URL pointing at this file's contents. Local files mint a disk-backed + * blob: URL (no data is read into memory); remote files return their HTTP URL. + */ + createObjectUrl(mimeHint?: string): string; + /** True when createObjectUrl() returns a blob: URL that must be revoked. */ + readonly revocable: boolean; + /** Which sidecar directory this file came from, when known. */ + source?: ArchiveSource; + /** Last-modified time (ms). Used to date items whose filename has no date. */ + mtime?: number; } export interface ServerArchive { name: string; thumbnail: string; path: string; + /** Null until the server has indexed this profile. */ + fileCount: number | null; + /** + * Directory-mtime signature. Cheap for the server to compute and sufficient + * to detect changes, unlike a file count that would require a full walk. + */ + signature?: string; + /** Base profile plus any sidecar directories folded into it. */ + sources?: ArchiveSource[]; +} + +/** One entry from GET /api/archives/:name/files. */ +export interface ServerArchiveFile { + path: string; + size: number; + mtime: number; + kind: SourceKind; + title?: string; +} + +export interface ProfileMetadata { + username: string; + fullName: string; + bio: string; + followerCount: number; + followingCount: number; + externalUrl: string; + profilePic: string | null; + allProfilePics: string[]; +} + +/** Shape of an archive entry persisted in IndexedDB. */ +export interface CacheData { + name: string; + isLocal: boolean; fileCount: number; + /** Server archives: the signature this entry was built from. */ + signature?: string; + posts: Post[]; + stories: Post[]; + /** Story-highlight items, grouped by `highlightTitle`. */ + highlights?: Post[]; + profileMetadata: ProfileMetadata; + timestamp: number; + /** + * Local archives only: whether a FileSystemDirectoryHandle was stored + * alongside this entry, meaning media URLs can be rehydrated without + * re-prompting for the folder. + */ + hasDirectoryHandle?: boolean; + /** Path of the profile picture, for rehydration (local archives). */ + profilePicPath?: string; } diff --git a/src/types/react-augment.d.ts b/src/types/react-augment.d.ts new file mode 100644 index 0000000..6bdad23 --- /dev/null +++ b/src/types/react-augment.d.ts @@ -0,0 +1,12 @@ +import 'react'; + +declare module 'react' { + interface InputHTMLAttributes<T> { + /** + * Non-standard attribute that makes a file input select a whole directory. + * Supported in Chromium and WebKit; used as the fallback picker where the + * File System Access API is unavailable. + */ + webkitdirectory?: string; + } +} diff --git a/vite.config.ts b/vite.config.ts index 60b7f04..3e2fcfa 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,11 +1,10 @@ import tailwindcss from '@tailwindcss/vite'; import react from '@vitejs/plugin-react'; import path from 'path'; -import {defineConfig, loadEnv} from 'vite'; +import {defineConfig} from 'vite'; import { VitePWA } from 'vite-plugin-pwa'; -export default defineConfig(({mode}) => { - const env = loadEnv(mode, '.', ''); +export default defineConfig(() => { return { plugins: [ react(), @@ -21,13 +20,13 @@ export default defineConfig(({mode}) => { display: 'standalone', icons: [ { - src: 'https://cdn-icons-png.flaticon.com/512/174/174855.png', + src: '/icon-512.png', sizes: '512x512', type: 'image/png', purpose: 'any maskable' }, { - src: 'https://cdn-icons-png.flaticon.com/192/174/174855.png', + src: '/icon-192.png', sizes: '192x192', type: 'image/png' } @@ -35,29 +34,12 @@ export default defineConfig(({mode}) => { }, workbox: { navigateFallbackDenylist: [/^\/api/, /^\/archives/], - globPatterns: ['**/*.{js,css,html,ico,png,svg,woff,woff2}'], - runtimeCaching: [ - { - urlPattern: /^https:\/\/fonts\.googleapis\.com\/.*/i, - handler: 'CacheFirst', - options: { - cacheName: 'google-fonts-cache', - expiration: { - maxEntries: 10, - maxAgeSeconds: 60 * 60 * 24 * 365 - }, - cacheableResponse: { - statuses: [0, 200] - } - } - } - ] + // Fonts and icons are bundled locally, so everything the shell needs + // is precached and no runtime third-party caching rule is required. + globPatterns: ['**/*.{js,css,html,ico,png,svg,woff,woff2}'] } }) ], - define: { - 'process.env.GEMINI_API_KEY': JSON.stringify(env.GEMINI_API_KEY), - }, resolve: { alias: { '@': path.resolve(__dirname, '.'),