From d2e8ac91d1d442d6789314498ca69ec30681e950 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Tue, 5 May 2026 15:26:13 +0200 Subject: [PATCH] v1.0.0: Major UI/UX Overhaul, Performance & New Features (#566) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add GeneratorTab and UI refactor/styles Introduce a full-featured GeneratorTab component for building and exporting script configuration (script selector, CPU/RAM/Disk sliders, advanced networking/features, generate/copy/export/import, and execute). Apply visual and structural UI refactors: new glass-card styles across ScriptCard, ScriptCardList, ScriptDetailModal, Terminal and Footer; update button variants and interaction classes; add Heart icon and extra footer links; update layout to use Manrope + JetBrains Mono fonts, sticky navbar, ambient backgrounds and metadata tweaks. Wire GeneratorTab into the main page and add related icon imports. Misc: small code-style/formatting adjustments and improved deriveScriptPath / handler signatures for clarity. * Add script notes, server presets & APT proxy Add persistent script notes and server presets, plus APT proxy settings and various UI/behavior improvements. - DB: new migration adds script_notes and server_presets tables and indexes; Prisma schema updated with ScriptNote and ServerPreset models. - Notes: new client component ScriptNotesPanel with CRUD using a new TRPC router (scriptNotes) and integration into ScriptDetailModal to show/manage private/shared notes. - APT proxy: new Next.js API route /api/settings/apt-proxy that reads/writes .env vars; GeneralSettingsModal and ConfigurationModal load/save the proxy and pre-fill advanced install vars. - UX/UI: add copyable install command, version badges on script cards/detail, container ID input in advanced configuration, and styling tweaks (glass-card-static). - Server/script detection: installedScripts router now attempts to resolve the actual Proxmox node name via SSH and relaxes ID parsing to numeric-only. - Notifications: appriseService extended to support Gotify endpoints and allow gotify:// scheme, and URL validation adjusted accordingly. These changes enable user-maintained notes/presets, persistent APT-cacher defaults, improved install UX, better server detection, and additional notification backend support. * Add server presets and silent batch updates Introduce server presets and silent batch update support across API, server, and UI. Added a new serverPresets TRPC router and wired it into the API root. ConfigurationModal now lets users save/load/delete presets tied to a server. InstalledScriptsTab adds a "Silent update" option, a sequential "Update All Containers" batch flow that runs updates with PHS_SILENT=1, and passes envVars into update executions. ScriptExecutionHandler (server.js) now accepts envVars for updates and injects export commands into both local and SSH update flows so environment flags (e.g. PHS_SILENT) are honored. Also added "updated" sort handling in ScriptsGrid, DownloadedScriptsTab and FilterBar, and small typing fixes in appriseService. * Use per-router Prisma client with Better SQLite3 Replace usage of the shared prisma import with per-router PrismaClient instances configured with @prisma/adapter-better-sqlite3. Add getNotesDb/getPresetsDb helpers (with DATABASE_URL fallback) and update scriptNotes and serverPresets to use the new client. Also add error handling in read endpoints to return empty arrays on DB failures and ensure create/update/delete use the new client. * Icon-only action buttons; use presets DB Convert HelpButton, ResyncButton, ServerSettingsButton and SettingsButton from labeled outline controls to compact ghost icon-only buttons with aria-labels and smaller icons/spinners for a more compact header UI. Simplify ResyncButton markup (smaller spinner/SVG, removed extra contextual text/lastSync layout) and tweak sync message styling. Add Server icon import in ServerSettingsButton. In serverPresets router, replace direct prisma calls with getPresetsDb() and use the returned db instance for all queries and mutations to support the presets DB connection. * Add quick filters, Dev/ARM badges, and CSS tweaks Introduce quick filter support and visual indicators for developer/ARM scripts. Added QuickFilter type and quickFilter to FilterState (getDefaultFilters/mergeFiltersWithDefaults) and a quick-filter UI in FilterBar (All, New, Updated, In Dev, ARM). Implemented filtering logic in ScriptsGrid and added category dev counts to surface per-category "dev" counts in CategorySidebar. Added DevBadge and ArmBadge components, used in ScriptCard and ScriptDetailModal; ScriptCard also gets a subtle violet highlight when script.is_dev is true. Fixed script path generation in GeneratorTab to include a `scripts/` prefix. Minor dark-theme adjustments to .glass-card/.glass-card-static background and border-color for improved contrast. * Add appearance settings and persist UI prefs Introduce an Appearance tab in the Settings modal to control theme, text size and layout width (default vs wide). Preferences are saved to localStorage and applied immediately via helper functions (applyTextSize/applyLayoutWidth) and a small inline script injected into to apply saved settings on first paint. Add CSS utility classes for text-size variants and wire up theme buttons (using lucide icons). Also include minor cleanup: optional chaining fix in CategorySidebar and removal of an unused import in ResyncButton. * Normalize quotes and format components Apply consistent formatting across several components: convert single quotes to double quotes, reformat the QuickFilter union type and quick-filters array in FilterBar, adjust JSX prop and className string formatting in HelpButton, ScriptCard, ServerSettingsButton, and SettingsButton. These are cosmetic/formatting changes only and do not alter runtime behavior. * Refactor Badge & CategorySidebar types/styles Normalize formatting and strengthen typings for Badge; convert single quotes to double, expand variant/type unions, and tidy JSX/props and helper badge components. Rework CategorySidebar: refactor CategoryIcon SVGs for readability, standardize className usage, improve collapsed-state layout and buttons, and ensure categories are filtered/sorted by count with correct icon mapping and counts display. Overall cleanup improves consistency, readability, and type safety across these components. * Add modal stacking and portal support Introduce a modal stacking system and portal to ensure modals escape parent stacking contexts. ModalStackProvider now computes a zIndex for each registered modal and returns an unregister handle; useRegisterModal returns the zIndex. A ModalPortal component (createPortal to document.body) was added and all modal components were updated to: capture the returned zIndex, wrap their markup in , and apply the dynamic zIndex instead of a hardcoded z-50 class. This improves correct layering of multiple modals and avoids backdrop-filter / transform stacking issues. * Wrap modals in portal and use zIndex Use ModalPortal and zIndex values from useRegisterModal across modal components to avoid hardcoded z-50 stacking. Updated ExecutionModeModal, LXCSettingsModal, PublicKeyModal, ReleaseNotesModal, SetupModal, StorageSelectionModal, and TextViewer to import ModalPortal, capture the zIndex returned by useRegisterModal, wrap modal markup in , and apply style={{ zIndex }} to backdrops; LXC result overlay uses zIndex + 10 for proper stacking. Also changed LoadingOverlay in VersionDisplay to render with createPortal(document.body) and added the import. These changes centralize stacking behavior and prevent z-index conflicts when multiple modals/overlays are present. * Use categoryIconColorMap for sidebar icons Update CategorySidebar.tsx to derive non-selected icon color classes from categoryIconColorMap for both the "template" and per-category icons. Selected icons still use text-primary; fallbacks preserve previous muted and group-hover classes to retain existing styling when a mapping is absent. * Standardize modal layout and form styles Refactor modal markup across many components to use a consistent wrapper structure and unified Tailwind utility ordering (moved zIndex to outer container, standardized backdrop and centering). Clean up form layouts: align icons, labels and inputs, normalize spacing, error styling, and button variants (including icon/ghost adjustments). Improve AuthModal and CloneCountInputModal UX (loading/error states, closer placement, validation), and normalize BackupWarningModal and other modal presentations. Update ConfigurationModal advanced UI: reorganize network fields and add/handle extra options (IPv6 static, gateway, MTU, MAC, VLAN, DNS), refine presets save/cancel flow, and apply general formatting/whitespace cleanups. * Escape env var values; update favicons & logo Fix shell escaping when building env export commands by escaping backslashes and quotes (prevents broken exported values) in ScriptExecutionHandler (two locations). Update app metadata to point to favicon files under /favicon, add site manifest, and replace the header Package icon with a next/image using the android-chrome PNG (import Image and adjust markup) for consistent asset handling. * Add favicon set and logo; remove old favicon Replace legacy root favicon.png with a full favicon set under public/favicon (android-chrome 192/512, apple-touch-icon, favicon-16x16, favicon-32x32, favicon.ico, favicon.png) and add site.webmanifest. Also add public/logo.png. This organizes favicon assets for multiple platforms and adds a webmanifest for PWA/icon declarations. * Portalize script dropdown and add outside click Render the script selector dropdown into document.body via createPortal to escape stacking/overflow contexts. Add triggerRef/dropdownRef, compute fixed position from the trigger on open, and attach an outside-click handler to close the dropdown. Also import useRef/useEffect and createPortal; preserve existing search, selection, and reset behaviors while adjusting z-index/positioning. * Update favicon and logo assets Replace favicon and logo image files with updated versions to refresh branding. Updated files: public/favicon/android-chrome-192x192.png, public/favicon/android-chrome-512x512.png, public/favicon/apple-touch-icon.png, public/favicon/favicon-16x16.png, public/favicon/favicon-32x32.png, public/favicon/favicon.ico, public/logo.png. * Add appearance modal & improve script detail UI Add an AppearanceModal and AppearanceButton to let users change theme, text size and layout width (persisted in localStorage). Enhance FilterBar with category filtering (selectedCategory, dropdown UI, counts, and outside-click handling). Heavily refactor ScriptDetailModal: layout and visual refresh, new icons, better loading/update/delete/install flows, memoized install command, improved copy behavior, keyboard navigation between scripts (using orderedSlugs + onSelectSlug), clearer status/messages, and various performance/UX tweaks. Wire DownloadedScriptsTab to pass orderedSlugs and onSelectSlug into the ScriptDetailModal. Overall small UI/UX and state-management improvements across components. * Optimize rendering, lazy-load tabs, add sync modal Performance and UX improvements: memoize computed values in InstalledScriptsTab (scriptsWithStatus, filteredScripts, uniqueServers) and use useCallback/useMemo in ScriptsGrid to avoid unnecessary re-renders. Memoize ScriptCard and ScriptCardList components and tighten their ScriptCard type alias. Introduce a new SyncModal (ResyncButton) component to run/resync scripts with a progress UI and retry/close behavior, and replace the previous ResyncButton import in page.tsx. Lazy-load heavy tab components (Downloaded, Installed, Backups, Generator) with next/dynamic and add a TabSkeleton loader; consolidate tab definitions into a memoized tabs array. Misc: small prop/prop-name fixes and minor JSX formatting adjustments. * Add Arcane script, status UI, validation & cache Multiple changes improving UX, reliability, and CI permissions: - Add scripts/tools/addon/arcane.sh: installer/update/uninstall helper for Arcane (Docker Compose), creates update helper and generates secrets. - Add ServerStatusIndicator component and integrate into header (src/app/_components/ServerStatusIndicator.tsx, src/app/page.tsx); adjust hero/layout to accommodate inline version + status. - Enhance GeneratorTab (src/app/_components/GeneratorTab.tsx): fetch full script details by slug, derive and apply default resource values from install_methods, and show an App Defaults info panel. - Harden repo provider detection (src/server/lib/repositoryUrlValidation.js/.ts): use URL parsing for hostname matching with safe fallback to 'custom'. - Tune client caching (src/trpc/query-client.ts): increase staleTime to 30min, set gcTime to 1h, and disable automatic refetches on mount/window focus/reconnect. - Update GitHub Actions permissions: node.js.yml grants contents: read; release-drafter.yml grants contents: write and pull-requests: read. These changes aim to provide better default resource handling for scripts, visible server reachability, more robust URL parsing, improved client-side cache behavior, and explicit workflow permissions. * Add suppressHydrationWarning to Add the React prop suppressHydrationWarning to the element in RootLayout (src/app/layout.tsx) to suppress hydration mismatch warnings. This helps avoid noisy console warnings when server-rendered markup and client rendering differ (e.g., due to dynamic font class injection or other runtime-only differences). * Refactor GeneratorTab layout and add SSH imports Rework GeneratorTab rendering and small UI/format fixes: tidy the scriptDetail useMemo formatting and restructure the Script Defaults block so defaults (CPU, RAM, HDD) are always shown and OS/version/variant badges render correctly. Minor formatting change to ServerStatusIndicator's fetch call and a small spacing fix on the home page title. Also add imports for getSSHService and the Server type to servers router in preparation for SSH-related functionality. * Add explicit typing for servers in indicator Annotate the `servers` variable with an explicit array type (id, name, ip, online) and cast `data?.servers` to that type, defaulting to an empty array. This clarifies TypeScript inference and prevents `servers` from being undefined for downstream logic without changing runtime behavior. * perf/cleanup: audit fixes - hoist iconMap, pin Next.js, strip console.log, lighten glass-card, fix dev badge * Refactor icons, remove debug logs, pin Next Replace the large inline SVG icon map with a compact iconPaths mapping and fallback path, simplifying CategoryIcon rendering. Tighten the dev-count badge markup/styles for better layout. Remove leftover console.debug/log statements from InstalledScriptsTab and LXCSettingsModal. Pin Next.js version to 16.2.1 in package.json (deps and devDeps). Slightly adjust dark glass-card background opacity/hover values in globals.css. * refactor: migrate server TS files to structured logger, accessibility improvements * perf: fix 14s page load - remove SSH from initial query, defer tab-specific data - getAllInstalledScripts: removed SSH batchDetectContainerTypes, use DB-only heuristic (lxc_config presence) for VM/LXC detection - Defer installedScripts + backups queries until their tab is activated - Initial batch now only fires 3 fast DB queries instead of 7 (incl. SSH) * perf: split SSH queries from tRPC batch, skip save-on-mount - Use splitLink to route servers.checkServersStatus through a separate non-batched httpLink. SSH queries no longer block fast DB queries from returning (was causing 14s+ batch response holding all data hostage). - Add initialization refs in ScriptsGrid and DownloadedScriptsTab so save-filter/view-mode POST effects skip their first fire after load, eliminating 2-4 unnecessary network requests per tab mount. * refactor: restore SSH detection for installed scripts, cache badge counts - Restore batchDetectContainerTypes SSH calls in getAllInstalledScripts (shows real VM/LXC state, not just DB heuristic) - Route getAllInstalledScripts through splitLink (non-batched) so SSH never blocks fast DB queries - Cache installed/backups badge counts in localStorage so tabs show last-known counts instantly, updated when fresh data arrives - Query still deferred until tab is visited (no eager SSH on page load) * Refactor init checks, footer, and parallel fetch Make several small refactors and updates across the app: - Expand single-line early-return checks into multi-line blocks in DownloadedScriptsTab and ScriptsGrid for clarity when skipping initial effect triggers. - Update Footer links: add separate GitHub (ProxmoxVE-Local) and GitHub (ProxmoxVE) buttons and change the site link to community-scripts.org. - Minor formatting tweaks in page.tsx (useState initializer and backups ternary) for readability. - In the scripts API router, fetch script cards and metadata in parallel via Promise.all to reduce latency and return both together. These changes improve readability and slightly optimize the scripts fetch path. * Add in-memory PB cache and invalidate on resync Introduce a simple server-side in-memory cache for PocketBase data with a 10-minute TTL to reduce PB requests for rarely-changing data. Adds getCached/setCache helpers and a shared _cache store, and exports invalidatePbCache() to clear cached entries. Apply caching to getScriptCards, getCategories, and getScriptTypes, and call invalidatePbCache() in the resyncScripts mutation so fresh data is fetched after a resync. * Update react.tsx * Show script download flow & per-node server status GeneratorTab: add detection of locally downloaded scripts (query + mutation), compute a slug set for O(1) lookup, and gate selection/execution on download state. Update script list UI to indicate downloadable items, grayscale/opacity non-downloaded entries, and show a download confirmation modal that triggers loadScript mutation and invalidates cache. Add Loader2 and AlertTriangle icons and disable Execute when the selected script isn't downloaded. ServerStatusIndicator: change from a single aggregate dot to per-node indicators showing each host name and status (green online with ping animation, red offline). Improve handling of loading vs no-configured-servers states and update tooltip/title text for clarity. * Improve updater script and minor UI tweaks Refactor update.sh to make the updater more robust and flexible: add support for specifying a target release (get_release), include tar in dependency checks, strengthen download/extract logic and error logging, improve source-dir detection, and tighten backup/restore, install/build and service start/rollback flows. Also normalize indentation and logging output and add clearer diagnostic messages on failures. Minor UI cleanups in TSX: simplify GeneratorTab conditional formatting and adjust ServerStatusIndicator class ordering. * Bump deps and add VSCode Next.js prompt setting Update multiple dependencies to newer patch/minor versions (Prisma, @tanstack/react-query, axios, better-sqlite3, dotenv, lucide-react, next, react, react-dom, vite, vitest tooling, eslint, jsdom, postcss, prettier, prisma, etc.). Replace legacy typescript-eslint package with @typescript-eslint/eslint-plugin and @typescript-eslint/parser. Add .vscode/settings.json to mark WillLuke.nextjs.hasPrompted as true to suppress the Next.js prompt in VS Code. * Normalize indentation in core scripts Reformat scripts/core/alpine-install.func and scripts/core/api.func for consistent indentation and whitespace. Changes are formatting-only (no logic changes): converted leading tabs to spaces, aligned multiline blocks, and adjusted a comment reference (error-handler → error_handler) for consistency. Improves readability and maintainability without affecting behavior. * Show/hide install command UI and service fixes UI: Add a Terminal icon, show/hide toggle, and display block for the install command in ScriptDetailModal (new showCommand state and button). Server: installedScripts - default unknown container types to LXC (safe default) and simplify VM/LXC detection comments. AppriseService: support gotifys:// (HTTPS) and gotify:// formats, select protocol correctly, and update URL regex. BackupService: include PBS namespace (--ns) when storage.namespace is configured so proxmox-backup-client commands include the namespace. ScriptDownloader: add fallback to attempt downloading a ct/.sh when install_methods is empty for CT/LXC scripts, improve returned success/message semantics, better 404-aware error messaging, and check for fallback CT script presence when scanning downloaded files. Other: add /examples to .gitignore and remove restore.log. These changes improve robustness for missing install metadata, add HTTPS Gotify support, ensure PBS namespace usage, and improve UX for viewing install commands. * Prefer local install scripts; add envVars & token Allow using local copies of helper/install scripts during development and forward environment variables and a GitHub token through the UI and websocket layer. Changes: - scripts/core/alpine-install.func & scripts/core/install.func: try to load misc/tools.func from the local scripts directory before falling back to downloading from GitHub; improved error messaging on failure. - scripts/core/build.func: resolve SCRIPT_DIR, prefer local alpine/install function files and export their contents to FUNCTIONS_FILE_PATH; fall back to remote download if local files are missing; use local install scripts for lxc-attach when available (fallback to remote). Adjusted dev MOTD path to source from /tmp. - src/app/_components/ConfigurationModal.tsx: added a password input for var_github_token (passed as GITHUB_TOKEN to mitigate API rate limits). - src/server/api/websocket/handler.ts: websocket handler now accepts an envVars object and forwards it into startScriptExecution so environment variables from the client can be supplied to script runs. Overall this improves local development workflows and enables passing custom env vars and a GitHub token to scripts. * Replace *_json with install_methods/notes Adapt code to the updated PocketBase schema by renaming install_methods_json and notes_json to install_methods and notes across services and routers. Update parsing in pbScripts.ts, mappings in scripts.ts, autoSyncService.js, and localScripts.ts, and adjust scriptDownloader fallback comment/logic to reference the new field. Also add new PBScript metadata fields (github_data, deleted_message, disable_message, last_update_commit) so the PBScript type reflects the extended record shape. * Add InstallCommandBlock and integrate installer UI Introduce a full InstallCommandBlock React component (new file) that builds, previews, and copies install commands with support for GitHub/Gitea, Alpine/Advanced modes, ARM flag, resource presets, and dev gating. Integrate it into ScriptDetailModal: compute hasAlpine and installDefaults from script.install_methods, remove the old simple install command UI/handlers, and embed the new component for non-misc scripts. Update ScriptsGrid to allow aborting batch downloads, invalidate downloaded-scripts cache after downloads, and adjust orderedSlugs passed to the modal (prefer newest when no active filters). On the server, make ScriptDownloaderService resolve dev scripts to the ProxmoxVED repository (dev-specific repo path) while preserving explicit repository_url and default repo behavior. * Fix envStr possibly undefined in InstallCommandBlock * Redesign Install section: inline node picker, remove old modals, drop My Notes * Remove bash command display, pass envVars to SSH, inline Terminal below Install * Fix envVars: always pass mode to skip whiptail dialog; fix terminal clipping * Remove dangerous source envVar, fix View button gating, clean dead onInstallScript prop chains * Tidy JSX formatting and remove extra whitespace Clean up minor JSX formatting and stray blank lines across components. Removed extra blank lines in DownloadedScriptsTab and ScriptsGrid modal props, reformatted the terminal container div in InstallCommandBlock for clearer attribute layout, and simplified conditional JSX in page.tsx to single-line renders. No functional changes intended—only stylistic/formatting adjustments to improve readability. * refactor: comprehensive code quality improvements - Move Terminal component into GeneratorTab (self-contained) - Replace all alert()/confirm() with modal dialogs - Type server prop as Server instead of any - Fix deprecated onKeyPress -> onKeyDown - Memoize stat counters + fix O(n^2) scriptCounts with Set lookups - Remove dead hasActions function (always returned true) - Decompose InstalledScriptsTab: extract Stats, Filters, StatusMessage - Add buildServerFromScript helper (deduplicates 5 identical blocks) - Fix eslint-disable blanket: targeted disables + void floating promises * fix: resolve LXCSettingsModal rootfs_size TS error blocking build - Type configData as Record so TS union includes rootfs_size - Include formatter fixes for extracted sub-components * feat: bootstrap updater - self-updating update engine Split update system into two files: - update.sh: Thin bootstrap (~100 lines) that fetches the latest update-engine.sh from main branch before executing it - update-engine.sh: Full update logic (moved from old update.sh) - UPDATER_VERSION: Version tracker for the engine How it works: 1. User runs 'bash update.sh' (unchanged workflow) 2. Bootstrap checks UPDATER_VERSION on main vs local 3. If different, downloads latest update-engine.sh from main 4. Hands off to update-engine.sh with all arguments This ensures bugfixes to the update logic reach users automatically, without requiring a manual intervention or a new app release. * fix: widen terminal - collapse sidebar to single column when terminal active - Add onTerminalChange callback to InstallCommandBlock - ScriptDetailModal switches from 2-col grid to single column when terminal runs - Sidebar (ACCESS/DETAILS/INSTALL PROFILES) moves below terminal - Remove max-w-4xl cap from Terminal.tsx so it fills full container width - Reset terminalActive state when navigating between scripts * Release prep: bump to 1.0.0-pre1 + add updater Update project to pre-release 1.0.0-pre1 and add an interactive updater. - Bump VERSION and package.json version to 1.0.0-pre1. - Add pre-release-updater.sh: interactive script to list GitHub prereleases, backup current install, download/extract a selected prerelease, install deps, run migrations, build, and restart the service. - Minor JSX formatting cleanup in ScriptDetailModal.tsx (split long className into multiple lines for readability; no functional change). * fix: correct INSTALL_DIR to /opt/ProxmoxVE-Local * fix(modal): resolve z-index race in ModalStackProvider; refactor(installed-scripts): UI overhaul - stats cards, filters, toolbar, table * feat(installed-scripts): add Restart/Reboot action; fix orphaned cleanup for missing-server records * fix(cleanup): delete SSH records with server but no container_id (Pass 1.5); feat(backups): add Create Backup via vzdump in BackupsTab * fix(generator): await refetch after download; add server selection for SSH execution - Fix download race condition: await getAllDownloadedScripts.refetch() before closing dialog and selecting script so isScriptDownloaded returns true - Add Server type import + state + useEffect to fetch /api/servers on mount - Add server selection pill buttons above Execute (auto-selects single server) - Execute button label changes to 'Execute on ' or 'Execute Locally' - Pass mode + server to Terminal for correct local vs SSH execution - Add selectedServer to handleExecute useCallback dependencies * fix(generator): restore missing setTimeout body (syntax error) * style: auto-format BackupsTab and GeneratorTab * feat(pre2): ProxmoxVED toggle, floating shell dialog, settings UI polish - Settings: remove Theme block (use AppearanceButton instead), restyle tabs to match main nav pill style - Settings: add ProxmoxVED / Dev Scripts toggle (default: off); persisted in localStorage; StorageEvent keeps ScriptsGrid in sync without context - ScriptsGrid: filter is_dev scripts from Newest carousel and full grid when ProxmoxVED is disabled; add showDevScripts -> FilterBar prop - FilterBar: hide 'In Dev' quick-filter pill when ProxmoxVED is disabled - ShellContext: new React context (open/minimize/restore/close) for shell sessions - FloatingShell: new floating dialog with minimize-to-pill, maximize, close; persists across tab switches; renders via createPortal - InstalledScriptsTab: delegate shell open to useShell() context instead of local inline terminal; remove inline shell JSX - page.tsx: wrap Home in ShellProvider, render FloatingShell at page level * feat: implement execute_in container picker for addon scripts - Add execute_in?: string[] | null to Script type - Forward execute_in from PocketBase via pbToScript() mapper - Add listContainersOnServer tRPC query (pct list + qm list via SSH) - GeneratorTab: show container/VM picker when script has execute_in flags - lxc, pbs, pmg -> show LXC picker (pbs/pmg pin matching containers) - vm -> show VM picker - Passes CTID env var to the script on execution - Picker resets on server or script change * fix(generator): move container-reset useEffect after selectedSlug declaration * feat: add prerelease update channel toggle + bump version to 1.0.0-pre2 - Add ALLOW_PRERELEASE env var to env.js - Add /api/settings/prerelease GET/POST route (persists to .env) - version.ts: getVersionStatus + getLatestRelease use /releases (all) when ALLOW_PRERELEASE=true, otherwise /releases/latest (stable only) - GitHubRelease interface: add prerelease boolean field - GeneralSettingsModal: add Update Channel toggle in General tab - VERSION: bump to 1.0.0-pre2 - page.tsx: destructure isAuthenticated from useAuth() - GeneratorTab.tsx: move container-reset useEffect after selectedSlug decl * fix(page): destructure logout from useAuth * feat: floating terminal for backup + New Backup dialog + fixes - FloatingShell: support backup task mode (isBackup Terminal when session.backupStorage is set); adds HardDrive icon, onComplete callback - ShellContext: extend ShellSession with backupStorage, title, onComplete - BackupsTab: replace blocking createBackupMutation with FloatingShell backup; add 'New Backup' dialog (server -> container -> storage selection) - InstalledScriptsTab: fix fetchStorages to not show blocking error modal - VERSION: bump to 1.0.0-pre3, fixed UTF-8 BOM encoding * fix: keep Terminal mounted on minimize, add drag-to-move support - FloatingShell is now a single always-mounted window instead of conditional branches — visibility:hidden on minimize keeps the xterm.js WebSocket alive so 'starting shell session' no longer appears on restore - Header acts as drag handle: mouse-drag repositions the floating window freely so the background remains usable - Maximize still covers full viewport; restore returns to last dragged position (or CSS-centered if never dragged) * fix: Server.host -> Server.ip in BackupsTab new backup dialog * fix: use lxc/vm fields from listContainersOnServer (no containers/vmid) * fix: bundle core.func+error-handler.func into FUNCTIONS_FILE_PATH * fix: typed container list in New Backup dialog (no unsafe any) * feat: v1.0.0-pre4 - multi-session shell, multi-LXC backup, auto-discover after backup, local generator command, addon execute_in * feat: add Refresh button to Downloaded Scripts tab * fix: add executeInContainer to WebSocketMessage typedef * fix: installationId typedef + verbose logo error logging * fix: add JSDoc type annotations to implicit any callback params * fix: guard against undefined results[j] in logo cache loop * Refactor Backups modal and minor UI cleanups Refactor the Backups create dialog for clarity and better state handling: reorganized JSX, normalized formatting, extract typed container lists, and ensure closing the dialog clears selected storage. Adjust server/container/storage selection flows and button behaviors to improve readability and UX. Also apply small readability/formatting fixes in DownloadedScriptsTab (expand onClick), FloatingShell (simplify Math.min expression), and GeneratorTab (wrap ternary for containerId). These are mostly non-functional cleanup and UI clarity changes across the mentioned components. * feat: execute_in container routing + install UI overhaul - GeneratorTab: remove && !!selectedServer from execInContainer so addon scripts work in local mode (pct exec works without SSH) - InstallCommandBlock: add executeIn prop + container picker via tRPC listContainersOnServer; pass executeInContainer/containerId/containerType to Terminal so addon scripts run inside the container, not on the host - InstallCommandBlock: remove GitHub/Gitea source toggle; promote My Defaults + App Defaults to top-level tabs alongside Default/Alpine/Advanced - ScriptDetailModal: pass execute_in to InstallCommandBlock; add Runs In badges to Details panel * fix: GitHub PAT not applied at runtime + light mode contrast - route.ts: also set process.env.GITHUB_TOKEN in memory after writing to .env file - tokens saved via UI now take effect immediately without restart - github.ts: read process.env.GITHUB_TOKEN directly instead of the frozen t3-env snapshot (env.GITHUB_TOKEN is captured once at startup) - github.ts: switch Authorization to 'Bearer' scheme (works for both classic ghp_ and fine-grained github_pat_ tokens per GitHub docs) - GeneralSettingsModal: fix text-success-foreground / text-error-foreground -> text-success / text-error so messages are readable in light mode (success-foreground is white, which is invisible on bg-success/10) - GeneralSettingsModal: update PAT description to mention both token types * fix: unblock pre-release updater TypeScript build + cut pre5 - InstallCommandBlock: fix trpc input type for listContainersOnServer (serverId now numeric fallback instead of string) - InstallCommandBlock: align container list mapping to API response shape (use id/name instead of vmid) - InstallCommandBlock: narrow running.containerType type to 'lxc' | 'vm' - VERSION: bump to 1.0.0-pre5 - package.json: bump app version to 1.0.0-pre5 (installer/build logs) This resolves the pre4 updater build failures reported in PR comments. * feat: backup dialog UX + generator local-node workflow fixes Backups: - render create-backup dialog in portal with full-screen backdrop - fix multi-select flow: explicit steps (server -> containers -> storage) - keep container selection until user clicks Continue - show storage free capacity (GB) from pvesm status - show estimated max backup size from selected container disk templates Generator: - remove 'This machine (local)' execution option - require node selection; execute over SSH only - generated command now always uses local script path (scripts/...) instead of remote curl command - add install mode tabs: Default / My Defaults / App Defaults / Advanced - apply mode to command/envVars (mode=default|mydefaults|appdefaults|generated) - use selected container resources as template defaults (cpu/ram/disk) API: - getBackupStorages now enriches storages with available/used/total GB - add getContainersResourceTemplates for per-container cpu/ram/disk templates * Add advanced options to generator tab Expose many new advanced/container, network and feature settings in GeneratorTab: password, tags, timezone, container/template storage, protection, IPv6 method/ip/gateway, search domain, nameserver, TUN, keyctl, mknod, verbose, APT cacher (with IP), mount filesystems and SSH authorized key. Wire these into command overrides, env-vars generation, export/import and reset logic. UI updated with grouped sections, IPv6 selector buttons, new inputs and toggles, and FieldInput now supports input type and hint. Also minor refactor to templateDefaults lookup formatting. * Format JSX in BackupsTab and GeneralSettingsModal Apply code style/formatting updates across BackupsTab.tsx and GeneralSettingsModal.tsx: reflow JSX props and elements, add consistent line breaks/commas and minor spacing adjustments (including a spacing fix in the GitHub token text). No logic or behavioral changes. * feat: filter addon/pve types from sync, display, and script loading - Add UNSUPPORTED_TYPES constant ['addon', 'pve'] in scripts router - Filter these types from getScriptCards, getScriptCardsWithCategories - Block loadScript and loadMultipleScripts for unsupported types - Remove addon/pve filter options from FilterBar UI - Remove unused Wrench/Server icon imports from FilterBar * chore: bump version to 1.0.0-pre6 * fix: add pbs_username to hand-written PBSStorageCredential type * chore: update dependencies and regenerate lockfile * feat: hide dev count badge in category sidebar when dev mode is off * feat: add DHCP/STATIC IPv4 mode pills to generator, show IP/gateway fields only when static * Fix CategorySidebar JSX and format GeneratorTab Close a mismatched in CategorySidebar so the inner "dev" badge is properly nested and rendered. Also reformat several single-line conditionals and adjust className ordering/formatting in GeneratorTab for improved readability; these are stylistic changes with no functional behavior changes. * fix: keep floating shell windows mounted when minimized to preserve session state Instead of unmounting FloatingShellWindow (which destroyed xterm + WebSocket), all session windows are now kept in the DOM and hidden via CSS (display: none) when minimized. This preserves the terminal session, history, and WebSocket connection across minimize/restore cycles. * feat: add floating shell access to Scripts, Downloaded, and Detail modal Shell buttons now appear everywhere an installed container is recognized: - ScriptDetailModal sidebar: 'Containers' section shows each matching installed container with a direct Shell button (covers Scripts + Downloaded tabs via the modal) - ScriptsGrid / ScriptCard: shell button appears on cards (card and list view) for scripts that have an installed container - DownloadedScriptsTab: same shell button on cards and list rows - ScriptCardList: shell button in the header row alongside website link Matching is done by normalizing the installed script_name against the card slug (lowercase, strip extension, replace non-alphanumeric with dash). Only containers with a valid container_id and non-failed status are shown. * fix: restore downloaded addon/pve scripts visibility in Downloaded tab The UNSUPPORTED_TYPES filter was applied at the router level in getScriptCardsWithCategories and getScriptCards. Since DownloadedScriptsTab builds its list by cross-referencing local files against the GitHub cards from this endpoint, addon/pve scripts that were already downloaded locally were invisibly dropped. Fix: remove the filter from the router, apply it client-side in ScriptsGrid's combinedScripts memo instead. This means: - Scripts grid: still hides addon/pve (can't install them) - Downloaded tab: shows ALL locally downloaded scripts regardless of type - loadScript / loadMultipleScripts: still block new addon/pve downloads * Format imports and object indentation Reformat code in DownloadedScriptsTab.tsx and ScriptDetailModal.tsx for readability: split the React import across multiple lines, adjust placement/indentation of eslint-disable comments, and reflow object property lines in ScriptDetailModal. These are stylistic changes only and do not modify runtime behavior. * feat: v1.0.0-pre7 - updater channel fix, configurable detection tag, static IP guard Fixes: - fix: updater no longer downgrades prerelease installs to stable version.ts executeUpdate now uses the v1.0.0 branch when VERSION contains 'pre', so prerelease users always get the prerelease update.sh - fix: static IP guard in build.func - if NET is the literal word 'static' (no CIDR entered), fall back to dhcp with a warning instead of creating a container with ip=static - fix: ConfigurationModal no longer sends var_net=static to the script when no IP address was entered in the static IP field Features: - feat: configurable container detection tag (Settings > General) Users can override 'community-script' with any tag (e.g. 'cs') Stored in .env as CONTAINER_DETECTION_TAG, used by autoDetectLXCContainers Version: - bump VERSION + package.json to 1.0.0-pre7 * fix: preserve downloaded scripts across updates - pre-release updater now backs up/restores scripts ct/tools/vm/vw - prevent rsync from overwriting downloaded script directories - include scripts/vw in update-engine backup/restore/rollback/excludes This prevents downloaded scripts from disappearing after update and explains why only bundled defaults (e.g. debian + arcane) remained. * feat(ui): unify floating terminals and enable addon execution * chore: bump version to 1.0.0-pre8 * fix(updater): skip engine self-update gracefully when UPDATER_VERSION not on main (pre-release) * fix: SSH interactive input, suppress rsync output, 4-theme picker, sort containers by ID * fix(ui): overhaul terminal themes with strong contrast and real preview cards * feat(pre9): execute_in policy matrix, full type visibility, lxc-only generator * fix(pre9): make VM/LXC status and type detection server-scoped --------- Co-authored-by: MickLesk --- .github/workflows/node.js.yml | 26 +- .github/workflows/release-drafter.yml | 6 +- .gitignore | 1 + .vscode/settings.json | 3 + ProxmoxVE-Local.code-workspace | 13 + UPDATER_VERSION | 1 + VERSION | 2 +- json/files.txt | 405 -- package-lock.json | 3323 ++++++++--------- package.json | 69 +- pre-release-updater.sh | 395 ++ .../migration.sql | 37 + .../migration.sql | 2 + prisma/schema.prisma | 37 + public/favicon.png | Bin 65754 -> 0 bytes public/favicon/android-chrome-192x192.png | Bin 0 -> 59275 bytes public/favicon/android-chrome-512x512.png | Bin 0 -> 315272 bytes public/favicon/apple-touch-icon.png | Bin 0 -> 52933 bytes public/favicon/favicon-16x16.png | Bin 0 -> 969 bytes public/favicon/favicon-32x32.png | Bin 0 -> 2903 bytes public/favicon/favicon.ico | Bin 0 -> 15406 bytes public/favicon/favicon.png | Bin 0 -> 1608 bytes public/favicon/site.webmanifest | 1 + public/logo.png | Bin 0 -> 254089 bytes restore.log | 10 - scripts/cache-logos.ts | 2 +- scripts/core/alpine-install.func | 309 +- scripts/core/api.func | 1668 ++++----- scripts/core/build.func | 288 +- scripts/core/core.func | 38 +- scripts/core/error-handler.func | 18 +- scripts/core/install.func | 605 +-- scripts/core/tools.func | 92 +- scripts/tools/addon/arcane.sh | 220 ++ server.js | 216 +- src/app/_components/AppearanceButton.tsx | 27 + src/app/_components/AppearanceModal.tsx | 216 ++ src/app/_components/AuthGuard.tsx | 64 +- src/app/_components/AuthModal.tsx | 183 +- src/app/_components/AuthProvider.tsx | 27 + src/app/_components/BackupWarningModal.tsx | 89 +- src/app/_components/BackupsTab.tsx | 559 ++- src/app/_components/Badge.tsx | 190 +- src/app/_components/CategorySidebar.tsx | 490 +-- src/app/_components/CloneCountInputModal.tsx | 179 +- src/app/_components/ConfigurationModal.tsx | 2044 +++++----- src/app/_components/ConfirmationModal.tsx | 149 +- src/app/_components/DiffViewer.tsx | 126 +- src/app/_components/DownloadedScriptsTab.tsx | 207 +- src/app/_components/ErrorModal.tsx | 119 +- src/app/_components/ExecutionModeModal.tsx | 375 +- src/app/_components/FilterBar.tsx | 169 +- src/app/_components/FloatingShell.tsx | 323 ++ src/app/_components/Footer.tsx | 73 +- src/app/_components/GeneralSettingsModal.tsx | 2489 ++++++------ src/app/_components/GeneratorTab.tsx | 1975 ++++++++++ src/app/_components/HelpButton.tsx | 41 +- src/app/_components/HelpModal.tsx | 122 +- src/app/_components/InstallCommandBlock.tsx | 758 ++++ src/app/_components/InstalledScriptsTab.tsx | 1818 +++++---- src/app/_components/LXCSettingsModal.tsx | 1199 +++--- src/app/_components/LoadingModal.tsx | 129 +- src/app/_components/PBSCredentialsModal.tsx | 412 +- src/app/_components/PublicKeyModal.tsx | 330 +- src/app/_components/ReleaseNotesModal.tsx | 399 +- src/app/_components/ResyncButton.tsx | 95 +- src/app/_components/ScriptCard.tsx | 96 +- src/app/_components/ScriptCardList.tsx | 81 +- src/app/_components/ScriptDetailModal.tsx | 1630 ++++---- src/app/_components/ScriptNotesPanel.tsx | 238 ++ src/app/_components/ScriptVersionModal.tsx | 403 +- src/app/_components/ScriptsGrid.tsx | 281 +- src/app/_components/ServerSettingsButton.tsx | 53 +- src/app/_components/ServerStatusIndicator.tsx | 70 + src/app/_components/ServerStoragesModal.tsx | 375 +- src/app/_components/SettingsButton.tsx | 35 +- src/app/_components/SettingsModal.tsx | 198 +- src/app/_components/SetupModal.tsx | 311 +- src/app/_components/ShellContext.tsx | 123 + src/app/_components/StorageSelectionModal.tsx | 277 +- src/app/_components/SyncModal.tsx | 301 ++ src/app/_components/Terminal.tsx | 300 +- src/app/_components/TextViewer.tsx | 357 +- .../_components/UpdateConfirmationModal.tsx | 359 +- src/app/_components/VersionDisplay.tsx | 315 +- src/app/_components/filterUtils.ts | 4 + .../InstalledScriptsFilters.tsx | 73 + .../InstalledScriptsStats.tsx | 91 + .../installed-scripts/StatusMessage.tsx | 77 + .../_components/modal/ModalStackProvider.tsx | 89 +- src/app/_components/ui/button.tsx | 27 +- src/app/api/settings/apt-proxy/route.ts | 52 + src/app/api/settings/detection-tag/route.ts | 48 + src/app/api/settings/github-token/route.ts | 4 + src/app/api/settings/prerelease/route.ts | 57 + src/app/layout.tsx | 46 +- src/app/page.tsx | 614 +-- src/env.js | 4 + src/server/api/root.ts | 4 + src/server/api/routers/backups.ts | 67 + src/server/api/routers/installedScripts.ts | 467 ++- src/server/api/routers/pbsCredentials.ts | 6 +- src/server/api/routers/scriptNotes.ts | 98 + src/server/api/routers/scripts.ts | 77 +- src/server/api/routers/serverPresets.ts | 140 + src/server/api/routers/servers.ts | 45 + src/server/api/routers/version.ts | 61 +- src/server/api/websocket/handler.ts | 11 +- src/server/database-prisma.ts | 4 + src/server/db.ts | 3 +- src/server/services/appriseService.js | 51 +- src/server/services/autoSyncService.js | 4 +- src/server/services/backupService.ts | 9 +- src/server/services/github.ts | 22 +- src/server/services/githubJsonService.ts | 47 +- src/server/services/localScripts.ts | 8 +- src/server/services/logoCacheService.ts | 11 +- src/server/services/pbScripts.ts | 66 +- src/server/services/repositoryService.ts | 11 +- src/server/services/scriptDownloader.js | 54 +- src/server/ssh-execution-service.js | 13 +- src/styles/globals.css | 395 +- src/trpc/query-client.ts | 6 +- src/trpc/react.tsx | 42 +- src/types/script.ts | 3 + update-engine.sh | 1134 ++++++ update.sh | 1117 +----- 127 files changed, 21489 insertions(+), 12639 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 ProxmoxVE-Local.code-workspace create mode 100644 UPDATER_VERSION delete mode 100644 json/files.txt create mode 100644 pre-release-updater.sh create mode 100644 prisma/migrations/20260401113636_add_notes_and_presets/migration.sql create mode 100644 prisma/migrations/20260429000000_add_pbs_username/migration.sql delete mode 100644 public/favicon.png create mode 100644 public/favicon/android-chrome-192x192.png create mode 100644 public/favicon/android-chrome-512x512.png create mode 100644 public/favicon/apple-touch-icon.png create mode 100644 public/favicon/favicon-16x16.png create mode 100644 public/favicon/favicon-32x32.png create mode 100644 public/favicon/favicon.ico create mode 100644 public/favicon/favicon.png create mode 100644 public/favicon/site.webmanifest create mode 100644 public/logo.png delete mode 100644 restore.log create mode 100644 scripts/tools/addon/arcane.sh create mode 100644 src/app/_components/AppearanceButton.tsx create mode 100644 src/app/_components/AppearanceModal.tsx create mode 100644 src/app/_components/FloatingShell.tsx create mode 100644 src/app/_components/GeneratorTab.tsx create mode 100644 src/app/_components/InstallCommandBlock.tsx create mode 100644 src/app/_components/ScriptNotesPanel.tsx create mode 100644 src/app/_components/ServerStatusIndicator.tsx create mode 100644 src/app/_components/ShellContext.tsx create mode 100644 src/app/_components/SyncModal.tsx create mode 100644 src/app/_components/installed-scripts/InstalledScriptsFilters.tsx create mode 100644 src/app/_components/installed-scripts/InstalledScriptsStats.tsx create mode 100644 src/app/_components/installed-scripts/StatusMessage.tsx create mode 100644 src/app/api/settings/apt-proxy/route.ts create mode 100644 src/app/api/settings/detection-tag/route.ts create mode 100644 src/app/api/settings/prerelease/route.ts create mode 100644 src/server/api/routers/scriptNotes.ts create mode 100644 src/server/api/routers/serverPresets.ts create mode 100644 update-engine.sh diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index aafb123..5bd1669 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -5,16 +5,18 @@ name: Node.js CI on: push: - branches: [ "main" ] + branches: ["main"] pull_request: - branches: [ "main" ] + branches: ["main"] + +permissions: + contents: read permissions: contents: read jobs: build: - runs-on: ubuntu-latest strategy: @@ -23,12 +25,12 @@ jobs: # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ steps: - - uses: actions/checkout@v4 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - cache: 'npm' - - run: npm ci - - run: npm run build --if-present - - run: npm test + - uses: actions/checkout@v4 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: "npm" + - run: npm ci + - run: npm run build --if-present + - run: npm test diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index ec63c28..6d5d3e4 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -4,7 +4,11 @@ on: push: branches: - main - workflow_dispatch: + workflow_dispatch: + +permissions: + contents: write + pull-requests: read permissions: contents: write diff --git a/.gitignore b/.gitignore index dbc949a..dd7c168 100644 --- a/.gitignore +++ b/.gitignore @@ -60,3 +60,4 @@ server.log # idea files .idea /generated/prisma +/examples diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..32e07b4 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "WillLuke.nextjs.hasPrompted": true +} \ No newline at end of file diff --git a/ProxmoxVE-Local.code-workspace b/ProxmoxVE-Local.code-workspace new file mode 100644 index 0000000..013094d --- /dev/null +++ b/ProxmoxVE-Local.code-workspace @@ -0,0 +1,13 @@ +{ + "folders": [ + { + "path": "." + }, + { + "path": "../ProxmoxVE-Frontend" + } + ], + "settings": { + "WillLuke.nextjs.hasPrompted": true + } +} \ No newline at end of file diff --git a/UPDATER_VERSION b/UPDATER_VERSION new file mode 100644 index 0000000..3eefcb9 --- /dev/null +++ b/UPDATER_VERSION @@ -0,0 +1 @@ +1.0.0 diff --git a/VERSION b/VERSION index 659914a..3153fa4 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.5.8 +1.0.0-pre9 \ No newline at end of file diff --git a/json/files.txt b/json/files.txt deleted file mode 100644 index 651acf6..0000000 --- a/json/files.txt +++ /dev/null @@ -1,405 +0,0 @@ -2fauth.json -actualbudget.json -add-iptag.json -add-netbird-lxc.json -add-tailscale-lxc.json -adguard.json -adventurelog.json -agentdvr.json -all-templates.json -alpine-it-tools.json -alpine-tinyauth.json -alpine.json -apache-cassandra.json -apache-couchdb.json -apache-guacamole.json -apache-tika.json -apache-tomcat.json -apt-cacher-ng.json -archivebox.json -archlinux-vm.json -argus.json -aria2.json -asterisk.json -audiobookshelf.json -authelia.json -autobrr.json -autocaliweb.json -babybuddy.json -backrest.json -baikal.json -bar-assistant.json -barcode-buddy.json -bazarr.json -beszel.json -bitmagnet.json -blocky.json -booklore.json -bookstack.json -bunkerweb.json -bytestash.json -caddy.json -casaos.json -changedetection.json -channels.json -checkmk.json -clean-lxcs.json -clean-orphaned-lvm.json -cleanuparr.json -cloudflare-ddns.json -cloudflared.json -cloudreve.json -cockpit.json -coder-code-server.json -commafeed.json -configarr.json -convertx.json -copyparty.json -cosmos.json -crafty-controller.json -cron-update-lxcs.json -cronicle.json -cross-seed.json -crowdsec.json -cryptpad.json -daemonsync.json -dashy.json -debian-13-vm.json -debian-vm.json -debian.json -deconz.json -deluge.json -docker-vm.json -docker.json -dockge.json -docmost.json -documenso.json -dolibarr.json -dotnetaspwebapi.json -duplicati.json -elementsynapse.json -emby.json -emqx.json -ersatztv.json -esphome.json -evcc.json -excalidraw.json -execute.json -fenrus.json -fhem.json -filebrowser-quantum.json -filebrowser.json -fileflows.json -firefly.json -flaresolverr.json -flowiseai.json -fluid-calendar.json -forgejo.json -freepbx.json -freshrss.json -frigate.json.bak -fstrim.json -fumadocs.json -gatus.json -ghost.json -ghostfolio.json -gitea-mirror.json -gitea.json -glance.json -glances.json -globaleaks.json -glpi.json -go2rtc.json -goaway.json -gokapi.json -gotify.json -grafana.json -graylog.json -grist.json -grocy.json -guardian.json -habitica.json -haos-vm.json -headscale.json -healthchecks.json -heimdall-dashboard.json -hev-socks5-server.json -hivemq.json -homarr.json -homeassistant.json -homebox.json -homebridge.json -homepage.json -homer.json -hortusfox.json -host-backup.json -huntarr.json -hyperhdr.json -hyperion.json -immich.json -influxdb.json -inspircd.json -inventree.json -iobroker.json -itsm-ng.json -iventoy.json -jackett.json -jeedom.json -jellyfin.json -jellyseerr.json -jenkins.json -joplin-server.json -jupyternotebook.json -kapowarr.json -karakeep.json -kasm.json -kavita.json -kernel-clean.json -kernel-pin.json -keycloak.json -kimai.json -koillection.json -kometa.json -komga.json -komodo.json -kubo.json -lazylibrarian.json -leantime.json -librespeed-rust.json -libretranslate.json -lidarr.json -limesurvey.json -linkstack.json -linkwarden.json -listmonk.json -litellm.json -lldap.json -lubelogger.json -lxc-delete.json -lyrionmusicserver.json -mafl.json -magicmirror.json -managemydamnlife.json -mariadb.json -matterbridge.json -mattermost.json -mealie.json -mediamanager.json -mediamtx.json -medusa.json -meilisearch.json -memos.json -meshcentral.json -metadata.json -metube.json -microcode.json -mikrotik-routeros.json -minarca.json -minio.json -mongodb.json -monica.json -monitor-all.json -motioneye.json -mqtt.json -myip.json -mylar3.json -myspeed.json -mysql.json -n8n.json -navidrome.json -neo4j.json -netbox.json -netdata.json -nextcloud-vm.json -nextcloudpi.json -nextpvr.json -nginxproxymanager.json -nic-offloading-fix.json -nocodb.json -node-red.json -nodebb.json -notifiarr.json -npmplus.json -ntfy.json -nxwitness.json -nzbget.json -oauth2-proxy.json -octoprint.json -odoo.json -olivetin.json -ollama.json -omada.json -ombi.json -omv.json -onedev.json -onlyoffice.json -open-archiver.json -opengist.json -openhab.json -openobserve.json -openproject.json -openwebui.json -openwrt-vm.json -openziti-controller.json -openziti-tunnel.json -ots.json -outline.json -overseerr.json -owncast.json -owncloud-vm.json -pairdrop.json -palmr.json -paperless-ai.json -paperless-gpt.json -paperless-ngx.json -part-db.json -paymenter.json -pbs-microcode.json -pbs4-upgrade.json -peanut.json -pelican-panel.json -pelican-wings.json -pf2etools.json -photoprism.json -phpipam.json -phpmyadmin.json -pialert.json -pihole.json -pimox-haos-vm.json -planka.json -plant-it.json -plex.json -pocketbase.json -pocketid.json -podman-homeassistant.json -podman.json -post-pbs-install.json -post-pmg-install.json -post-pve-install.json -postgresql.json -privatebin.json -projectsend.json -prometheus-alertmanager.json -prometheus-blackbox-exporter.json -prometheus-paperless-ngx-exporter.json -prometheus-pve-exporter.json -prometheus.json -prowlarr.json -proxmox-backup-server.json -proxmox-datacenter-manager.json -proxmox-mail-gateway.json -ps5-mqtt.json -pterodactyl-panel.json -pterodactyl-wings.json -pulse.json -pve-privilege-converter.json -pve-scripts-local.json -qbittorrent.json -rabbitmq.json -radarr.json -radicale.json -rclone.json -rdtclient.json -reactive-resume.json -readeck.json -recyclarr.json -redis.json -redlib.json -resiliosync.json -revealjs.json -runtipi.json -rustdeskserver.json -rwmarkable.json -sabnzbd.json -salt.json -scaling-governor.json -scraparr.json -searxng.json -seelf.json -semaphore.json -sftpgo.json -shinobi.json -signoz.json -silverbullet.json -slskd.json -smokeping.json -snipeit.json -sonarqube.json -sonarr.json -spoolman.json -sqlserver2022.json -stirling-pdf.json -streamlink-webui.json -stylus.json -suwayomi-server.json -swizzin.json -syncthing.json -tandoor.json -tasmoadmin.json -tasmocompiler.json -tautulli.json -tdarr.json -teamspeak-server.json -technitiumdns.json -teddycloud.json -telegraf.json -the-lounge.json -threadfin.json -tianji.json -traccar.json -tracktor.json -traefik.json -transmission.json -trilium.json -tududi.json -tunarr.json -turnkey.json -twingate-connector.json -typesense.json -ubuntu.json -ubuntu2204-vm.json -ubuntu2404-vm.json -ubuntu2504-vm.json -uhf.json -umami.json -umbrel-os-vm.json -umlautadaptarr.json -unbound.json -unifi.json -unmanic.json -update-lxcs.json -update-repo.json -upsnap.json -uptimekuma.json -urbackupserver.json -vaultwarden.json -verdaccio.json -versions.json -victoriametrics.json -vikunja.json -wallos.json -warracker.json -wastebin.json -watcharr.json -watchyourlan.json -wavelog.json -wazuh.json -web-check.json -webmin.json -wger.json -whisparr.json -wikijs.json -wireguard.json -wizarr.json -wordpress.json -yt-dlp-webui.json -yunohost.json -zabbix.json -zammad.json -zerotier-one.json -zigbee2mqtt.json -zipline.json -zitadel.json -zoraxy.json -zot-registry.json -zwave-js-ui.json diff --git a/package-lock.json b/package-lock.json index 18a61e0..4bbf33d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,44 +1,44 @@ { "name": "pve-scripts-local", - "version": "0.5.7", + "version": "1.0.0-pre6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pve-scripts-local", - "version": "0.5.7", + "version": "1.0.0-pre6", "hasInstallScript": true, "dependencies": { - "@prisma/adapter-better-sqlite3": "^7.6.0", - "@prisma/client": "^7.6.0", + "@prisma/adapter-better-sqlite3": "^7.8.0", + "@prisma/client": "^7.8.0", "@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-slot": "^1.2.4", "@t3-oss/env-nextjs": "^0.13.11", "@tailwindcss/typography": "^0.5.19", - "@tanstack/react-query": "^5.96.0", - "@trpc/client": "^11.16.0", - "@trpc/react-query": "^11.16.0", - "@trpc/server": "^11.16.0", + "@tanstack/react-query": "^5.100.6", + "@trpc/client": "^11.17.0", + "@trpc/react-query": "^11.17.0", + "@trpc/server": "^11.17.0", "@types/react-syntax-highlighter": "^15.5.13", "@types/ws": "^8.18.1", "@xterm/addon-fit": "^0.11.0", "@xterm/addon-web-links": "^0.12.0", "@xterm/xterm": "^6.0.0", - "axios": "^1.14.0", + "axios": "^1.15.2", "bcryptjs": "^3.0.3", - "better-sqlite3": "^12.8.0", + "better-sqlite3": "^12.9.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cron-validator": "^1.4.0", - "dotenv": "^17.3.1", + "dotenv": "^17.4.2", "jsonwebtoken": "^9.0.3", - "lucide-react": "^1.7.0", - "next": ">=16.2.1", + "lucide-react": "^1.14.0", + "next": "16.2.4", "node-cron": "^4.2.1", "node-pty": "^1.1.0", "pocketbase": "^0.26.8", - "react": "^19.2.4", - "react-dom": "^19.2.4", + "react": "^19.2.5", + "react-dom": "^19.2.5", "react-markdown": "^10.1.0", "react-syntax-highlighter": "^16.1.1", "refractor": "^5.0.0", @@ -47,39 +47,40 @@ "strip-ansi": "^7.2.0", "superjson": "^2.2.6", "tailwind-merge": "^3.5.0", - "vite": "^8.0.3", + "vite": "^8.0.10", "ws": "^8.20.0", "zod": "^4.3.6" }, "devDependencies": { - "@tailwindcss/postcss": "^4.2.2", + "@tailwindcss/postcss": "^4.2.4", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", "@testing-library/user-event": "^14.6.1", "@types/bcryptjs": "^3.0.0", "@types/better-sqlite3": "^7.6.13", "@types/jsonwebtoken": "^9.0.10", - "@types/node": "^24.10.9", + "@types/node": "^25.6.0", "@types/node-cron": "^3.0.11", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", + "@typescript-eslint/eslint-plugin": "^8.59.1", + "@typescript-eslint/parser": "^8.59.1", "@vitejs/plugin-react": "^6.0.1", - "@vitest/coverage-v8": "^4.1.2", - "@vitest/ui": "^4.1.2", - "baseline-browser-mapping": "^2.10.13", - "eslint": "^10.1.0", - "eslint-config-next": "^16.2.1", - "jsdom": "^29.0.1", - "next": ">=16.2.1", - "postcss": "^8.5.8", - "prettier": "^3.8.1", - "prettier-plugin-tailwindcss": "^0.7.2", - "prisma": "^7.6.0", - "tailwindcss": "^4.2.2", + "@vitest/coverage-v8": "^4.1.5", + "@vitest/ui": "^4.1.5", + "baseline-browser-mapping": "^2.10.24", + "eslint": "^10.2.1", + "eslint-config-next": "^16.2.4", + "jsdom": "^29.1.0", + "next": "16.2.4", + "postcss": "^8.5.12", + "prettier": "^3.8.3", + "prettier-plugin-tailwindcss": "^0.8.0", + "prisma": "^7.8.0", + "tailwindcss": "^4.2.4", "tsx": "^4.21.0", - "typescript": "^6.0.2", - "typescript-eslint": "^8.58.0", - "vitest": "^4.1.2" + "typescript": "^6.0.3", + "vitest": "^4.1.5" }, "engines": { "node": ">=24.0.0" @@ -106,57 +107,47 @@ } }, "node_modules/@asamuzakjp/css-color": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.0.1.tgz", - "integrity": "sha512-2SZFvqMyvboVV1d15lMf7XiI3m7SDqXUuKaTymJYLN6dSGadqp+fVojqJlVoMlbZnlTmu3S0TLwLTJpvBMO1Aw==", + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.1.11.tgz", + "integrity": "sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==", "dev": true, "license": "MIT", "dependencies": { - "@csstools/css-calc": "^3.1.1", - "@csstools/css-color-parser": "^4.0.2", + "@asamuzakjp/generational-cache": "^1.0.1", + "@csstools/css-calc": "^3.2.0", + "@csstools/css-color-parser": "^4.1.0", "@csstools/css-parser-algorithms": "^4.0.0", - "@csstools/css-tokenizer": "^4.0.0", - "lru-cache": "^11.2.6" + "@csstools/css-tokenizer": "^4.0.0" }, "engines": { "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, - "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, "node_modules/@asamuzakjp/dom-selector": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-7.0.3.tgz", - "integrity": "sha512-Q6mU0Z6bfj6YvnX2k9n0JxiIwrCFN59x/nWmYQnAqP000ruX/yV+5bp/GRcF5T8ncvfwJQ7fgfP74DlpKExILA==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-7.1.1.tgz", + "integrity": "sha512-67RZDnYRc8H/8MLDgQCDE//zoqVFwajkepHZgmXrbwybzXOEwOWGPYGmALYl9J2DOLfFPPs6kKCqmbzV895hTQ==", "dev": true, "license": "MIT", "dependencies": { + "@asamuzakjp/generational-cache": "^1.0.1", "@asamuzakjp/nwsapi": "^2.3.9", "bidi-js": "^1.0.3", "css-tree": "^3.2.1", - "is-potential-custom-element-name": "^1.0.1", - "lru-cache": "^11.2.7" + "is-potential-custom-element-name": "^1.0.1" }, "engines": { "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, - "node_modules/@asamuzakjp/dom-selector/node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "node_modules/@asamuzakjp/generational-cache": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/generational-cache/-/generational-cache-1.0.1.tgz", + "integrity": "sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "engines": { - "node": "20 || >=22" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, "node_modules/@asamuzakjp/nwsapi": { @@ -181,6 +172,13 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@babel/compat-data": { "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", @@ -222,6 +220,16 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/generator": { "version": "7.29.1", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", @@ -256,6 +264,16 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-globals": { "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", @@ -359,9 +377,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -438,29 +456,6 @@ "specificity": "bin/cli.js" } }, - "node_modules/@clack/core": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.5.0.tgz", - "integrity": "sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^1.0.0", - "sisteransi": "^1.0.5" - } - }, - "node_modules/@clack/prompts": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.11.0.tgz", - "integrity": "sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@clack/core": "0.5.0", - "picocolors": "^1.0.0", - "sisteransi": "^1.0.5" - } - }, "node_modules/@csstools/color-helpers": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.0.2.tgz", @@ -482,9 +477,9 @@ } }, "node_modules/@csstools/css-calc": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.1.1.tgz", - "integrity": "sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.2.0.tgz", + "integrity": "sha512-bR9e6o2BDB12jzN/gIbjHa5wLJ4UjD1CB9pM7ehlc0ddk6EBz+yYS1EV2MF55/HUxrHcB/hehAyt5vhsA3hx7w==", "dev": true, "funding": [ { @@ -506,9 +501,9 @@ } }, "node_modules/@csstools/css-color-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.0.2.tgz", - "integrity": "sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.1.0.tgz", + "integrity": "sha512-U0KhLYmy2GVj6q4T3WaAe6NPuFYCPQoE3b0dRGxejWDgcPp8TP7S5rVdM5ZrFaqu4N67X8YaPBw14dQSYx3IyQ==", "dev": true, "funding": [ { @@ -523,7 +518,7 @@ "license": "MIT", "dependencies": { "@csstools/color-helpers": "^6.0.2", - "@csstools/css-calc": "^3.1.1" + "@csstools/css-calc": "^3.2.0" }, "engines": { "node": ">=20.19.0" @@ -557,9 +552,9 @@ } }, "node_modules/@csstools/css-syntax-patches-for-csstree": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.1.tgz", - "integrity": "sha512-BvqN0AMWNAnLk9G8jnUT77D+mUbY/H2b3uDTvg2isJkHaOufUE2R3AOwxWo7VBQKT1lOdwdvorddo2B/lk64+w==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.3.tgz", + "integrity": "sha512-SH60bMfrRCJF3morcdk57WklujF4Jr/EsQUzqkarfHXEFcAR1gg7fS/chAE922Sehgzc1/+Tz5H3Ypa1HiEKrg==", "dev": true, "funding": [ { @@ -632,22 +627,20 @@ } }, "node_modules/@emnapi/core": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", - "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", - "dev": true, + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", "license": "MIT", "optional": true, "dependencies": { - "@emnapi/wasi-threads": "1.1.0", + "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "node_modules/@emnapi/runtime": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", - "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", - "dev": true, + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", "license": "MIT", "optional": true, "dependencies": { @@ -655,16 +648,457 @@ } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", - "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", - "dev": true, + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", "license": "MIT", "optional": true, "dependencies": { "tslib": "^2.4.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", @@ -684,19 +1118,6 @@ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "node_modules/@eslint-community/regexpp": { "version": "4.12.2", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", @@ -708,13 +1129,13 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.23.3", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.3.tgz", - "integrity": "sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==", + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz", + "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^3.0.3", + "@eslint/object-schema": "^3.0.5", "debug": "^4.3.1", "minimatch": "^10.2.4" }, @@ -722,62 +1143,23 @@ "node": "^20.19.0 || ^22.13.0 || >=24" } }, - "node_modules/@eslint/config-array/node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", - "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/@eslint/config-array/node_modules/minimatch": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", - "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@eslint/config-helpers": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.3.tgz", - "integrity": "sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.5.tgz", + "integrity": "sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^1.1.1" + "@eslint/core": "^1.2.1" }, "engines": { "node": "^20.19.0 || ^22.13.0 || >=24" } }, "node_modules/@eslint/core": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.1.1.tgz", - "integrity": "sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -788,9 +1170,9 @@ } }, "node_modules/@eslint/object-schema": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.3.tgz", - "integrity": "sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz", + "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -798,13 +1180,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.6.1.tgz", - "integrity": "sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.1.tgz", + "integrity": "sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^1.1.1", + "@eslint/core": "^1.2.1", "levn": "^0.4.1" }, "engines": { @@ -830,31 +1212,31 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", - "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.10" + "@floating-ui/utils": "^0.2.11" } }, "node_modules/@floating-ui/dom": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", - "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.7.3", - "@floating-ui/utils": "^0.2.10" + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", - "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz", + "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==", "license": "MIT", "dependencies": { - "@floating-ui/dom": "^1.7.4" + "@floating-ui/dom": "^1.7.6" }, "peerDependencies": { "react": ">=16.8.0", @@ -862,48 +1244,62 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", - "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", "license": "MIT" }, "node_modules/@hono/node-server": { - "version": "1.19.12", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.12.tgz", - "integrity": "sha512-txsUW4SQ1iilgE0l9/e9VQWmELXifEFvmdA1j6WFh/aFPj99hIntrSsq/if0UWyGVkmrRPKA1wCeP+UCr1B9Uw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-2.0.0.tgz", + "integrity": "sha512-n3GfHwwCvHCkGmOwKfxUPOlbfzuO64Sbc5XC4NGPIXxkuOnJrdgExdRKmHfF924r914WRJPT397GdqLvdYTeyQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=18.14.1" + "node": ">=20" }, "peerDependencies": { "hono": "^4" } }, "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, "engines": { "node": ">=18.18.0" } }, "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanfs/core": "^0.19.1", + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", "@humanwhocodes/retry": "^0.4.0" }, "engines": { "node": ">=18.18.0" } }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -933,9 +1329,9 @@ } }, "node_modules/@img/colour": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", - "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", "dev": true, "license": "MIT", "optional": true, @@ -1494,16 +1890,16 @@ } }, "node_modules/@next/env": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.1.tgz", - "integrity": "sha512-n8P/HCkIWW+gVal2Z8XqXJ6aB3J0tuM29OcHpCsobWlChH/SITBs1DFBk/HajgrwDkqqBXPbuUuzgDvUekREPg==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.4.tgz", + "integrity": "sha512-dKkkOzOSwFYe5RX6y26fZgkSpVAlIOJKQHIiydQcrWH6y/97+RceSOAdjZ14Qa3zLduVUy0TXcn+EiM6t4rPgw==", "dev": true, "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-16.2.1.tgz", - "integrity": "sha512-r0epZGo24eT4g08jJlg2OEryBphXqO8aL18oajoTKLzHJ6jVr6P6FI58DLMug04MwD3j8Fj0YK0slyzneKVyzA==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-16.2.4.tgz", + "integrity": "sha512-tOX826JJ96gYK/go18sPUgMq9FK1tqxBFfUCEufJb5XIkWFFmpgU7mahJANKGkHs7F41ir3tReJ3Lv5La0RvhA==", "dev": true, "license": "MIT", "dependencies": { @@ -1511,9 +1907,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.2.1.tgz", - "integrity": "sha512-BwZ8w8YTaSEr2HIuXLMLxIdElNMPvY9fLqb20LX9A9OMGtJilhHLbCL3ggyd0TwjmMcTxi0XXt+ur1vWUoxj2Q==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.2.4.tgz", + "integrity": "sha512-OXTFFox5EKN1Ym08vfrz+OXxmCcEjT4SFMbNRsWZE99dMqt2Kcusl5MqPXcW232RYkMLQTy0hqgAMEsfEd/l2A==", "cpu": [ "arm64" ], @@ -1528,9 +1924,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.2.1.tgz", - "integrity": "sha512-/vrcE6iQSJq3uL3VGVHiXeaKbn8Es10DGTGRJnRZlkNQQk3kaNtAJg8Y6xuAlrx/6INKVjkfi5rY0iEXorZ6uA==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.2.4.tgz", + "integrity": "sha512-XhpVnUfmYWvD3YrXu55XdcAkQtOnvaI6wtQa8fuF5fGoKoxIUZ0kWPtcOfqJEWngFF/lOS9l3+O9CcownhiQxQ==", "cpu": [ "x64" ], @@ -1545,9 +1941,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.2.1.tgz", - "integrity": "sha512-uLn+0BK+C31LTVbQ/QU+UaVrV0rRSJQ8RfniQAHPghDdgE+SlroYqcmFnO5iNjNfVWCyKZHYrs3Nl0mUzWxbBw==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.2.4.tgz", + "integrity": "sha512-Mx/tjlNA3G8kg14QvuGAJ4xBwPk1tUHq56JxZ8CXnZwz1Etz714soCEzGQQzVMz4bEnGPowzkV6Xrp6wAkEWOQ==", "cpu": [ "arm64" ], @@ -1562,9 +1958,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.2.1.tgz", - "integrity": "sha512-ssKq6iMRnHdnycGp9hCuGnXJZ0YPr4/wNwrfE5DbmvEcgl9+yv97/Kq3TPVDfYome1SW5geciLB9aiEqKXQjlQ==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.2.4.tgz", + "integrity": "sha512-iVMMp14514u7Nup2umQS03nT/bN9HurK8ufylC3FZNykrwjtx7V1A7+4kvhbDSCeonTVqV3Txnv0Lu+m2oDXNg==", "cpu": [ "arm64" ], @@ -1579,9 +1975,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.2.1.tgz", - "integrity": "sha512-HQm7SrHRELJ30T1TSmT706IWovFFSRGxfgUkyWJZF/RKBMdbdRWJuFrcpDdE5vy9UXjFOx6L3mRdqH04Mmx0hg==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.2.4.tgz", + "integrity": "sha512-EZOvm1aQWgnI/N/xcWOlnS3RQBk0VtVav5Zo7n4p0A7UKyTDx047k8opDbXgBpHl4CulRqRfbw3QrX2w5UOXMQ==", "cpu": [ "x64" ], @@ -1596,9 +1992,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.2.1.tgz", - "integrity": "sha512-aV2iUaC/5HGEpbBkE+4B8aHIudoOy5DYekAKOMSHoIYQ66y/wIVeaRx8MS2ZMdxe/HIXlMho4ubdZs/J8441Tg==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.2.4.tgz", + "integrity": "sha512-h9FxsngCm9cTBf71AR4fGznDEDx1hS7+kSEiIRjq5kO1oXWm07DxVGZjCvk0SGx7TSjlUqhI8oOyz7NfwAdPoA==", "cpu": [ "x64" ], @@ -1613,9 +2009,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.2.1.tgz", - "integrity": "sha512-IXdNgiDHaSk0ZUJ+xp0OQTdTgnpx1RCfRTalhn3cjOP+IddTMINwA7DXZrwTmGDO8SUr5q2hdP/du4DcrB1GxA==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.2.4.tgz", + "integrity": "sha512-3NdJV5OXMSOeJYijX+bjaLge3mJBlh4ybydbT4GFoB/2hAojWHtMhl3CYlYoMrjPuodp0nzFVi4Tj2+WaMg+Ow==", "cpu": [ "arm64" ], @@ -1630,9 +2026,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.1.tgz", - "integrity": "sha512-qvU+3a39Hay+ieIztkGSbF7+mccbbg1Tk25hc4JDylf8IHjYmY/Zm64Qq1602yPyQqvie+vf5T/uPwNxDNIoeg==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.4.tgz", + "integrity": "sha512-kMVGgsqhO5YTYODD9IPGGhA6iprWidQckK3LmPeW08PIFENRmgfb4MjXHO+p//d+ts2rpjvK5gXWzXSMrPl9cw==", "cpu": [ "x64" ], @@ -1695,9 +2091,9 @@ } }, "node_modules/@oxc-project/types": { - "version": "0.122.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.122.0.tgz", - "integrity": "sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==", + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.127.0.tgz", + "integrity": "sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/Boshen" @@ -1711,22 +2107,22 @@ "license": "MIT" }, "node_modules/@prisma/adapter-better-sqlite3": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/adapter-better-sqlite3/-/adapter-better-sqlite3-7.6.0.tgz", - "integrity": "sha512-V0bU2nbFwwqCgzIEFDCmywNoqH9ilCYa6S32hGQxIgRbkgFC2eTl4+AJ6G+jfP0BZs3LXUirreoGNbSY/zbUGQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/adapter-better-sqlite3/-/adapter-better-sqlite3-7.8.0.tgz", + "integrity": "sha512-9p0HvQNaRoOaUForDcp1MPIjylmCamYQjQpEogpdesLr14g3NwAsYR3bHL9wFi8tn21TPDVQPzcZi+SxXEokSA==", "license": "Apache-2.0", "dependencies": { - "@prisma/driver-adapter-utils": "7.6.0", + "@prisma/driver-adapter-utils": "7.8.0", "better-sqlite3": "^12.6.0" } }, "node_modules/@prisma/client": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-7.6.0.tgz", - "integrity": "sha512-7Pe/1ayh3GgWPEg4mmT4ax77LJ1wC+XlnIFvQ94bLP2DsUnOpnruQQR3Jw7r+Frthk94QqDNxo3FjSg8h9PXeQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-7.8.0.tgz", + "integrity": "sha512-HFp3Dawv/3sU3JtlPha90IB+48lS7zHiH4LKZPjmcE8YH5P9DOXGPvo8dqOtO7MqLDd1p2hOWMcFlRT1DMblHw==", "license": "Apache-2.0", "dependencies": { - "@prisma/client-runtime-utils": "7.6.0" + "@prisma/client-runtime-utils": "7.8.0" }, "engines": { "node": "^20.19 || ^22.12 || >=24.0" @@ -1745,28 +2141,28 @@ } }, "node_modules/@prisma/client-runtime-utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/client-runtime-utils/-/client-runtime-utils-7.6.0.tgz", - "integrity": "sha512-fD7jlqubsZvVODKvsp9lOpXVecx2aWGxC2l35Ioz2t+teUJ5CfR0SAMsi7UkU1VvaZmmm+DS6BdujF622nY7tQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/client-runtime-utils/-/client-runtime-utils-7.8.0.tgz", + "integrity": "sha512-5NQZztQ0oY/ADFkmd9gPuweH5A1/CCY8YQPorLLO0Mu6a87mY5gsnDkzmFmIHs9NFaLnZojzgddFVN4RpKYrdw==", "license": "Apache-2.0" }, "node_modules/@prisma/config": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/config/-/config-7.6.0.tgz", - "integrity": "sha512-MuAz1MK4PeG5/03YzfzX3CnFVHQ6qePGwUpQRzPzX5tT0ffJ3Tzi9zJZbBc+VzEGFCM8ghW/gTVDR85Syjt+Yw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/config/-/config-7.8.0.tgz", + "integrity": "sha512-HFESzd9rx2ZQxlK+TL7tu1HPvCqrHiL6LCxYykI2c34mvaUuIVVl3lYuicJD/MNnzgPnyeBEMlK4WTomJCV5jw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "c12": "3.1.0", + "c12": "3.3.4", "deepmerge-ts": "7.1.5", "effect": "3.20.0", "empathic": "2.0.0" } }, "node_modules/@prisma/debug": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.6.0.tgz", - "integrity": "sha512-LpHr3qos4lQZ6sxwjStf59YBht7m9/QF7NSQsMH6qGENWZu2w3UkQUGn1h5iRkDjnWRj3VHykOu9qFhps4ADvA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.8.0.tgz", + "integrity": "sha512-p+QZReysDUqXC+mk17q9a+Y/qzh4c2KYliDK30buYUyfrGeTGSyfmc0AIrJRhZJrLHhRiJa9Au/J72h3C+szvA==", "license": "Apache-2.0" }, "node_modules/@prisma/dev": { @@ -1795,66 +2191,73 @@ "zeptomatch": "2.1.0" } }, + "node_modules/@prisma/dev/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/@prisma/driver-adapter-utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.6.0.tgz", - "integrity": "sha512-D8j3p0RnhLuufMaRLX6QqtGgPC5Ao3l5oFP6Q5AL0rTHi4vna+NzGEipwCsfvcSvaGFCbsH3lsTMbb4WvY+ovA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.8.0.tgz", + "integrity": "sha512-/Q13o0ZT0rjc1Xk0Q9KhZYwuq2EW/vSbWUBKfgEKkaCuB/Sg6bqnjmTZqC5cD4d6y1vfFAEwBRzfzoSMIVJ55A==", "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.6.0" + "@prisma/debug": "7.8.0" } }, "node_modules/@prisma/engines": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-7.6.0.tgz", - "integrity": "sha512-Sn5edRzhHqgRV2M+A0eIbY442B4mReWWf3pKs/LKreYgW7oa/up8JtK/s4iv/EQA097cyboZ08mmkpbLp+tZ3w==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-7.8.0.tgz", + "integrity": "sha512-jx3rCnNNrt5uzbkKlegtQ2GZHxSlihMCzutgT/BP6UIDF1r9tDI39hV/0T/cHZgzJ3ELbuQPXlVZy+Y1n0pcgw==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.6.0", - "@prisma/engines-version": "7.6.0-1.75cbdc1eb7150937890ad5465d861175c6624711", - "@prisma/fetch-engine": "7.6.0", - "@prisma/get-platform": "7.6.0" + "@prisma/debug": "7.8.0", + "@prisma/engines-version": "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a", + "@prisma/fetch-engine": "7.8.0", + "@prisma/get-platform": "7.8.0" } }, "node_modules/@prisma/engines-version": { - "version": "7.6.0-1.75cbdc1eb7150937890ad5465d861175c6624711", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-7.6.0-1.75cbdc1eb7150937890ad5465d861175c6624711.tgz", - "integrity": "sha512-r51DLcJ8bDRSrBEJF3J4cinoWyGA7rfP2mG6lD90VqIbGNOkbfcLcXalSVjq5Y6brQS3vcjrq4GbyUb1Cb7vkw==", + "version": "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a.tgz", + "integrity": "sha512-fJPQxCkLgA5EayWaW8eArgCvjJ+N+Kz3VyeNKMEeYiQC4alNkxRKFVAGxv/ZUzuJISKqdw+zGeDbS6mn6RCPOA==", "dev": true, "license": "Apache-2.0" }, "node_modules/@prisma/engines/node_modules/@prisma/get-platform": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.6.0.tgz", - "integrity": "sha512-ohZDwXvtmnbzOcutR2D13lDWpZP1wQjmPyztmt0AwXLzQI7q95EE7NYCvS+M6N6SivT+BM0NOqLmTH3wms4L3A==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.8.0.tgz", + "integrity": "sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.6.0" + "@prisma/debug": "7.8.0" } }, "node_modules/@prisma/fetch-engine": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-7.6.0.tgz", - "integrity": "sha512-N575Ni95c3FkduWY/eKTHqNYgNbceZ1tQaSknVtJjpKmiiBXmniESn/GTxsDvICC4ZeiNrXxioGInzQrCdx16w==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-7.8.0.tgz", + "integrity": "sha512-gwB0Euiz/DDRyxFRpLXYlK3RfaZUj1c5dAYMuhZYfApg7arknJlcb9bIsOHDppJmbqYaVA+yBIiFMDBfprsNPQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.6.0", - "@prisma/engines-version": "7.6.0-1.75cbdc1eb7150937890ad5465d861175c6624711", - "@prisma/get-platform": "7.6.0" + "@prisma/debug": "7.8.0", + "@prisma/engines-version": "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a", + "@prisma/get-platform": "7.8.0" } }, "node_modules/@prisma/fetch-engine/node_modules/@prisma/get-platform": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.6.0.tgz", - "integrity": "sha512-ohZDwXvtmnbzOcutR2D13lDWpZP1wQjmPyztmt0AwXLzQI7q95EE7NYCvS+M6N6SivT+BM0NOqLmTH3wms4L3A==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.8.0.tgz", + "integrity": "sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.6.0" + "@prisma/debug": "7.8.0" } }, "node_modules/@prisma/get-platform": { @@ -1899,9 +2302,9 @@ } }, "node_modules/@prisma/streams-local/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "dev": true, "license": "MIT", "dependencies": { @@ -2556,9 +2959,9 @@ "license": "MIT" }, "node_modules/@rolldown/binding-android-arm64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.12.tgz", - "integrity": "sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==", + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.17.tgz", + "integrity": "sha512-s70pVGhw4zqGeFnXWvAzJDlvxhlRollagdCCKRgOsgUOH3N1l0LIxf83AtGzmb5SiVM4Hjl5HyarMRfdfj3DaQ==", "cpu": [ "arm64" ], @@ -2572,9 +2975,9 @@ } }, "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.12.tgz", - "integrity": "sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==", + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.17.tgz", + "integrity": "sha512-4ksWc9n0mhlZpZ9PMZgTGjeOPRu8MB1Z3Tz0Mo02eWfWCHMW1zN82Qz/pL/rC+yQa+8ZnutMF0JjJe7PjwasYw==", "cpu": [ "arm64" ], @@ -2588,9 +2991,9 @@ } }, "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.12.tgz", - "integrity": "sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==", + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.17.tgz", + "integrity": "sha512-SUSDOI6WwUVNcWxd02QEBjLdY1VPHvlEkw6T/8nYG322iYWCTxRb1vzk4E+mWWYehTp7ERibq54LSJGjmouOsw==", "cpu": [ "x64" ], @@ -2604,9 +3007,9 @@ } }, "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.12.tgz", - "integrity": "sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==", + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.17.tgz", + "integrity": "sha512-hwnz3nw9dbJ05EDO/PvcjaaewqqDy7Y1rn1UO81l8iIK1GjenME75dl16ajbvSSMfv66WXSRCYKIqfgq2KCfxw==", "cpu": [ "x64" ], @@ -2620,9 +3023,9 @@ } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.12.tgz", - "integrity": "sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==", + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.17.tgz", + "integrity": "sha512-IS+W7epTcwANmFSQFrS1SivEXHtl1JtuQA9wlxrZTcNi6mx+FDOYrakGevvvTwgj2JvWiK8B29/qD9BELZPyXQ==", "cpu": [ "arm" ], @@ -2636,9 +3039,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==", + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.17.tgz", + "integrity": "sha512-e6usGaHKW5BMNZOymS1UcEYGowQMWcgZ71Z17Sl/h2+ZziNJ1a9n3Zvcz6LdRyIW5572wBCTH/Z+bKuZouGk9Q==", "cpu": [ "arm64" ], @@ -2652,9 +3055,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.12.tgz", - "integrity": "sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==", + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.17.tgz", + "integrity": "sha512-b/CgbwAJpmrRLp02RPfhbudf5tZnN9nsPWK82znefso832etkem8H7FSZwxrOI9djcdTP7U6YfNhbRnh7djErg==", "cpu": [ "arm64" ], @@ -2668,9 +3071,9 @@ } }, "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==", + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.17.tgz", + "integrity": "sha512-4EII1iNGRUN5WwGbF/kOh/EIkoDN9HsupgLQoXfY+D1oyJm7/F4t5PYU5n8SWZgG0FEwakyM8pGgwcBYruGTlA==", "cpu": [ "ppc64" ], @@ -2684,9 +3087,9 @@ } }, "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==", + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.17.tgz", + "integrity": "sha512-AH8oq3XqQo4IibpVXvPeLDI5pzkpYn0WiZAfT05kFzoJ6tQNzwRdDYQ45M8I/gslbodRZwW8uxLhbSBbkv96rA==", "cpu": [ "s390x" ], @@ -2700,9 +3103,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==", + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.17.tgz", + "integrity": "sha512-cLnjV3xfo7KslbU41Z7z8BH/E1y5mzUYzAqih1d1MDaIGZRCMqTijqLv76/P7fyHuvUcfGsIpqCdddbxLLK9rA==", "cpu": [ "x64" ], @@ -2716,9 +3119,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.12.tgz", - "integrity": "sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==", + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.17.tgz", + "integrity": "sha512-0phclDw1spsL7dUB37sIARuis2tAgomCJXAHZlpt8PXZ4Ba0dRP1e+66lsRqrfhISeN9bEGNjQs+T/Fbd7oYGw==", "cpu": [ "x64" ], @@ -2732,9 +3135,9 @@ } }, "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.12.tgz", - "integrity": "sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==", + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.17.tgz", + "integrity": "sha512-0ag/hEgXOwgw4t8QyQvUCxvEg+V0KBcA6YuOx9g0r02MprutRF5dyljgm3EmR02O292UX7UeS6HzWHAl6KgyhA==", "cpu": [ "arm64" ], @@ -2748,25 +3151,27 @@ } }, "node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.12.tgz", - "integrity": "sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==", + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.17.tgz", + "integrity": "sha512-LEXei6vo0E5wTGwpkJ4KoT3OZJRnglwldt5ziLzOlc6qqb55z4tWNq2A+PFqCJuvWWdP53CVhG1Z9NtToDPJrA==", "cpu": [ "wasm32" ], "license": "MIT", "optional": true, "dependencies": { - "@napi-rs/wasm-runtime": "^1.1.1" + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" }, "engines": { - "node": ">=14.0.0" + "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.2.tgz", - "integrity": "sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", + "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", "license": "MIT", "optional": true, "dependencies": { @@ -2782,9 +3187,9 @@ } }, "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.12.tgz", - "integrity": "sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==", + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.17.tgz", + "integrity": "sha512-gUmyzBl3SPMa6hrqFUth9sVfcLBlYsbMzBx5PlexMroZStgzGqlZ26pYG89rBb45Mnia+oil6YAIFeEWGWhoZA==", "cpu": [ "arm64" ], @@ -2798,9 +3203,9 @@ } }, "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.12.tgz", - "integrity": "sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==", + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.17.tgz", + "integrity": "sha512-3hkiolcUAvPB9FLb3UZdfjVVNWherN1f/skkGWJP/fgSQhYUZpSIRr0/I8ZK9TkF3F7kxvJAk0+IcKvPHk9qQg==", "cpu": [ "x64" ], @@ -2900,9 +3305,9 @@ } }, "node_modules/@tailwindcss/node": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.2.tgz", - "integrity": "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.4.tgz", + "integrity": "sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA==", "dev": true, "license": "MIT", "dependencies": { @@ -2912,37 +3317,37 @@ "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", - "tailwindcss": "4.2.2" + "tailwindcss": "4.2.4" } }, "node_modules/@tailwindcss/oxide": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.2.tgz", - "integrity": "sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.4.tgz", + "integrity": "sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q==", "dev": true, "license": "MIT", "engines": { "node": ">= 20" }, "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.2.2", - "@tailwindcss/oxide-darwin-arm64": "4.2.2", - "@tailwindcss/oxide-darwin-x64": "4.2.2", - "@tailwindcss/oxide-freebsd-x64": "4.2.2", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.2", - "@tailwindcss/oxide-linux-arm64-gnu": "4.2.2", - "@tailwindcss/oxide-linux-arm64-musl": "4.2.2", - "@tailwindcss/oxide-linux-x64-gnu": "4.2.2", - "@tailwindcss/oxide-linux-x64-musl": "4.2.2", - "@tailwindcss/oxide-wasm32-wasi": "4.2.2", - "@tailwindcss/oxide-win32-arm64-msvc": "4.2.2", - "@tailwindcss/oxide-win32-x64-msvc": "4.2.2" + "@tailwindcss/oxide-android-arm64": "4.2.4", + "@tailwindcss/oxide-darwin-arm64": "4.2.4", + "@tailwindcss/oxide-darwin-x64": "4.2.4", + "@tailwindcss/oxide-freebsd-x64": "4.2.4", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.4", + "@tailwindcss/oxide-linux-arm64-gnu": "4.2.4", + "@tailwindcss/oxide-linux-arm64-musl": "4.2.4", + "@tailwindcss/oxide-linux-x64-gnu": "4.2.4", + "@tailwindcss/oxide-linux-x64-musl": "4.2.4", + "@tailwindcss/oxide-wasm32-wasi": "4.2.4", + "@tailwindcss/oxide-win32-arm64-msvc": "4.2.4", + "@tailwindcss/oxide-win32-x64-msvc": "4.2.4" } }, "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.2.tgz", - "integrity": "sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.4.tgz", + "integrity": "sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g==", "cpu": [ "arm64" ], @@ -2957,9 +3362,9 @@ } }, "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.2.tgz", - "integrity": "sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.4.tgz", + "integrity": "sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg==", "cpu": [ "arm64" ], @@ -2974,9 +3379,9 @@ } }, "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.2.tgz", - "integrity": "sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.4.tgz", + "integrity": "sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg==", "cpu": [ "x64" ], @@ -2991,9 +3396,9 @@ } }, "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.2.tgz", - "integrity": "sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.4.tgz", + "integrity": "sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw==", "cpu": [ "x64" ], @@ -3008,9 +3413,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.2.tgz", - "integrity": "sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.4.tgz", + "integrity": "sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA==", "cpu": [ "arm" ], @@ -3025,9 +3430,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.2.tgz", - "integrity": "sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.4.tgz", + "integrity": "sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw==", "cpu": [ "arm64" ], @@ -3042,9 +3447,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.2.tgz", - "integrity": "sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.4.tgz", + "integrity": "sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g==", "cpu": [ "arm64" ], @@ -3059,9 +3464,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.2.tgz", - "integrity": "sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.4.tgz", + "integrity": "sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA==", "cpu": [ "x64" ], @@ -3076,9 +3481,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.2.tgz", - "integrity": "sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.4.tgz", + "integrity": "sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA==", "cpu": [ "x64" ], @@ -3093,9 +3498,9 @@ } }, "node_modules/@tailwindcss/oxide-wasm32-wasi": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.2.tgz", - "integrity": "sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.4.tgz", + "integrity": "sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw==", "bundleDependencies": [ "@napi-rs/wasm-runtime", "@emnapi/core", @@ -3187,9 +3592,9 @@ "optional": true }, "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.2.tgz", - "integrity": "sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.4.tgz", + "integrity": "sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ==", "cpu": [ "arm64" ], @@ -3204,9 +3609,9 @@ } }, "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.2.tgz", - "integrity": "sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.4.tgz", + "integrity": "sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw==", "cpu": [ "x64" ], @@ -3221,17 +3626,17 @@ } }, "node_modules/@tailwindcss/postcss": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.2.2.tgz", - "integrity": "sha512-n4goKQbW8RVXIbNKRB/45LzyUqN451deQK0nzIeauVEqjlI49slUlgKYJM2QyUzap/PcpnS7kzSUmPb1sCRvYQ==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.2.4.tgz", + "integrity": "sha512-wgAVj6nUWAolAu8YFvzT2cTBIElWHkjZwFYovF+xsqKsW2ADxM/X2opxj5NsF/qVccAOjRNe8X2IdPzMsWyHTg==", "dev": true, "license": "MIT", "dependencies": { "@alloc/quick-lru": "^5.2.0", - "@tailwindcss/node": "4.2.2", - "@tailwindcss/oxide": "4.2.2", + "@tailwindcss/node": "4.2.4", + "@tailwindcss/oxide": "4.2.4", "postcss": "^8.5.6", - "tailwindcss": "4.2.2" + "tailwindcss": "4.2.4" } }, "node_modules/@tailwindcss/typography": { @@ -3247,9 +3652,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.96.0", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.96.0.tgz", - "integrity": "sha512-sfO3uQeol1BU7cRP6NYY7nAiX3GiNY20lI/dtSbKLwcIkYw/X+w/tEsQAkc544AfIhBX/IvH/QYtPHrPhyAKGw==", + "version": "5.100.6", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.100.6.tgz", + "integrity": "sha512-Os2CPUr98to98RYm+D4qGqGkiffn7MGSyl2547a4MljVkHE30AMJRqTiyCqBfMwzAx/I91vCkAxp5tHSla6Twg==", "license": "MIT", "funding": { "type": "github", @@ -3257,12 +3662,12 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.96.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.96.0.tgz", - "integrity": "sha512-6qbjdm1K5kizVKv9TNqhIN3doq2anRhdF2XaFMFSn4m8L22S69RV+FilvlyVT4RoJyMxtPU5rs4RpdFa/PEC7A==", + "version": "5.100.6", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.100.6.tgz", + "integrity": "sha512-uVSrps0PV16Cxmcn2rvL+dUhwTpTUtiRW347AEeYxMZXO2pZe9ja7E24PAMGoQ5u2g89DD8u4QhOviBk+RN8RA==", "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.96.0" + "@tanstack/query-core": "5.100.6" }, "funding": { "type": "github", @@ -3292,13 +3697,6 @@ "yarn": ">=1" } }, - "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", - "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", - "dev": true, - "license": "MIT" - }, "node_modules/@testing-library/react": { "version": "16.3.2", "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.2.tgz", @@ -3342,9 +3740,9 @@ } }, "node_modules/@trpc/client": { - "version": "11.16.0", - "resolved": "https://registry.npmjs.org/@trpc/client/-/client-11.16.0.tgz", - "integrity": "sha512-TxIzm7OoK3baKZ0XCbuMUbI3GhgjcbKHIc4nWVKaRpCRnbSh0T31BT6fTPYwtnA/Nur8pBCGqC2B4J5hEPiPFQ==", + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/@trpc/client/-/client-11.17.0.tgz", + "integrity": "sha512-KpJBFrbKTDeVCFv/3ckL1XBBH5Yssn8hethI/rUy7GIpTj+VzjtPjykDqJpzobuVOz+d26cXCSu1t4I6MYI5Zg==", "funding": [ "https://trpc.io/sponsor" ], @@ -3353,30 +3751,30 @@ "intent": "bin/intent.js" }, "peerDependencies": { - "@trpc/server": "11.16.0", + "@trpc/server": "11.17.0", "typescript": ">=5.7.2" } }, "node_modules/@trpc/react-query": { - "version": "11.16.0", - "resolved": "https://registry.npmjs.org/@trpc/react-query/-/react-query-11.16.0.tgz", - "integrity": "sha512-ah6ULOu4k7lCEFAEoEgqg14YPVu1lnCVVYcz8TP7avPPKwtcB0CbFKYve3ElRP+V5DoBT75Q+G66bRdR+rQ5fg==", + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/@trpc/react-query/-/react-query-11.17.0.tgz", + "integrity": "sha512-AGcl5YAF8NnhBmyJ6PqJqKb1M5VTGSoNRNqJ3orct4o4epdcg0GWhW+qT9q6gPzs/2ImIwYCdfFpgNGdZ9yLHA==", "funding": [ "https://trpc.io/sponsor" ], "license": "MIT", "peerDependencies": { "@tanstack/react-query": "^5.80.3", - "@trpc/client": "11.16.0", - "@trpc/server": "11.16.0", + "@trpc/client": "11.17.0", + "@trpc/server": "11.17.0", "react": ">=18.2.0", "typescript": ">=5.7.2" } }, "node_modules/@trpc/server": { - "version": "11.16.0", - "resolved": "https://registry.npmjs.org/@trpc/server/-/server-11.16.0.tgz", - "integrity": "sha512-XgGuUMddrUTd04+za/WE5GFuZ1/YU9XQG0t3VL5WOIu2JspkOlq6k4RYEiqS6HSJt+S0RXaPdIoE2anIP/BBRQ==", + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/@trpc/server/-/server-11.17.0.tgz", + "integrity": "sha512-jbAOUe0PpUTCYqziyu+8vYXZdDXPudZgnEhWCQ2NjKnVEjfE93RqHTt1oycZJv/HNf51YlRXfEEwSIAbb161rw==", "funding": [ "https://trpc.io/sponsor" ], @@ -3431,9 +3829,9 @@ } }, "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", "license": "MIT", "dependencies": { "@types/ms": "*" @@ -3518,12 +3916,12 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.10.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.9.tgz", - "integrity": "sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==", + "version": "25.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz", + "integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==", "license": "MIT", "dependencies": { - "undici-types": "~7.16.0" + "undici-types": "~7.19.0" } }, "node_modules/@types/node-cron": { @@ -3534,9 +3932,9 @@ "license": "MIT" }, "node_modules/@types/prismjs": { - "version": "1.26.5", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", - "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==", + "version": "1.26.6", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.6.tgz", + "integrity": "sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==", "license": "MIT" }, "node_modules/@types/react": { @@ -3583,17 +3981,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.58.0.tgz", - "integrity": "sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg==", + "version": "8.59.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.1.tgz", + "integrity": "sha512-BOziFIfE+6osHO9FoJG4zjoHUcvI7fTNBSpdAwrNH0/TLvzjsk2oo8XSSOT2HhqUyhZPfHv4UOffoJ9oEEQ7Ag==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.58.0", - "@typescript-eslint/type-utils": "8.58.0", - "@typescript-eslint/utils": "8.58.0", - "@typescript-eslint/visitor-keys": "8.58.0", + "@typescript-eslint/scope-manager": "8.59.1", + "@typescript-eslint/type-utils": "8.59.1", + "@typescript-eslint/utils": "8.59.1", + "@typescript-eslint/visitor-keys": "8.59.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -3606,32 +4004,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.58.0", + "@typescript-eslint/parser": "^8.59.1", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/@typescript-eslint/parser": { - "version": "8.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.58.0.tgz", - "integrity": "sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA==", + "version": "8.59.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.1.tgz", + "integrity": "sha512-HDQH9O/47Dxi1ceDhBXdaldtf/WV9yRYMjbjCuNk3qnaTD564qwv61Y7+gTxwxRKzSrgO5uhtw584igXVuuZkA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.58.0", - "@typescript-eslint/types": "8.58.0", - "@typescript-eslint/typescript-estree": "8.58.0", - "@typescript-eslint/visitor-keys": "8.58.0", + "@typescript-eslint/scope-manager": "8.59.1", + "@typescript-eslint/types": "8.59.1", + "@typescript-eslint/typescript-estree": "8.59.1", + "@typescript-eslint/visitor-keys": "8.59.1", "debug": "^4.4.3" }, "engines": { @@ -3647,14 +4035,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.58.0.tgz", - "integrity": "sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg==", + "version": "8.59.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.1.tgz", + "integrity": "sha512-+MuHQlHiEr00Of/IQbE/MmEoi44znZHbR/Pz7Opq4HryUOlRi+/44dro9Ycy8Fyo+/024IWtw8m4JUMCGTYxDg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.58.0", - "@typescript-eslint/types": "^8.58.0", + "@typescript-eslint/tsconfig-utils": "^8.59.1", + "@typescript-eslint/types": "^8.59.1", "debug": "^4.4.3" }, "engines": { @@ -3669,14 +4057,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.58.0.tgz", - "integrity": "sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ==", + "version": "8.59.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.1.tgz", + "integrity": "sha512-LwuHQI4pDOYVKvmH2dkaJo6YZCSgouVgnS/z7yBPKBMvgtBvyLqiLy9Z6b7+m/TRcX1NFYUqZetI5Y+aT4GEfg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.58.0", - "@typescript-eslint/visitor-keys": "8.58.0" + "@typescript-eslint/types": "8.59.1", + "@typescript-eslint/visitor-keys": "8.59.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3687,9 +4075,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.58.0.tgz", - "integrity": "sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A==", + "version": "8.59.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.1.tgz", + "integrity": "sha512-/0nEyPbX7gRsk0Uwfe4ALwwgxuA66d/l2mhRDNlAvaj4U3juhUtJNq0DsY8M2AYwwb9rEq2hrC3IcIcEt++iJA==", "dev": true, "license": "MIT", "engines": { @@ -3704,15 +4092,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.58.0.tgz", - "integrity": "sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg==", + "version": "8.59.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.1.tgz", + "integrity": "sha512-klWPBR2ciQHS3f++ug/mVnWKPjBUo7icEL3FAO1lhAR1Z1i5NQYZ1EannMSRYcq5qCv5wNALlXr6fksRHyYl7w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.58.0", - "@typescript-eslint/typescript-estree": "8.58.0", - "@typescript-eslint/utils": "8.58.0", + "@typescript-eslint/types": "8.59.1", + "@typescript-eslint/typescript-estree": "8.59.1", + "@typescript-eslint/utils": "8.59.1", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -3729,9 +4117,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.58.0.tgz", - "integrity": "sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==", + "version": "8.59.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.1.tgz", + "integrity": "sha512-ZDCjgccSdYPw5Bxh+my4Z0lJU96ZDN7jbBzvmEn0FZx3RtU1C7VWl6NbDx94bwY3V5YsgwRzJPOgeY2Q/nLG8A==", "dev": true, "license": "MIT", "engines": { @@ -3743,16 +4131,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.58.0.tgz", - "integrity": "sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==", + "version": "8.59.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.1.tgz", + "integrity": "sha512-OUd+vJS05sSkOip+BkZ/2NS8RMxrAAJemsC6vU3kmfLyeaJT0TftHkV9mcx2107MmsBVXXexhVu4F0TZXyMl4g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.58.0", - "@typescript-eslint/tsconfig-utils": "8.58.0", - "@typescript-eslint/types": "8.58.0", - "@typescript-eslint/visitor-keys": "8.58.0", + "@typescript-eslint/project-service": "8.59.1", + "@typescript-eslint/tsconfig-utils": "8.59.1", + "@typescript-eslint/types": "8.59.1", + "@typescript-eslint/visitor-keys": "8.59.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -3770,69 +4158,17 @@ "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/utils": { - "version": "8.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.58.0.tgz", - "integrity": "sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA==", + "version": "8.59.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.1.tgz", + "integrity": "sha512-3pIeoXhCeYH9FSCBI8P3iNwJlGuzPlYKkTlen2O9T1DSeeg8UG8jstq6BLk+Mda0qup7mgk4z4XL4OzRaxZ8LA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.58.0", - "@typescript-eslint/types": "8.58.0", - "@typescript-eslint/typescript-estree": "8.58.0" + "@typescript-eslint/scope-manager": "8.59.1", + "@typescript-eslint/types": "8.59.1", + "@typescript-eslint/typescript-estree": "8.59.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3847,13 +4183,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.58.0.tgz", - "integrity": "sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==", + "version": "8.59.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.1.tgz", + "integrity": "sha512-LdDNl6C5iJExcM0Yh0PwAIBb9PrSiCsWamF/JyEZawm3kFDnRoaq3LGE4bpyRao/fWeGKKyw7icx0YxrLFC5Cg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.58.0", + "@typescript-eslint/types": "8.59.1", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -3864,6 +4200,19 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@ungap/structured-clone": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", @@ -4166,14 +4515,14 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.1.2.tgz", - "integrity": "sha512-sPK//PHO+kAkScb8XITeB1bf7fsk85Km7+rt4eeuRR3VS1/crD47cmV5wicisJmjNdfeokTZwjMk4Mj2d58Mgg==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.1.5.tgz", + "integrity": "sha512-38C0/Ddb7HcRG0Z4/DUem8x57d2p9jYgp18mkaYswEOQBGsI1CG4f/hjm0ZCeaJfWhSZ4k7jgs29V1Zom7Ki9A==", "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^1.0.2", - "@vitest/utils": "4.1.2", + "@vitest/utils": "4.1.5", "ast-v8-to-istanbul": "^1.0.0", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", @@ -4187,8 +4536,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "4.1.2", - "vitest": "4.1.2" + "@vitest/browser": "4.1.5", + "vitest": "4.1.5" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -4196,24 +4545,17 @@ } } }, - "node_modules/@vitest/coverage-v8/node_modules/std-env": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.0.0.tgz", - "integrity": "sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@vitest/expect": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.2.tgz", - "integrity": "sha512-gbu+7B0YgUJ2nkdsRJrFFW6X7NTP44WlhiclHniUhxADQJH5Szt9mZ9hWnJPJ8YwOK5zUOSSlSvyzRf0u1DSBQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.5.tgz", + "integrity": "sha512-PWBaRY5JoKuRnHlUHfpV/KohFylaDZTupcXN1H9vYryNLOnitSw60Mw9IAE2r67NbwwzBw/Cc/8q9BK3kIX8Kw==", "dev": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", - "@vitest/spy": "4.1.2", - "@vitest/utils": "4.1.2", + "@vitest/spy": "4.1.5", + "@vitest/utils": "4.1.5", "chai": "^6.2.2", "tinyrainbow": "^3.1.0" }, @@ -4222,13 +4564,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.2.tgz", - "integrity": "sha512-Ize4iQtEALHDttPRCmN+FKqOl2vxTiNUhzobQFFt/BM1lRUTG7zRCLOykG/6Vo4E4hnUdfVLo5/eqKPukcWW7Q==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.5.tgz", + "integrity": "sha512-/x2EmFC4mT4NNzqvC3fmesuV97w5FC903KPmey4gsnJiMQ3Be1IlDKVaDaG8iqaLFHqJ2FVEkxZk5VmeLjIItw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "4.1.2", + "@vitest/spy": "4.1.5", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, @@ -4249,9 +4591,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.2.tgz", - "integrity": "sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.5.tgz", + "integrity": "sha512-7I3q6l5qr03dVfMX2wCo9FxwSJbPdwKjy2uu/YPpU3wfHvIL4QHwVRp57OfGrDFeUJ8/8QdfBKIV12FTtLn00g==", "dev": true, "license": "MIT", "dependencies": { @@ -4262,13 +4604,13 @@ } }, "node_modules/@vitest/runner": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.2.tgz", - "integrity": "sha512-Gr+FQan34CdiYAwpGJmQG8PgkyFVmARK8/xSijia3eTFgVfpcpztWLuP6FttGNfPLJhaZVP/euvujeNYar36OQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.5.tgz", + "integrity": "sha512-2D+o7Pr82IEO46YPpoA/YU0neeyr6FTerQb5Ro7BUnBuv6NQtT/kmVnczngiMEBhzgqz2UZYl5gArejsyERDSQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.1.2", + "@vitest/utils": "4.1.5", "pathe": "^2.0.3" }, "funding": { @@ -4276,14 +4618,14 @@ } }, "node_modules/@vitest/snapshot": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.2.tgz", - "integrity": "sha512-g7yfUmxYS4mNxk31qbOYsSt2F4m1E02LFqO53Xpzg3zKMhLAPZAjjfyl9e6z7HrW6LvUdTwAQR3HHfLjpko16A==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.5.tgz", + "integrity": "sha512-zypXEt4KH/XgKGPUz4eC2AvErYx0My5hfL8oDb1HzGFpEk1P62bxSohdyOmvz+d9UJwanI68MKwr2EquOaOgMQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.1.2", - "@vitest/utils": "4.1.2", + "@vitest/pretty-format": "4.1.5", + "@vitest/utils": "4.1.5", "magic-string": "^0.30.21", "pathe": "^2.0.3" }, @@ -4292,9 +4634,9 @@ } }, "node_modules/@vitest/spy": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.2.tgz", - "integrity": "sha512-DU4fBnbVCJGNBwVA6xSToNXrkZNSiw59H8tcuUspVMsBDBST4nfvsPsEHDHGtWRRnqBERBQu7TrTKskmjqTXKA==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.5.tgz", + "integrity": "sha512-2lNOsh6+R2Idnf1TCZqSwYlKN2E/iDlD8sgU59kYVl+OMDmvldO1VDk39smRfpUNwYpNRVn3w4YfuC7KfbBnkQ==", "dev": true, "license": "MIT", "funding": { @@ -4302,13 +4644,13 @@ } }, "node_modules/@vitest/ui": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-4.1.2.tgz", - "integrity": "sha512-/irhyeAcKS2u6Zokagf9tqZJ0t8S6kMZq4ZG9BHZv7I+fkRrYfQX4w7geYeC2r6obThz39PDxvXQzZX+qXqGeg==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-4.1.5.tgz", + "integrity": "sha512-3Z9HNFiV0IF1fk0JPiK+7kE1GcaIPefQQIBYur6PM5yFIq6agys3uqP/0t966e1wXfmjbRCHDe7qW236Xjwnag==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.1.2", + "@vitest/utils": "4.1.5", "fflate": "^0.8.2", "flatted": "^3.4.2", "pathe": "^2.0.3", @@ -4320,17 +4662,17 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "4.1.2" + "vitest": "4.1.5" } }, "node_modules/@vitest/utils": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.2.tgz", - "integrity": "sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.5.tgz", + "integrity": "sha512-76wdkrmfXfqGjueGgnb45ITPyUi1ycZ4IHgC2bhPDUfWHklY/q3MdLOAB+TF1e6xfl8NxNY0ZYaPCFNWSsw3Ug==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.1.2", + "@vitest/pretty-format": "4.1.5", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" }, @@ -4383,9 +4725,9 @@ } }, "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, "license": "MIT", "dependencies": { @@ -4399,6 +4741,18 @@ "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/aria-hidden": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", @@ -4412,13 +4766,13 @@ } }, "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "dev": true, "license": "Apache-2.0", - "dependencies": { - "dequal": "^2.0.3" + "engines": { + "node": ">= 0.4" } }, "node_modules/array-buffer-byte-length": { @@ -4610,13 +4964,6 @@ "js-tokens": "^10.0.0" } }, - "node_modules/ast-v8-to-istanbul/node_modules/js-tokens": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", - "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", - "dev": true, - "license": "MIT" - }, "node_modules/async-function": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", @@ -4660,9 +5007,9 @@ } }, "node_modules/axe-core": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.0.tgz", - "integrity": "sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==", + "version": "4.11.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.3.tgz", + "integrity": "sha512-zBQouZixDTbo3jMGqHKyePxYxr1e5W8UdTmBQ7sNtaA9M2bE32daxxPLS/jojhKOHxQ7LWwPjfiwf/fhaJWzlg==", "dev": true, "license": "MPL-2.0", "engines": { @@ -4670,9 +5017,9 @@ } }, "node_modules/axios": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.14.0.tgz", - "integrity": "sha512-3Y8yrqLSwjuzpXuZ0oIYZ/XGgLwUIBU3uLvbcpb0pidD9ctpShJd43KSlEEkVQg6DS0G9NKyzOvBfUtDKEyHvQ==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.2.tgz", + "integrity": "sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.11", @@ -4701,11 +5048,14 @@ } }, "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } }, "node_modules/base64-js": { "version": "1.5.1", @@ -4728,9 +5078,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.10.13", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.13.tgz", - "integrity": "sha512-BL2sTuHOdy0YT1lYieUxTw/QMtPBC3pmlJC6xk8BBYVv6vcw3SGdKemQ+Xsx9ik2F/lYDO9tqsFQH1r9PFuHKw==", + "version": "2.10.24", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.24.tgz", + "integrity": "sha512-I2NkZOOrj2XuguvWCK6OVh9GavsNjZjK908Rq3mIBK25+GD8vPX5w2WdxVqnQ7xx3SrZJiCiZFu+/Oz50oSYSA==", "dev": true, "license": "Apache-2.0", "bin": { @@ -4750,22 +5100,16 @@ } }, "node_modules/better-result": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/better-result/-/better-result-2.7.0.tgz", - "integrity": "sha512-7zrmXjAK8u8Z6SOe4R65XObOR5X+Y2I/VVku3t5cPOGQ8/WsBcfFmfnIPiEl5EBMDOzPHRwbiPbMtQBKYdw7RA==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/better-result/-/better-result-2.9.0.tgz", + "integrity": "sha512-NHwGDGVbRlWDOce3CwcfGIrcNR9zY37ut3SVwQVfv57DZdVhxjhA4mfaHN1n8QwWnRAR4iErpW1X/eaiaUaFYg==", "dev": true, - "license": "MIT", - "dependencies": { - "@clack/prompts": "^0.11.0" - }, - "bin": { - "better-result": "bin/cli.mjs" - } + "license": "MIT" }, "node_modules/better-sqlite3": { - "version": "12.8.0", - "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.8.0.tgz", - "integrity": "sha512-RxD2Vd96sQDjQr20kdP+F+dK/1OUNiVOl200vKBZY8u0vTwysfolF6Hq+3ZK2+h8My9YvZhHsF+RSGZW2VYrPQ==", + "version": "12.9.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.9.0.tgz", + "integrity": "sha512-wqUv4Gm3toFpHDQmaKD4QhZm3g1DjUBI0yzS4UBl6lElUmXFYdTQmmEDpAFa5o8FiFiymURypEnfVHzILKaxqQ==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -4807,14 +5151,16 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/braces": { @@ -4895,27 +5241,27 @@ "license": "BSD-3-Clause" }, "node_modules/c12": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/c12/-/c12-3.1.0.tgz", - "integrity": "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.3.4.tgz", + "integrity": "sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA==", "dev": true, "license": "MIT", "dependencies": { - "chokidar": "^4.0.3", - "confbox": "^0.2.2", - "defu": "^6.1.4", - "dotenv": "^16.6.1", - "exsolve": "^1.0.7", - "giget": "^2.0.0", - "jiti": "^2.4.2", + "chokidar": "^5.0.0", + "confbox": "^0.2.4", + "defu": "^6.1.6", + "dotenv": "^17.3.1", + "exsolve": "^1.0.8", + "giget": "^3.2.0", + "jiti": "^2.6.1", "ohash": "^2.0.11", "pathe": "^2.0.3", - "perfect-debounce": "^1.0.0", - "pkg-types": "^2.2.0", - "rc9": "^2.1.2" + "perfect-debounce": "^2.1.0", + "pkg-types": "^2.3.0", + "rc9": "^3.0.1" }, "peerDependencies": { - "magicast": "^0.3.5" + "magicast": "*" }, "peerDependenciesMeta": { "magicast": { @@ -4923,29 +5269,16 @@ } } }, - "node_modules/c12/node_modules/dotenv": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", - "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", "set-function-length": "^1.2.2" }, "engines": { @@ -4986,9 +5319,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001782", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001782.tgz", - "integrity": "sha512-dZcaJLJeDMh4rELYFw1tvSn1bhZWYFOt468FcbHHxx/Z/dFidd1I6ciyFdi3iwfQCyOjqo9upF6lGQYtMiJWxw==", + "version": "1.0.30001791", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001791.tgz", + "integrity": "sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==", "dev": true, "funding": [ { @@ -5080,16 +5413,16 @@ } }, "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", "dev": true, "license": "MIT", "dependencies": { - "readdirp": "^4.0.1" + "readdirp": "^5.0.0" }, "engines": { - "node": ">= 14.16.0" + "node": ">= 20.19.0" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -5101,16 +5434,6 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "license": "ISC" }, - "node_modules/citty": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", - "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "consola": "^3.2.3" - } - }, "node_modules/class-variance-authority": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", @@ -5175,16 +5498,6 @@ "dev": true, "license": "MIT" }, - "node_modules/consola": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", - "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -5367,9 +5680,9 @@ "license": "MIT" }, "node_modules/decode-named-character-reference": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", - "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", "license": "MIT", "dependencies": { "character-entities": "^2.0.0" @@ -5457,9 +5770,9 @@ } }, "node_modules/defu": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", + "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", "dev": true, "license": "MIT" }, @@ -5539,10 +5852,17 @@ "node": ">=0.10.0" } }, + "node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true, + "license": "MIT" + }, "node_modules/dotenv": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", - "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz", + "integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -5586,9 +5906,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.329", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.329.tgz", - "integrity": "sha512-/4t+AS1l4S3ZC0Ja7PHFIWeBIxGA3QGqV8/yKsP36v7NcyUCl+bIcmw6s5zVuMIECWwBrAK/6QLzTmbJChBboQ==", + "version": "1.5.344", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.344.tgz", + "integrity": "sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==", "dev": true, "license": "ISC" }, @@ -5619,27 +5939,27 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", - "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.0.tgz", + "integrity": "sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==", "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", - "tapable": "^2.3.0" + "tapable": "^2.3.3" }, "engines": { "node": ">=10.13.0" } }, "node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", "dev": true, "license": "BSD-2-Clause", "engines": { - "node": ">=0.12" + "node": ">=20.19.0" }, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" @@ -5659,9 +5979,9 @@ } }, "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", + "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", "dev": true, "license": "MIT", "dependencies": { @@ -5746,37 +6066,37 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.3.2.tgz", + "integrity": "sha512-HVLACW1TppGYjJ8H6/jqH/pqOtKRw6wMlrB23xfExmFWxFquAIWCmwoLsOyN96K4a5KbmOf5At9ZUO3GZbetAw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", + "es-abstract": "^1.24.2", "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", + "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.6", + "get-intrinsic": "^1.3.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.4", - "safe-array-concat": "^1.1.3" + "iterator.prototype": "^1.1.5", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-module-lexer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", - "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", + "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", "dev": true, "license": "MIT" }, @@ -5838,6 +6158,48 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -5862,18 +6224,18 @@ } }, "node_modules/eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.1.0.tgz", - "integrity": "sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.1.tgz", + "integrity": "sha512-wiyGaKsDgqXvF40P8mDwiUp/KQjE1FdrIEJsM8PZ3XCiniTMXS3OHWWUe5FI5agoCnr8x4xPrTDZuxsBlNHl+Q==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.3", - "@eslint/config-helpers": "^0.5.3", - "@eslint/core": "^1.1.1", - "@eslint/plugin-kit": "^0.6.1", + "@eslint/config-array": "^0.23.5", + "@eslint/config-helpers": "^0.5.5", + "@eslint/core": "^1.2.1", + "@eslint/plugin-kit": "^0.7.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -5918,13 +6280,13 @@ } }, "node_modules/eslint-config-next": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-16.2.1.tgz", - "integrity": "sha512-qhabwjQZ1Mk53XzXvmogf8KQ0tG0CQXF0CZ56+2/lVhmObgmaqj7x5A1DSrWdZd3kwI7GTPGUjFne+krRxYmFg==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-16.2.4.tgz", + "integrity": "sha512-A6ekXYFj/YQxBPMl45g3e+U8zJo+X2+ZQwcz34pPKjpc/3S4roBA2Rd9xWB4FKuSxhofo1/95WjzmUY+wHrOhg==", "dev": true, "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "16.2.1", + "@next/eslint-plugin-next": "16.2.4", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.32.0", @@ -5944,29 +6306,16 @@ } } }, - "node_modules/eslint-config-next/node_modules/globals": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", - "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.10.tgz", + "integrity": "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==", "dev": true, "license": "MIT", "dependencies": { "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" + "is-core-module": "^2.16.1", + "resolve": "^2.0.0-next.6" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -6076,6 +6425,24 @@ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, + "node_modules/eslint-plugin-import/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -6086,6 +6453,29 @@ "ms": "^2.1.1" } }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.10.2", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", @@ -6116,14 +6506,35 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "node_modules/eslint-plugin-jsx-a11y/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, - "license": "Apache-2.0", + "license": "MIT" + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">= 0.4" + "node": "*" } }, "node_modules/eslint-plugin-react": { @@ -6160,9 +6571,9 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", - "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", + "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", "dev": true, "license": "MIT", "dependencies": { @@ -6176,25 +6587,48 @@ "node": ">=18" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "node_modules/eslint-plugin-react/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "semver": "bin/semver.js" } }, "node_modules/eslint-scope": { @@ -6217,6 +6651,19 @@ } }, "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", @@ -6229,43 +6676,14 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "node_modules/eslint/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", - "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", - "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 4" } }, "node_modules/espree": { @@ -6286,6 +6704,19 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/esquery": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", @@ -6498,6 +6929,23 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/fflate": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", @@ -6576,9 +7024,9 @@ "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "funding": [ { "type": "individual", @@ -6814,9 +7262,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", - "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", + "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", "dev": true, "license": "MIT", "dependencies": { @@ -6827,19 +7275,11 @@ } }, "node_modules/giget": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", - "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-3.2.0.tgz", + "integrity": "sha512-GvHTWcykIR/fP8cj8dMpuMMkvaeJfPvYnhq0oW+chSeIr+ldX21ifU2Ms6KBoyKZQZmVaUAAhQ2EZ68KJF8a7A==", "dev": true, "license": "MIT", - "dependencies": { - "citty": "^0.1.6", - "consola": "^3.4.0", - "defu": "^6.1.4", - "node-fetch-native": "^1.6.6", - "nypm": "^0.6.0", - "pathe": "^2.0.3" - }, "bin": { "giget": "dist/cli.mjs" } @@ -6863,6 +7303,19 @@ "node": ">=10.13.0" } }, + "node_modules/globals": { + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", + "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/globalthis": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", @@ -6993,9 +7446,9 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -7107,9 +7560,9 @@ "license": "CC0-1.0" }, "node_modules/hono": { - "version": "4.12.9", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.9.tgz", - "integrity": "sha512-wy3T8Zm2bsEvxKZM5w21VdHDDcwVS1yUFFY6i8UobSsKfFceT7TOwhbhfKsDyx7tYQlmRM5FLpIuYvNFyjctiA==", + "version": "4.12.15", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.15.tgz", + "integrity": "sha512-qM0jDhFEaCBb4TxoW7f53Qrpv9RBiayUHo0S52JudprkhvpjIrGoU1mnnr29Fvd1U335ZFPZQY1wlkqgfGXyLg==", "dev": true, "license": "MIT", "engines": { @@ -7153,6 +7606,23 @@ "dev": true, "license": "MIT" }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -7174,9 +7644,9 @@ "license": "BSD-3-Clause" }, "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, "license": "MIT", "engines": { @@ -7341,19 +7811,6 @@ "semver": "^7.7.1" } }, - "node_modules/is-bun-module/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -7815,35 +8272,35 @@ } }, "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", + "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", "dev": true, "license": "MIT" }, "node_modules/jsdom": { - "version": "29.0.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-29.0.1.tgz", - "integrity": "sha512-z6JOK5gRO7aMybVq/y/MlIpKh8JIi68FBKMUtKkK2KH/wMSRlCxQ682d08LB9fYXplyY/UXG8P4XXTScmdjApg==", + "version": "29.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-29.1.0.tgz", + "integrity": "sha512-YNUc7fB9QuvSSQWfrH0xF+TyABkxUwx8sswgIDaCrw4Hol8BghdZDkITtZheRJeMtzWlnTfsM3bBBusRvpO1wg==", "dev": true, "license": "MIT", "dependencies": { - "@asamuzakjp/css-color": "^5.0.1", - "@asamuzakjp/dom-selector": "^7.0.3", + "@asamuzakjp/css-color": "^5.1.11", + "@asamuzakjp/dom-selector": "^7.1.1", "@bramus/specificity": "^2.4.2", - "@csstools/css-syntax-patches-for-csstree": "^1.1.1", + "@csstools/css-syntax-patches-for-csstree": "^1.1.3", "@exodus/bytes": "^1.15.0", "css-tree": "^3.2.1", "data-urls": "^7.0.0", "decimal.js": "^10.6.0", "html-encoding-sniffer": "^6.0.0", "is-potential-custom-element-name": "^1.0.1", - "lru-cache": "^11.2.7", - "parse5": "^8.0.0", + "lru-cache": "^11.3.5", + "parse5": "^8.0.1", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", "tough-cookie": "^6.0.1", - "undici": "^7.24.5", + "undici": "^7.25.0", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^8.0.1", "whatwg-mimetype": "^5.0.0", @@ -7863,9 +8320,9 @@ } }, "node_modules/jsdom/node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz", + "integrity": "sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -7941,18 +8398,6 @@ "npm": ">=6" } }, - "node_modules/jsonwebtoken/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -8371,6 +8816,13 @@ "loose-envify": "cli.js" } }, + "node_modules/loose-envify/node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, "node_modules/lowlight": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", @@ -8396,9 +8848,9 @@ } }, "node_modules/lru.min": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.3.tgz", - "integrity": "sha512-Lkk/vx6ak3rYkRR0Nhu4lFUT2VDnQSxBe8Hbl7f36358p6ow8Bnvr8lrLt98H8J1aGxfhbX4Fs5tYg2+FTwr5Q==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.4.tgz", + "integrity": "sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==", "dev": true, "license": "MIT", "engines": { @@ -8412,9 +8864,9 @@ } }, "node_modules/lucide-react": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.7.0.tgz", - "integrity": "sha512-yI7BeItCLZJTXikmK4KNUGCKoGzSvbKlfCvw44bU4fXAL6v3gYS4uHD1jzsLkfwODYwI6Drw5Tu9Z5ulDe0TSg==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.14.0.tgz", + "integrity": "sha512-+1mdWcfSJVUsaTIjN9zoezmUhfXo5l0vP7ekBMPo3jcS/aIkxHnXqAPsByszMZx/Y8oQBRJxJx5xg+RH3urzxA==", "license": "ISC", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" @@ -8458,19 +8910,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/markdown-table": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", @@ -8519,9 +8958,9 @@ } }, "node_modules/mdast-util-from-markdown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", - "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -9410,16 +9849,19 @@ } }, "node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^5.0.5" }, "engines": { - "node": "*" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { @@ -9474,44 +9916,17 @@ "node": ">= 8.0" } }, - "node_modules/mysql2/node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/named-placeholders": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", - "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.6.tgz", + "integrity": "sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==", "dev": true, "license": "MIT", "dependencies": { - "lru-cache": "^7.14.1" + "lru.min": "^1.1.0" }, "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/named-placeholders/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" + "node": ">=8.0.0" } }, "node_modules/nanoid": { @@ -9562,13 +9977,13 @@ "license": "MIT" }, "node_modules/next": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/next/-/next-16.2.1.tgz", - "integrity": "sha512-VaChzNL7o9rbfdt60HUj8tev4m6d7iC1igAy157526+cJlXOQu5LzsBXNT+xaJnTP/k+utSX5vMv7m0G+zKH+Q==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/next/-/next-16.2.4.tgz", + "integrity": "sha512-kPvz56wF5frc+FxlHI5qnklCzbq53HTwORaWBGdT0vNoKh1Aya9XC8aPauH4NJxqtzbWsS5mAbctm4cr+EkQ2Q==", "dev": true, "license": "MIT", "dependencies": { - "@next/env": "16.2.1", + "@next/env": "16.2.4", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", @@ -9582,14 +9997,14 @@ "node": ">=20.9.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "16.2.1", - "@next/swc-darwin-x64": "16.2.1", - "@next/swc-linux-arm64-gnu": "16.2.1", - "@next/swc-linux-arm64-musl": "16.2.1", - "@next/swc-linux-x64-gnu": "16.2.1", - "@next/swc-linux-x64-musl": "16.2.1", - "@next/swc-win32-arm64-msvc": "16.2.1", - "@next/swc-win32-x64-msvc": "16.2.1", + "@next/swc-darwin-arm64": "16.2.4", + "@next/swc-darwin-x64": "16.2.4", + "@next/swc-linux-arm64-gnu": "16.2.4", + "@next/swc-linux-arm64-musl": "16.2.4", + "@next/swc-linux-x64-gnu": "16.2.4", + "@next/swc-linux-x64-musl": "16.2.4", + "@next/swc-win32-arm64-msvc": "16.2.4", + "@next/swc-win32-x64-msvc": "16.2.4", "sharp": "^0.34.5" }, "peerDependencies": { @@ -9645,9 +10060,9 @@ } }, "node_modules/node-abi": { - "version": "3.85.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.85.0.tgz", - "integrity": "sha512-zsFhmbkAzwhTft6nd3VxcG0cvJsT70rL+BIGHWVq5fi6MwGrHwzqKaxXE+Hl2GmnGItnDKPPkO5/LQqjVkIdFg==", + "version": "3.89.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.89.0.tgz", + "integrity": "sha512-6u9UwL0HlAl21+agMN3YAMXcKByMqwGx+pq+P76vii5f7hTPtKDp08/H9py6DY+cfDw7kQNTGEj/rly3IgbNQA==", "license": "MIT", "dependencies": { "semver": "^7.3.5" @@ -9656,18 +10071,6 @@ "node": ">=10" } }, - "node_modules/node-abi/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/node-addon-api": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", @@ -9683,12 +10086,34 @@ "node": ">=6.0.0" } }, - "node_modules/node-fetch-native": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", - "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "node_modules/node-exports-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz", + "integrity": "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "array.prototype.flatmap": "^1.3.3", + "es-errors": "^1.3.0", + "object.entries": "^1.1.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/node-exports-info/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } }, "node_modules/node-pty": { "version": "1.1.0", @@ -9701,34 +10126,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.36", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", - "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", - "dev": true, - "license": "MIT" - }, - "node_modules/nypm": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.5.tgz", - "integrity": "sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "citty": "^0.2.0", - "pathe": "^2.0.3", - "tinyexec": "^1.0.2" - }, - "bin": { - "nypm": "dist/cli.mjs" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/nypm/node_modules/citty": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/citty/-/citty-0.2.1.tgz", - "integrity": "sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg==", + "version": "2.0.38", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", + "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", "dev": true, "license": "MIT" }, @@ -9976,13 +10376,13 @@ "license": "MIT" }, "node_modules/parse5": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", - "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", "dev": true, "license": "MIT", "dependencies": { - "entities": "^6.0.0" + "entities": "^8.0.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" @@ -10023,9 +10423,9 @@ "license": "MIT" }, "node_modules/perfect-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", - "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz", + "integrity": "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==", "dev": true, "license": "MIT" }, @@ -10049,14 +10449,14 @@ } }, "node_modules/pkg-types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", - "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.1.tgz", + "integrity": "sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==", "dev": true, "license": "MIT", "dependencies": { - "confbox": "^0.2.2", - "exsolve": "^1.0.7", + "confbox": "^0.2.4", + "exsolve": "^1.0.8", "pathe": "^2.0.3" } }, @@ -10077,9 +10477,9 @@ } }, "node_modules/postcss": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", - "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.12.tgz", + "integrity": "sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA==", "funding": [ { "type": "opencollective", @@ -10135,6 +10535,7 @@ "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", @@ -10168,9 +10569,9 @@ } }, "node_modules/prettier": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", - "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", + "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", "dev": true, "license": "MIT", "bin": { @@ -10184,9 +10585,9 @@ } }, "node_modules/prettier-plugin-tailwindcss": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.7.2.tgz", - "integrity": "sha512-LkphyK3Fw+q2HdMOoiEHWf93fNtYJwfamoKPl7UwtjFQdei/iIBoX11G6j706FzN3ymX9mPVi97qIY8328vdnA==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.8.0.tgz", + "integrity": "sha512-V8ITGH87yuBDF6JpEZTOVlUz/saAwqb8f3HRgUj8Lh+tGCcrmorhsLpYqzygwFwK0PE2Ib6Mv3M7T/uE2tZV1g==", "dev": true, "license": "MIT", "engines": { @@ -10263,16 +10664,16 @@ } }, "node_modules/prisma": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-7.6.0.tgz", - "integrity": "sha512-OKJIPT81K3+F+AayIkY/Y3mkF2NWoFh7lZApaaqPYy7EHILKdO0VsmGkP+hDKYTySHsFSyLWXm/JgcR1B8fY1Q==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-7.8.0.tgz", + "integrity": "sha512-yfN4yrw7HV9kEJhoy1+jgah0jafEIQsf7uWouSsM8MvJtlubsk+kM7AIBWZ8+GJl74Yj3c+nbYqBkMOxtsZ3Lw==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/config": "7.6.0", + "@prisma/config": "7.8.0", "@prisma/dev": "0.24.3", - "@prisma/engines": "7.6.0", + "@prisma/engines": "7.8.0", "@prisma/studio-core": "0.27.3", "mysql2": "3.15.3", "postgres": "3.4.7" @@ -10317,13 +10718,6 @@ "react-is": "^16.13.1" } }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "license": "MIT" - }, "node_modules/proper-lockfile": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", @@ -10363,9 +10757,9 @@ } }, "node_modules/pump": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "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", @@ -10435,47 +10829,45 @@ "rc": "cli.js" } }, - "node_modules/rc/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==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/rc9": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", - "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-3.0.1.tgz", + "integrity": "sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==", "dev": true, "license": "MIT", "dependencies": { - "defu": "^6.1.4", - "destr": "^2.0.3" + "defu": "^6.1.6", + "destr": "^2.0.5" } }, "node_modules/react": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", - "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.5.tgz", + "integrity": "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", - "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.5.tgz", + "integrity": "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==", "license": "MIT", "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.2.4" + "react": "^19.2.5" } }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT" + }, "node_modules/react-markdown": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-10.1.0.tgz", @@ -10504,9 +10896,9 @@ } }, "node_modules/react-remove-scroll": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", - "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz", + "integrity": "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==", "license": "MIT", "dependencies": { "react-remove-scroll-bar": "^2.3.7", @@ -10607,13 +10999,13 @@ } }, "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 14.18.0" + "node": ">= 20.19.0" }, "funding": { "type": "individual", @@ -10781,13 +11173,16 @@ } }, "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "version": "2.0.0-next.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.6.tgz", + "integrity": "sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==", "dev": true, "license": "MIT", "dependencies": { + "es-errors": "^1.3.0", "is-core-module": "^2.16.1", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -10833,13 +11228,13 @@ } }, "node_modules/rolldown": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.12.tgz", - "integrity": "sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==", + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.17.tgz", + "integrity": "sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA==", "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.122.0", - "@rolldown/pluginutils": "1.0.0-rc.12" + "@oxc-project/types": "=0.127.0", + "@rolldown/pluginutils": "1.0.0-rc.17" }, "bin": { "rolldown": "bin/cli.mjs" @@ -10848,27 +11243,27 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.0.0-rc.12", - "@rolldown/binding-darwin-arm64": "1.0.0-rc.12", - "@rolldown/binding-darwin-x64": "1.0.0-rc.12", - "@rolldown/binding-freebsd-x64": "1.0.0-rc.12", - "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.12", - "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.12", - "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-x64-musl": "1.0.0-rc.12", - "@rolldown/binding-openharmony-arm64": "1.0.0-rc.12", - "@rolldown/binding-wasm32-wasi": "1.0.0-rc.12", - "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.12", - "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.12" + "@rolldown/binding-android-arm64": "1.0.0-rc.17", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.17", + "@rolldown/binding-darwin-x64": "1.0.0-rc.17", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.17", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.17", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.17", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.17", + "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.17", + "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.17", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.17", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.17", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.17", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.17", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.17", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.17" } }, "node_modules/rolldown/node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.12.tgz", - "integrity": "sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==", + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.17.tgz", + "integrity": "sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==", "license": "MIT" }, "node_modules/run-parallel": { @@ -10896,15 +11291,15 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", + "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, @@ -10997,13 +11392,15 @@ "license": "MIT" }, "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, + "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/seq-queue": { @@ -11113,20 +11510,6 @@ "@img/sharp-win32-x64": "0.34.5" } }, - "node_modules/sharp/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -11171,14 +11554,14 @@ } }, "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "object-inspect": "^1.13.4" }, "engines": { "node": ">= 0.4" @@ -11306,13 +11689,6 @@ "node": ">=18" } }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -11357,9 +11733,9 @@ "license": "MIT" }, "node_modules/std-env": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", - "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz", + "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==", "dev": true, "license": "MIT" }, @@ -11528,18 +11904,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/strip-ansi/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/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -11563,6 +11927,15 @@ "node": ">=8" } }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/style-to-js": { "version": "1.1.21", "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", @@ -11661,16 +12034,16 @@ } }, "node_modules/tailwindcss": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.2.tgz", - "integrity": "sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.4.tgz", + "integrity": "sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==", "dev": true, "license": "MIT" }, "node_modules/tapable": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", - "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", "dev": true, "license": "MIT", "engines": { @@ -11717,9 +12090,9 @@ "license": "MIT" }, "node_modules/tinyexec": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", - "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.1.tgz", + "integrity": "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==", "dev": true, "license": "MIT", "engines": { @@ -11727,13 +12100,13 @@ } }, "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", "license": "MIT", "dependencies": { "fdir": "^6.5.0", - "picomatch": "^4.0.3" + "picomatch": "^4.0.4" }, "engines": { "node": ">=12.0.0" @@ -11742,23 +12115,6 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, "node_modules/tinyglobby/node_modules/picomatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", @@ -11782,22 +12138,22 @@ } }, "node_modules/tldts": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.26.tgz", - "integrity": "sha512-WiGwQjr0qYdNNG8KpMKlSvpxz652lqa3Rd+/hSaDcY4Uo6SKWZq2LAF+hsAhUewTtYhXlorBKgNF3Kk8hnjGoQ==", + "version": "7.0.29", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.29.tgz", + "integrity": "sha512-JIXCerhudr/N6OWLwLF1HVsTTUo7ry6qHa5eWZEkiMuxsIiAACL55tGLfqfHfoH7QaMQUW8fngD7u7TxWexYQg==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^7.0.26" + "tldts-core": "^7.0.29" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.26.tgz", - "integrity": "sha512-5WJ2SqFsv4G2Dwi7ZFVRnz6b2H1od39QME1lc2y5Ew3eWiZMAeqOAfWpRP9jHvhUl881406QtZTODvjttJs+ew==", + "version": "7.0.29", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.29.tgz", + "integrity": "sha512-W99NuU7b1DcG3uJ3v9k9VztCH3WialNbBkBft5wCs8V8mexu0XQqaZEYb9l9RNNzK8+3EJ9PKWB0/RUtTQ/o+Q==", "dev": true, "license": "MIT" }, @@ -11935,490 +12291,6 @@ "fsevents": "~2.3.3" } }, - "node_modules/tsx/node_modules/@esbuild/aix-ppc64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.0.tgz", - "integrity": "sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/android-arm": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.0.tgz", - "integrity": "sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/android-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.0.tgz", - "integrity": "sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/android-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.0.tgz", - "integrity": "sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.0.tgz", - "integrity": "sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/darwin-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.0.tgz", - "integrity": "sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.0.tgz", - "integrity": "sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.0.tgz", - "integrity": "sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-arm": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.0.tgz", - "integrity": "sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.0.tgz", - "integrity": "sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-ia32": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.0.tgz", - "integrity": "sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-loong64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.0.tgz", - "integrity": "sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.0.tgz", - "integrity": "sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.0.tgz", - "integrity": "sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.0.tgz", - "integrity": "sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-s390x": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.0.tgz", - "integrity": "sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.0.tgz", - "integrity": "sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.0.tgz", - "integrity": "sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.0.tgz", - "integrity": "sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.0.tgz", - "integrity": "sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.0.tgz", - "integrity": "sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.0.tgz", - "integrity": "sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/sunos-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.0.tgz", - "integrity": "sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/win32-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.0.tgz", - "integrity": "sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/win32-ia32": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.0.tgz", - "integrity": "sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/win32-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.0.tgz", - "integrity": "sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/esbuild": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.0.tgz", - "integrity": "sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.0", - "@esbuild/android-arm": "0.27.0", - "@esbuild/android-arm64": "0.27.0", - "@esbuild/android-x64": "0.27.0", - "@esbuild/darwin-arm64": "0.27.0", - "@esbuild/darwin-x64": "0.27.0", - "@esbuild/freebsd-arm64": "0.27.0", - "@esbuild/freebsd-x64": "0.27.0", - "@esbuild/linux-arm": "0.27.0", - "@esbuild/linux-arm64": "0.27.0", - "@esbuild/linux-ia32": "0.27.0", - "@esbuild/linux-loong64": "0.27.0", - "@esbuild/linux-mips64el": "0.27.0", - "@esbuild/linux-ppc64": "0.27.0", - "@esbuild/linux-riscv64": "0.27.0", - "@esbuild/linux-s390x": "0.27.0", - "@esbuild/linux-x64": "0.27.0", - "@esbuild/netbsd-arm64": "0.27.0", - "@esbuild/netbsd-x64": "0.27.0", - "@esbuild/openbsd-arm64": "0.27.0", - "@esbuild/openbsd-x64": "0.27.0", - "@esbuild/openharmony-arm64": "0.27.0", - "@esbuild/sunos-x64": "0.27.0", - "@esbuild/win32-arm64": "0.27.0", - "@esbuild/win32-ia32": "0.27.0", - "@esbuild/win32-x64": "0.27.0" - } - }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -12523,9 +12395,9 @@ } }, "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -12537,16 +12409,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.58.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.58.0.tgz", - "integrity": "sha512-e2TQzKfaI85fO+F3QywtX+tCTsu/D3WW5LVU6nz8hTFKFZ8yBJ6mSYRpXqdR3mFjPWmO0eWsTa5f+UpAOe/FMA==", + "version": "8.59.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.59.1.tgz", + "integrity": "sha512-xqDcFVBmlrltH64lklOVp1wYxgJr6LVdg3NamBgH2OOQDLFdTKfIZXF5PfghrnXQKXZGTQs8tr1vL7fJvq8CTQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.58.0", - "@typescript-eslint/parser": "8.58.0", - "@typescript-eslint/typescript-estree": "8.58.0", - "@typescript-eslint/utils": "8.58.0" + "@typescript-eslint/eslint-plugin": "8.59.1", + "@typescript-eslint/parser": "8.59.1", + "@typescript-eslint/typescript-estree": "8.59.1", + "@typescript-eslint/utils": "8.59.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -12580,9 +12452,9 @@ } }, "node_modules/undici": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.24.6.tgz", - "integrity": "sha512-Xi4agocCbRzt0yYMZGMA6ApD7gvtUFaxm4ZmeacWI4cZxaF6C+8I8QfofC20NAePiB/IcvZmzkJ7XPa471AEtA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.25.0.tgz", + "integrity": "sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==", "dev": true, "license": "MIT", "engines": { @@ -12590,9 +12462,9 @@ } }, "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "version": "7.19.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", + "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==", "license": "MIT" }, "node_modules/unified": { @@ -12654,9 +12526,9 @@ } }, "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -12851,16 +12723,16 @@ } }, "node_modules/vite": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.3.tgz", - "integrity": "sha512-B9ifbFudT1TFhfltfaIPgjo9Z3mDynBTJSUYxTjOQruf/zHH+ezCQKcoqO+h7a9Pw9Nm/OtlXAiGT1axBgwqrQ==", + "version": "8.0.10", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.10.tgz", + "integrity": "sha512-rZuUu9j6J5uotLDs+cAA4O5H4K1SfPliUlQwqa6YEwSrWDZzP4rhm00oJR5snMewjxF5V/K3D4kctsUTsIU9Mw==", "license": "MIT", "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", - "postcss": "^8.5.8", - "rolldown": "1.0.0-rc.12", - "tinyglobby": "^0.2.15" + "postcss": "^8.5.10", + "rolldown": "1.0.0-rc.17", + "tinyglobby": "^0.2.16" }, "bin": { "vite": "bin/vite.js" @@ -12877,7 +12749,7 @@ "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.0", - "esbuild": "^0.27.0", + "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", @@ -12940,19 +12812,19 @@ } }, "node_modules/vitest": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.2.tgz", - "integrity": "sha512-xjR1dMTVHlFLh98JE3i/f/WePqJsah4A0FK9cc8Ehp9Udk0AZk6ccpIZhh1qJ/yxVWRZ+Q54ocnD8TXmkhspGg==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.5.tgz", + "integrity": "sha512-9Xx1v3/ih3m9hN+SbfkUyy0JAs72ap3r7joc87XL6jwF0jGg6mFBvQ1SrwaX+h8BlkX6Hz9shdd1uo6AF+ZGpg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "4.1.2", - "@vitest/mocker": "4.1.2", - "@vitest/pretty-format": "4.1.2", - "@vitest/runner": "4.1.2", - "@vitest/snapshot": "4.1.2", - "@vitest/spy": "4.1.2", - "@vitest/utils": "4.1.2", + "@vitest/expect": "4.1.5", + "@vitest/mocker": "4.1.5", + "@vitest/pretty-format": "4.1.5", + "@vitest/runner": "4.1.5", + "@vitest/snapshot": "4.1.5", + "@vitest/spy": "4.1.5", + "@vitest/utils": "4.1.5", "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", @@ -12980,10 +12852,12 @@ "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.1.2", - "@vitest/browser-preview": "4.1.2", - "@vitest/browser-webdriverio": "4.1.2", - "@vitest/ui": "4.1.2", + "@vitest/browser-playwright": "4.1.5", + "@vitest/browser-preview": "4.1.5", + "@vitest/browser-webdriverio": "4.1.5", + "@vitest/coverage-istanbul": "4.1.5", + "@vitest/coverage-v8": "4.1.5", + "@vitest/ui": "4.1.5", "happy-dom": "*", "jsdom": "*", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -13007,6 +12881,12 @@ "@vitest/browser-webdriverio": { "optional": true }, + "@vitest/coverage-istanbul": { + "optional": true + }, + "@vitest/coverage-v8": { + "optional": true + }, "@vitest/ui": { "optional": true }, @@ -13034,13 +12914,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/vitest/node_modules/std-env": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.0.0.tgz", - "integrity": "sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==", - "dev": true, - "license": "MIT" - }, "node_modules/w3c-xmlserializer": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", @@ -13173,9 +13046,9 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 7b29b0d..0d2e4d3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pve-scripts-local", - "version": "0.5.8", + "version": "1.0.0-pre9", "private": true, "type": "module", "scripts": { @@ -25,36 +25,36 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@prisma/adapter-better-sqlite3": "^7.6.0", - "@prisma/client": "^7.6.0", + "@prisma/adapter-better-sqlite3": "^7.8.0", + "@prisma/client": "^7.8.0", "@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-slot": "^1.2.4", "@t3-oss/env-nextjs": "^0.13.11", "@tailwindcss/typography": "^0.5.19", - "@tanstack/react-query": "^5.96.0", - "@trpc/client": "^11.16.0", - "@trpc/react-query": "^11.16.0", - "@trpc/server": "^11.16.0", + "@tanstack/react-query": "^5.100.9", + "@trpc/client": "^11.17.0", + "@trpc/react-query": "^11.17.0", + "@trpc/server": "^11.17.0", "@types/react-syntax-highlighter": "^15.5.13", "@types/ws": "^8.18.1", "@xterm/addon-fit": "^0.11.0", "@xterm/addon-web-links": "^0.12.0", "@xterm/xterm": "^6.0.0", - "axios": "^1.14.0", + "axios": "^1.16.0", "bcryptjs": "^3.0.3", - "better-sqlite3": "^12.8.0", + "better-sqlite3": "^12.9.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cron-validator": "^1.4.0", - "dotenv": "^17.3.1", + "dotenv": "^17.4.2", "jsonwebtoken": "^9.0.3", - "lucide-react": "^1.7.0", - "next": ">=16.2.1", + "lucide-react": "^1.14.0", + "next": "16.2.4", "node-cron": "^4.2.1", "node-pty": "^1.1.0", "pocketbase": "^0.26.8", - "react": "^19.2.4", - "react-dom": "^19.2.4", + "react": "^19.2.5", + "react-dom": "^19.2.5", "react-markdown": "^10.1.0", "react-syntax-highlighter": "^16.1.1", "refractor": "^5.0.0", @@ -63,39 +63,40 @@ "strip-ansi": "^7.2.0", "superjson": "^2.2.6", "tailwind-merge": "^3.5.0", - "vite": "^8.0.3", + "vite": "^8.0.10", "ws": "^8.20.0", - "zod": "^4.3.6" + "zod": "^4.4.3" }, "devDependencies": { - "@tailwindcss/postcss": "^4.2.2", + "@tailwindcss/postcss": "^4.2.4", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", "@testing-library/user-event": "^14.6.1", "@types/bcryptjs": "^3.0.0", "@types/better-sqlite3": "^7.6.13", "@types/jsonwebtoken": "^9.0.10", - "@types/node": "^24.10.9", + "@types/node": "^25.6.0", "@types/node-cron": "^3.0.11", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^6.0.1", - "@vitest/coverage-v8": "^4.1.2", - "@vitest/ui": "^4.1.2", - "baseline-browser-mapping": "^2.10.13", - "eslint": "^10.1.0", - "eslint-config-next": "^16.2.1", - "jsdom": "^29.0.1", - "next": ">=16.2.1", - "postcss": "^8.5.8", - "prettier": "^3.8.1", - "prettier-plugin-tailwindcss": "^0.7.2", - "prisma": "^7.6.0", - "tailwindcss": "^4.2.2", + "@vitest/coverage-v8": "^4.1.5", + "@vitest/ui": "^4.1.5", + "baseline-browser-mapping": "^2.10.27", + "eslint": "^10.3.0", + "eslint-config-next": "^16.2.4", + "jsdom": "^29.1.1", + "next": "16.2.4", + "postcss": "^8.5.14", + "prettier": "^3.8.3", + "prettier-plugin-tailwindcss": "^0.8.0", + "prisma": "^7.8.0", + "tailwindcss": "^4.2.4", "tsx": "^4.21.0", - "typescript": "^6.0.2", - "typescript-eslint": "^8.58.0", - "vitest": "^4.1.2" + "typescript": "^6.0.3", + "@typescript-eslint/eslint-plugin": "^8.59.2", + "@typescript-eslint/parser": "^8.59.2", + "vitest": "^4.1.5" }, "ct3aMetadata": { "initVersion": "7.39.3" @@ -110,4 +111,4 @@ "@hono/node-server": ">=1.19.10", "lodash": "^4.17.23" } -} +} \ No newline at end of file diff --git a/pre-release-updater.sh b/pre-release-updater.sh new file mode 100644 index 0000000..8d9653d --- /dev/null +++ b/pre-release-updater.sh @@ -0,0 +1,395 @@ +#!/bin/bash + +# ProxmoxVE-Local Pre-Release Updater +# ==================================== +# This script allows users to upgrade from stable (e.g. v0.5.8) to pre-release +# versions (v1.0.0-pre1, v1.0.0-pre2, etc.) for testing purposes. +# +# Installation: +# curl -fsSL https://github.com/community-scripts/ProxmoxVE-Local/releases/download/v1.0.0-pre1/pre-release-updater.sh -o /opt/pve-local-prerelease-updater.sh +# chmod +x /opt/pve-local-prerelease-updater.sh +# +# Usage: +# bash /opt/pve-local-prerelease-updater.sh +# +# The script will: +# 1. Fetch all available pre-releases from GitHub +# 2. Display them (newest first) with a numbered menu +# 3. Let the user pick which pre-release to install +# 4. Download and install the selected pre-release + +set -euo pipefail + +# --- Configuration ----------------------------------------------------------- +REPO_OWNER="community-scripts" +REPO_NAME="ProxmoxVE-Local" +GITHUB_API="https://api.github.com/repos/${REPO_OWNER}/${REPO_NAME}" +INSTALL_DIR="/opt/ProxmoxVE-Local" +BACKUP_DIR="/tmp/pve-prerelease-backup-$(date +%Y%m%d-%H%M%S)" +SERVICE_NAME="pve-scripts-local" + +# --- Colors ------------------------------------------------------------------ +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +CYAN='\033[0;36m' +BOLD='\033[1m' +NC='\033[0m' + +# --- Helper Functions -------------------------------------------------------- +msg() { echo -e "${BLUE}[INFO]${NC} $1"; } +msg_ok() { echo -e "${GREEN}[OK]${NC} $1"; } +msg_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } +msg_err() { echo -e "${RED}[ERROR]${NC} $1" >&2; } + +header() { + echo "" + echo -e "${CYAN}╔══════════════════════════════════════════════════════════════╗${NC}" + echo -e "${CYAN}║${NC} ${BOLD}ProxmoxVE-Local Pre-Release Updater${NC} ${CYAN}║${NC}" + echo -e "${CYAN}║${NC} Test upcoming releases before they go stable ${CYAN}║${NC}" + echo -e "${CYAN}╚══════════════════════════════════════════════════════════════╝${NC}" + echo "" +} + +# --- Dependency Check -------------------------------------------------------- +check_dependencies() { + local missing=() + for cmd in curl jq tar node npm; do + if ! command -v "$cmd" &>/dev/null; then + missing+=("$cmd") + fi + done + + if [ ${#missing[@]} -ne 0 ]; then + msg_err "Missing dependencies: ${missing[*]}" + msg_err "Install them with: apt-get install -y ${missing[*]}" + exit 1 + fi +} + +# --- Get Current Version ----------------------------------------------------- +get_current_version() { + if [ -f "${INSTALL_DIR}/VERSION" ]; then + cat "${INSTALL_DIR}/VERSION" | tr -d '[:space:]' + else + echo "unknown" + fi +} + +# --- Fetch Pre-Releases from GitHub ------------------------------------------ +fetch_prereleases() { + msg "Fetching available pre-releases from GitHub..." >&2 + + local curl_opts="-fsSL --connect-timeout 15 --max-time 30" + + # Add token if available + if [ -n "${GITHUB_TOKEN:-}" ]; then + curl_opts="$curl_opts -H \"Authorization: token $GITHUB_TOKEN\"" + fi + + local releases_json + if ! releases_json=$(eval "curl $curl_opts \"${GITHUB_API}/releases?per_page=20\""); then + msg_err "Failed to fetch releases from GitHub API" + msg_err "Check your internet connection or try again later." + exit 1 + fi + + # Validate JSON + if ! echo "$releases_json" | jq empty 2>/dev/null; then + msg_err "Invalid response from GitHub API" + exit 1 + fi + + # Filter pre-releases only, sort newest first (already sorted by API) + local prereleases + prereleases=$(echo "$releases_json" | jq -r '[.[] | select(.prerelease == true)] | sort_by(.published_at) | reverse') + + local count + count=$(echo "$prereleases" | jq 'length') + + if [ "$count" -eq 0 ]; then + msg_warn "No pre-releases found." >&2 + msg "There are currently no pre-release versions available for testing." >&2 + exit 0 + fi + + echo "$prereleases" +} + +# --- Display Menu ------------------------------------------------------------ +display_menu() { + local prereleases="$1" + local current_version="$2" + local count + count=$(echo "$prereleases" | jq 'length') + + echo -e "${BOLD}Currently installed:${NC} v${current_version}" + echo "" + echo -e "${BOLD}Available Pre-Releases:${NC} (newest first)" + echo -e "────────────────────────────────────────────────────" + printf " ${BOLD}%-4s %-20s %-12s %s${NC}\n" "#" "Version" "Date" "Notes" + echo -e "────────────────────────────────────────────────────" + + for ((i = 0; i < count; i++)); do + local tag_name published_at name + tag_name=$(echo "$prereleases" | jq -r ".[$i].tag_name") + published_at=$(echo "$prereleases" | jq -r ".[$i].published_at // .[$i].created_at" | cut -d'T' -f1) + name=$(echo "$prereleases" | jq -r ".[$i].name // .[$i].tag_name" | head -c 30) + + local marker="" + if [ "$tag_name" = "v${current_version}" ] || [ "$tag_name" = "${current_version}" ]; then + marker=" ${GREEN}← installed${NC}" + fi + + printf " ${CYAN}%-4s${NC} %-20s %-12s %s%b\n" "$((i + 1))" "$tag_name" "$published_at" "$name" "$marker" + done + + echo -e "────────────────────────────────────────────────────" + echo "" +} + +# --- User Selection ---------------------------------------------------------- +get_user_choice() { + local count="$1" + + while true; do + echo -ne "${BOLD}Select a pre-release to install [1-${count}] (or 'q' to quit): ${NC}" >&2 + read -r choice + + if [ "$choice" = "q" ] || [ "$choice" = "Q" ]; then + msg "Aborted by user." >&2 + exit 0 + fi + + # Validate numeric input + if [[ "$choice" =~ ^[0-9]+$ ]] && [ "$choice" -ge 1 ] && [ "$choice" -le "$count" ]; then + echo "$choice" + return 0 + fi + + msg_warn "Invalid choice. Please enter a number between 1 and ${count}." >&2 + done +} + +# --- Backup ------------------------------------------------------------------ +backup_current() { + if [ ! -d "$INSTALL_DIR" ]; then + msg "No existing installation found, skipping backup." + return 0 + fi + + msg "Backing up current installation..." + mkdir -p "$BACKUP_DIR" + + # Backup critical data + if [ -d "${INSTALL_DIR}/data" ]; then + cp -r "${INSTALL_DIR}/data" "$BACKUP_DIR/data" + fi + if [ -f "${INSTALL_DIR}/.env" ]; then + cp "${INSTALL_DIR}/.env" "$BACKUP_DIR/.env" + fi + if [ -d "${INSTALL_DIR}/prisma" ]; then + # Backup the SQLite database if it exists + find "${INSTALL_DIR}/prisma" -name "*.db" -exec cp {} "$BACKUP_DIR/" \; 2>/dev/null || true + fi + + # Backup downloaded scripts so updates never wipe user downloads + for dir in ct tools vm vw; do + if [ -d "${INSTALL_DIR}/scripts/${dir}" ]; then + cp -r "${INSTALL_DIR}/scripts/${dir}" "$BACKUP_DIR/scripts-${dir}" + fi + done + + msg_ok "Backup created at: $BACKUP_DIR" +} + +restore_downloaded_scripts() { + for dir in ct tools vm vw; do + if [ -d "$BACKUP_DIR/scripts-${dir}" ]; then + mkdir -p "${INSTALL_DIR}/scripts" + rm -rf "${INSTALL_DIR}/scripts/${dir}" 2>/dev/null || true + cp -r "$BACKUP_DIR/scripts-${dir}" "${INSTALL_DIR}/scripts/${dir}" + msg_ok "Restored downloaded scripts directory: scripts/${dir}" + fi + done +} + +# --- Install Pre-Release ----------------------------------------------------- +install_prerelease() { + local tag_name="$1" + + msg "Installing pre-release: ${tag_name}..." + + local download_url="https://github.com/${REPO_OWNER}/${REPO_NAME}/archive/refs/tags/${tag_name}.tar.gz" + local temp_dir="/tmp/pve-prerelease-$$" + + # Create temp directory + mkdir -p "$temp_dir" + trap "rm -rf $temp_dir" EXIT + + # Download + msg "Downloading ${tag_name}..." + if ! curl -fsSL --connect-timeout 30 --max-time 300 --retry 3 -o "$temp_dir/release.tar.gz" "$download_url"; then + msg_err "Failed to download release. Check that the tag '${tag_name}' exists." + exit 1 + fi + + # Verify download + if [ ! -s "$temp_dir/release.tar.gz" ]; then + msg_err "Downloaded file is empty." + exit 1 + fi + + msg_ok "Downloaded ($(du -h "$temp_dir/release.tar.gz" | cut -f1))" + + # Extract + msg "Extracting..." + if ! tar -xzf "$temp_dir/release.tar.gz" -C "$temp_dir"; then + msg_err "Failed to extract release archive." + exit 1 + fi + + # Find extracted directory + local extracted_dir + extracted_dir=$(find "$temp_dir" -maxdepth 1 -type d -name "${REPO_NAME}-*" | head -1) + if [ -z "$extracted_dir" ]; then + msg_err "Could not find extracted directory." + exit 1 + fi + + # Stop service if running + local service_was_running=false + if systemctl is-active --quiet "$SERVICE_NAME" 2>/dev/null; then + msg "Stopping ${SERVICE_NAME} service..." + systemctl stop "$SERVICE_NAME" + service_was_running=true + fi + + # Install: sync files (preserve data, .env, node_modules) + msg "Installing files to ${INSTALL_DIR}..." + mkdir -p "$INSTALL_DIR" + + # Use rsync if available, otherwise manual copy + if command -v rsync &>/dev/null; then + rsync -a --delete \ + --exclude='data/' \ + --exclude='.env' \ + --exclude='node_modules/' \ + --exclude='scripts/ct/' \ + --exclude='scripts/tools/' \ + --exclude='scripts/vm/' \ + --exclude='scripts/vw/' \ + --exclude='prisma/*.db' \ + --exclude='prisma/*.db-journal' \ + "$extracted_dir/" "$INSTALL_DIR/" + else + # Manual approach: remove old files (except protected), copy new + find "$INSTALL_DIR" -mindepth 1 \ + ! -path "${INSTALL_DIR}/data*" \ + ! -path "${INSTALL_DIR}/.env" \ + ! -path "${INSTALL_DIR}/node_modules*" \ + ! -name "*.db" \ + ! -name "*.db-journal" \ + -delete 2>/dev/null || true + cp -r "$extracted_dir/"* "$INSTALL_DIR/" + fi + + # Always restore user-downloaded scripts after copying release files + restore_downloaded_scripts + + msg_ok "Files installed" + + # Install dependencies (dev deps needed for prisma generate & build) + msg "Installing npm dependencies..." + cd "$INSTALL_DIR" + if ! npm ci 2>/dev/null; then + msg_warn "npm ci failed, trying npm install..." + npm install + fi + msg_ok "Dependencies installed" + + # Run prisma migrations + msg "Running database migrations..." + npx prisma migrate deploy 2>/dev/null || msg_warn "Migration skipped (may already be up to date)" + msg_ok "Database ready" + + # Build + msg "Building application..." + if ! npm run build; then + msg_err "Build failed! Check the logs above." + msg_warn "Your backup is at: $BACKUP_DIR" + exit 1 + fi + msg_ok "Build complete" + + # Restart service if it was running + if [ "$service_was_running" = true ]; then + msg "Restarting ${SERVICE_NAME} service..." + systemctl start "$SERVICE_NAME" + msg_ok "Service restarted" + fi + + echo "" + echo -e "${GREEN}╔══════════════════════════════════════════════════════════════╗${NC}" + echo -e "${GREEN}║${NC} ${BOLD}Pre-release ${tag_name} installed successfully!${NC} ${GREEN}║${NC}" + echo -e "${GREEN}╚══════════════════════════════════════════════════════════════╝${NC}" + echo "" + msg "Backup location: $BACKUP_DIR" + msg "To rollback, restore the backup and run: systemctl restart ${SERVICE_NAME}" + echo "" +} + +# --- Main -------------------------------------------------------------------- +main() { + header + + # Must run as root + if [ "$(id -u)" -ne 0 ]; then + msg_err "This script must be run as root (use sudo)." + exit 1 + fi + + check_dependencies + + local current_version + current_version=$(get_current_version) + + # Fetch pre-releases + local prereleases + prereleases=$(fetch_prereleases) + + local count + count=$(echo "$prereleases" | jq 'length') + + # Display menu + display_menu "$prereleases" "$current_version" + + # Get user choice + local choice + choice=$(get_user_choice "$count") + + # Get selected tag + local selected_tag + selected_tag=$(echo "$prereleases" | jq -r ".[$(($choice - 1))].tag_name") + + # Confirm + echo "" + echo -e "${YELLOW}You are about to update:${NC}" + echo -e " From: ${BOLD}v${current_version}${NC}" + echo -e " To: ${BOLD}${selected_tag}${NC}" + echo "" + echo -ne "${BOLD}Continue? [y/N]: ${NC}" + read -r confirm + + if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then + msg "Aborted by user." + exit 0 + fi + + # Backup and install + backup_current + install_prerelease "$selected_tag" +} + +main "$@" diff --git a/prisma/migrations/20260401113636_add_notes_and_presets/migration.sql b/prisma/migrations/20260401113636_add_notes_and_presets/migration.sql new file mode 100644 index 0000000..a150b48 --- /dev/null +++ b/prisma/migrations/20260401113636_add_notes_and_presets/migration.sql @@ -0,0 +1,37 @@ +-- CreateTable +CREATE TABLE "script_notes" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "script_slug" TEXT NOT NULL, + "title" TEXT NOT NULL DEFAULT '', + "content" TEXT NOT NULL, + "is_shared" BOOLEAN NOT NULL DEFAULT false, + "created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" DATETIME NOT NULL +); + +-- CreateTable +CREATE TABLE "server_presets" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "server_id" INTEGER NOT NULL, + "name" TEXT NOT NULL, + "cpu" INTEGER, + "ram" INTEGER, + "disk" INTEGER, + "privileged" BOOLEAN NOT NULL DEFAULT false, + "bridge" TEXT, + "vlan" TEXT, + "dns" TEXT, + "ssh" BOOLEAN NOT NULL DEFAULT false, + "nesting" BOOLEAN NOT NULL DEFAULT true, + "fuse" BOOLEAN NOT NULL DEFAULT false, + "apt_proxy_addr" TEXT, + "apt_proxy_on" BOOLEAN NOT NULL DEFAULT false, + "created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" DATETIME NOT NULL +); + +-- CreateIndex +CREATE INDEX "script_notes_script_slug_idx" ON "script_notes"("script_slug"); + +-- CreateIndex +CREATE INDEX "server_presets_server_id_idx" ON "server_presets"("server_id"); diff --git a/prisma/migrations/20260429000000_add_pbs_username/migration.sql b/prisma/migrations/20260429000000_add_pbs_username/migration.sql new file mode 100644 index 0000000..5877bb0 --- /dev/null +++ b/prisma/migrations/20260429000000_add_pbs_username/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable: add pbs_username to pbs_storage_credentials with default 'root@pam' +ALTER TABLE "pbs_storage_credentials" ADD COLUMN "pbs_username" TEXT NOT NULL DEFAULT 'root@pam'; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index de112ad..55fff9f 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -123,6 +123,7 @@ model PBSStorageCredential { storage_name String pbs_ip String pbs_datastore String + pbs_username String @default("root@pam") pbs_password String pbs_fingerprint String created_at DateTime @default(now()) @@ -146,3 +147,39 @@ model Repository { @@map("repositories") } + +model ScriptNote { + id Int @id @default(autoincrement()) + script_slug String + title String @default("") + content String + is_shared Boolean @default(false) + created_at DateTime @default(now()) + updated_at DateTime @updatedAt + + @@index([script_slug]) + @@map("script_notes") +} + +model ServerPreset { + id Int @id @default(autoincrement()) + server_id Int + name String + cpu Int? + ram Int? + disk Int? + privileged Boolean @default(false) + bridge String? + vlan String? + dns String? + ssh Boolean @default(false) + nesting Boolean @default(true) + fuse Boolean @default(false) + apt_proxy_addr String? + apt_proxy_on Boolean @default(false) + created_at DateTime @default(now()) + updated_at DateTime @updatedAt + + @@index([server_id]) + @@map("server_presets") +} diff --git a/public/favicon.png b/public/favicon.png deleted file mode 100644 index 5e4b11bbe461650d9d8556f24e79ebe7e8cea909..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65754 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 diff --git a/public/favicon/android-chrome-192x192.png b/public/favicon/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..80ef9de0450e8b1e71eb4cf240c0cd6021b2465f GIT binary patch literal 59275 zcmV*2KzF~1P)y}9+A^UnYC%zMtwO#yM&-T(e}ojcEzXP!3CJTq^*HwpSj`fvBZ;fEg{UiZ4! zm9_KEm7%aRea1@v?FRiHR``z%@ZY%jF~)HD_1ACl^z`YUUC`Tobj$LkziH`O{+lw; zvU2%v=5%-c`k`l^Iphx~p7`2HF;@N?P5VEq>K_~6ziH{OyZ7GF|N8XE(XYryPF1!BPgAV(}&oBG-p+7q0yTAP97B@_t+VWp$>i=2MIR5|a-2cla zPT-fWxbC{0-u>~9?|;qRcb#+Tb=UrR@~oNf?#t^PHOZm{QYUY^xa^QJ}s-q zygXyhoZZg3@PZ?6zUhW5jyvqIADw^Ym9KNz`bYY^dEo!>2Kc-Aa8MAzX_s7k?SwCV z=UYEG@X#M!^1x#c|K`QHv){XFpnqg;DYnIV&xud06ZFw?k zQ?0d3o-yOK_dWd3kACv=BQE&b!3X~8vYT(-5nb7!;(s*$!yfp@2KW!VZZ+d2mt0c$ z(g6o-_R-IM?u$P^>Q}d1c*PY*&Rep0*S>nKy>4cC;M5N^2z1{D&e_t^qRltmRPWk* zAH8Sqw`%*%w$QLjn;=UUgR~{0Zvn9xZQb|Ui!VC|Kf;Szk1-efBvH* zkKE(LOD-A4W?VfdLGW>&nwFf-#|LuSScKY3^ryh96z4uJK?f!fI^ukLs zcdE+Ib;XRkoJ=wfc_4Dz6ICh&?fIHr_2cgxsEbZLLzkX)mM#J=Ip-Yx;?N)K-TS^( zBRbk-{D@RHt`F(HC@7j)RWZEq;*1HGTz&PAF1z}wi!VF>+#`Sb%U`~0)~s2hA^%7I z8$Ixk4e&QQ%*p-4J>mS*w>bW+Gk$o}EjM5M%;e_|pSN_$Tl;FY4&&}65WJk^#$AjY z3}hC9cHePl{qd-yb-`(;>7f1h*PgrXs^P6|K&y7%etUiW%U{&##~r6Ljyqm&-|J0k zfrrh5N|!=~TmcbzJ+*3>wP4;h4?pq50cT%y!MWc)?8m2^bLpk;pD|-btNxK*wFknh zru+w?{3F%ZzWwcOKKz-_9DLN#zrXV@Pe1k3Wxd_I^7^uaTlb8h4}rHk#HV?Xnwf^T zcjz@c?4;lS{1>|Ml1uf~&wfr@kDs9Saz*a^$bG(p5!j_r*2ZHu)IaU_eqB0oqE7k4 zAN7V^cGIY~4h3TqSk5X?M`+uT4irb(LedgmI*Hsr?q~HGhNPX}f?_whilX3<#XBX)R#H& zH`!=ILFyFpGkg`H{&?R49W(t#edWnBfiraEX>Xl%+zGnq%ro@i_q<0NZ7@dM7bOifnU==^ zJ=Qx{$IiM%-+cOP{dwuVdLX`}2jd)_)%CEx@${Mc)wFB%z^a*An)j*ZoWwa=G4#wE>La*wOY1x<;pP+KKAH4e|P+Gr+)ft zUpwPlKmNf-jymqR4KIm2pS$dTfG^@dyx<=2+k{JQxM9N?ix>a%g*V=K`~wd^bpDgi zJ$uOVRh?VZ4L_yOk}Mh>5pG5uHFo4^ed>cB(eX$BM(1%tf9wPA*YLJBdGa%vtA&=v zs_yQbq2IoEiw=C|Je{!MHa(v$QctO_Dx0T{v_778XH`~d;);iL@Cz5}m(#D)%`0Be z0yY9)jg>3%Behm4+V5TO(m8+rGY`wh>EAy2DUBby5w-{^K=am!+Ijpf5_1^&m!}^8 z^ySxGd-^rkU392qJwj+M|i&L+=_2v_w zpFZ_-%ep$ZsVOhz1QL;jpQ6k{3PRrtZRJu5{7cV1TYviPG5XktKB%!{#>g6>=t13S zbv@iWM?Zi5N*yx!e4V=NUOh?Rca|fkJF<|S^DIygIROr^xw^ADn`4>I?R-=}eDN|J z`rIYDqidR$!cmvxx&t~!4;!ZUzWp6K`sY9ARqEOL%BMc95$&zw^28=pBbh~|ZpfL) zlI1JMJ~jFIf4ca}D}MjgZ++vuqfYqKzx-dnH46Ganh1LP^(m)}{OZ96zx92e`sd4! zKkbZbrp}u2k~yB+7I^3)=^Wh)z=?CO%ppG*3__6t4ciRa?%&l*Z^rmar;8xvjafqiqRpe zmrXGvtkP8j&+6OHo~xfszKo49ohw2wkINCdpbVWOJBI1?uX&A5{LL}C_WTR9|wBeb`~w|KvBn`RMUyoUuuav4j!- ztMl5E3u`0(xA$3OJM)rDHvH_@zV_iuFTVJX*W7r+g?B&n;D@^h`u$a={0$Akf*S}j z-v9(>nLyiO+$Q?sr#_?8|L{khbJCyn);GLCWo}=@ra-0!IBOTiUftd~MZcbTqYixT zT%Eb}e$8m@Qa>lY2v;M%0tz5SK7mddkuRC@0GQvuo1)7U2}AlIp4Zl^OS>M|!CXa- zn0l42UHY_M%DdESc_K111)c@=di@)9{%L2Vjp+~HTW`9#0%H-ms8HlbB)1pswxX}6 zff8wd9oO$zI zcbxIuw8{Uvyt`|Yx}u-Ugo-%sqrBs*Pbl*6IZEI7;+J*tnP=U{v z%YTZHtw*j1rKlODE?vCpNgX!hN`3$Ni*(tNCp9_!k`>nq^=D0sy{)3G?@jKP|Gl$gW-MYj;&(@k{pT-z>205T_q#4V<%}~gob7}n9Q-FDnjM|}T>y5ZtW^({8> z78{ROYq^{xMddCIu=J2ni+Nbp*Vi$5=8HR@dd^vgANc)4@A%meT&f#Ad5;hv7=JR zwCnae=-~Yi(D|pFrr-YJ7kUl-N;<_OBsph&U32Q)x_r@-`pMKQb?^)4>GG~8^ipY+ zdI|hU@M*1tEo)(3eHZh@^XuT|NqsEo&!QH#^y-%SRQ+Ve75eVvOLWfshcvael3SxF z-vqA3Z_{?#W?MG#;kxXsiTd6F-_*|AZYRGh3kWl0IbDo~9urqXbyxet1CKwp`H5$o ze$*)w&p!Vrzdq`R*WPi{?#zR0np6Mpf&X)~I_T+h^|M)5>FQNaYj)PHzLJy&T*>S8$UVM`UL!=}8oih8n3>G%WyhIY z+6WRfd7vFM0R8-OpKhy8(a{TT;EFI&7cP8Evw0BjlQ1QU`#M#!OuO&0i+=c>gLK8j z^YzO^57Xx3HfHX~g3h4yo1!Qg*M@+v!piRMj%TL4@WvbNxZ}_RzyG5v5BkZEe)HHf zkL`pVOjiFZ(*K%?9DexW;hR7H@djW1&UZfX%^&{Y%JVP1^t{=N7rwW*Rvnd_FS3IN zM6qt%{HncF*3MgRqeBloSohv^lMepIH?+;Bo2gPN$;?AS>Qk;+wN72L{5gH+=?nDT z7cSPV_34_I^{5{q5jy!DHjyJ}9S9J`JPtykaoy5DIRqI$bY5jn@_q9HA?7lmiteS> z&xf@+I%3Y%`qregbitCx^uoXjt;*}XL@nmy-x0Rjbb|aUck9*H>W~AzrJc9hTEkmf zcp!+#ipdJ2ay>kM7*~XrSqm3zb;`tZzx~B;9(dCajy&?16V5zyPrj7@KmV)PAw1EjXRq;z>A@SNU7Ie6P;F;7JTJreZhG!#6* zg7Z#6<+nYxENXeFPxsYd)GuaTj@=jOta%UU+5Sc9VjDP*yCp;TRud-Z$RGV!mvGhl z+4sM%ect#+wX+cn9Z8}Sx>sBUP|Nf1{EO2!J9*;S-#+c!^CosO000mGNkl|MjyN2gC8`Khmb+y@8bzy90b|KW^p{`iM~y7}(=-_9n;+=~B~ zz}N2oC42qED;;#`q2oXP`G5J`CqMbIE3Uu&mJ=7OSo-eXdUY&|8e$4epB4+}3(V}= zcs01wHrweJ+~ePV)m1v+OJCF$n{KKKw?M3L3hGsqQ~HyMtH!+Eg0r#4dy zvtAXqItcOz5OQe_&Bg7`YK*Z#1Vjh9MY&4YQt6k5EgVqk_UT&w`y14G>iz1!W3GDd znyZy(Jg7xSUZ(OblQnX2Rpl!32)E$;7T6RS;I-p11bIefbO$s2)Xv!mv~xQB5G@J4 zdbs|Q{ZEe&i$Hy85OY&%OQLdrzOYc=0<1@_NM=P-e;DUYJ>0 zv|$|`+V@Rw)-Qj2s4hL{9DSEJARCV!qadh)sY-CHXKmQ(R6@KpC8BCIW%1+=I<=i1aGqyx_DqAVWZFf2OuM{mO2hrtahJ(2BF} zS8ZCS!T^?Vxd`<@yQJF89xXZh0d@ZF7FDi(UL$7qskNGkeSify+6h*Lyz_?(h7V~RZKs^cN>fvrLTSd zi@N&!3-!ChkL26O+tkt8CgTT}P%5Q}3GVxb#@7R&Db&XW{)N zhbfONoj5C{ikbG6Hd|rU;L7`-F$OpX`ZG!SFz7J?gX88(#d+~8{e$ftc+x*Q1SpRBnmL|XN1`c=8u2m>8HPN@l}_fdDJhD zJoV4#Pu%a(|G~eC{XcR8u&8#)C6~1Q;5Wb7>EmDc!Viu-<~P^fdH(~)EL^^9H*R&> zqi}dm>7e4|%23a1dly`*c1s0%0_Nb&$x#pzwL?noF~66u>o2#cKFj*ZywL6-)hQm<5>-mT7yAJ?K^UZw1+XEp4l zUbXZ_m2-4PqbRZoAH;-A2p>t^)MGl-zRw_|B{5Cq{H(NoJ!6Y?;-b6t%}M9z*x9$~ ziJrMy&MQ>kC`gsR-Q95XXnpA2@6~1Jo~tuXI6-gQ>rL|Ce{!Fv4V(lw9Kbwkv0hr< z-M!J>5C7$p#~gd?HL#MAAb1Z|D$5=f0QvI`8)h?9eU`Sjyvb9 z!!N(|;)`#+=dQySE?fFq4nU7BUu#@kgh`44R(s^IVd;0}e|yA{ywy1+om!)Z4WQ)~Vsd1|#!U56H)``q$9!zvtQ}W>QdK(i{ zKZhm~Nl+0`ri}OUZM~-UDJvANeny=q+@WRX|3&$XRmym6WCXhTcLI#|z;b@yaC9X_ zCX^?LSi%9I0DXWytCbaB>Q5V?>kqdoT=8Vm(cTxhil99@cLBu*vs^JnKLfdoE@*^Y zp~oxV3^5g^90R&SO;6h*9l!8)ZjH{-&!Jo~J(FF$V5tXUtq`nKD~ zq5pqG?EQ~0!aasVvcEk3`0l?x@%TSqe$^EhKK9Hr-+5`l{M~wM1AeO$a+#6csb0%q z3VGCTf9_gKIzxETZt@!Ek{Z23?jjA2o2b13dnWH6lq7~D<$Xk2AC)r0iRD_rS2;yX(hK))pH)u z$eF$B7|4{>8HXmq8|9`pc}<3oT$d%C^r2A#e1yh`UF;auX?KUJCgqEC`m%@c)y4YR zbC>J>RkPH|XbqkSxP%Qh7_E=95sv@eZ`1D^ee#1J;+slEfq5Fjy^3;$Lao_Ao|hIZ zS-iastccJjZ>>FnG<|39bj|EGSx9G-H@DeeD$@WH!$@H3w} z`a_@n%$+yhb?4_7cdp!QAg{IfiKgflQh0=NvSlG?MEfw_%F?aXO@nbdX2vD#3`EC``=dSpR=C}3|H#uSJr!m3B?L|ahj{F=Rsv#ML z1d=Z@QiUZ6xWj?QRH>Odx}>&Aizv;%V{efzc|z?k zEK^6XlsRovhDmj|hdC$RjDZryD6%OMfT#mvOepm#vKa>uG^^aD(-+^P1D-uoN6)-g zx38R{#j%g?49LYUr_FfA+UE^#Ob^Ou{^@vq^>hEKEyhof|NVrE#cV`JTxwpUB3IwQ zK5;N(LNI_R{EF7jWq_`7Zd*ZoQmUTN^ZV$9zN{PdV(_CDg+ z-=B2FwO5}$>4g{epSNVmwzWL+^2RK)V42J;idxE8kl`(@`s4>bsEH^2S;z5a=QAJu zn8uCWpyA-4bmCi|ZenqMH05&r=*25_;qpf{H7?^ctEpy^aX)Py#RP()FN9Khc?U$H zT7LQ)QJB>-f~%zVXP2x0%=@_wxl`RYKd(4%m8@>UWJy?#Y!B=dY=#~tA{jqOV;~w^ zE&=lC*IRSt!=&gFh2F3)@umO&tCDczBlz^ z9sa@lKmOHQ{yS=SN@7i}C{pu$_(M4yRsr|q3C5;_ELLq1F%qLfF>^ciM z6U|LEMO)mteAr`?Chc>@wbvf;hd=%4{Ga^hH{YMRV1fTCc5r+CtKq*zNsKWZbok+; zKK1pl@B5vveCdQgpKY*EegEE!=^E*y@dd=W~VDjRb-{pfxl&=u#N zuQN_ONpE}en>CutZoq#c0Q#VRskTbjt$0B{cIkp< z1XXe{e3dLmPzH@+NvdVZrrz6M)Z*VH8hI`vG-{#4 zvBnC7nA3}@v$8C%xvb%c}&b73tI4sHt8l$vys&BpN=K9*deL-gt^r!ymPulm*Z&3^Pl`hnI+}Sg# zD|G3?M|Ifb%k`tlm*|@AXSJx*s{v#2e4!Qj5rJv$XWB8?b%lCR7FN41V!2C!)vE-N(t%2DbCmz&$}4rX z?mSYP{QDcU<52>c)9cJYzyuha)_I!3K{uPJcIiz(xICc4CYd(-(i^qy&p)KL zPwcGfW^Jmntn4TCbOhD+9H$NTf0K4P^1~Ya?k$xMcTrKnT$1pEToj>2O(tX%nUf<6 z3d!v<<`)KN%^y(r?bEfw=Wx;;8u7wP4I3z>0F0I+fep#|TTAlc@(l$rKxRD2rfFyh zCNn?<xBTE|zdUl{FOL1)QB!8k z+M4yuoc!+v;qN8L<(%^9qvh`%al}TS{`Y_X(3cKA@WRv2Iroy;ixz&cuU;RU$2`M$ z;kOu>xYGxgtEF7g7UMV7mp}bE-F?H2I_4L@(5^e~p!U{QNQ~1erpxQB+6rC0e3A~H zbfJFm{KdMXK3xl1deomq;X5HpGT}}7aW#NR*`3QEIhQZKpRUpA88sLyMB%XIxkf&< zRQ;#iqs4!^MFS7b=QPb_1d~A=Eop*Z%Heyp8Ee$G-AL{7vyW-`zwV))O*2(nqEIO{ z0!!EsGtD86$iFNt>5vG<(McZz@l@9yfcXii|H|QJx`UPz>VRN;XD$L2` z33Kpm6s7^D&fcE#i}U7e|LZ^g@sKa=|FwI+_2ch<@2C@gzy06q)~M-A*Zm)cOJdCa zbo%MLUh~^u?|iaM4JsB+&d9&R7dk`r%N-#srXFDj5+KR*GArY1|s!q54^ms_h|ejh5F`sbWtJ-*NvR zRmY1;zA`K{nJ{1wB0h6}MrhrSYUqpD<-c3CocZ0=|Dt|6^>Y1a$|agO{~=B8U#f1T zMz=K@5=~oewz-b^`OkIksi&pi(b{c?9aYXsPNf(M8aAIdg2&K+^63JH{Apz4zYDZ~gAUM;&+K2^Zb_@Wa2F`qE4L zb@lgekemA~t`=^zS)D9b`s=GBe((eC3;(P`4?a+DeC_UPYvHJa8me^SFXUF|l0}c} z`_EpiU%hmrZdmoa=43oKEJ-ly&dW+^VMDfsJ53CbKjF+pHL21Y668fG!Mm&v&VvjWDd!RH{lI)UMI6D*}RV9YAh@lP|JDE*S@j^1zg$21+$8D);L4 z-f8;H?3?x7Nf+td1rKRf-lbmN{XmXXQ>9$ip1bd+A0Bj&E;!>1{fwB{YLiXyf6jOk zjXcqCi^MZaj9q>G?axh}y8Eqn-TA#^PdNVEi6@-!rzfXQ-D6UW6)6Aa9R6kw7#`(T z=dfS?a*J>O_=ksm=ZD|B;k?T(J!ID6g*$cEYQwm!yBG41n+5C+EL@Or`D@V*TW^#8 z-0<#euh)0Ket>q|YHPJ|SrjyNnff?YrdB(3{*tHkwI?U)r_-<0y|ov$BciFaz?u|?8~sH`Rh zY>?$JMcO7<#8jwFW(Hmwl-lSggUF%>wM>3(-q9i8w*hxfH7fZtv=8?#uic;rQFs@$h^N;{f1A zlq}C(gj}1;H#5mW)b12En^WY<4wYBx%lG4rp=zc^FWLxe1a@WOqTGtnTgz5Dr>LTyjF)F@;zO_$EzQH z`#^27(Kx7l*pd@g5p>V?E!G)x?$>vpy+A+ZR_E@4=~`YI5b>H^47E&xPtf&j78*#`nK-pf2NK`KUt=)7##-mpb?kWDG_biyaLQkaI(e^{ZZ*JZt8- z(=Ryx>*t+!-ergU>}SWEbmp0FpZ6+%0~LW-`d2awpWS@N9eW*h+;PYL;ZMh3e&3@H z|77aS8L#WF4pi{4unhN$GfM=zrMe=-Eu2s!2>}AKKHpy zVFvGz&zSR|zVpoaI%@U}x`TWCC0Q@0htuFdY{NgohDHYj+1=n!XEA&Xw>wr1?+6bm za7nJzGL7KXW$Di8>iWaYT6NAt8hCWBg5Tq_u5N1~81}VtZiQ4sT9%taG_*;1h|0_K z#|_uW-L_WD1ci^8L`&;SO~V)~=40GvBP-FvmykZ_ZE7mY#)hL6m2}g3nG69V=Bq$Z z+dAL^4S7LpCj;U1ei&4rSg7vv9#Q8pH>z~gWQ|&ytDJLhj-yOb(Fi-?I7MVd`6MX8 z_$X_OtTnO^g1~he2z4#1^y%)}4E=V|9Xjy23-!krZ`HH?OV!Q8vP*R+qidVZH%}kZ z&OPa5o%HKtv^&oTrGTZLIWXOAF501P(Rv2@O3zK3vdvBR+_C>LCmetFK|lM+3D?|q z+Z+7ffgw%f}`N(6B-Q^44{^n1N8vXvrU+DHLuGW`7^BLaqjF)c+rz0l0{8jZr|1zC3|51J8iL-Uo zOV{axi4U1Ybz;?8>!aUZLOBQcT&FP2I75Q zVhwIYYOP(M$YPp`%UW}kz+nzhB(x3u6;DQlI>Z<&%W-BB(X z0{7h@xStuLN{8EuY(P(i1v-AoUHa4y$deA_=2l$yy37HX3p3g!-9Dd`l%%u61mrp z8qT}k{oeUb{pN@xb-`(8=->bK-!z)9wr02pB0o(#nc8Ek=IZ2G_vwevU#4HpxK zXUqRUqlzUaesGcjk>!kDHvm-<<4uTB$xRH)ljWu?&(zv)>X^}`?Aqtm&BN{TGwxCK znZ?Tbd|WW$D$Xle?qoQ0)JY>vrI`%jLztmio}lxMo>P19u!!rBJK0|YGfO09mgc5L zDN>|u)KplKBR{5Bq**mn_4#F5dfGkmKjLx_y6S-8H&n;(^6Tfb`y34s<$d>B3g?H$?FI=QQ%)C|ib~N^;~VGPMmSK4te$x{bAnix~G3S z4@iBgy5%?~K%3-qdx4LnRKSduB71u^_^?Bu$S|s{mTAmFUSnMSG$;P8>bm%G4Lq|{ z)@91-0eMQdFsPGvT$j;mWWqs8 z@{>;~A(6hzPTh41q?;uylydKh#r5D8OPB^IT!fF)OdC+HN2J7nbZQ?@8v%4PH~Y=n z%w%TG;WcVAD}141+&8edGORLi84#g~)Pbu)))h4H^m45{|8cGS{Y|Q0`J_fI7*M4a z#L_}#f{eo?sz^q)CdAZ@%#;Q>$G1wopgOub%QZcg&(mp3@7MQvefsMu*Xr@Ux$3k! zF@iX33xxL;6E@YCKKn27|3~eVKmJK?dHw4Z7&ah6lQv`YXZ@+m000mGNkl>9 zpqQsfw2e#Cu$DIMzWt6m;kUojwU=I|554z28aH|al|q(?YDC(KSk;rgi*)=;ck9a! zouXss->xUMKr6ZY;XA})q&Y~28WZLqU#J4BBKfrBx0;ye7!x+hJ6Q~B;lv*~kHxrt zvKIdGN_AfJxbm6ZQlFAcBno07UhEUv)>wQECYP5RWlYLd&!X~))N(H^r-vd zC$#jp*QxcEsT#AOs#dP9p)QyTFlX|nMao8|Y1kiu0%Oc7s!l&$-MA`v%ye=a{9IV1 zvsON&uRLrVx&rh5FrYo<#?u?u7ywm@mWfO_1Qa19Pciq);*%g<4_OU0Q*wXEd zLR18(eRcul@YZ&{ZLhbae_G@+-s*hu)1T3Be@bW4C`!9^F~;86IYYmG@n*iYV7Nj-H?nKJACACTZF6 zw`$3S4=T>-Rp3fsFuOSO6Bb9fT`#k@lfmG^}YO&LCpGrF~S z;saWG?9I~UPpe}}r`q~C{NVS1c7GULO38Wi;t=ybwx=tnqv=O%_h!>3=kLzyn$g~^ zbCy4#?@pSiUrf73H!ginbL&0g%)=`|ensfuE#pVu`(8G|={zI+Qv1E*of^^BF4wQZ zdV|y%mpK7q=?*WnYP<} zOa1BB$LRFqPtaFC|9Ne`$%I0H301keRMSH}b9Ln8>-4?nFV<;`?$J~Axms1Ortz30 z4k>U%LqS6NcoRHmBXYg(GjIqX+WLb=%tX`053BQpTeb4ar&XJ}l6(A&lU;)@*ILPg z)(3q%=X6|tL4stCjX0vB@{SYK^5z|-*KDbQjYnvpBB4@|A6jHniIc8n)qrgB9Q8ju zMFW%P3eP4{Ub~H{v!24|;-U(9PC%ezl=lrqe!Jms(Q>YwF|RA;IioninHnuoi)7|_ z(K7`$OB1wKGAroTLd(n&tb+&Pb8vZ*$&=gXe)Dz#Cc}Xl0iRD_rS7YqRVUw6YUe$u zkvxBO_y*x>;&U=%*5>n|MqXr|q82tAZHCkge5c6eZZ=9IW=vgdglEGNoxS2A{ouvR z^|KeQ&>fxAwZf{ZMYl|1D%xm+4fHRc{AZoQZPD+J{H3-cHch6K8kNiM&ujY2qmS(U zz@0a5?_CR8e6hk;sc_b3aXDv>`t7XS^sPzf>AV$>YO<|RcPaAfOH4#!u1>xtI5L8wb|=u1cfD=`ewN{^R^Chu z!`Zs@aV`1X_3FOydBwTC%KD@H@@rf|g`6heI<;Yg8V+NS$tjjVj%-PR-?sOz(rdO* z{{|hZl?luto-vHd>QOD7eF{_NtMA@PJXpUZTiUHK5S11YALaO>(13!qGY)ls7HIU+ zhz>M!z)d&i$u~b$mgH&yLKo8N3_>S2g1YEg>KaTApkFpO{klE^GvvGstWA$4a(fFr zE$2hO`#$vJ+j)KJ;URg+Z?Bi}{55jsDsGK(>@)^};;2mQg)5MedWPpxW3X^tb+q}C z=J3_nOud{gGr|g8-t)8$dhR^^WZKobd)13tQ0o!ui7``#O@3?i`Okb-=bd?$cHDN` zB)jPYH#e7TMOW8Gk3ROqCL#r3Ft6yhHQl>%rjD6@tG@H>g*tV?eVP`QtJl4P)Ete*4W+TLbXVs{GvSa=)3Yz6fe#L7 z@Dr%Q!|QNv=i8oLs{9fjz&P={uA3zBu$yjmoKbEj*DDw!4oIl=6c!EJO=g6CDJX0- zT$NomQ{~M&NV{#W{?TpnH&KHp9rVsq9>@tu0)5gP4Lmei1JAsqu%chVqgEty{m8{` z=YLqD@RV%J~TFZ{PUitZt zsQsyh>gWz!IfIj_naq&U=oqnpD5mH_u_X7Jt|D^t#OE#FIDP1wUFp_^%OBHsd00OD z#cOrV(r2_N@8)?TA~9lj)E>L;rtcqgu!gm_(|28lEC*SwI$(b>*-GV%lQBl+;QZf^xsdnx-+$p!oxbz|Jrn)m)-Ov!kwc`;(GZ!2 zd^Qx#Y&2p5SK~kjdYptwWj4+5zMzpWcBy*K{pvdYHuZ4g=d)LF;+lx{LLQEb&b!1QZYqL9iBdz72cW|c)S6A!$`NMB0KDyBW?l_~%NPoS18b5cbhMl~6xJuZ zm_yDjBo+3>v^E)E-Q%1pSLrEQ`KQ~}ck*o-F?p$mb5v){CkaYLA;+5rx6AWej{w3U zOE{w!Y2|>|5=+DLWL=ZBR2Qv$Oh0+?YW-o_ZJNjPLGFe?nZdQ^Zo6rtv129XYcgtb z1ae9JH3}u_)bOIE1-8tXpk!vOX-w@b%T%efNWR!1<4!;7vCfxt!ql7ff-Tc38(>kP z#o->zbv0xV6b!(ZNG`c3%oO;s0;3!m(G^N6W<-Or=D47D zTX3qxJeqi#Tp8GG)v{LHH&xX+t0Yz!*SG*kkxB>lqEBgZNrv{IB**mf$$irRGm{zI z-hUYmv?)hl8b*zAAQ+l7Bqcuw5XdsG5}mh#d_Fn8kaDFpTUuA&ee<;Nw>N6w%!f4c z`ITz#j9d{U=g4_c;eQ8ShcPCMNZ3f*u+!~vI-~E|_m4qAz{uMJenlvC>C$D7>CWYo z6V8W)Z7t=NB5oByIY^PY<;vAFFaS<#&Ma$bQQ+R*3QKoT_YP zu24^&mV`W<#0=yqdf_OBb83MIG(xUIzvJ67*@RIl@4lrfdu^}Uwi~IZ%~T5zJA;H& zON&wAS)x3DrS$Yn^*s2j`d*kL>!}s8ntHv4Lu;j&=C&H?=B(~DTj=y0@qq=FK#E-I zaV3WX8(?9-7TofbtRKT&0JMTO0XoeC5fE*WA`*Nd2f-H>h$;9W@a%RW%f*Pcqa4gY zdgHHv$$ubnTd0QSsMW{@l|1lQW1G~bkOywObFI34ikAH02G!4gKy8oCSI3H|7GAvt zWSLkviL&Uq%-GZq-pmA9S`VKhJw`!+uQR?ft7&T2!gM&(RfBL`y>9)L^26Zn>Poaqu9& zOmL6r$<+SjBK4hlk2=r3Up@EDR9wV8HeVa%ieU2RfkLh!+tBGwQc8wCqZKWeFTTe} zUNMDDN2~P>+pEN@%sPQz9nr#xFF~bd!dkUfP348FRC|1y`X8CX8>I!($^q_Yg&qw_ zu4O0;8Ct8^q;j;ky=EFpKA`l)iP)Xv>&QS0b6s-hbE?kfmWK(1DCQ|fjM`GIM)LV8 z(FANlvBcwK^CA+2xReF^g`aG}O9v_X;RnOmc~PG#7f`LALxu5)F5Q7is@ zhk8!BO>KXftI^$=%4`G|=W?Puz$M@xj8%oJQk zj4C#Q)=6O~CbLq`v;fJhAz8+c29qzI6XaaFBDWv%Q4BHwb3~=JQ^JFE9=}SI_zKp} z?(cYFp?XfcgA@N&RUerzEw3vuW-#Q0s*CnEtZQVWm!ZgTD$SJ5Z-H7%>BMh)^G+(g zX-5rgHcA5>nQB=Shmaxy15jdPwe&@`FCg$AouM+^iNdO?vYO;q5kWWT0{zER zOj@14STxo`4mo)DrD2OL>eZ4vpOtYNrg4R}{iuR!{wjlsZJ(e@q)4_j`Fv<5g2wy07w`S0SlJTh1PJlrlj?N0SS zG+SA>5p>1`p^RM6Fx2TqiiU20<{BBS(ip)V+si6#xsh7I8l_w>tHiixv8EnFpe4FgXk08XWQJplPoq_o_%tr)W^RTs36U zrimh{j8A%=oXx#|m(nyDiwMgB42RLP^X1H^rkpoy4s~{FEmXB8)Ktsrs+E91+ksQj z{V>!Nm$(kR0)d;d4t)cW)*u<)K)gZ~(}bctSbhG+0cKrdBh1s%6K+%A8TYB}!Fd|B z!nifEL|qiCg<7K-7;t_d7CuPSPEw3GD789l6{R;0GJ0>qv@0oXLz~zc2000mGNkl0xefTNYl!jhu& z`S`*o?*(uU*h~w{n20wV%qhKr9jp|&80X5#0VAJMWo2Dmf0?1!6O}jVlWus>EV(>9 zP>C9`$Hv<5W4ma>Pwl3SKJyx2S8e#20>*x7XKnD$J8H})cGRek7qHFDYD@s1jw6_G4cGGh8skYyA&meT0;&@r9`M?N~0-dU2z%+$jdJ+RsUaJ zP~T(Iqy?SI`p^`Wl2_4Mw`lY?_tqv~eyj2^C0>}YiCnB+A^nx{;Ld*q_T~^vjVFqp zF?HuNcnk3{O(_<`scl~3x0nTG+^2>WToE3fr2-R zBmrm&_O=5=j+I$ZxhnNMJXQI;UZvg6dSuQ^ol_^t2nwP|AO$m-nOJ+7q&zdl;Vmj{ zGfovAZp*yOuZ|y~-m+A;C^IW)k;&bG$}9V2Q+X@!mnrIfbgCk6crrd}8RJn(&I&j~ z|AFN8{H<)xTqE9$R>=dS$LS9jAdME2PL#;7OIFS-rs$udv2@vBN zOvT7xS8EKaNCq-1n!+=U7M1_%C{>WcB%y zy|Yi^loQHxF$Q?fgDE%1z(dXnfSlULyvjpVtvyp|`|)bw!Pa))LRDUE_NH4MmxEq% zz&mA})!v;eJU>qZ55A!4Gc#3RxKfq^-&~|1OSRK0!XHxiZz~E>uZ{;Fpa$B4$$iSf zuaX<`!cwhxi~t4UqYk(S+Jb`y21?ne77gEL2i1m`84hyWaT8&u}P&qf1_yHsujgY!lBbI3fK(|7}L7f{K4yT&}AH-i%J z@x(&g%v9prmg9mKYXF!e2&raP3}K(+iq85;;(j6Ef#Qy&_#8uLnc z!?D6TR4bF{nFLSlD67OP%#OG3uDHjR>KogxftG-8a$KyhxajzNn`2BvVSM^3l}$uPN|j63pV7t775?uF@+ly7d{wl~n>c8Is7{ z&t@hwz%lT(Z9hgWJB(|bA6C#a4v`WN%+asNS%8Ldl~kX)T-}e)ilDNj z+%a_AAX#BH_(bN{7#5MrxQ}=<&<$xkKw^N)MTH{#8riC_!+4e7yuE@4{zxu~ zfuM(wI|q!m^wqfBS5s+Wr}W%x^*->ddY|O0F;^PD;wUO5H@&IDFvI~5%C9WBK?E)l zzRJSPu-jfGHDu7kK+w`g9i_5d%BLT|+Jo1*=)^&8 zG7R$hIhTVRfz0AUU@G&9xAS4He*Og=0>8~vBe_gGnVt)p0q=EVc(8K1!A_%L=rN%RP985JiOf7!_*~ z)`7rW+#`vlq1SnM0jPn|t;+rHEcVz&r3s@Yt_GHTXNZef6csJ1cmfrH5uss>N)Dhv zrc&lDoZvnDMb}$MGlm9~X+=(!QJMNcH3sG}U{DsPbZ`jcz#%_;{rn&OpC!M0}XIiUPs#YX}%^hXRNFroWoZUV(^77&2c@h&2a1 zaIvw>MyM>Qsq4{MGB&c$4H5W&<)K3+uvmC^V7qDjetW8?l`(V}ki_{Uk(Fru`2hib zHFGEtgguYW)BxW)oXo{I8)|8~1i%PWfEMBmc==2~3=SHC%qW2X7$ZZ0E;_svl=xO8 zrvoBT&w}bBS`@|%ldrY&LNS<$KCzOi&y)sbF;zu~eQc;bPLqfkbB{GNQWYc4M~7VW z6Ro1mV5k?pP*g>k=d2Q33>Sz-Y2pWmHM*%vhD2{NMm1PAEJaL1aj|$phG(rO`Kj(` zXJ!4kkM*7sxuK(6iz>}uPT)`1z+WaSe{qqlw@$oAF6Bax2pSDZSc9-I1dP#SGqpAF zhB9x1df9B|oG&|^23$rH5`x0aWM;G^<45dr4;p`~QGIl_dS~#y&sWrh{i#sohaOiJ zmeZm-cGyU^<5>B>#$5Q*lsgTbNGnHvOb}&xE`P1s%KP+%*FT}y>oSFAmN*)9OmfZJ zxdgks?LP8RL7|sP$#3wjJ#1!cpptD3O!S&zOLC2#DF%~26h|IFBfK%qMTtU<Wv28X|$+H+-_hOt(2o%W(F(S4NF*x z2;}KP;ht1dW=;%VskY+0k0zzQbLeH0Upg~r4Up@D(%TL+WlOu%|M)c3In~rXAj5hd z30Ob@k%bjtYNpkTT43CE2k$j&Z###BxBs(XTK(g)yq6q9r#bszCAF^#ntR=&QlH^C z0s=qMVjf;5lw`To5;gLTTWerciCE3q=rKW(=>qW;tO6?RK?3a7$mSmJWiIJ_>y!Er2&W4wte^qO`i%-^>N?mIWEVUJ6X;K~E0&ikgS ze`ay|<5ehF0_GHPl0oS6t6Q$}ro+_63xHY)Y&7T?gvP(f7p5CQEATMaIT7%4wzR4R zH$EX72;g11ia8ey5?D2o88U%5IHty^X>~$&ql3o^S&jZ0RbnY<-TpPkupP#PN)+gH zMMJD>4ksEf%n;bL3ntv*Xf~?B8s%@%5@N83OcWUGHyc=;(5Yx5Q|*!Njo`&AfidV# z&v9~cmLtGniG-ovMGcdnbfaAtLF=>*L>tCw5TJsVKG}Jxl!HkD4I+)Z90pu(iQ69$ z{Dvdb$&P%;lDr^q6|PJ&kYkJo_#;wtUMbYMe-0bA@Zi<1Y-1k8hDmwG?GuENfI>~m zu)!S@B*cHPaEp}eqNHQAO-jL#)(ZK!|QrjR@JoX;TM&!VoM~uO~x7p+O#B@n#uJv z+ePhTQTcE--rKj-wm*2Uwma&h+V-fAQ3F5zphmxEYsFEya^E1x@+sz)Cw9yS6XbKC z!N!w{TiT$$sq>USH%o2Yx|Xpez(JL06TLHlTPH`>C(Tg>g)4NBrzj(yJkGqfL=ow_ zJ&Xy6N?0|L&l!qzSmcZkaG?8;+v9ZtoP`ReW2p-nM$mLd2bwZ7@C^bGO}y8x1XRih zf{tdxP#-I}unhE?*<}{GyjAAQZ7c8hYmacd@a!yw?y7<;fw8E<29uOgJKoH>lu}-j zY}4Ty_r-T;+;=~!`g^w5ik(Jl+1A6gV*AnRdCR66{>^u4lS4kJY^&j_XWTxhNJiyA z^@`c&@=7q2xuBD*J8I=4Gn997%-|gNmrxe8dfx7tyd1UBTX$AIVP)Vn7XSbd07*na zRG9LNG3Exzni+maL^iNDGp3NuSgBP{&*AD~hy~Wi=S+a>as4@`N`kDa(pDYX>bvjP zxF5bxeec>_D|Tqt@@-nQa+hK1fA@H8^uu>+%OAa8t-Fs_Y-N)XN;$^ohCs4WlhNJi z1QUBjp|_@i=?m5O;Pa}?UZKi>6j;LugF$VP(hbt;WM+dMU)j|?&_ig=8Y7M)&b;gN zk|P?ljV3)dh?i>uQ&^1%Aw-!mCl|FEZ!*bIRPq$1oZXpl-Up%>B-0dg@@h3inixnq zn2W$*84^A^H@g}E%X^jcCAZgqV{_rkbR|emg0qf!erg01G!5rqWf`O7h!JItc;`+U zf6zyiePDNWjWP|C>Z%*#WIrwZ7v@&*fI0BG&9w2?_EULFUb_Y&ND!do)nqe!MKYgT zB1j@l?$Mr^%d~vbJQ<(()4O~K{Jau#aq|Q%-cWhtVd>W%ddqd@KxCAmH^Liep+b a)`nS+{y0o~-)g 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¬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 literal 0 HcmV?d00001 diff --git a/public/favicon/android-chrome-512x512.png b/public/favicon/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..224110746f433076f201614eca9ff7be11faa08a GIT binary patch literal 315272 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≻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

3AgQ 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ý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%0D)XS- z!bP9st6qHNJ91dsuRws~T673HOOX653^d8i6q4meF zrL5e9Aj!-S;zK5pYgM9G`v2Jb4gf2PZ0+y#jg#{*6PC?X~l)0%eO6%*nrCUlLM6%`c}5hTpOqHd%;`EwWUxSfnmXl_E0$hF6^SJe;Vy2e?wy^gjp8G z`4Kv!G1AW)O~>wyV6$w5xfOAF_vpS#fh6SNfHyn&8ygW+jupj0mlXrUMIjt2LD}}5 z_JziIcNby~6hrriYBZHE)SGLE67H#8zUc=#H|8F@1|%&G`g;pi(Euz2LdK$k@WZ8J z6vgq1KHCGT0h?KTIu`^kJB@gVuJ%OaQbVvNQLsi5)s7&_s{%keA~D%+wkjUU>|%>E zrj5e<6zx<=fWJj8_&enw#81^n1HuRkY9Q8T+|EM(mu^13f8d=jar6c5k#%cvBm|+p zE^k7WD$E>LH3Kx-3&$J+8G+iN;xejlyn|q?Y;G;OA$7qJggT$fCxI6(=jWn3@ww6Xj?@D`;WiI4c7I zf4~)Slp+F}L-5tET|74=K3^JiG}{-470r5MbY??TDs$k~zW^|La1w@9(xov-%YtpI zE;}4+IBtnp7oDnYYt0o0Wqec@(xJ-EY=Y!@`KUg3IP}wN*sErw%5(zdWH@KC2EaZs zG+v~|ZuT9QsH+?-LFtFPQ2g9GFmHa2I37XiQIsK_kRPW;xdz3$_25SjKacxjTGWBd zb8Odf5$0rFT{y)jvf~Q#h>WN$BaMpOs$w(FEz)TtC}lBG<7l52%0Pi9OV**;XP~#4 z&P+jN38;eQMHK)_cS&Pd>hYT1d?qD`csjASQv>VBWpO^ZO2qlwMPsRR_8%&SdF|uK z%N}2(4cqz$#K)Av50}!bok3@$C=M8^NU5BJOC3YLFr2z+$ePg~iL?5{?UIAyw3x{D zL|{p{+O`BQwYTNRx=Voykv>CRfv`u2>u|0f1j1fql>{**y%k(^?FByg6 zmNikt?S^jS3^_)CrXj6GFR zP&Eu(mf!5%i+L9=!uvZu0ezNz0*8}L;8=%*OkB|5bX?!OKhCY$7WF;x2+~O$Dk4HW z%f{F{9QG3Cv^FOKSEvd>RUw`s4XC9Mcwe9>&d0}CBg9YbkIZQU;BU^YNSrzt`3dM) z1o9xmUryvnY)+cEJd!GX?@Rl&%e?(L0zB9DbDt)ZEh11gLR3xv-Dj8Q*WM2G5olHm z!jlWVnW&asE#>!%V#!SLjFl*eloje}n|12M-134V+XgHJj$H;WdC@?&U!N9XZX-NZ zlMvIc9z5;pAXF{&{V@M^$6L`qmA2JAjcLeU6pP}^Cj}ZFg8#qTp$_jcZrrsQ) z4W*(ES{K&U!92(ia)m2TDRTN zO!*5p5DG50VImG<%RM;NO~$k;9k8b1K+HeoG&GM%Lp*ix!iCzojF0sfU;7)*Te29t z>5JecVr^-JRt)<6MNOME+r@5h`Lu{YUhm#Js%BOBP@@*70~h4Vp)ldEFTIG~g9hTN z>(^k%=R5-rh1e@}DuW~{)+{asGfruZ^{ofv+-l9y)RTaOazq6PM5sV?hRRg|0$!R4 z@d#8;IAB;BEdhiWol1F*T}o$8o;HXPyDyzA8(_rN4+3`4iFcwz77-B~)VhzJAbS7+ z5CBO;K~#dyO%9hK^zk<+d3HO5Z}>sJ5b3|Fq^Bl2t~XYQij>9r5k4goG5iP-;MX)s z2!g6vT_cN5#wSQ>HwBe<{IH!98EC)CfL84EHRH-0k4(*}g6%Q1fuzOTd3)Q`Lur*H zlm@-D4OfXsjtg%403V~TpI`FAuYZc8Ti-?a^SzKGWtOpuQc#8}jg(fr9n?;Oh(IVy zok*j-qy*{6ryxrmd1@|7npQ_iVgTjbBIr0tNbcC;hfI!DwI-ae=v)+xLw^zY!VXdy zky{`G)48=+*J3!P*Jz8T!4xFWx?WKh2E`?1c>m*1uxP~!3>-NEZ@l{s^vF0eYLp|f z;a06&`Ne_VyT7XaKhox`L4&^T*{%EH#Ms!qktj_Ry9%Il1A7jBkL6ciiJ{}i;sOeJ z>)rR@3Z;v&ks*%g4Pp{7t8RO&ZqX03Yj;4?KpJ8>d!ld@)`$^fnu-SRXja(-RRj$H zz1U`A08ng31Ij6i^`W%QsYskM0O^zZBCcZ&OoIOyiIP=-rDelm#Y51EQd9OsbM{Gb z2xZ()>hBX^BX$vdE~tfA0IzZZ?3b;&RS?&x7L1pjOeAOi<3vt3RvMH1rMWhLdb`?k|R&?o`i|GsIVdw7MC=b)B6hj)si=att z3Z`YZz%6ZtU@n!e6AmKQcwi$S@yO1~<(km2ta4$ZV%Vlo4pdA~<px=gNX|9 zamtGA)=Uib*9w$YER{y{u-}W2kS%*uhT7Rz4#ey$M%jz+ql9Ph?#_LT$mI~SwJeyC zM2T3dC=Ap-+ArLfs~Eer;LCTI+c|%mTBv&7a0Jfjf#RmsP@LdJx!01D&e)2jwKYIQ z2oc^os#CKq%Uj6a1BU@Efu|OYLMd2S?F_7KIv53&o1&pcWUiN&JctPOt#>~D2>D~r zM&IGXaMvFn#1~)hLge@Og2<(_=L`(ofaBfSG^gS8+pf9hbrJRv!6E!C4O^J|M3=T5 zCRWSHd_30YFQhP|iV8CY4XNtsN9f$Q-g`H?^y`cH%a&s6E89>~Qp))Vgk1fcVJ(jj z(`vQAh7Q9ppO2L`fea+mJACwrh{GBh3eW`-(ijS>aBM>yZSuAvPYyCE4xd=;5)}Dd z9L~u?%Ix7tpD_fnr#A*tV`1p@Vl|*ag`{G+BCHNi9w$nU0X(HHLOZ_UsmOMKpVs|* z4k1ty=8JBG!sSVfWy_}3-H?d&W63s|F-f%Zrzp{Gnvh7E7>!_#^S}xOTN*ok2`HpF;o2-2M6xJlt6*%1?nJU`Vh1juD7fmt}&44(vQI|ssb5I8`D8b7@Z`%T4obi&HtYy8M452ACRCKgujf^{wO zF}7MWRD&P>D4rp+Lq&zy^vu(kGC1e4zrF*(eMLM@ijr98APy63J=$MU7^>*< zv2EMG>;yWj^Wg$%^@KoHoW4*Dff#d>xQ)9W3gzG3QVB2Epas0(`y&;vWuAPV% zUigqw8bEs|3rp+tz_mI3Ft$n))bqw7Kzy}|vM6OheCEX$F=E0w7&C1O?)uY1*mw9K zD1_38$O@l^#_%yJfC)OD!}V&^yuWAnu0wkdAAbIpM;>`!=#Mz=s^EQGSEQ<^9t#&P zJaEIRRd=kr;;Mc<&+IzBMy0GL69a+6j-l#|6v7o@vIH*AQ}-V}g!}&d2)gvo!?g3~ zK!Y=`C)7)Y6m z(C+=vC>W*#`F7LTJbn>U3vpQdJPErvPejK>v;#lCj&-y0BOG%Kmm{1n+aVX;uMfi2 zm%Ud$fV<})oU(``N05nQkt40+a}fa(U4yJRxv&rLR7*i(zt*UH;TQzRbi?7ADL5K* z_>xIV7Z#V(2N(zpw*-J%gY;}`UHdCQI4;`HbqR1CtAt|EGf)f5>vYGB%?Dy=dRAyVrIP^y*Ml~gR&UI~;j$r|nbeKhld7BILpZE!oy&m>rMD z=CLFYfVd)&k`0|23#Ed+xS+NKo%iU6U&4I#JskZlI8p4JS-MbdB50bEn-<5w%4dWK zdx)12gY==N*{wxz*y$+YvELEDx`4prl9IMGaA1z<1hxcXbBCn>tb@)gw7szIupV%I zNGlH@FX2>NQ7;#(>i5Rr%=*Z30^D2(EIZ;Bmxb`aqnj{l;zW#{J{6BV^(2apmO}Y} z7crsw8sWs)PKu4)*RXb-C2g8F88&g~(78|E`@jqN`T4~h`o-k@;>b@1M8v&d#*FVa zUVq~QuRQr=|3&lW=2y+qJ$B##zX9`@hHI&pwM`e5B+K8H_E@ zzkmaW4>JmfISGRxjZ)Jeiy;|xu(s6ztZdK?9sKD?}K875)cvSe}?Z9$c#rq?-r=Gd>ovC?NQ7KT|!3= z3Go1~2Z3cp5;`fOy66oPCZ1uNRzQ?JZ)|}->_Me)9J={y;QB^`uqvlFdL&mz6^|c5 zGUF217rOn7$d5nsjNKoPVt{*Q+lx4OM4#LSWJJ!CCTdxMS3D)Lj_;G&)v8`GckHPB-*O%BEun z;Nf!sI%Q=@5D0T)b5EG&Him5`TH6rMIu5&BVz@#_C6v&Ci)yAKW_%x{&K!*7{vF_{ zo(kjjkTp#}mc%3zFv1(CX>Ef%90TU~`9;1G?Nyo4D)jCm2@I)}kEN%B7`mmgG!aRz zI7Ag?H*+b+Bj@*sT$D{hkY%K;xiL{22!|ZnggUB%D#dl+4>_pLm%X7$^|7jM zPh8o!54tB*MKYOqNTDqBg>KLO{aC;8PClt8V8o`^sKtcFkXV=@p9>&Y81A{sAXe4i!L6E2_V~oPPG%`#0Tp-=_DTe`(_UNmKjQ zKc&uHF<##xM}$V;dVvsqe$do7bmRy&Z+#AvX3av+0sXP*>8EkDJcO`LQozR(knM{> zex43`FZ;BC_N#6vvjTK(wU}tbNCWI)b(haTL|Im6-atUckwUL;8?TsJ!qj$lwkr zsa*-BjL7swC4(5ymaMYm6se^A0G21)9M)v$#ERpP*vsIORqDfl*xI=;AB%e*d;s6@lV+H_In3jCAdTkfpH>4m zwdspXbGo5VQY}>BUdt>n4Goa2T(a2hmNrhjfPUOW)8n}IVjZMLX7B& zN()CJv2PnVHPYbv9HI*O3z$($*vr`b1R0&RqE~;LB1Ci#9zn?q?;vJ>AwSY^`b1#2 z%@y5s$eXR$avrzkI%G6d1|aM9OpE_Ls|P{uH<2z zkv@L}(62oXrUg+>d0~R9cw`chPY#9vfuU`{@<+fSLwwMN4uD|TK^??lbV7Yx(fxZ}wpQof|P=_;5^{KM!Agy9X*y?c$*u2*8suV<=(^b^!nY z5CBO;K~&XvT;paYro5kBDQjh3kKTh8PCIw);9kAHkzW~+DfUN6_5D%D|E4i5KfmaY z8}8aXan9VCqlOOem)EVwZHd9SeGa{Y`h)Y=*;oT;7=;?ec4?`-WS~xuh`XeM&f=5QAIL46mzmv!tbk4mG z{uSS^egJ`2KSmNiM|)k~!qk%@;o*rzJU_jcKe`S3RzHYCPy7uIPg7JU9p@}`*(oR@ zm$P8~ha|KKEC3GY>^gwUbL7l1-H|qX2%NmOD5;)?GA}ua0E!!71)(bm>)ZjV$zbd_ z017t}H4>W~AeDmvnO9*%9+S}&s~Zo%MfJL%drA$Y(ynAr91vA-_~;Q_zkWUX3?78@ zmS2PyUV8;c%gZRkfZ~*6q-4Wm#3aSUzSpX0;}Lyw`{a%6+y9b#Z@&4x{QUf|Mf_i8 zG{^sv!%xVCci5c#{Nk%uta$t3JMWydXx_X*jceDwJvBc5V~@uvLxov6F*U4CSsnYW zk3Ybq*)!2&V1MqhAHWx1??#wk9|eFO_f_%+&@H(t*0ddnYg^=@e?m>vaAM#$PQ8=nJzfSGz#(mj zTg8t)`wTbTc{{r1<>7)A%dunEmngQ59N{ZmV=`3}8?PfrQsUybH>_QI$-Jr42E6>l z<_B)M^2*PbF6GM}{&`o0>HY~Ef6hYa+;gW+ees4>S5D9E)^l*nhK*KcCMSL95hT?_4nf+;Zt!vc z>8fChK?>@j4hYgl*}#?{b3`s3=iK4twxZ;XPqBC1Ur>0%pK)l-pRo7lM-lq)8%Ana zot!Y~cxP8U4IDC~Bfz17v}6-u0CpY%zU&$5lu6yXAdN?o8j%ZA0w@;_Qa30N-o zd!G^Y|0Fs8CtQzXD)cg*V;65+x9;7So_K1-C5xB#Y~8HMmC3O&U--pSrV7vow5h;A z!9j7T9B;h)E*7u61ZU>;!TOCG@$L8DBgCUXHB`U=nf#=FT5@G9Zg4toX*UGJQtG0b z3D_4)NQ93-sEN>V2&~g}=yn1MiUR8{amh~?3tTvtv}JxTimRr=^lXXDc_ZmOUE!&o z0zK|?1yCnoL8lXV$QK0q1jxq9LiBRku5-L(sgF1Z+8 z`}M`OH{FB}7@_s(4-n2<~9IFuOR)5L+{{F%YfUWW7(feN5X(77pqc*1#$9n>ZFz+ps=WjM(}5~gIe z;HgDFoL8?Sngrqz574?)k7bBY$2Z@9hY|T=d6yTgYNX2@2VLfKXjU0Ot3 zzsGZ+YI??_b+fb2nLS}j-V2XCapMKkr|&1Le@SxwB~pGOBsVv=boI)W@Ahoh;fkd* zW_K+ZI(%hnY}_6_))Jw4qWHqnrBmv@?9C6}$MP#zp?&vmSa#J_`2O%=j)D$rK-(gX z(dLYl%2<4AC*016Jv6-zGRpuz4X(}sE~=}DaMbh!bqM@$>FPvVy6#+m>$JLHrKBrj z#17@QLdJO`ku|D2kP)C`g9{6Y2n5l~ZWUM;6OF>GQ>G#)Uv@)9spAW44m-sKw5|OP z>uezu5IBs;)n*Pw+Vnv%r!|89QL)Qt><}?bfh?dGt0Xbdb_Hm^f`}bOn5Cf}4k74z zkX;tQ^s23J3nTLU+HKJ`E)DUVr_$&RqIUo8!1tKJ7xpvy_qD&S{EQJgOes{E@}N^< z3($%O2&cyBLR_}yTAa}*7gt|@J>L8HBYqiH zn>pOC0SR1`#(@O8$G)}QP@Kbvo#RVHJW+(83snK?v1H3dQ7MkSIc!9uWLpAod84qf zNgwS868$La*#cP?or7e4feh%s^AYO<{eB!8sv>I_b#|W69BhXyf z)?w=ICI=B{RR?L~bCEG;1PYtfz`wen?PR;8A>rByy=)@p~k-XLNC@L>cmaf-RMc=3(bv5?!nHr=}7*8A?kk@7O| zoCZ)C5F_NO0KoNoecz-eB-~#&`;^`{ue$Q|jW^x&SoB3Nq5_frmFeH=&=nKS&(9Ap zUa;VkD>iRgI{NAUZaZ%;;jGZ1wLgMJsF=}%iX>YEXfy=1-(az6s(Uq5D@Yu7l zaQQOq`07jjrUC9Sz_mxb3$#zj#0B*`V|BB>m|UY3>PReN=+xkna2PO7ba?=`6>I)feQcEs{Y? zL@$p;1PquRpCxKDB{*aw_QpnMyRV2(-7o|D7d6oFl-y}q9Abv z4*#<`ojHyhy5>m6c{MvhU!-T8(guxVk`PM*FX?CnglN;3=*Z_xpN6w0jK`XrZ-Ty% zQ!Ft+ZlJOtXBa4*$5VJp)#^{3*{SpBw(UDj*#7+UTk`Vq4v5~-ME!Rq=iepxL~^@` zgl@d-vd{i_=UrD`aKYR&JGE+ad3r*^2R^U&s9KeFRHH%{S4~{T{oQ9@@51#PZbQ$( z190he*WmpfJD^cU@jVohNcV0Qn}XT3+u+u=Lom5&Gvs&^kl=c`j})RgP`*Z7IxN|9 z1&xKM1M48MV3$6mCV*$LGPHQyp%c4=z!Kc;ra_hO%68 zF!TrmBkVNE{l4^zOU2{Q0)q3gzGI$cSDvd$jf+ zRM0r?lo16x=S`e^asJ@`1DfXK%&D4|`JxY^KSeOc(HKpOy9OSOxGu13&mLSthaNm` zG|uPY{`L<)0EeOLp^hC#^hR9FdG*?1U5kF0U%MTe`H~P5a^cvx;{XPci>2WLDuAVB zq|De4WvHNaf+6TP+9TX{gimXT#OVW(F}@Fibj+}iH;eig)ZN57s3@%n!ZBV1Th~Jx zqkH1y0Vr>KDvE+$`k_M%f!F3jO7dV`<$z@cnB(f8jzZA8Naqq)X3)l)iu1BN;Cg? zx6^7g!|ff1VP5U_$N?8SY#8|s^o7X!3UMRJu%HKMr%Gf?BP0uGsiSle=vF7>2#V6; zQPLp?X)}hQ%Cy07YFC0$N2PH4qxygso(5G>W!7*cO&JLN8_D97ID|Y=$EC9y$}(CK zSXEILB7PRt#qRA{XEb(*8L9)voFt7T;V@vNc4^WJ~y<$~uPdu;P% z3m5*|w-!|OgvmK!?|)#Yh?H%(Vcl)ZFIswL`<5+dWLK%WB@pl*0gp!bQNnOd>5W_n z5&EvNZ}saoY(Uq612FfZC3yDbmvE%C3@*n(@DsJBcrYcqCDykajD@w@qkT*zB+)TE z)O#J))2C+UPf z?T|Vt4@u_^!I37_aU|f7s{_4ArtB=Z6h&4PW|I#807PV>NCP3Fk58!7au2%1R>k64 zopDRYd=yk~jLHV^!76Kc>Z#BpPd!*#TE(yp3&JKP(y<*Q^ zk8eU@NikU%0&PZRnP@7*nSc)y|DoD7Pg&isS8iU9maS(z`iDPkY1F7u8IgYz$@xua z`4c7exNquNXB}95$t90mF#r4kdEL((Q7toL6QjxjIp$t+j7nc{4i_KAlUtv|fYE1R z;+)xd`uXRfeRcsj4af3Xi5cYL*YX81s>-Rjsm&lPtkn@6gO!lxdU%!%Xf#yk7Ikh0 zKHfDB_-<`*pwn#v2#iwRY`}_3PL3i@L=m$KOVx#eW-$ z{*sns1`XQ#;H?`U9@KBpxV&yX$G528a7(PmSI*d@exmC~_Y&jMfkFa&Uw9bzKJ*aA zPMw0$lPBVtmtKUPmKX{UVyaWr@yB9Pt!B8Pc^)ol*bSXxGLTg6!coT~9>i$=BXH?# zO!OuS(GjBPQ^JDFhJr=V!6+JainLCg8;+~qA_AXrkY4UZkHl=OYTO%FHR**BRqCUr z*N+(T zy|hW)1_ScOj9t9py6gV-TZ+g(wVd7IKAPAeEcwq~Wu z&&2x!g&t$**oM}Qg^XFpQ+i&3jKSEW^ zNA**1T*G%$3CH^aI~&!jf5WAhEIo74lxZusZrb$0ni(@n$?i9uXp-Nw{y$SbGc&X3 z@}*1fx%b9(!*fsXGNoCAhJQ|qjXUIFSmlB;meC1VQ9_rk;_`Cb{qRHRJ7PE{%$V{@7|zN?lx5zdLSd)erqLvXL$VKc5f|afSPrz2EJ}t#{vr zF;gaC8&@QTPzMMD}bTffd8p1gK%n6%Fc$T*1xn%`wqj-n>=OSl;LCE&F6=$ zsCvKo!uie5;1?#)wr$(}_ifm4&#I@l{?toT}8viNac#9ojj52V!0e0!yt|7hd zWA`6Agg^2K>#Paqpg)~^Gxyjfbaq2$0E4`rh&8+c46jlTYg+Zg6-|5Nv|tvJ_&VyN z_ZWi9Qxl<+(Tm7cO&bAYU0o>7Kzmr@I1`W4#0b=}4V#Yf!q20(%rYPH;<9ml%l_P6 zbfY8JLYBt|KXHVJt_%BT{|`O-7xW%7*#6#PGtZO{^Bmc5oE+g$aWPb!QaR_cIA7qi z=Jgw%f6@H;U0>g_<)Vl0zWZ-<*-07*or+CedK=wd;r1hc>=+CgI~p7AzYpK-I{;$QEgg91OzEuU zrP1M9^~F_pE^FBX9pf{QNNNUIaumC@_~M(dapN5ukT-HT3T8~h`=9RscP@xTdNKtsRltSu ziYJ_rl(@Za^%_fZyZ7v~ZS&@9Q6B(gky9A;~2&>!%LutdeA@Wd}`}f%vp2+x(@1xjeLEhLW0Sx3GdsXA^Sks~(dc|ZRSzjJ)m?RP%7>vm#3hKPvNzf7k54RN#J<-R`%rXx~ zSIXh(N`EYCcp7@7Rzrrz4=(`vB_lYXPm49T+>9QB2jaYCOYt&4SC@su94C@QbOOXM z8nZw+CN}tSvj+7G`t<3SH>7*dtN4ELp@_KnFTZ{t4jo-YE~r^LY0}XZOP0L3{_3k| zPMt7m@Tu9S+>sO;`;`NiC(jIR+=Pe$ztw=T5h&)zn2$dH9FynHvcCs@=+BQ}&z`*~ zCn|XPh*gP4W<3%sasWd21#b*Gv#~yJ zJc5$Mn3y;CiF)a!ihYXW060_+59?P5A2TZ{YGjki^U2 zmkAFBRH}okoA<<}4ZEUGQcYy=q{2(bq}y3Xj%B;9iQ#AIX1I>~@WnZ&p<_ZO63GM5 z0BUUh*{k=upL2G> z<@JVT%OEV=Jc!Y# zN*^-1D=8{1!M5#hVbRKq(Tgu+`g#4UZ}y;^$9Rh8GX|AB0pzA<)3JNu>SnpnKj^J5 zv1q_O^3cROSlzN87Sw5nw(;pmiT>fKI%;`&2%qq2u;QvK(QQCKEWhds=sz!89O5VY zNDwx>D;T?}7w-^9oWkVzgg06@X*zYnxN$>wy!P70Ki%<%PbW>9q#?XwiodJ!ckj>@ ztNj3vt}b4%;BWJmUp#4GUfzIydbFF*0bf{PYj&?&D+k2UfBzyU9x@7AG& zxze!EjdnS=BHKUu5SLzeEjst=g|)Zch7vlct9W!iAKgF2{zKBgQ;m}j{ma%j1^M}V9=!FA^Hwff(Wynl#>=x3lV1&pQ$*)- zLFZ!0m`MhFkqi^|6&=R>6-&{jZyq+>`v>gVw;v&Tq+=X#iw$8NbZGroIA44F9b98-X;cRbUDt}fB_WrJ%aG8 z*v0GH-^QFJi_j-OA2;hi!EoRJbW>Z(X#U}6JF(!RB|PIk8`s>t4tu`eM;_b|Gmj+Y zC*W3t=g26mo|*MV$5w5pcJ9=9_@J&`ADT3Bq!Qrdbz%#gbm$Y?J$%QyQw-*MUJsP>g zhT8hgcWuP({d*D8t%U)2b1;XA1aNU<{DJ+M$*G%LHEK5M`b$=Jd*Z-nvoKDYdFpd(I1|SQx7fU0NN} z(h3;H!}i}6dFr{p;`zV5f&)hiq2ms5#nHQfz>=u0Uz~62*Q)(+$JT8Mh7B2dR@cWK z+mxG|dst;!ekZfPYXRr)Vw^-cp#}6sY~$+HUvAyB>5hjV-IO=DZ{FnOxY&1n4oVqu z)m<%}ux5+~RcU%}P}sTfXqZ9^1D*KkV`Q@BfSbdT^QO&KoDM zUtxih4*e^P^-HKtv$BrdedGGO3dWD_)i|gAyhL(Uw61Nq zF<$?db*k5Vpz~>`k6d}xRU_w5ow{94I`J==`5)>(>Cpd>nf^W!9nq{hZ|T>$?K`hK zd*tZ6E^XUgoRN@th{t`5!D9F|51@N{=+Z&)6gRDZ>PrP9hmD>*V%V6+@4D-W{4QOJ z{=Srx7=Ox&yda_ryqz(ZGFylh36p#ujl=4bW$(~^=Otdd#jq0`%U zylv#*Ap;jLU6Fg;C6{lt$8TaI_OFz568%ILIO)(QvdTZ9j}g0^=h$!Ex#ot;r;Qw0 z(6de3F+Z=-muNQ*JVq)JEZGP|2kfdf2EiH)O%_>z@1Z^xz-Pt@?bw`~30Q=kt2M_ZIn| ziqBfK;`uF3Z&~Gzo@8rwX>D!ofA0QkXvoS~Rl2SG>&<(sdPd*ME9u>8Ua|f_Rl9#` z{Hl4WwanpgNDpe>2P9Z5#g5mvc5kYG@_W;SMa%7__O9q+`Z@M-ke~2u5qV3 zHZyI|Y|AOHsHo7+gG7_n`qax+JNg_SzuD<~?Xf41`MVjcJW90LhhbR?i4H5#!+ngF zd+=O7OV@_j?BYX}O|r=_v@kcX`)?zrC$gY4 z2Vx|2xn>YFC?~EF2+2s2gb3=zACm|(Ve~~7bZ@UiFvX#$FX$gf_hKH?9v^~1i=n!R zBv%2VP6FR;=1cSqUgzo_5Bfc&V9+zWyMvHMi;|XvZg~cgsR+T}14L4ixV!5z@{Mtl zk8C8^+RsU^7tv@m3dW=)BK;#sOVW`RCL#o7n32(Luru2_pt@ES4cYqxbBDT!DPN7&7?0+mM1B_fm*Za>NKX|w> zaBHMPJ(~B%eSkW+_wNo3ec$Om{zB`AjgM)A01;$>sB0VQ3^OqE-re&?*)RJgyC%8w-n*}ybN>IFbI-ZM@fSzSh=_34 z=FPV10{oBrwQv9W?Af!`f5p_FCg2+y8sQcguut!<&t9IkC~^0WtufuZL~K~PWn+HR z@b(i@Q&Y8nhR7c#5Evfb+byWsQ9nQ53#*qei%Z?Qkbl;u5F=eO;Xi8t()Vl+>fOD^ zs!fM73!8KZO&vdeyy1@!c_sm$kdSECpk^nU_&3S=cJ-=0W7dDn<_28H~w4UZYoNZ*_8-#;dH#dlf9i~Ku;y+1NF)#LvW`CS4+2dKJv3vJ={(}Aw!=Iw4BHN-dyN`0 zmhb)7r2;~CKI9Q#4bm%r56Enb8oQJqmh5eN` zoJ4YlHpaS)O>W~xCr!P4Gq=z$ynPaXTw#jo71^!TpaqkVXwSgX`&p>2tOnne14jx0 zQ+}b=fW6ob2yF`F-GwN42!IhdgY9T3>T=7V3`XyqGh=`x;5c3gdnyrG@)KBbB@R{P zVfe$X$Qk%N(mt7OD6gm($`u8jR*P(NDJ;ScoGykuX)hexu7Vl#V6mYDA&3HVQ^hN671zrX!?afFaennOGSWWY^4=2#05jr zYhb^47xuz(=XXtq#?ZXn1|Ez0!t>K8aH|z4w~z)MM1T6uB?gj418MJ7nCJh~sm3TgGGqw)F|8W9f$bqnfF(T#APG)BSu$>+ zdiDuOraGviTj2T4Lt*F>1X1IF{ew)X3QUj%Nh>MfYLz-CKOZ}i=0HAG09`^?=$DUx z2%$1HmZ5g~PFTM_4cTgU!pd~T)1i-T4XL3XqNoD3m+nAj;>j0^yY;9MrcpalOJroq zzx$jRcrES=UTwqu8N0D;-5Oe;61c-|uQQgG;L)SU&<^PW{#tj)Tm|_^4lGl*K{7rD zj}8GF*aaf4Go78ll*LIP+JPO(dj{*S>jcce`i8*~7fv$akOy>ttaU+U+K;H7c?3#< zX}UFsXIei37Px%%s#Avopi*npYI*?dX9}rasip;os&_E-@m-wn#bqO4ssb!EKy?ko zy>hrjG=tpK3&LcD?L+~Xmm6eCC9~K_#tN2uhrXGi?c@(b$_tRVno=N8vnvmbF}P4_ z72}+`m#SY(ERyC;g-piH(>BAAe%9$3OY8}^&l92cp$+YHKKSuG@T`1*N=--6qQ#85 zedK+u1oqeh)$v^LW4T}_^Pn=B;qh(^To=Vb_H6(Mm7rA`}V!i8@fd!pi`ppG{u_MzF;B#fK@_W<_$1fc$5Gt zBhWp0*V+f}>qdbql~ZMh?H?yl@m>a`vKn$|81&rfP5;&4pyH1*b9;R2A~mllxM{++3-mZlh}a zR@hEbYH2+{=>^T7r)ET6E8(M4;lOCnOHRfKfEX!+ICVlH3)sHD2+NpNurAId^8(!4 z9jt3h2-^K>_g#j%*>h0Q<|Hf36j$i9ow|jppKAXXp}Ohsgf%Y!N~+JKl(12AWEqVGb08MLU~kcHaM4?-dtEmelh8R;;^ zh;vq2u&_yBu392X9khV~qRI+_0IfMPuGpeS!s3!7F`*b1986Y0-J=~;O&UQ^8%DMf zfISaBxk8BZg+Nm;XPq;@Cu>9y zj&59k$Z8k5qk{q5gTmaMK)aIHr6!1DIbh{xC>7(n_6=ZUH`**!7}h8hm6i1G3J}~~ zqsu&h=~C8$H{KQts+%A!Fbe+KhG0Fy;IjBl=-(X#m6wN;ggAQ(@NMW^kfaNlTv5EI zfC2^=h|ZMjqK6PC3D|6dKA|TJYsZ3*egV3M4Kda$0$U7yQ1(S8-kUqOMD3zk#&2G@ zV6qrXqDxBe#*RrzIr{aR)5Oe2p7^|Z6q;*2!6Jj9U6>5rj3LwyJR!1+Am4rfC<(Po z#Dn0KnOZeY<%88apik^gn^+3?@SbpWZ-mLuM`DvpZ#?*H4+g(FxN!G@{bT)Ibge7$ zZ=d9NI__S*deUMn{ae|C$35PfGUdP*ucwM>_gt|uFb1u3&w+Pt1MT0FVfZkCdPNhb zR?VzUsQqXoq+9o(YUm2xs25>aIRShK0lRtN9iOiFhDG4k{7r}-JR~>c$l;`}0YU95 z3yt68=H}KZM*c%Uc~H*cYuC;Zk+|}TvaXY7Oy8R}GDV(PqQRP=ShUkV2hqMIT;`2| z>&J;u`FcX89BY&MLboghY(RH-7(6h;ClYH#2V9xG7V*Pg`}x?Ztl`r~Cx=xP8aHQU zWjPd_`tvsg>OcH)%szeLTwIN@q!W3(bMD-^a=qsn4;A6x0&o@M#B58)ZW^>+U-fqI3!^XCi9#^Sd$DoyLzX=!W6zMZ<)Xe^1c6#o)! z%FjPhFIPW5YyLL?00960y>rCp00006Nkl6)MmVGn>ML!+O#p5)W5^s+O*lhbMf)5*F)R1IoGaDn{eL4NBD$#o?k!c z6B_Co*MC6QJ*A_Ij+#u)+5g>#Lqk1M2Mz7<{^nQ8THbEV!RzOfuZeM5o)Mbd@t+Xo|*;BjYf2 z`p}C(q57VMy)*Xi`(yy7Y;(GSs%=rJ^n^or?9;p^ZYSnsT1bzb3uE`9F=Z^peP$mdcy@7LmUtqZ;NP| zSFQ#V-*v~x*E|rH z;RtiIJ;opL#^7z9FvoH&w!10w@5lLXzMPK8P8_#0<>a&G2z&VY*&#B^5n1E)D0#gd z{7rTolWQ4ei-0g&%xh4e@6#{4_ND7R(0{!>BGP#e*C;lF>qlL8p5co4d}k!}bynWz z&2HU9jjHBw6!ATgd_FAE7C9B}DB9w!%*7mS zhx|ocgL(sAI5`3{=8e1`6XQG7YR?vnzWeA2#iy%lM`6|F81%2PM|5YtD_4tx<@T80 z5QyiGm!iCK#I49^?@?uCWp>tQpZ+!lJ7=bS?oqU4$&$9;b?;9(FLB1iBb$fBr=RE$UbO?zEH0xeVN-_U++xAVk_HYmOG-YG^Sqm;asK&A5d(o#Tr^OJUJ!=Vb?+&PO z@TZPTJ;#`X^}E}rhy3leH@4#1qutomkb#waQ;p(HE*m=IaGVZ2RI!u2-hm_7* z1k?Y9&2hrI5B1n|T8FK5M%3M3jx+TKFl=}s0!$7U&A~3k|6MzejWu{Yy0pU63Ko~QJfTBAb(bC0)QTUa9P5YMaVeQPbdu6Zhw$@$wOj zpE!haINqi{Mn^_Q+KUvaso@@hW~UQ93)5RZII;&9KYIb&>mpD?9m}}m);c35%^uzy zHz33YX@wF;?cl}ntC&|doY5n>s}{y!8)OZ!MF?|>%qWdTM z=e1rASbfq>9l!OOz9oFT4l~7R_T$_O{>%qGG7^A z>H_%=z3=aWIf&!O8Aq{B!ZD7&?u-t(!#F;5+r7-5 z`K_%oreC01yGZ>K5@(M!)cLA&E(l3rE~7ljUDR4eT^H3p4Q5pakt2=?qj$=&_MDEomhrjfl+~AYLct^_RGo0a=xUv!2YKJv zYCYC8xnkfF9c83l25DNa$^31QG1v(!n>{e<1y`lMFqk+t^)K_UYIMc37tPB2MgKAJ zhLN)VNAJ$Svg7pa&Z;d%v7Vdph8}AhXus!OQ83v_(W&@Ye6|*=o87VWtQ&2UH3{|Y z=cj(l@3?FS%s=UY6`y!u!8uQ4l{&+l{^`g1Y}y`Ith;2w`<%at`j3e-mX0XxgS9(G z!5qb!F2DwTW;kKh85h=qtf}5{Wlg58wdh~Q7yV3r%?(u-+>lQn^OiNIeaIpDQS=wa zdh}U0EWO$eOF#9*=$#%2X07OFq#aK5#?Cjl!Dw>a7Zqz5?jPu&yf>ndK)<&n*Mq}G&} zlvLn|8OOb_Gyf8vL%F)qqj9GkJ(ai7#KGAB8D&v3?S&Usa%3u{h2#O|av&K*i0 zo?wIg@omwAM`Q=N-v-n7dtxbdoHfc>`Mc`~Tl5_NjB-!jn6`>cqKni4&RB5E4-4)Z zF#fQwq8}Mg#+UVPpB94XcwdfZhu#&=sG^Ooy6B3TjIXgutXJcW*qXf0dgP4JVafG& znEXLIWqswkvIhM2@sWCzweKc(EV%891@{dYw$lsdIL2y!*2_Ip75zs>`wkmEvJc+5 zQjVY&BcH{7uDf(w>YAN>|N!{74l8e7MgdcX3V4;I|;LQ*eB#SX1;BCSM+ z3icB7?)swQf&u9x^oraOtfwdK^2grVHx>Jfk2li(`=R#U6wIk({2VN~gk#Z8x|BI# z(K$CPqa0&@<*L^1a!u@vwkUG+sC4E0d@%gYcCCS^KQ<#C)#rfGwf}HCBoq zG%5@+J*lyitJ02enwecA@mBf0EimYM>WiEVGl}CX4g6k`cXHPS)?o2M-rvUX!=- zZ21`t3YKUP#26>~l>SxpKe;govmRRzSHL_(`xaeE%<5RG!Pxy;KC7V*I%3DI{%E>) z0L!W>5fSb6hsYS8^+iQ_zB2aHAE{Bp!@Y_EP0r25tf7y5{4NeZT8@Pm{8Ty4X;4_D z;d-mS5z^iPsU@zAJ=8s8LFPDOA|Gfmt-+4>JK(iDC1}2T2#c1?Kxl;L@1kOSSCy3X z^?G{D|LV8Y?9uUteCFpfy^FGO=%YRO=<{`0%-(oLlRe7mC%so|5JGH1;!^fx4SRSE z$`w63;my0F(RlL^W>ro=NSNE#Q88W%^M`aIBK5;RQBgiQfk95k^9wt+96YicC%`w(h+oy5bi!t0TCdf|;q>i!xc=ZE-m85BWfKO2xa{wxSEXHzN=Y&KJQ?5@ z{E^))Hk!F)7kiT5#3u%{Y}>vW4eu;P;+bz~9CNUt1dfG-@_Rk$NBT-#bgi-G0NShAb=5BqSz_-al&<9YHK$8VP7 zt3O=EnYyD2rWYCG)xzHSviP|<+RK~E@RRJS8|99S_3ds7)@?Ui^k4SslZh=`*W>c_ zqiB9mgFP3z;rWxEs@#-))j=1GS?P>S;y(fGX{7d(`crxV!L0fcv#5Mkj}0gF*mzdQ zLyv6@Vfg6IRN|+5aro%F!Z9E=(fIG;=Nxl#e7wo@W9E^S6`MicYd>Sg*BvvWTK2s2 zIzIdSI_mGN!Rz%&v~3RspWQ^9aN|iAa%OskJ2SFg6r4w7Zr{}beJ1K)4i}7xwIply zU~)0thC5-&UN>wc)>BO^vAWI`TN+KMy;_VrUmnAy%MGZQHBRdIfA*^}PRlI~=$% z3Sa)d0arh*$An2kKrEnzbNMVJ+;d!Xw4d=GIhE|}c-M$%?}6-B_5??`|8~f*{1(B) zuiQF}`g^PKW>o9zg6WWu%6AVh^^&`F$K`u>rMA3g9@vikBiTrw$ zzof2#^cRAoiceVkw@~5+`RvEbw-cWcZ0J0(DIPUVfjDq`G(P#_Eu1=cP^tCPI)?p~ zIB#R1*?E3Qh(`qNs;$^K^W_F#quuX%_07W3V+Zi)%TI9f<{a#(i^S$rZuB?$9gk-j zOG*~#6x>&ln|+PgNkpnGx)Mw5KE{rER%Oc@PWg}1HbnlHRr!S%O(o}PaqRMKl%M#ytc&1e!rgWoZAUEBR^cE6h;d6lD|o+w zykl;O6X)TAW#k1`5T{w$q{Heacf5J601tn63YRZ8g7_wTKHvGVv4Ljd|DSEFS&0YV z9HqY9l^9pe7_sObJqD4(NFvTBt2o3jK{IvXczuHe5=bAI7RKD(l$P{}8r}Od={RpSdu}aCOjw7$#g|!{Ar!1Rer(7 zlzH)9(O1_}nFrUSJA3FL8K3+G*LO`rJFKGqH(!XtqsMnCe>DBTOVNK&u*<`mR{7Uc z_s=rsm9EjLI`CyI8B6@CnC}T!-zRcCjfu$L7GliPb`V!QrpLmAdg{|r^=-;jy2h3I zCzeB9$h}V=DwZWWP~YhvKu*1rE%GPZAU;R6OObySu^X|WnhTMw_7g+-Rr{g*pKaQ_ z61S=UXDR<$=Eaf3c?C-mt|4!XhVSCot-2G;N_ZrRhgO*+w)7{@wx&*aB|XMIr$+$q zkvNq#NQa;>6~B90cI$89g8UU;g74%Ujl?eU#?rUDsPi>ZH!JGh>C2S=QZydYeln>4 zC-xJpf4H$`1#W%yKGxB8)}GU&l=dU?OU#IDPYyt2rQG4k_87rfw30b@+N-VzBSt4{ zA>$@>alo<U0<(_HSKl>RtRO zZo%AQQc4AzLrT!Z|xZi@c>}9e4dth((wEfe6SK`(; z2e7u@1+y79<6F5A(ZBfRxXsi#^ZeQd>X+-d@|-(*OwcKDM$vz3t(M4|XLXY&R#E=t z#QUQ&$bryDMSkm{;JrL2-{GkmOn9A~&XsnkBImIDiU(#N_e7UT)SthsKm8(*Snxa@ z7Lym+DDpFYX5~`;Xw`oi{~t&_+;sO{^q=FR@KN$y0CC~YBOI|*Y=Sx$&S?c}uF1a= zxxUS1Pvqwu#5X2v^B_myh7~-9Z*WyGPqD9ml;3Jch9El>R=8r$iFQ~fywG*>Cp<=T z-%nJQR(W3RH@T++=Ijnr`cjFXL80zS{4rTv9u zL*mrhN#u*?+6~)GUgd%pmfmcKCAYmWB=R>$#l{&+DElhf!I+J14?&vj#93}I&!AvfEpm3MZAfHE1J|oX%4OaJGi9ZC8BhDD^ ztnfEW$e%1GPqW}tKa73H8)3wCIg+{%r=4nxzU6Jvn@6u{ZBaPw8FVQn7i>}2pi3EbKtEVUd!Dk_13~0l zB;F+CvTmO844?V-D4hC?!X*nQBKL@X;tHHF@0tON?ijG(jvr=!;;V2?RypN6G}Lo( zJmU}T|K5}H)PLs@++VhzKFWBtiauXe?}|}1dL#*-P5YLZ9@UUU1ZI> zA*}T(4%3#edSdYvFJzRe`B3Wq=rr|Na2 z`eVRWFIZaZN2{#Cp{}a@jGt3zQ+@hpD;%EKNCa(V%yX_-LAzf~J6=gVcp>ZOKCB1) zDZ`W4D*Cdzev`COdd3v#;Y4@jdS;J9YMMpKUs68@T6A}wCEj%9i+w1pbcBWRR^}+R zY~DB><{y^a=gOGK_|v4v_#Jx0W~;TG$ZL%&60e`g&)>3#ZyveE#h-f9hT9=+F!>P5 zV7*`Br^p>h-|R*ooqd_S|(=={0?!*|l=(^Zb!k1;f^yFIzr2t0bk{F@b}#D9^W zz2cqfjVo~dn|+vjR*NyOYLVPaY(?ymw$f3H!OXc5f0tj>WBCO=<{ooJ;cRF6g}Qf8 z$u+#!`YrR2HR!e29gA<0OTFcd(RgJUa@k=YWQ=ox z!J_KXkA7dc&=FHVbYM&lVg6$MtkiE}|0YvVu|#tipBH50z&r{~7KzTEqPs)StW~HpBkOKG#6j@q?r@~c&T za};|X+MhpjQ}HJ9sMPN~a=As-9x$32%lVAherA~)rkwFb*%3da3|03K_;O6)b%iID zc?PhrnO*0MndjM0G`Gs1rOL1LFBbj7P3*s}eY2nPYpH(?20m+*--dmj9s5?=Ep1TV zCpj)8UaQC^bL4(J zxy7KapFi!T>nP@!+*bKnzs;_9!Yp#6RTowJQT5+iKT!VaO)F{t2PnIi_mUf5ukO7O zn@H?z$Gs1H=SarBbTxk|_Ca5?%CG3X)sEy^ChfOqBYAA*Rk7o-wX|>A$UMfB{H30X z?yWu`-^xKhH;SSB4YVKffGb+%m->O6rnP@${Ve+5$92*weD|=I z9hAMd(pQTP1y@M#Wsd^(>auT1_D@Nyf7<4)ejxH^jCaAzD@KHo2bbql2kSBUlrJWo zW-dMGPhPauSEzHv&N&A~C%pIRZ`s2VSD>Np9m$bX{!5~N_K#UH%wMhjR|xBW)}PmZ zdjPZOzq7bsVmkT9VcRsw93}j)x{k_PGY=?~2Ns zMhx8ItJDr6qmlbY0@w=#u$Phi|0D1_v;&UA^%a|tIw3ZT zebN}UpO;=q^0LfB#uxc#-7=y4QXo1EcT;cxr8c0ADRQ^^ys~~gr^w86Qlmw3FZ;mf z95L}2x!m*YOO^crcH~uqQTOX@xO4YY#3%VH@n86ykO=o(#7qBN&i#XzuQV`^9l%Rh z3%Q@fkMq!?qMp1rePUd#BRZ98VTz%goP(MV+2_&Ex{qZqHOfxe52wgKf&0a8nKApJ z871!%59hO}R!~6H<;r8QZytj83 z(mIB>kRSajr%PNOF}OCw4^2_=ezVOXE_LKk{=)p+a`@Q0Xny=I-nw0e#Z5+3F!stZ zo$FG%ON-9aG~DOHSR?bGzGeJ4?tf4)1OA;s`Dfh@!t6&uDA{L#DT?>D+KI@m95NUB zP*NWaik{VC%5ewEP2Rk9f5N6~84ADObn^&ae5o3ReKK2u!`yxw7UB7Nd{SV3j~>BK zIOW~Di)}h~4D(A&G?kizbT_!4p`~PaAx_sF!RLRxh_~-fL}jBpX7K$Lw8QD#D^RxI z9zEyL&*>Ag79yX_MUIYR-BEGNg4x_hF|5`|`PKeiv2*bi#)X958VuR4#l+)$A7z%k z92HFt%0Bp}uXf_m*PmkDh9yYPh#>#2|BtwYz+G8cQ7OH8b<~O8zw1K|#6B{{w~QRs z1wW(xpJX4-x%!WZL4J%^Zw|qdO96}pt@}qB?J)V619GQnVPU?JeR?9lFLAnb&SAhS zMnrVxUOehr_G8Fi!BWz1eJx>srt$^UDS8eXvx=5QsZv!`j#Jz)Kxqn(_Vy(E;I$1K)^TW|El=`XgT z{?ZXh9oaQ6r6oAj?NLaC=a#gz@Vt>DM{2)I*WY(u<}7=WW68tNKTZgD*t>5gY7gwh zmw&vDL!T|dJnoy4wO96_P@m%uvA$y38dZA+QJW_Y;NyyMN>V65+#R z2XX(`mr;9v7W>6e%xof-Pn(*~V;bW~*+K4;6nUF$mAx%nA15XS{A$94VPQW+rXO>!@Eu{1?fP3nUET_d^!P@4f8jft?;OIB$5mK= zwLSgNQJI6tE&FihU1*0_?hMAcFJ8rov-`1RX$8_ch5y|WqQ4#y08|C{u4X+!1_pJIyVJXRWvnyoS1OPiJ!YWPRq@aG!u|K9U| J8u+mq_)iWAg2ey; literal 0 HcmV?d00001 diff --git a/public/favicon/favicon.png b/public/favicon/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..f6e74d5ad05805ae40e713b43fe6f63afa0f4757 GIT binary patch literal 1608 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%0D>@GDv5R$#+&Znj6X(CM&jIjMk0uj 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%0Dk&ty5Uu@Y$Zj%oIdIdIdp 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 literal 0 HcmV?d00001 diff --git a/restore.log b/restore.log deleted file mode 100644 index 0f654fb..0000000 --- a/restore.log +++ /dev/null @@ -1,10 +0,0 @@ -Starting restore... -Reading container configuration... -Stopping container... -Destroying container... -Logging into PBS... -Downloading backup from PBS... -Packing backup folder... -Restoring container... -Cleaning up temporary files... -Restore completed successfully diff --git a/scripts/cache-logos.ts b/scripts/cache-logos.ts index 409a94b..e1aada1 100644 --- a/scripts/cache-logos.ts +++ b/scripts/cache-logos.ts @@ -21,7 +21,7 @@ async function main() { console.log(`[cache-logos] Caching ${entries.length} logos...`); - const result = await cacheLogos(entries); + const result = await cacheLogos(entries, { verbose: true }); console.log( `[cache-logos] Done: ${result.downloaded} downloaded, ${result.skipped} already cached, ${result.errors} errors`, ); diff --git a/scripts/core/alpine-install.func b/scripts/core/alpine-install.func index 0e0c798..1dd388d 100644 --- a/scripts/core/alpine-install.func +++ b/scripts/core/alpine-install.func @@ -4,7 +4,7 @@ # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE if ! command -v curl >/dev/null 2>&1; then - apk update && apk add curl >/dev/null 2>&1 + apk update && apk add curl >/dev/null 2>&1 fi source "$(dirname "${BASH_SOURCE[0]}")/core.func" source "$(dirname "${BASH_SOURCE[0]}")/error-handler.func" @@ -14,8 +14,8 @@ catch_errors # Persist diagnostics setting inside container (exported from build.func) # so addon scripts running later can find the user's choice if [[ ! -f /usr/local/community-scripts/diagnostics ]]; then - mkdir -p /usr/local/community-scripts - echo "DIAGNOSTICS=${DIAGNOSTICS:-no}" >/usr/local/community-scripts/diagnostics + mkdir -p /usr/local/community-scripts + echo "DIAGNOSTICS=${DIAGNOSTICS:-no}" >/usr/local/community-scripts/diagnostics fi # Get LXC IP address (must be called INSIDE container, after network is up) @@ -33,208 +33,217 @@ get_lxc_ip # - Only executes if DIAGNOSTICS=yes and RANDOM_UUID is set # ------------------------------------------------------------------------------ post_progress_to_api() { - command -v curl &>/dev/null || return 0 - [[ "${DIAGNOSTICS:-no}" == "no" ]] && return 0 - [[ -z "${RANDOM_UUID:-}" ]] && return 0 + command -v curl &>/dev/null || return 0 + [[ "${DIAGNOSTICS:-no}" == "no" ]] && return 0 + [[ -z "${RANDOM_UUID:-}" ]] && return 0 - local progress_status="${1:-configuring}" + local progress_status="${1:-configuring}" - curl -fsS -m 5 -X POST "https://telemetry.community-scripts.org/telemetry" \ - -H "Content-Type: application/json" \ - -d "{\"random_id\":\"${RANDOM_UUID}\",\"execution_id\":\"${EXECUTION_ID:-${RANDOM_UUID}}\",\"type\":\"lxc\",\"nsapp\":\"${app:-unknown}\",\"status\":\"${progress_status}\"}" &>/dev/null || true + curl -fsS -m 5 -X POST "https://telemetry.community-scripts.org/telemetry" \ + -H "Content-Type: application/json" \ + -d "{\"random_id\":\"${RANDOM_UUID}\",\"execution_id\":\"${EXECUTION_ID:-${RANDOM_UUID}}\",\"type\":\"lxc\",\"nsapp\":\"${app:-unknown}\",\"status\":\"${progress_status}\"}" &>/dev/null || true } # This function enables IPv6 if it's not disabled and sets verbose mode verb_ip6() { - set_std_mode # Set STD mode based on VERBOSE + set_std_mode # Set STD mode based on VERBOSE - if [ "${IPV6_METHOD:-}" = "disable" ]; then - msg_info "Disabling IPv6 (this may affect some services)" - $STD sysctl -w net.ipv6.conf.all.disable_ipv6=1 - $STD sysctl -w net.ipv6.conf.default.disable_ipv6=1 - $STD sysctl -w net.ipv6.conf.lo.disable_ipv6=1 - mkdir -p /etc/sysctl.d - $STD tee /etc/sysctl.d/99-disable-ipv6.conf >/dev/null </dev/null <&2 -en "${CROSS}${RD} No Network! " - sleep $RETRY_EVERY - i=$((i - 1)) - done + msg_info "Setting up Container OS" + while [ $i -gt 0 ]; do + if [ "$(ip addr show | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d'/' -f1)" != "" ]; then + break + fi + echo 1>&2 -en "${CROSS}${RD} No Network! " + sleep $RETRY_EVERY + i=$((i - 1)) + done - if [ "$(ip addr show | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d'/' -f1)" = "" ]; then - echo 1>&2 -e "\n${CROSS}${RD} No Network After $RETRY_NUM Tries${CL}" - echo -e "${NETWORK}Check Network Settings" - exit 121 - fi - msg_ok "Set up Container OS" - msg_ok "Network Connected: ${BL}$(ip addr show | grep 'inet ' | awk '{print $2}' | cut -d'/' -f1 | tail -n1)${CL}" - post_progress_to_api + if [ "$(ip addr show | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d'/' -f1)" = "" ]; then + echo 1>&2 -e "\n${CROSS}${RD} No Network After $RETRY_NUM Tries${CL}" + echo -e "${NETWORK}Check Network Settings" + exit 121 + fi + msg_ok "Set up Container OS" + msg_ok "Network Connected: ${BL}$(ip addr show | grep 'inet ' | awk '{print $2}' | cut -d'/' -f1 | tail -n1)${CL}" + post_progress_to_api } # This function checks the network connection by pinging a known IP address and prompts the user to continue if the internet is not connected network_check() { - set +e - trap - ERR - ipv4_connected=false + set +e + trap - ERR + ipv4_connected=false - # Check IPv4 connectivity to Cloudflare, Google & Quad9 DNS servers - if ping -c 1 -W 1 1.1.1.1 &>/dev/null || ping -c 1 -W 1 8.8.8.8 &>/dev/null || ping -c 1 -W 1 9.9.9.9 &>/dev/null; then - msg_ok "IPv4 Internet Connected" - ipv4_connected=true - else - msg_error "IPv4 Internet Not Connected" - fi + # Check IPv4 connectivity to Cloudflare, Google & Quad9 DNS servers + if ping -c 1 -W 1 1.1.1.1 &>/dev/null || ping -c 1 -W 1 8.8.8.8 &>/dev/null || ping -c 1 -W 1 9.9.9.9 &>/dev/null; then + msg_ok "IPv4 Internet Connected" + ipv4_connected=true + else + msg_error "IPv4 Internet Not Connected" + fi - if [[ $ipv4_connected == false ]]; then - read -r -p "No Internet detected, would you like to continue anyway? " prompt - if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then - echo -e "${INFO}${RD}Expect Issues Without Internet${CL}" - else - echo -e "${NETWORK}Check Network Settings" - exit 122 - fi - fi + if [[ $ipv4_connected == false ]]; then + read -r -p "No Internet detected, would you like to continue anyway? " prompt + if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then + echo -e "${INFO}${RD}Expect Issues Without Internet${CL}" + else + echo -e "${NETWORK}Check Network Settings" + exit 122 + fi + fi - # DNS resolution checks for GitHub-related domains - GIT_HOSTS=("github.com" "raw.githubusercontent.com" "api.github.com" "git.community-scripts.org") - GIT_STATUS="Git DNS:" - DNS_FAILED=false + # DNS resolution checks for GitHub-related domains + GIT_HOSTS=("github.com" "raw.githubusercontent.com" "api.github.com" "git.community-scripts.org") + GIT_STATUS="Git DNS:" + DNS_FAILED=false - for HOST in "${GIT_HOSTS[@]}"; do - RESOLVEDIP=$(getent hosts "$HOST" | awk '{ print $1 }' | grep -E '(^([0-9]{1,3}\.){3}[0-9]{1,3}$)|(^[a-fA-F0-9:]+$)' | head -n1) - if [[ -z "$RESOLVEDIP" ]]; then - GIT_STATUS+="$HOST:($DNSFAIL)" - DNS_FAILED=true - else - GIT_STATUS+=" $HOST:($DNSOK)" - fi - done + for HOST in "${GIT_HOSTS[@]}"; do + RESOLVEDIP=$(getent hosts "$HOST" | awk '{ print $1 }' | grep -E '(^([0-9]{1,3}\.){3}[0-9]{1,3}$)|(^[a-fA-F0-9:]+$)' | head -n1) + if [[ -z "$RESOLVEDIP" ]]; then + GIT_STATUS+="$HOST:($DNSFAIL)" + DNS_FAILED=true + else + GIT_STATUS+=" $HOST:($DNSOK)" + fi + done - if [[ "$DNS_FAILED" == true ]]; then - fatal "$GIT_STATUS" - else - msg_ok "$GIT_STATUS" - fi + if [[ "$DNS_FAILED" == true ]]; then + fatal "$GIT_STATUS" + else + msg_ok "$GIT_STATUS" + fi - set -e - trap 'error_handler $LINENO "$BASH_COMMAND"' ERR + set -e + trap 'error_handler $LINENO "$BASH_COMMAND"' ERR } # This function updates the Container OS by running apk upgrade with mirror fallback update_os() { - msg_info "Updating Container OS" - if ! $STD apk -U upgrade; then - msg_warn "apk update failed (dl-cdn.alpinelinux.org), trying alternate mirrors..." - local alpine_mirrors="mirror.init7.net ftp.halifax.rwth-aachen.de mirrors.edge.kernel.org alpine.mirror.wearetriple.com mirror.leaseweb.com uk.alpinelinux.org dl-2.alpinelinux.org dl-4.alpinelinux.org" - local apk_ok=false - for m in $(printf '%s\n' $alpine_mirrors | shuf); do - if timeout 2 bash -c "echo >/dev/tcp/$m/80" 2>/dev/null; then - msg_custom "${INFO}" "${YW}" "Attempting mirror: ${m}" - cat </etc/apk/repositories + msg_info "Updating Container OS" + if ! $STD apk -U upgrade; then + msg_warn "apk update failed (dl-cdn.alpinelinux.org), trying alternate mirrors..." + local alpine_mirrors="mirror.init7.net ftp.halifax.rwth-aachen.de mirrors.edge.kernel.org alpine.mirror.wearetriple.com mirror.leaseweb.com uk.alpinelinux.org dl-2.alpinelinux.org dl-4.alpinelinux.org" + local apk_ok=false + for m in $(printf '%s\n' $alpine_mirrors | shuf); do + if timeout 2 bash -c "echo >/dev/tcp/$m/80" 2>/dev/null; then + msg_custom "${INFO}" "${YW}" "Attempting mirror: ${m}" + cat </etc/apk/repositories http://$m/alpine/latest-stable/main http://$m/alpine/latest-stable/community EOF - if $STD apk -U upgrade; then - msg_ok "CDN set to ${m}: tests passed" - apk_ok=true - break - else - msg_warn "Mirror ${m} failed" - fi - fi - done - if [[ "$apk_ok" != true ]]; then - msg_error "All Alpine mirrors failed. Check network or try again later." - exit 1 - fi - fi - local tools_content - tools_content=$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func) || { - msg_error "Failed to download tools.func" - exit 115 - } - source /dev/stdin <<<"$tools_content" - if ! declare -f fetch_and_deploy_gh_release >/dev/null 2>&1; then - msg_error "tools.func loaded but incomplete — missing expected functions" - exit 115 - fi - msg_ok "Updated Container OS" - post_progress_to_api + if $STD apk -U upgrade; then + msg_ok "CDN set to ${m}: tests passed" + apk_ok=true + break + else + msg_warn "Mirror ${m} failed" + fi + fi + done + if [[ "$apk_ok" != true ]]; then + msg_error "All Alpine mirrors failed. Check network or try again later." + exit 1 + fi + fi + local tools_content + local _tools_local + _tools_local="$(dirname "${BASH_SOURCE[0]}")/tools.func" + if [[ -f "$_tools_local" ]]; then + tools_content=$(cat "$_tools_local") || { + msg_error "Failed to load tools.func from local" + exit 115 + } + else + tools_content=$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func) || { + msg_error "Failed to download tools.func" + exit 115 + } + fi + source /dev/stdin <<<"$tools_content" + if ! declare -f fetch_and_deploy_gh_release >/dev/null 2>&1; then + msg_error "tools.func loaded but incomplete — missing expected functions" + exit 115 + fi + msg_ok "Updated Container OS" + post_progress_to_api } # This function modifies the message of the day (motd) and SSH settings motd_ssh() { - echo "export TERM='xterm-256color'" >>/root/.bashrc + echo "export TERM='xterm-256color'" >>/root/.bashrc - PROFILE_FILE="/etc/profile.d/00_lxc-details.sh" - echo "echo -e \"\"" >"$PROFILE_FILE" - echo -e "echo -e \"${BOLD}${APPLICATION} LXC Container${CL}"\" >>"$PROFILE_FILE" - echo -e "echo -e \"${TAB}${GATEWAY}${YW} Provided by: ${GN}community-scripts ORG ${YW}| GitHub: ${GN}https://github.com/community-scripts/ProxmoxVE${CL}\"" >>"$PROFILE_FILE" - echo "echo \"\"" >>"$PROFILE_FILE" - echo -e "echo -e \"${TAB}${OS}${YW} OS: ${GN}\$(grep ^NAME /etc/os-release | cut -d= -f2 | tr -d '\"') - Version: \$(grep ^VERSION_ID /etc/os-release | cut -d= -f2 | tr -d '\"')${CL}\"" >>"$PROFILE_FILE" - echo -e "echo -e \"${TAB}${HOSTNAME}${YW} Hostname: ${GN}\$(hostname)${CL}\"" >>"$PROFILE_FILE" - echo -e "echo -e \"${TAB}${INFO}${YW} IP Address: ${GN}\$(ip -4 addr show eth0 | awk '/inet / {print \$2}' | cut -d/ -f1 | head -n 1)${CL}\"" >>"$PROFILE_FILE" + PROFILE_FILE="/etc/profile.d/00_lxc-details.sh" + echo "echo -e \"\"" >"$PROFILE_FILE" + echo -e "echo -e \"${BOLD}${APPLICATION} LXC Container${CL}"\" >>"$PROFILE_FILE" + echo -e "echo -e \"${TAB}${GATEWAY}${YW} Provided by: ${GN}community-scripts ORG ${YW}| GitHub: ${GN}https://github.com/community-scripts/ProxmoxVE${CL}\"" >>"$PROFILE_FILE" + echo "echo \"\"" >>"$PROFILE_FILE" + echo -e "echo -e \"${TAB}${OS}${YW} OS: ${GN}\$(grep ^NAME /etc/os-release | cut -d= -f2 | tr -d '\"') - Version: \$(grep ^VERSION_ID /etc/os-release | cut -d= -f2 | tr -d '\"')${CL}\"" >>"$PROFILE_FILE" + echo -e "echo -e \"${TAB}${HOSTNAME}${YW} Hostname: ${GN}\$(hostname)${CL}\"" >>"$PROFILE_FILE" + echo -e "echo -e \"${TAB}${INFO}${YW} IP Address: ${GN}\$(ip -4 addr show eth0 | awk '/inet / {print \$2}' | cut -d/ -f1 | head -n 1)${CL}\"" >>"$PROFILE_FILE" - # Configure SSH if enabled - if [[ "${SSH_ROOT}" == "yes" ]]; then - # Enable sshd service - $STD rc-update add sshd - # Allow root login via SSH - sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/g" /etc/ssh/sshd_config - # Start the sshd service - $STD /etc/init.d/sshd start - fi - post_progress_to_api + # Configure SSH if enabled + if [[ "${SSH_ROOT}" == "yes" ]]; then + # Enable sshd service + $STD rc-update add sshd + # Allow root login via SSH + sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/g" /etc/ssh/sshd_config + # Start the sshd service + $STD /etc/init.d/sshd start + fi + post_progress_to_api } # Validate Timezone for some LXC's validate_tz() { - [[ -f "/usr/share/zoneinfo/$1" ]] + [[ -f "/usr/share/zoneinfo/$1" ]] } # This function customizes the container and enables passwordless login for the root user customize() { - if [[ "$PASSWORD" == "" ]]; then - msg_info "Customizing Container" - passwd -d root >/dev/null 2>&1 + if [[ "$PASSWORD" == "" ]]; then + msg_info "Customizing Container" + passwd -d root >/dev/null 2>&1 - # Ensure agetty is available - apk add --no-cache --force-broken-world util-linux >/dev/null 2>&1 + # Ensure agetty is available + apk add --no-cache --force-broken-world util-linux >/dev/null 2>&1 - # Create persistent autologin boot script - mkdir -p /etc/local.d - cat <<'EOF' >/etc/local.d/autologin.start + # Create persistent autologin boot script + mkdir -p /etc/local.d + cat <<'EOF' >/etc/local.d/autologin.start #!/bin/sh sed -i 's|^tty1::respawn:.*|tty1::respawn:/sbin/agetty --autologin root --noclear tty1 38400 linux|' /etc/inittab kill -HUP 1 EOF - touch /root/.hushlogin + touch /root/.hushlogin - chmod +x /etc/local.d/autologin.start - rc-update add local >/dev/null 2>&1 + chmod +x /etc/local.d/autologin.start + rc-update add local >/dev/null 2>&1 - # Apply autologin immediately for current session - /etc/local.d/autologin.start + # Apply autologin immediately for current session + /etc/local.d/autologin.start - msg_ok "Customized Container" - fi + msg_ok "Customized Container" + fi - echo "bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/${app}.sh)\"" >/usr/bin/update - chmod +x /usr/bin/update - post_progress_to_api + echo "bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/${app}.sh)\"" >/usr/bin/update + chmod +x /usr/bin/update + post_progress_to_api } diff --git a/scripts/core/api.func b/scripts/core/api.func index 6e820e5..e3d9978 100644 --- a/scripts/core/api.func +++ b/scripts/core/api.func @@ -59,52 +59,52 @@ STATUS_TIMEOUT=10 # - Skips detection if REPO_SOURCE is already set (e.g., by environment) # ------------------------------------------------------------------------------ detect_repo_source() { - # Allow explicit override via environment - [[ -n "${REPO_SOURCE:-}" ]] && return 0 + # Allow explicit override via environment + [[ -n "${REPO_SOURCE:-}" ]] && return 0 - local content="" owner_repo="" + local content="" owner_repo="" - # Method 1: Read from /proc/$$/cmdline - # When invoked via: bash -c "$(curl -fsSL https://.../ct/app.sh)" - # the full CT/VM script content is in /proc/$$/cmdline (same PID through source chain) - if [[ -r /proc/$$/cmdline ]]; then - content=$(tr '\0' ' ' /dev/null) || true - fi + # Method 1: Read from /proc/$$/cmdline + # When invoked via: bash -c "$(curl -fsSL https://.../ct/app.sh)" + # the full CT/VM script content is in /proc/$$/cmdline (same PID through source chain) + if [[ -r /proc/$$/cmdline ]]; then + content=$(tr '\0' ' ' /dev/null) || true + fi - # Method 2: Read from the original script file (bash ct/app.sh / bash vm/app.sh) - if [[ -z "$content" ]] || ! echo "$content" | grep -qE 'githubusercontent\.com|community-scripts\.org' 2>/dev/null; then - if [[ -f "$0" ]] && [[ "$0" != *bash* ]]; then - content=$(head -10 "$0" 2>/dev/null) || true - fi - fi + # Method 2: Read from the original script file (bash ct/app.sh / bash vm/app.sh) + if [[ -z "$content" ]] || ! echo "$content" | grep -qE 'githubusercontent\.com|community-scripts\.org' 2>/dev/null; then + if [[ -f "$0" ]] && [[ "$0" != *bash* ]]; then + content=$(head -10 "$0" 2>/dev/null) || true + fi + fi - # Extract owner/repo from URL patterns found in the script content - if [[ -n "$content" ]]; then - # GitHub raw URL: raw.githubusercontent.com/OWNER/REPO/... - owner_repo=$(echo "$content" | grep -oE 'raw\.githubusercontent\.com/[^/]+/[^/]+' | head -1 | sed 's|raw\.githubusercontent\.com/||') || true + # Extract owner/repo from URL patterns found in the script content + if [[ -n "$content" ]]; then + # GitHub raw URL: raw.githubusercontent.com/OWNER/REPO/... + owner_repo=$(echo "$content" | grep -oE 'raw\.githubusercontent\.com/[^/]+/[^/]+' | head -1 | sed 's|raw\.githubusercontent\.com/||') || true - # Gitea URL: git.community-scripts.org/OWNER/REPO/... - if [[ -z "$owner_repo" ]]; then - owner_repo=$(echo "$content" | grep -oE 'git\.community-scripts\.org/[^/]+/[^/]+' | head -1 | sed 's|git\.community-scripts\.org/||') || true - fi - fi + # Gitea URL: git.community-scripts.org/OWNER/REPO/... + if [[ -z "$owner_repo" ]]; then + owner_repo=$(echo "$content" | grep -oE 'git\.community-scripts\.org/[^/]+/[^/]+' | head -1 | sed 's|git\.community-scripts\.org/||') || true + fi + fi - # Map detected owner/repo to canonical repo_source value - case "$owner_repo" in - community-scripts/ProxmoxVE) REPO_SOURCE="ProxmoxVE" ;; - community-scripts/ProxmoxVED) REPO_SOURCE="ProxmoxVED" ;; - "") - # No URL detected — use hardcoded fallback - # This value must match the repo: ProxmoxVE for production, ProxmoxVED for dev - REPO_SOURCE="ProxmoxVE" - ;; - *) - # Fork or unknown repo - REPO_SOURCE="external" - ;; - esac + # Map detected owner/repo to canonical repo_source value + case "$owner_repo" in + community-scripts/ProxmoxVE) REPO_SOURCE="ProxmoxVE" ;; + community-scripts/ProxmoxVED) REPO_SOURCE="ProxmoxVED" ;; + "") + # No URL detected — use hardcoded fallback + # This value must match the repo: ProxmoxVE for production, ProxmoxVED for dev + REPO_SOURCE="ProxmoxVE" + ;; + *) + # Fork or unknown repo + REPO_SOURCE="external" + ;; + esac - export REPO_SOURCE + export REPO_SOURCE } # Run detection immediately when api.func is sourced @@ -119,7 +119,7 @@ detect_repo_source # # - Maps numeric exit codes to human-readable error descriptions # - Canonical source of truth for ALL exit code mappings -# - Used by both api.func (telemetry) and error-handler.func (error display) +# - Used by both api.func (telemetry) and error_handler.func (error display) # - Supports: # * Generic/Shell errors (1-3, 10, 124-132, 134, 137, 139, 141, 143-146) # * curl/wget errors (4-8, 16, 18, 22-28, 30, 32-36, 39, 44-48, 51-52, 55-57, 59, 61, 63, 75, 78-79, 92, 95) @@ -138,204 +138,204 @@ detect_repo_source # - Returns description string for given exit code # ------------------------------------------------------------------------------ explain_exit_code() { - local code="$1" - case "$code" in - # --- Generic / Shell --- - 1) echo "General error / Operation not permitted" ;; - 2) echo "Misuse of shell builtins (e.g. syntax error)" ;; - 3) echo "General syntax or argument error" ;; - 10) echo "Docker / privileged mode required (unsupported environment)" ;; + local code="$1" + case "$code" in + # --- Generic / Shell --- + 1) echo "General error / Operation not permitted" ;; + 2) echo "Misuse of shell builtins (e.g. syntax error)" ;; + 3) echo "General syntax or argument error" ;; + 10) echo "Docker / privileged mode required (unsupported environment)" ;; - # --- curl / wget errors (commonly seen in downloads) --- - 4) echo "curl: Feature not supported or protocol error" ;; - 5) echo "curl: Could not resolve proxy" ;; - 6) echo "curl: DNS resolution failed (could not resolve host)" ;; - 7) echo "curl: Failed to connect (network unreachable / host down)" ;; - 8) echo "curl: Server reply error (FTP/SFTP or apk untrusted key)" ;; - 16) echo "curl: HTTP/2 framing layer error" ;; - 18) echo "curl: Partial file (transfer not completed)" ;; - 22) echo "curl: HTTP error returned (404, 429, 500+)" ;; - 23) echo "curl: Write error (disk full or permissions)" ;; - 24) echo "curl: Write to local file failed" ;; - 25) echo "curl: Upload failed" ;; - 26) echo "curl: Read error on local file (I/O)" ;; - 27) echo "curl: Out of memory (memory allocation failed)" ;; - 28) echo "curl: Operation timeout (network slow or server not responding)" ;; - 30) echo "curl: FTP port command failed" ;; - 32) echo "curl: FTP SIZE command failed" ;; - 33) echo "curl: HTTP range error" ;; - 34) echo "curl: HTTP post error" ;; - 35) echo "curl: SSL/TLS handshake failed (certificate error)" ;; - 36) echo "curl: FTP bad download resume" ;; - 39) echo "curl: LDAP search failed" ;; - 44) echo "curl: Internal error (bad function call order)" ;; - 45) echo "curl: Interface error (failed to bind to specified interface)" ;; - 46) echo "curl: Bad password entered" ;; - 47) echo "curl: Too many redirects" ;; - 48) echo "curl: Unknown command line option specified" ;; - 51) echo "curl: SSL peer certificate or SSH host key verification failed" ;; - 52) echo "curl: Empty reply from server (got nothing)" ;; - 55) echo "curl: Failed sending network data" ;; - 56) echo "curl: Receive error (connection reset by peer)" ;; - 57) echo "curl: Unrecoverable poll/select error (system I/O failure)" ;; - 59) echo "curl: Couldn't use specified SSL cipher" ;; - 61) echo "curl: Bad/unrecognized transfer encoding" ;; - 63) echo "curl: Maximum file size exceeded" ;; - 75) echo "Temporary failure (retry later)" ;; - 78) echo "curl: Remote file not found (404 on FTP/file)" ;; - 79) echo "curl: SSH session error (key exchange/auth failed)" ;; - 92) echo "curl: HTTP/2 stream error (protocol violation)" ;; - 95) echo "curl: HTTP/3 layer error" ;; + # --- curl / wget errors (commonly seen in downloads) --- + 4) echo "curl: Feature not supported or protocol error" ;; + 5) echo "curl: Could not resolve proxy" ;; + 6) echo "curl: DNS resolution failed (could not resolve host)" ;; + 7) echo "curl: Failed to connect (network unreachable / host down)" ;; + 8) echo "curl: Server reply error (FTP/SFTP or apk untrusted key)" ;; + 16) echo "curl: HTTP/2 framing layer error" ;; + 18) echo "curl: Partial file (transfer not completed)" ;; + 22) echo "curl: HTTP error returned (404, 429, 500+)" ;; + 23) echo "curl: Write error (disk full or permissions)" ;; + 24) echo "curl: Write to local file failed" ;; + 25) echo "curl: Upload failed" ;; + 26) echo "curl: Read error on local file (I/O)" ;; + 27) echo "curl: Out of memory (memory allocation failed)" ;; + 28) echo "curl: Operation timeout (network slow or server not responding)" ;; + 30) echo "curl: FTP port command failed" ;; + 32) echo "curl: FTP SIZE command failed" ;; + 33) echo "curl: HTTP range error" ;; + 34) echo "curl: HTTP post error" ;; + 35) echo "curl: SSL/TLS handshake failed (certificate error)" ;; + 36) echo "curl: FTP bad download resume" ;; + 39) echo "curl: LDAP search failed" ;; + 44) echo "curl: Internal error (bad function call order)" ;; + 45) echo "curl: Interface error (failed to bind to specified interface)" ;; + 46) echo "curl: Bad password entered" ;; + 47) echo "curl: Too many redirects" ;; + 48) echo "curl: Unknown command line option specified" ;; + 51) echo "curl: SSL peer certificate or SSH host key verification failed" ;; + 52) echo "curl: Empty reply from server (got nothing)" ;; + 55) echo "curl: Failed sending network data" ;; + 56) echo "curl: Receive error (connection reset by peer)" ;; + 57) echo "curl: Unrecoverable poll/select error (system I/O failure)" ;; + 59) echo "curl: Couldn't use specified SSL cipher" ;; + 61) echo "curl: Bad/unrecognized transfer encoding" ;; + 63) echo "curl: Maximum file size exceeded" ;; + 75) echo "Temporary failure (retry later)" ;; + 78) echo "curl: Remote file not found (404 on FTP/file)" ;; + 79) echo "curl: SSH session error (key exchange/auth failed)" ;; + 92) echo "curl: HTTP/2 stream error (protocol violation)" ;; + 95) echo "curl: HTTP/3 layer error" ;; - # --- Package manager / APT / DPKG --- - 100) echo "APT: Package manager error (broken packages / dependency problems)" ;; - 101) echo "APT: Configuration error (bad sources.list, malformed config)" ;; - 102) echo "APT: Lock held by another process (dpkg/apt still running)" ;; + # --- Package manager / APT / DPKG --- + 100) echo "APT: Package manager error (broken packages / dependency problems)" ;; + 101) echo "APT: Configuration error (bad sources.list, malformed config)" ;; + 102) echo "APT: Lock held by another process (dpkg/apt still running)" ;; - # --- Script Validation & Setup (103-123) --- - 103) echo "Validation: Shell is not Bash" ;; - 104) echo "Validation: Not running as root (or invoked via sudo)" ;; - 105) echo "Validation: Proxmox VE version not supported" ;; - 106) echo "Validation: Architecture not supported (ARM / PiMox)" ;; - 107) echo "Validation: Kernel key parameters unreadable" ;; - 108) echo "Validation: Kernel key limits exceeded" ;; - 109) echo "Proxmox: No available container ID after max attempts" ;; - 110) echo "Proxmox: Failed to apply default.vars" ;; - 111) echo "Proxmox: App defaults file not available" ;; - 112) echo "Proxmox: Invalid install menu option" ;; - 113) echo "LXC: Under-provisioned — user aborted update" ;; - 114) echo "LXC: Storage too low — user aborted update" ;; - 115) echo "Download: install.func download failed or incomplete" ;; - 116) echo "Proxmox: Default bridge vmbr0 not found" ;; - 117) echo "LXC: Container did not reach running state" ;; - 118) echo "LXC: No IP assigned to container after timeout" ;; - 119) echo "Proxmox: No valid storage for rootdir content" ;; - 120) echo "Proxmox: No valid storage for vztmpl content" ;; - 121) echo "LXC: Container network not ready (no IP after retries)" ;; - 122) echo "LXC: No internet connectivity — user declined to continue" ;; - 123) echo "LXC: Local IP detection failed" ;; + # --- Script Validation & Setup (103-123) --- + 103) echo "Validation: Shell is not Bash" ;; + 104) echo "Validation: Not running as root (or invoked via sudo)" ;; + 105) echo "Validation: Proxmox VE version not supported" ;; + 106) echo "Validation: Architecture not supported (ARM / PiMox)" ;; + 107) echo "Validation: Kernel key parameters unreadable" ;; + 108) echo "Validation: Kernel key limits exceeded" ;; + 109) echo "Proxmox: No available container ID after max attempts" ;; + 110) echo "Proxmox: Failed to apply default.vars" ;; + 111) echo "Proxmox: App defaults file not available" ;; + 112) echo "Proxmox: Invalid install menu option" ;; + 113) echo "LXC: Under-provisioned — user aborted update" ;; + 114) echo "LXC: Storage too low — user aborted update" ;; + 115) echo "Download: install.func download failed or incomplete" ;; + 116) echo "Proxmox: Default bridge vmbr0 not found" ;; + 117) echo "LXC: Container did not reach running state" ;; + 118) echo "LXC: No IP assigned to container after timeout" ;; + 119) echo "Proxmox: No valid storage for rootdir content" ;; + 120) echo "Proxmox: No valid storage for vztmpl content" ;; + 121) echo "LXC: Container network not ready (no IP after retries)" ;; + 122) echo "LXC: No internet connectivity — user declined to continue" ;; + 123) echo "LXC: Local IP detection failed" ;; - # --- BSD sysexits.h (64-78) --- - 64) echo "Usage error (wrong arguments)" ;; - 65) echo "Data format error (bad input data)" ;; - 66) echo "Input file not found (cannot open input)" ;; - 67) echo "User not found (addressee unknown)" ;; - 68) echo "Host not found (hostname unknown)" ;; - 69) echo "Service unavailable" ;; - 70) echo "Internal software error" ;; - 71) echo "System error (OS-level failure)" ;; - 72) echo "Critical OS file missing" ;; - 73) echo "Cannot create output file" ;; - 74) echo "I/O error" ;; - 76) echo "Remote protocol error" ;; - 77) echo "Permission denied" ;; + # --- BSD sysexits.h (64-78) --- + 64) echo "Usage error (wrong arguments)" ;; + 65) echo "Data format error (bad input data)" ;; + 66) echo "Input file not found (cannot open input)" ;; + 67) echo "User not found (addressee unknown)" ;; + 68) echo "Host not found (hostname unknown)" ;; + 69) echo "Service unavailable" ;; + 70) echo "Internal software error" ;; + 71) echo "System error (OS-level failure)" ;; + 72) echo "Critical OS file missing" ;; + 73) echo "Cannot create output file" ;; + 74) echo "I/O error" ;; + 76) echo "Remote protocol error" ;; + 77) echo "Permission denied" ;; - # --- Common shell/system errors --- - 124) echo "Command timed out (timeout command)" ;; - 125) echo "Command failed to start (Docker daemon or execution error)" ;; - 126) echo "Command invoked cannot execute (permission problem?)" ;; - 127) echo "Command not found" ;; - 128) echo "Invalid argument to exit" ;; - 129) echo "Killed by SIGHUP (terminal closed / hangup)" ;; - 130) echo "Aborted by user (SIGINT)" ;; - 131) echo "Killed by SIGQUIT (core dumped)" ;; - 132) echo "Killed by SIGILL (illegal CPU instruction)" ;; - 134) echo "Process aborted (SIGABRT - possibly Node.js heap overflow)" ;; - 137) echo "Killed (SIGKILL / Out of memory?)" ;; - 139) echo "Segmentation fault (core dumped)" ;; - 141) echo "Broken pipe (SIGPIPE - output closed prematurely)" ;; - 143) echo "Terminated (SIGTERM)" ;; - 144) echo "Killed by signal 16 (SIGUSR1 / SIGSTKFLT)" ;; - 146) echo "Killed by signal 18 (SIGTSTP)" ;; + # --- Common shell/system errors --- + 124) echo "Command timed out (timeout command)" ;; + 125) echo "Command failed to start (Docker daemon or execution error)" ;; + 126) echo "Command invoked cannot execute (permission problem?)" ;; + 127) echo "Command not found" ;; + 128) echo "Invalid argument to exit" ;; + 129) echo "Killed by SIGHUP (terminal closed / hangup)" ;; + 130) echo "Aborted by user (SIGINT)" ;; + 131) echo "Killed by SIGQUIT (core dumped)" ;; + 132) echo "Killed by SIGILL (illegal CPU instruction)" ;; + 134) echo "Process aborted (SIGABRT - possibly Node.js heap overflow)" ;; + 137) echo "Killed (SIGKILL / Out of memory?)" ;; + 139) echo "Segmentation fault (core dumped)" ;; + 141) echo "Broken pipe (SIGPIPE - output closed prematurely)" ;; + 143) echo "Terminated (SIGTERM)" ;; + 144) echo "Killed by signal 16 (SIGUSR1 / SIGSTKFLT)" ;; + 146) echo "Killed by signal 18 (SIGTSTP)" ;; - # --- Systemd / Service errors (150-154) --- - 150) echo "Systemd: Service failed to start" ;; - 151) echo "Systemd: Service unit not found" ;; - 152) echo "Permission denied (EACCES)" ;; - 153) echo "Build/compile failed (make/gcc/cmake)" ;; - 154) echo "Node.js: Native addon build failed (node-gyp)" ;; - # --- Python / pip / uv (160-162) --- - 160) echo "Python: Virtualenv / uv environment missing or broken" ;; - 161) echo "Python: Dependency resolution failed" ;; - 162) echo "Python: Installation aborted (permissions or EXTERNALLY-MANAGED)" ;; + # --- Systemd / Service errors (150-154) --- + 150) echo "Systemd: Service failed to start" ;; + 151) echo "Systemd: Service unit not found" ;; + 152) echo "Permission denied (EACCES)" ;; + 153) echo "Build/compile failed (make/gcc/cmake)" ;; + 154) echo "Node.js: Native addon build failed (node-gyp)" ;; + # --- Python / pip / uv (160-162) --- + 160) echo "Python: Virtualenv / uv environment missing or broken" ;; + 161) echo "Python: Dependency resolution failed" ;; + 162) echo "Python: Installation aborted (permissions or EXTERNALLY-MANAGED)" ;; - # --- PostgreSQL (170-173) --- - 170) echo "PostgreSQL: Connection failed (server not running / wrong socket)" ;; - 171) echo "PostgreSQL: Authentication failed (bad user/password)" ;; - 172) echo "PostgreSQL: Database does not exist" ;; - 173) echo "PostgreSQL: Fatal error in query / syntax" ;; + # --- PostgreSQL (170-173) --- + 170) echo "PostgreSQL: Connection failed (server not running / wrong socket)" ;; + 171) echo "PostgreSQL: Authentication failed (bad user/password)" ;; + 172) echo "PostgreSQL: Database does not exist" ;; + 173) echo "PostgreSQL: Fatal error in query / syntax" ;; - # --- MySQL / MariaDB (180-183) --- - 180) echo "MySQL/MariaDB: Connection failed (server not running / wrong socket)" ;; - 181) echo "MySQL/MariaDB: Authentication failed (bad user/password)" ;; - 182) echo "MySQL/MariaDB: Database does not exist" ;; - 183) echo "MySQL/MariaDB: Fatal error in query / syntax" ;; + # --- MySQL / MariaDB (180-183) --- + 180) echo "MySQL/MariaDB: Connection failed (server not running / wrong socket)" ;; + 181) echo "MySQL/MariaDB: Authentication failed (bad user/password)" ;; + 182) echo "MySQL/MariaDB: Database does not exist" ;; + 183) echo "MySQL/MariaDB: Fatal error in query / syntax" ;; - # --- MongoDB (190-193) --- - 190) echo "MongoDB: Connection failed (server not running)" ;; - 191) echo "MongoDB: Authentication failed (bad user/password)" ;; - 192) echo "MongoDB: Database not found" ;; - 193) echo "MongoDB: Fatal query error" ;; + # --- MongoDB (190-193) --- + 190) echo "MongoDB: Connection failed (server not running)" ;; + 191) echo "MongoDB: Authentication failed (bad user/password)" ;; + 192) echo "MongoDB: Database not found" ;; + 193) echo "MongoDB: Fatal query error" ;; - # --- Proxmox Custom Codes (200-231) --- - 200) echo "Proxmox: Failed to create lock file" ;; - 203) echo "Proxmox: Missing CTID variable" ;; - 204) echo "Proxmox: Missing PCT_OSTYPE variable" ;; - 205) echo "Proxmox: Invalid CTID (<100)" ;; - 206) echo "Proxmox: CTID already in use" ;; - 207) echo "Proxmox: Password contains unescaped special characters" ;; - 208) echo "Proxmox: Invalid configuration (DNS/MAC/Network format)" ;; - 209) echo "Proxmox: Container creation failed" ;; - 210) echo "Proxmox: Cluster not quorate" ;; - 211) echo "Proxmox: Timeout waiting for template lock" ;; - 212) echo "Proxmox: Storage type 'iscsidirect' does not support containers (VMs only)" ;; - 213) echo "Proxmox: Storage type does not support 'rootdir' content" ;; - 214) echo "Proxmox: Not enough storage space" ;; - 215) echo "Proxmox: Container created but not listed (ghost state)" ;; - 216) echo "Proxmox: RootFS entry missing in config" ;; - 217) echo "Proxmox: Storage not accessible" ;; - 218) echo "Proxmox: Template file corrupted or incomplete" ;; - 219) echo "Proxmox: CephFS does not support containers - use RBD" ;; - 220) echo "Proxmox: Unable to resolve template path" ;; - 221) echo "Proxmox: Template file not readable" ;; - 222) echo "Proxmox: Template download failed" ;; - 223) echo "Proxmox: Template not available after download" ;; - 224) echo "Proxmox: PBS storage is for backups only" ;; - 225) echo "Proxmox: No template available for OS/Version" ;; - 226) echo "Proxmox: VM disk import or post-creation setup failed" ;; - 231) echo "Proxmox: LXC stack upgrade failed" ;; + # --- Proxmox Custom Codes (200-231) --- + 200) echo "Proxmox: Failed to create lock file" ;; + 203) echo "Proxmox: Missing CTID variable" ;; + 204) echo "Proxmox: Missing PCT_OSTYPE variable" ;; + 205) echo "Proxmox: Invalid CTID (<100)" ;; + 206) echo "Proxmox: CTID already in use" ;; + 207) echo "Proxmox: Password contains unescaped special characters" ;; + 208) echo "Proxmox: Invalid configuration (DNS/MAC/Network format)" ;; + 209) echo "Proxmox: Container creation failed" ;; + 210) echo "Proxmox: Cluster not quorate" ;; + 211) echo "Proxmox: Timeout waiting for template lock" ;; + 212) echo "Proxmox: Storage type 'iscsidirect' does not support containers (VMs only)" ;; + 213) echo "Proxmox: Storage type does not support 'rootdir' content" ;; + 214) echo "Proxmox: Not enough storage space" ;; + 215) echo "Proxmox: Container created but not listed (ghost state)" ;; + 216) echo "Proxmox: RootFS entry missing in config" ;; + 217) echo "Proxmox: Storage not accessible" ;; + 218) echo "Proxmox: Template file corrupted or incomplete" ;; + 219) echo "Proxmox: CephFS does not support containers - use RBD" ;; + 220) echo "Proxmox: Unable to resolve template path" ;; + 221) echo "Proxmox: Template file not readable" ;; + 222) echo "Proxmox: Template download failed" ;; + 223) echo "Proxmox: Template not available after download" ;; + 224) echo "Proxmox: PBS storage is for backups only" ;; + 225) echo "Proxmox: No template available for OS/Version" ;; + 226) echo "Proxmox: VM disk import or post-creation setup failed" ;; + 231) echo "Proxmox: LXC stack upgrade failed" ;; - # --- Tools & Addon Scripts (232-238) --- - 232) echo "Tools: Wrong execution environment (run on PVE host, not inside LXC)" ;; - 233) echo "Tools: Application not installed (update prerequisite missing)" ;; - 234) echo "Tools: No LXC containers found or available" ;; - 235) echo "Tools: Backup or restore operation failed" ;; - 236) echo "Tools: Required hardware not detected" ;; - 237) echo "Tools: Dependency package installation failed" ;; - 238) echo "Tools: OS or distribution not supported for this addon" ;; + # --- Tools & Addon Scripts (232-238) --- + 232) echo "Tools: Wrong execution environment (run on PVE host, not inside LXC)" ;; + 233) echo "Tools: Application not installed (update prerequisite missing)" ;; + 234) echo "Tools: No LXC containers found or available" ;; + 235) echo "Tools: Backup or restore operation failed" ;; + 236) echo "Tools: Required hardware not detected" ;; + 237) echo "Tools: Dependency package installation failed" ;; + 238) echo "Tools: OS or distribution not supported for this addon" ;; - # --- Node.js / npm / pnpm / yarn (239-249) --- - 239) echo "npm/Node.js: Unexpected runtime error or dependency failure" ;; - 243) echo "Node.js: Out of memory (JavaScript heap out of memory)" ;; - 245) echo "Node.js: Invalid command-line option" ;; - 246) echo "Node.js: Internal JavaScript Parse Error" ;; - 247) echo "Node.js: Fatal internal error" ;; - 248) echo "Node.js: Invalid C++ addon / N-API failure" ;; - 249) echo "npm/pnpm/yarn: Unknown fatal error" ;; + # --- Node.js / npm / pnpm / yarn (239-249) --- + 239) echo "npm/Node.js: Unexpected runtime error or dependency failure" ;; + 243) echo "Node.js: Out of memory (JavaScript heap out of memory)" ;; + 245) echo "Node.js: Invalid command-line option" ;; + 246) echo "Node.js: Internal JavaScript Parse Error" ;; + 247) echo "Node.js: Fatal internal error" ;; + 248) echo "Node.js: Invalid C++ addon / N-API failure" ;; + 249) echo "npm/pnpm/yarn: Unknown fatal error" ;; - # --- Application Install/Update Errors (250-254) --- - 250) echo "App: Download failed or version not determined" ;; - 251) echo "App: File extraction failed (corrupt or incomplete archive)" ;; - 252) echo "App: Required file or resource not found" ;; - 253) echo "App: Data migration required — update aborted" ;; - 254) echo "App: User declined prompt or input timed out" ;; + # --- Application Install/Update Errors (250-254) --- + 250) echo "App: Download failed or version not determined" ;; + 251) echo "App: File extraction failed (corrupt or incomplete archive)" ;; + 252) echo "App: Required file or resource not found" ;; + 253) echo "App: Data migration required — update aborted" ;; + 254) echo "App: User declined prompt or input timed out" ;; - # --- DPKG --- - 255) echo "DPKG: Fatal internal error" ;; + # --- DPKG --- + 255) echo "DPKG: Fatal internal error" ;; - # --- Default --- - *) echo "Unknown error" ;; - esac + # --- Default --- + *) echo "Unknown error" ;; + esac } # ------------------------------------------------------------------------------ @@ -346,12 +346,12 @@ explain_exit_code() { # - Handles backslashes, quotes, newlines, tabs, and carriage returns # ------------------------------------------------------------------------------ json_escape() { - # Escape a string for safe JSON embedding using awk (handles any input size). - # Pipeline: strip ANSI → remove control chars → escape \ " TAB → join lines with \n - printf '%s' "$1" | - sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' | - tr -d '\000-\010\013\014\016-\037\177\r' | - awk ' + # Escape a string for safe JSON embedding using awk (handles any input size). + # Pipeline: strip ANSI → remove control chars → escape \ " TAB → join lines with \n + printf '%s' "$1" | + sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' | + tr -d '\000-\010\013\014\016-\037\177\r' | + awk ' BEGIN { ORS = "" } { gsub(/\\/, "\\\\") # backslash → \\ @@ -370,39 +370,39 @@ json_escape() { # - Handles container paths that don't exist on the host # ------------------------------------------------------------------------------ get_error_text() { - local logfile="" - if declare -f get_active_logfile >/dev/null 2>&1; then - logfile=$(get_active_logfile) - elif [[ -n "${INSTALL_LOG:-}" ]]; then - logfile="$INSTALL_LOG" - elif [[ -n "${BUILD_LOG:-}" ]]; then - logfile="$BUILD_LOG" - fi + local logfile="" + if declare -f get_active_logfile >/dev/null 2>&1; then + logfile=$(get_active_logfile) + elif [[ -n "${INSTALL_LOG:-}" ]]; then + logfile="$INSTALL_LOG" + elif [[ -n "${BUILD_LOG:-}" ]]; then + logfile="$BUILD_LOG" + fi - # If logfile is inside container (e.g. /root/.install-*), try the host copy - if [[ -n "$logfile" && ! -s "$logfile" ]]; then - # Try combined log: /tmp/--.log - if [[ -n "${CTID:-}" && -n "${SESSION_ID:-}" ]]; then - local combined_log="/tmp/${NSAPP:-lxc}-${CTID}-${SESSION_ID}.log" - if [[ -s "$combined_log" ]]; then - logfile="$combined_log" - fi - fi - fi + # If logfile is inside container (e.g. /root/.install-*), try the host copy + if [[ -n "$logfile" && ! -s "$logfile" ]]; then + # Try combined log: /tmp/--.log + if [[ -n "${CTID:-}" && -n "${SESSION_ID:-}" ]]; then + local combined_log="/tmp/${NSAPP:-lxc}-${CTID}-${SESSION_ID}.log" + if [[ -s "$combined_log" ]]; then + logfile="$combined_log" + fi + fi + fi - # Also try BUILD_LOG as fallback if primary log is empty/missing - if [[ -z "$logfile" || ! -s "$logfile" ]] && [[ -n "${BUILD_LOG:-}" && -s "${BUILD_LOG}" ]]; then - logfile="$BUILD_LOG" - fi + # Also try BUILD_LOG as fallback if primary log is empty/missing + if [[ -z "$logfile" || ! -s "$logfile" ]] && [[ -n "${BUILD_LOG:-}" && -s "${BUILD_LOG}" ]]; then + logfile="$BUILD_LOG" + fi - # Try SILENT_LOGFILE as last resort (captures $STD command output) - if [[ -z "$logfile" || ! -s "$logfile" ]] && [[ -n "${SILENT_LOGFILE:-}" && -s "${SILENT_LOGFILE}" ]]; then - logfile="$SILENT_LOGFILE" - fi + # Try SILENT_LOGFILE as last resort (captures $STD command output) + if [[ -z "$logfile" || ! -s "$logfile" ]] && [[ -n "${SILENT_LOGFILE:-}" && -s "${SILENT_LOGFILE}" ]]; then + logfile="$SILENT_LOGFILE" + fi - if [[ -n "$logfile" && -s "$logfile" ]]; then - tail -n 20 "$logfile" 2>/dev/null | sed 's/\r$//' | sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' - fi + if [[ -n "$logfile" && -s "$logfile" ]]; then + tail -n 20 "$logfile" 2>/dev/null | sed 's/\r$//' | sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' + fi } # ------------------------------------------------------------------------------ @@ -415,50 +415,50 @@ get_error_text() { # - Used for the error telemetry field (full trace instead of 20 lines) # ------------------------------------------------------------------------------ get_full_log() { - local max_bytes="${1:-122880}" # 120KB default - local logfile="" + local max_bytes="${1:-122880}" # 120KB default + local logfile="" - # Ensure logs are available on host (pulls from container if needed) - if declare -f ensure_log_on_host >/dev/null 2>&1; then - ensure_log_on_host - fi + # Ensure logs are available on host (pulls from container if needed) + if declare -f ensure_log_on_host >/dev/null 2>&1; then + ensure_log_on_host + fi - # Try combined log first (most complete) - if [[ -n "${CTID:-}" && -n "${SESSION_ID:-}" ]]; then - local combined_log="/tmp/${NSAPP:-lxc}-${CTID}-${SESSION_ID}.log" - if [[ -s "$combined_log" ]]; then - logfile="$combined_log" - fi - fi + # Try combined log first (most complete) + if [[ -n "${CTID:-}" && -n "${SESSION_ID:-}" ]]; then + local combined_log="/tmp/${NSAPP:-lxc}-${CTID}-${SESSION_ID}.log" + if [[ -s "$combined_log" ]]; then + logfile="$combined_log" + fi + fi - # Fall back to INSTALL_LOG - if [[ -z "$logfile" || ! -s "$logfile" ]]; then - if [[ -n "${INSTALL_LOG:-}" && -s "${INSTALL_LOG}" ]]; then - logfile="$INSTALL_LOG" - fi - fi + # Fall back to INSTALL_LOG + if [[ -z "$logfile" || ! -s "$logfile" ]]; then + if [[ -n "${INSTALL_LOG:-}" && -s "${INSTALL_LOG}" ]]; then + logfile="$INSTALL_LOG" + fi + fi - # Fall back to BUILD_LOG - if [[ -z "$logfile" || ! -s "$logfile" ]]; then - if [[ -n "${BUILD_LOG:-}" && -s "${BUILD_LOG}" ]]; then - logfile="$BUILD_LOG" - fi - fi + # Fall back to BUILD_LOG + if [[ -z "$logfile" || ! -s "$logfile" ]]; then + if [[ -n "${BUILD_LOG:-}" && -s "${BUILD_LOG}" ]]; then + logfile="$BUILD_LOG" + fi + fi - # Fall back to SILENT_LOGFILE (captures $STD command output) - if [[ -z "$logfile" || ! -s "$logfile" ]]; then - if [[ -n "${SILENT_LOGFILE:-}" && -s "${SILENT_LOGFILE}" ]]; then - logfile="$SILENT_LOGFILE" - fi - fi + # Fall back to SILENT_LOGFILE (captures $STD command output) + if [[ -z "$logfile" || ! -s "$logfile" ]]; then + if [[ -n "${SILENT_LOGFILE:-}" && -s "${SILENT_LOGFILE}" ]]; then + logfile="$SILENT_LOGFILE" + fi + fi - if [[ -n "$logfile" && -s "$logfile" ]]; then - # Strip ANSI codes, carriage returns, and anonymize IP addresses (GDPR) - sed 's/\r$//' "$logfile" 2>/dev/null | - sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' | - sed -E 's/([0-9]{1,3}\.)[0-9]{1,3}\.[0-9]{1,3}/\1x.x/g' | - head -c "$max_bytes" - fi + if [[ -n "$logfile" && -s "$logfile" ]]; then + # Strip ANSI codes, carriage returns, and anonymize IP addresses (GDPR) + sed 's/\r$//' "$logfile" 2>/dev/null | + sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' | + sed -E 's/([0-9]{1,3}\.)[0-9]{1,3}\.[0-9]{1,3}/\1x.x/g' | + head -c "$max_bytes" + fi } # ------------------------------------------------------------------------------ @@ -473,18 +473,18 @@ get_full_log() { # - Returns structured error string via stdout # ------------------------------------------------------------------------------ build_error_string() { - local exit_code="${1:-1}" - local log_text="${2:-}" - local explanation - explanation=$(explain_exit_code "$exit_code") + local exit_code="${1:-1}" + local log_text="${2:-}" + local explanation + explanation=$(explain_exit_code "$exit_code") - if [[ -n "$log_text" ]]; then - # Structured format: header + separator + log lines - printf 'exit_code=%s | %s\n---\n%s' "$exit_code" "$explanation" "$log_text" - else - # No log available - just the explanation with exit code - printf 'exit_code=%s | %s' "$exit_code" "$explanation" - fi + if [[ -n "$log_text" ]]; then + # Structured format: header + separator + log lines + printf 'exit_code=%s | %s\n---\n%s' "$exit_code" "$explanation" "$log_text" + else + # No log available - just the explanation with exit code + printf 'exit_code=%s | %s' "$exit_code" "$explanation" + fi } # ============================================================================== @@ -499,35 +499,35 @@ build_error_string() { # - Used for GPU analytics # ------------------------------------------------------------------------------ detect_gpu() { - GPU_VENDOR="unknown" - GPU_MODEL="" - GPU_PASSTHROUGH="unknown" + GPU_VENDOR="unknown" + GPU_MODEL="" + GPU_PASSTHROUGH="unknown" - local gpu_line - gpu_line=$(lspci 2>/dev/null | grep -iE "VGA|3D|Display" | head -1 || true) + local gpu_line + gpu_line=$(lspci 2>/dev/null | grep -iE "VGA|3D|Display" | head -1 || true) - if [[ -n "$gpu_line" ]]; then - # Extract model: everything after the colon, clean up - GPU_MODEL=$(echo "$gpu_line" | sed 's/.*: //' | sed 's/ (rev .*)$//' | cut -c1-64) + if [[ -n "$gpu_line" ]]; then + # Extract model: everything after the colon, clean up + GPU_MODEL=$(echo "$gpu_line" | sed 's/.*: //' | sed 's/ (rev .*)$//' | cut -c1-64) - # Detect vendor and passthrough type - if echo "$gpu_line" | grep -qi "Intel"; then - GPU_VENDOR="intel" - GPU_PASSTHROUGH="igpu" - elif echo "$gpu_line" | grep -qi "AMD\|ATI"; then - GPU_VENDOR="amd" - if echo "$gpu_line" | grep -qi "Radeon RX\|Radeon Pro"; then - GPU_PASSTHROUGH="dgpu" - else - GPU_PASSTHROUGH="igpu" - fi - elif echo "$gpu_line" | grep -qi "NVIDIA"; then - GPU_VENDOR="nvidia" - GPU_PASSTHROUGH="dgpu" - fi - fi + # Detect vendor and passthrough type + if echo "$gpu_line" | grep -qi "Intel"; then + GPU_VENDOR="intel" + GPU_PASSTHROUGH="igpu" + elif echo "$gpu_line" | grep -qi "AMD\|ATI"; then + GPU_VENDOR="amd" + if echo "$gpu_line" | grep -qi "Radeon RX\|Radeon Pro"; then + GPU_PASSTHROUGH="dgpu" + else + GPU_PASSTHROUGH="igpu" + fi + elif echo "$gpu_line" | grep -qi "NVIDIA"; then + GPU_VENDOR="nvidia" + GPU_PASSTHROUGH="dgpu" + fi + fi - export GPU_VENDOR GPU_MODEL GPU_PASSTHROUGH + export GPU_VENDOR GPU_MODEL GPU_PASSTHROUGH } # ------------------------------------------------------------------------------ @@ -538,29 +538,29 @@ detect_gpu() { # - Used for CPU analytics # ------------------------------------------------------------------------------ detect_cpu() { - CPU_VENDOR="unknown" - CPU_MODEL="" + CPU_VENDOR="unknown" + CPU_MODEL="" - if [[ -f /proc/cpuinfo ]]; then - local vendor_id - vendor_id=$(grep -m1 "vendor_id" /proc/cpuinfo 2>/dev/null | cut -d: -f2 | tr -d ' ' || true) + if [[ -f /proc/cpuinfo ]]; then + local vendor_id + vendor_id=$(grep -m1 "vendor_id" /proc/cpuinfo 2>/dev/null | cut -d: -f2 | tr -d ' ' || true) - case "$vendor_id" in - GenuineIntel) CPU_VENDOR="intel" ;; - AuthenticAMD) CPU_VENDOR="amd" ;; - *) - # ARM doesn't have vendor_id, check for CPU implementer - if grep -qi "CPU implementer" /proc/cpuinfo 2>/dev/null; then - CPU_VENDOR="arm" - fi - ;; - esac + case "$vendor_id" in + GenuineIntel) CPU_VENDOR="intel" ;; + AuthenticAMD) CPU_VENDOR="amd" ;; + *) + # ARM doesn't have vendor_id, check for CPU implementer + if grep -qi "CPU implementer" /proc/cpuinfo 2>/dev/null; then + CPU_VENDOR="arm" + fi + ;; + esac - # Extract model name and clean it up - CPU_MODEL=$(grep -m1 "model name" /proc/cpuinfo 2>/dev/null | cut -d: -f2 | sed 's/^ *//' | sed 's/(R)//g' | sed 's/(TM)//g' | sed 's/ */ /g' | cut -c1-64 || true) - fi + # Extract model name and clean it up + CPU_MODEL=$(grep -m1 "model name" /proc/cpuinfo 2>/dev/null | cut -d: -f2 | sed 's/^ *//' | sed 's/(R)//g' | sed 's/(TM)//g' | sed 's/ */ /g' | cut -c1-64 || true) + fi - export CPU_VENDOR CPU_MODEL + export CPU_VENDOR CPU_MODEL } # ------------------------------------------------------------------------------ @@ -572,20 +572,20 @@ detect_cpu() { # - Returns empty if not available or if speed is "Unknown" (nested VMs) # ------------------------------------------------------------------------------ detect_ram() { - RAM_SPEED="" + RAM_SPEED="" - if command -v dmidecode &>/dev/null; then - # Get configured memory speed (actual running speed) - # Use || true to handle "Unknown" values in nested VMs (no numeric match) - RAM_SPEED=$(dmidecode -t memory 2>/dev/null | grep -m1 "Configured Memory Speed:" | grep -oE "[0-9]+" | head -1) || true + if command -v dmidecode &>/dev/null; then + # Get configured memory speed (actual running speed) + # Use || true to handle "Unknown" values in nested VMs (no numeric match) + RAM_SPEED=$(dmidecode -t memory 2>/dev/null | grep -m1 "Configured Memory Speed:" | grep -oE "[0-9]+" | head -1) || true - # Fallback to Speed: if Configured not available - if [[ -z "$RAM_SPEED" ]]; then - RAM_SPEED=$(dmidecode -t memory 2>/dev/null | grep -m1 "Speed:" | grep -oE "[0-9]+" | head -1) || true - fi - fi + # Fallback to Speed: if Configured not available + if [[ -z "$RAM_SPEED" ]]; then + RAM_SPEED=$(dmidecode -t memory 2>/dev/null | grep -m1 "Speed:" | grep -oE "[0-9]+" | head -1) || true + fi + fi - export RAM_SPEED + export RAM_SPEED } # ------------------------------------------------------------------------------ @@ -608,59 +608,59 @@ detect_ram() { # - Never blocks or fails script execution # ------------------------------------------------------------------------------ post_to_api() { - # Prevent duplicate submissions (post_to_api is called from multiple places) - [[ "${POST_TO_API_DONE:-}" == "true" ]] && return 0 + # Prevent duplicate submissions (post_to_api is called from multiple places) + [[ "${POST_TO_API_DONE:-}" == "true" ]] && return 0 - # Silent fail - telemetry should never break scripts - command -v curl &>/dev/null || { - [[ "${DEV_MODE:-}" == "true" ]] && echo "[DEBUG] curl not found, skipping" >&2 - return 0 - } - [[ "${DIAGNOSTICS:-no}" == "no" ]] && { - [[ "${DEV_MODE:-}" == "true" ]] && echo "[DEBUG] DIAGNOSTICS=no, skipping" >&2 - return 0 - } - [[ -z "${RANDOM_UUID:-}" ]] && { - [[ "${DEV_MODE:-}" == "true" ]] && echo "[DEBUG] RANDOM_UUID empty, skipping" >&2 - return 0 - } + # Silent fail - telemetry should never break scripts + command -v curl &>/dev/null || { + [[ "${DEV_MODE:-}" == "true" ]] && echo "[DEBUG] curl not found, skipping" >&2 + return 0 + } + [[ "${DIAGNOSTICS:-no}" == "no" ]] && { + [[ "${DEV_MODE:-}" == "true" ]] && echo "[DEBUG] DIAGNOSTICS=no, skipping" >&2 + return 0 + } + [[ -z "${RANDOM_UUID:-}" ]] && { + [[ "${DEV_MODE:-}" == "true" ]] && echo "[DEBUG] RANDOM_UUID empty, skipping" >&2 + return 0 + } - [[ "${DEV_MODE:-}" == "true" ]] && echo "[DEBUG] post_to_api() DIAGNOSTICS=$DIAGNOSTICS RANDOM_UUID=$RANDOM_UUID NSAPP=$NSAPP" >&2 + [[ "${DEV_MODE:-}" == "true" ]] && echo "[DEBUG] post_to_api() DIAGNOSTICS=$DIAGNOSTICS RANDOM_UUID=$RANDOM_UUID NSAPP=$NSAPP" >&2 - # Set type for later status updates (preserve if already set, e.g. turnkey) - TELEMETRY_TYPE="${TELEMETRY_TYPE:-lxc}" + # Set type for later status updates (preserve if already set, e.g. turnkey) + TELEMETRY_TYPE="${TELEMETRY_TYPE:-lxc}" - local pve_version="" - if command -v pveversion &>/dev/null; then - pve_version=$(pveversion 2>/dev/null | awk -F'[/ ]' '{print $2}') || true - fi + local pve_version="" + if command -v pveversion &>/dev/null; then + pve_version=$(pveversion 2>/dev/null | awk -F'[/ ]' '{print $2}') || true + fi - # Detect GPU if not already set - if [[ -z "${GPU_VENDOR:-}" ]]; then - detect_gpu - fi - local gpu_vendor="${GPU_VENDOR:-unknown}" - local gpu_model - gpu_model=$(json_escape "${GPU_MODEL:-}") - local gpu_passthrough="${GPU_PASSTHROUGH:-unknown}" + # Detect GPU if not already set + if [[ -z "${GPU_VENDOR:-}" ]]; then + detect_gpu + fi + local gpu_vendor="${GPU_VENDOR:-unknown}" + local gpu_model + gpu_model=$(json_escape "${GPU_MODEL:-}") + local gpu_passthrough="${GPU_PASSTHROUGH:-unknown}" - # Detect CPU if not already set - if [[ -z "${CPU_VENDOR:-}" ]]; then - detect_cpu - fi - local cpu_vendor="${CPU_VENDOR:-unknown}" - local cpu_model - cpu_model=$(json_escape "${CPU_MODEL:-}") + # Detect CPU if not already set + if [[ -z "${CPU_VENDOR:-}" ]]; then + detect_cpu + fi + local cpu_vendor="${CPU_VENDOR:-unknown}" + local cpu_model + cpu_model=$(json_escape "${CPU_MODEL:-}") - # Detect RAM if not already set - if [[ -z "${RAM_SPEED:-}" ]]; then - detect_ram - fi - local ram_speed="${RAM_SPEED:-}" + # Detect RAM if not already set + if [[ -z "${RAM_SPEED:-}" ]]; then + detect_ram + fi + local ram_speed="${RAM_SPEED:-}" - local JSON_PAYLOAD - JSON_PAYLOAD=$( - cat <&2 - [[ "${DEV_MODE:-}" == "true" ]] && echo "[DEBUG] Payload: $JSON_PAYLOAD" >&2 + [[ "${DEV_MODE:-}" == "true" ]] && echo "[DEBUG] Sending to: $TELEMETRY_URL" >&2 + [[ "${DEV_MODE:-}" == "true" ]] && echo "[DEBUG] Payload: $JSON_PAYLOAD" >&2 - # Send initial "installing" record with retry. - # This record MUST exist for all subsequent updates to succeed. - local http_code="" attempt - local _post_success=false - for attempt in 1 2 3; do - if [[ "${DEV_MODE:-}" == "true" ]]; then - http_code=$(curl -sS -w "%{http_code}" -m "${TELEMETRY_TIMEOUT}" -X POST "${TELEMETRY_URL}" \ - -H "Content-Type: application/json" \ - -d "$JSON_PAYLOAD" -o /dev/stderr 2>&1) || http_code="000" - echo "[DEBUG] post_to_api attempt $attempt HTTP=$http_code" >&2 - else - http_code=$(curl -sS -w "%{http_code}" -m "${TELEMETRY_TIMEOUT}" -X POST "${TELEMETRY_URL}" \ - -H "Content-Type: application/json" \ - -d "$JSON_PAYLOAD" -o /dev/null 2>/dev/null) || http_code="000" - fi - if [[ "$http_code" =~ ^2[0-9]{2}$ ]]; then - _post_success=true - break - fi - [[ "$attempt" -lt 3 ]] && sleep 1 - done + # Send initial "installing" record with retry. + # This record MUST exist for all subsequent updates to succeed. + local http_code="" attempt + local _post_success=false + for attempt in 1 2 3; do + if [[ "${DEV_MODE:-}" == "true" ]]; then + http_code=$(curl -sS -w "%{http_code}" -m "${TELEMETRY_TIMEOUT}" -X POST "${TELEMETRY_URL}" \ + -H "Content-Type: application/json" \ + -d "$JSON_PAYLOAD" -o /dev/stderr 2>&1) || http_code="000" + echo "[DEBUG] post_to_api attempt $attempt HTTP=$http_code" >&2 + else + http_code=$(curl -sS -w "%{http_code}" -m "${TELEMETRY_TIMEOUT}" -X POST "${TELEMETRY_URL}" \ + -H "Content-Type: application/json" \ + -d "$JSON_PAYLOAD" -o /dev/null 2>/dev/null) || http_code="000" + fi + if [[ "$http_code" =~ ^2[0-9]{2}$ ]]; then + _post_success=true + break + fi + [[ "$attempt" -lt 3 ]] && sleep 1 + done - # Only mark done if at least one attempt succeeded. - # If all 3 failed, POST_TO_API_DONE stays false so post_update_to_api - # and on_exit() know the initial record was never created. - # The server has fallback logic to create a new record on status updates, - # so subsequent calls can still succeed even without the initial record. - POST_TO_API_DONE=${_post_success} + # Only mark done if at least one attempt succeeded. + # If all 3 failed, POST_TO_API_DONE stays false so post_update_to_api + # and on_exit() know the initial record was never created. + # The server has fallback logic to create a new record on status updates, + # so subsequent calls can still succeed even without the initial record. + POST_TO_API_DONE=${_post_success} } # ------------------------------------------------------------------------------ @@ -733,53 +733,53 @@ EOF # - Never blocks or fails script execution # ------------------------------------------------------------------------------ post_to_api_vm() { - # Read diagnostics setting from file - if [[ -f /usr/local/community-scripts/diagnostics ]]; then - DIAGNOSTICS=$(grep -i "^DIAGNOSTICS=" /usr/local/community-scripts/diagnostics 2>/dev/null | awk -F'=' '{print $2}') || true - fi + # Read diagnostics setting from file + if [[ -f /usr/local/community-scripts/diagnostics ]]; then + DIAGNOSTICS=$(grep -i "^DIAGNOSTICS=" /usr/local/community-scripts/diagnostics 2>/dev/null | awk -F'=' '{print $2}') || true + fi - # Silent fail - telemetry should never break scripts - command -v curl &>/dev/null || return 0 - [[ "${DIAGNOSTICS:-no}" == "no" ]] && return 0 - [[ -z "${RANDOM_UUID:-}" ]] && return 0 + # Silent fail - telemetry should never break scripts + command -v curl &>/dev/null || return 0 + [[ "${DIAGNOSTICS:-no}" == "no" ]] && return 0 + [[ -z "${RANDOM_UUID:-}" ]] && return 0 - # Set type for later status updates - TELEMETRY_TYPE="vm" + # Set type for later status updates + TELEMETRY_TYPE="vm" - local pve_version="" - if command -v pveversion &>/dev/null; then - pve_version=$(pveversion 2>/dev/null | awk -F'[/ ]' '{print $2}') || true - fi + local pve_version="" + if command -v pveversion &>/dev/null; then + pve_version=$(pveversion 2>/dev/null | awk -F'[/ ]' '{print $2}') || true + fi - # Detect GPU if not already set - if [[ -z "${GPU_VENDOR:-}" ]]; then - detect_gpu - fi - local gpu_vendor="${GPU_VENDOR:-unknown}" - local gpu_model - gpu_model=$(json_escape "${GPU_MODEL:-}") - local gpu_passthrough="${GPU_PASSTHROUGH:-unknown}" + # Detect GPU if not already set + if [[ -z "${GPU_VENDOR:-}" ]]; then + detect_gpu + fi + local gpu_vendor="${GPU_VENDOR:-unknown}" + local gpu_model + gpu_model=$(json_escape "${GPU_MODEL:-}") + local gpu_passthrough="${GPU_PASSTHROUGH:-unknown}" - # Detect CPU if not already set - if [[ -z "${CPU_VENDOR:-}" ]]; then - detect_cpu - fi - local cpu_vendor="${CPU_VENDOR:-unknown}" - local cpu_model - cpu_model=$(json_escape "${CPU_MODEL:-}") + # Detect CPU if not already set + if [[ -z "${CPU_VENDOR:-}" ]]; then + detect_cpu + fi + local cpu_vendor="${CPU_VENDOR:-unknown}" + local cpu_model + cpu_model=$(json_escape "${CPU_MODEL:-}") - # Detect RAM if not already set - if [[ -z "${RAM_SPEED:-}" ]]; then - detect_ram - fi - local ram_speed="${RAM_SPEED:-}" + # Detect RAM if not already set + if [[ -z "${RAM_SPEED:-}" ]]; then + detect_ram + fi + local ram_speed="${RAM_SPEED:-}" - # Remove 'G' suffix from disk size - local DISK_SIZE_API="${DISK_SIZE%G}" + # Remove 'G' suffix from disk size + local DISK_SIZE_API="${DISK_SIZE%G}" - local JSON_PAYLOAD - JSON_PAYLOAD=$( - cat </dev/null) || http_code="000" - if [[ "$http_code" =~ ^2[0-9]{2}$ ]]; then - _post_success=true - break - fi - [[ "$attempt" -lt 3 ]] && sleep 1 - done + # Send initial "installing" record with retry (must succeed for updates to work) + local http_code="" attempt + local _post_success=false + for attempt in 1 2 3; do + http_code=$(curl -sS -w "%{http_code}" -m "${TELEMETRY_TIMEOUT}" -X POST "${TELEMETRY_URL}" \ + -H "Content-Type: application/json" \ + -d "$JSON_PAYLOAD" -o /dev/null 2>/dev/null) || http_code="000" + if [[ "$http_code" =~ ^2[0-9]{2}$ ]]; then + _post_success=true + break + fi + [[ "$attempt" -lt 3 ]] && sleep 1 + done - POST_TO_API_DONE=${_post_success} + POST_TO_API_DONE=${_post_success} } # ------------------------------------------------------------------------------ @@ -836,17 +836,17 @@ EOF # - Can be called multiple times safely # ------------------------------------------------------------------------------ post_progress_to_api() { - command -v curl &>/dev/null || return 0 - [[ "${DIAGNOSTICS:-no}" == "no" ]] && return 0 - [[ -z "${RANDOM_UUID:-}" ]] && return 0 + command -v curl &>/dev/null || return 0 + [[ "${DIAGNOSTICS:-no}" == "no" ]] && return 0 + [[ -z "${RANDOM_UUID:-}" ]] && return 0 - local progress_status="${1:-configuring}" - local app_name="${NSAPP:-${app:-unknown}}" - local telemetry_type="${TELEMETRY_TYPE:-lxc}" + local progress_status="${1:-configuring}" + local app_name="${NSAPP:-${app:-unknown}}" + local telemetry_type="${TELEMETRY_TYPE:-lxc}" - curl -fsS -m 5 -X POST "${TELEMETRY_URL:-https://telemetry.community-scripts.org/telemetry}" \ - -H "Content-Type: application/json" \ - -d "{\"random_id\":\"${RANDOM_UUID}\",\"execution_id\":\"${EXECUTION_ID:-${RANDOM_UUID}}\",\"type\":\"${telemetry_type}\",\"nsapp\":\"${app_name}\",\"status\":\"${progress_status}\"}" &>/dev/null || true + curl -fsS -m 5 -X POST "${TELEMETRY_URL:-https://telemetry.community-scripts.org/telemetry}" \ + -H "Content-Type: application/json" \ + -d "{\"random_id\":\"${RANDOM_UUID}\",\"execution_id\":\"${EXECUTION_ID:-${RANDOM_UUID}}\",\"type\":\"${telemetry_type}\",\"nsapp\":\"${app_name}\",\"status\":\"${progress_status}\"}" &>/dev/null || true } # ------------------------------------------------------------------------------ @@ -865,111 +865,111 @@ post_progress_to_api() { # - Never blocks or fails script execution # ------------------------------------------------------------------------------ post_update_to_api() { - # Silent fail - telemetry should never break scripts - command -v curl &>/dev/null || return 0 + # Silent fail - telemetry should never break scripts + command -v curl &>/dev/null || return 0 - # Support "force" mode (3rd arg) to bypass duplicate check for retries after cleanup - local force="${3:-}" - POST_UPDATE_DONE=${POST_UPDATE_DONE:-false} - if [[ "$POST_UPDATE_DONE" == "true" && "$force" != "force" ]]; then - return 0 - fi + # Support "force" mode (3rd arg) to bypass duplicate check for retries after cleanup + local force="${3:-}" + POST_UPDATE_DONE=${POST_UPDATE_DONE:-false} + if [[ "$POST_UPDATE_DONE" == "true" && "$force" != "force" ]]; then + return 0 + fi - [[ "${DIAGNOSTICS:-no}" == "no" ]] && return 0 - [[ -z "${RANDOM_UUID:-}" ]] && return 0 + [[ "${DIAGNOSTICS:-no}" == "no" ]] && return 0 + [[ -z "${RANDOM_UUID:-}" ]] && return 0 - local status="${1:-failed}" - local raw_exit_code="${2:-1}" - local exit_code=0 error="" pb_status error_category="" + local status="${1:-failed}" + local raw_exit_code="${2:-1}" + local exit_code=0 error="" pb_status error_category="" - # Get GPU info (if detected) - local gpu_vendor="${GPU_VENDOR:-unknown}" - local gpu_model - gpu_model=$(json_escape "${GPU_MODEL:-}") - local gpu_passthrough="${GPU_PASSTHROUGH:-unknown}" + # Get GPU info (if detected) + local gpu_vendor="${GPU_VENDOR:-unknown}" + local gpu_model + gpu_model=$(json_escape "${GPU_MODEL:-}") + local gpu_passthrough="${GPU_PASSTHROUGH:-unknown}" - # Get CPU info (if detected) - local cpu_vendor="${CPU_VENDOR:-unknown}" - local cpu_model - cpu_model=$(json_escape "${CPU_MODEL:-}") + # Get CPU info (if detected) + local cpu_vendor="${CPU_VENDOR:-unknown}" + local cpu_model + cpu_model=$(json_escape "${CPU_MODEL:-}") - # Get RAM info (if detected) - local ram_speed="${RAM_SPEED:-}" + # Get RAM info (if detected) + local ram_speed="${RAM_SPEED:-}" - # Map status to telemetry values: installing, success, failed, unknown - case "$status" in - done | success) - pb_status="success" - exit_code=0 - error="" - error_category="" - ;; - failed) - pb_status="failed" - ;; - *) - pb_status="unknown" - ;; - esac + # Map status to telemetry values: installing, success, failed, unknown + case "$status" in + done | success) + pb_status="success" + exit_code=0 + error="" + error_category="" + ;; + failed) + pb_status="failed" + ;; + *) + pb_status="unknown" + ;; + esac - # For failed/unknown status, resolve exit code and error description - local short_error="" medium_error="" - if [[ "$pb_status" == "failed" ]] || [[ "$pb_status" == "unknown" ]]; then - if [[ "$raw_exit_code" =~ ^[0-9]+$ ]]; then - exit_code="$raw_exit_code" - else - exit_code=1 - fi - # Get full installation log for error field - local log_text="" - log_text=$(get_full_log 122880) || true # 120KB max - if [[ -z "$log_text" ]]; then - # Fallback to last 20 lines - log_text=$(get_error_text) - fi - local full_error - full_error=$(build_error_string "$exit_code" "$log_text") - error=$(json_escape "$full_error") - short_error=$(json_escape "$(explain_exit_code "$exit_code")") - error_category=$(categorize_error "$exit_code") - [[ -z "$error" ]] && error="Unknown error" + # For failed/unknown status, resolve exit code and error description + local short_error="" medium_error="" + if [[ "$pb_status" == "failed" ]] || [[ "$pb_status" == "unknown" ]]; then + if [[ "$raw_exit_code" =~ ^[0-9]+$ ]]; then + exit_code="$raw_exit_code" + else + exit_code=1 + fi + # Get full installation log for error field + local log_text="" + log_text=$(get_full_log 122880) || true # 120KB max + if [[ -z "$log_text" ]]; then + # Fallback to last 20 lines + log_text=$(get_error_text) + fi + local full_error + full_error=$(build_error_string "$exit_code" "$log_text") + error=$(json_escape "$full_error") + short_error=$(json_escape "$(explain_exit_code "$exit_code")") + error_category=$(categorize_error "$exit_code") + [[ -z "$error" ]] && error="Unknown error" - # Build medium error for attempt 2: explanation + last 100 log lines (≤16KB) - # This is the critical middle ground between full 120KB log and generic-only description - local medium_log="" - medium_log=$(get_full_log 16384) || true # 16KB max - if [[ -z "$medium_log" ]]; then - medium_log=$(get_error_text) || true - fi - local medium_full - medium_full=$(build_error_string "$exit_code" "$medium_log") - medium_error=$(json_escape "$medium_full") - [[ -z "$medium_error" ]] && medium_error="$short_error" - fi + # Build medium error for attempt 2: explanation + last 100 log lines (≤16KB) + # This is the critical middle ground between full 120KB log and generic-only description + local medium_log="" + medium_log=$(get_full_log 16384) || true # 16KB max + if [[ -z "$medium_log" ]]; then + medium_log=$(get_error_text) || true + fi + local medium_full + medium_full=$(build_error_string "$exit_code" "$medium_log") + medium_error=$(json_escape "$medium_full") + [[ -z "$medium_error" ]] && medium_error="$short_error" + fi - # Calculate duration if timer was started - local duration=0 - if [[ -n "${INSTALL_START_TIME:-}" ]]; then - duration=$(($(date +%s) - INSTALL_START_TIME)) - fi + # Calculate duration if timer was started + local duration=0 + if [[ -n "${INSTALL_START_TIME:-}" ]]; then + duration=$(($(date +%s) - INSTALL_START_TIME)) + fi - # Get PVE version - local pve_version="" - if command -v pveversion &>/dev/null; then - pve_version=$(pveversion 2>/dev/null | awk -F'[/ ]' '{print $2}') || true - fi + # Get PVE version + local pve_version="" + if command -v pveversion &>/dev/null; then + pve_version=$(pveversion 2>/dev/null | awk -F'[/ ]' '{print $2}') || true + fi - local http_code="" + local http_code="" - # Strip 'G' suffix from disk size (VMs set DISK_SIZE=32G) - local DISK_SIZE_API="${DISK_SIZE:-0}" - DISK_SIZE_API="${DISK_SIZE_API%G}" - [[ ! "$DISK_SIZE_API" =~ ^[0-9]+$ ]] && DISK_SIZE_API=0 + # Strip 'G' suffix from disk size (VMs set DISK_SIZE=32G) + local DISK_SIZE_API="${DISK_SIZE:-0}" + DISK_SIZE_API="${DISK_SIZE_API%G}" + [[ ! "$DISK_SIZE_API" =~ ^[0-9]+$ ]] && DISK_SIZE_API=0 - # ── Attempt 1: Full payload with complete error text (includes full log) ── - local JSON_PAYLOAD - JSON_PAYLOAD=$( - cat </dev/null) || http_code="000" + http_code=$(curl -sS -w "%{http_code}" -m "${STATUS_TIMEOUT}" -X POST "${TELEMETRY_URL}" \ + -H "Content-Type: application/json" \ + -d "$JSON_PAYLOAD" -o /dev/null 2>/dev/null) || http_code="000" - if [[ "$http_code" =~ ^2[0-9]{2}$ ]]; then - POST_UPDATE_DONE=true - return 0 - fi + if [[ "$http_code" =~ ^2[0-9]{2}$ ]]; then + POST_UPDATE_DONE=true + return 0 + fi - # ── Attempt 2: Medium error text (truncated log ≤16KB instead of full 120KB) ── - sleep 1 - local RETRY_PAYLOAD - RETRY_PAYLOAD=$( - cat </dev/null) || http_code="000" + http_code=$(curl -sS -w "%{http_code}" -m "${STATUS_TIMEOUT}" -X POST "${TELEMETRY_URL}" \ + -H "Content-Type: application/json" \ + -d "$RETRY_PAYLOAD" -o /dev/null 2>/dev/null) || http_code="000" - if [[ "$http_code" =~ ^2[0-9]{2}$ ]]; then - POST_UPDATE_DONE=true - return 0 - fi + if [[ "$http_code" =~ ^2[0-9]{2}$ ]]; then + POST_UPDATE_DONE=true + return 0 + fi - # ── Attempt 3: Minimal payload with medium error (bare minimum to set status) ── - sleep 2 - local MINIMAL_PAYLOAD - MINIMAL_PAYLOAD=$( - cat </dev/null) || http_code="000" + http_code=$(curl -sS -w "%{http_code}" -m "${STATUS_TIMEOUT}" -X POST "${TELEMETRY_URL}" \ + -H "Content-Type: application/json" \ + -d "$MINIMAL_PAYLOAD" -o /dev/null 2>/dev/null) || http_code="000" - if [[ "$http_code" =~ ^2[0-9]{2}$ ]]; then - POST_UPDATE_DONE=true - return 0 - fi + if [[ "$http_code" =~ ^2[0-9]{2}$ ]]; then + POST_UPDATE_DONE=true + return 0 + fi - # All 3 attempts failed — do NOT set POST_UPDATE_DONE=true. - # This allows the EXIT trap (on_exit in error-handler.func) to retry. - # No infinite loop risk: EXIT trap fires exactly once. + # All 3 attempts failed — do NOT set POST_UPDATE_DONE=true. + # This allows the EXIT trap (on_exit in error_handler.func) to retry. + # No infinite loop risk: EXIT trap fires exactly once. } # ============================================================================== @@ -1096,65 +1096,65 @@ EOF # - Used to group errors in dashboard # ------------------------------------------------------------------------------ categorize_error() { - # Allow build.func to override category based on log analysis (exit code 1 subclassification) - if [[ -n "${ERROR_CATEGORY_OVERRIDE:-}" ]]; then - echo "$ERROR_CATEGORY_OVERRIDE" - return - fi + # Allow build.func to override category based on log analysis (exit code 1 subclassification) + if [[ -n "${ERROR_CATEGORY_OVERRIDE:-}" ]]; then + echo "$ERROR_CATEGORY_OVERRIDE" + return + fi - local code="$1" - case "$code" in - # Network errors (curl/wget) - 6 | 7 | 22 | 35) echo "network" ;; + local code="$1" + case "$code" in + # Network errors (curl/wget) + 6 | 7 | 22 | 35) echo "network" ;; - # Docker / Privileged mode required - 10) echo "config" ;; + # Docker / Privileged mode required + 10) echo "config" ;; - # Timeout errors - 28 | 124 | 211) echo "timeout" ;; + # Timeout errors + 28 | 124 | 211) echo "timeout" ;; - # Storage errors (Proxmox storage) - 214 | 217 | 219 | 224) echo "storage" ;; + # Storage errors (Proxmox storage) + 214 | 217 | 219 | 224) echo "storage" ;; - # Dependency/Package errors (APT, DPKG, pip, commands) - 100 | 101 | 102 | 127 | 160 | 161 | 162 | 255) echo "dependency" ;; + # Dependency/Package errors (APT, DPKG, pip, commands) + 100 | 101 | 102 | 127 | 160 | 161 | 162 | 255) echo "dependency" ;; - # Permission errors - 126 | 152) echo "permission" ;; + # Permission errors + 126 | 152) echo "permission" ;; - # Configuration errors (Proxmox config, invalid args) - 128 | 203 | 204 | 205 | 206 | 207 | 208) echo "config" ;; + # Configuration errors (Proxmox config, invalid args) + 128 | 203 | 204 | 205 | 206 | 207 | 208) echo "config" ;; - # Proxmox container/template errors - 200 | 209 | 210 | 212 | 213 | 215 | 216 | 218 | 220 | 221 | 222 | 223 | 225 | 231) echo "proxmox" ;; + # Proxmox container/template errors + 200 | 209 | 210 | 212 | 213 | 215 | 216 | 218 | 220 | 221 | 222 | 223 | 225 | 231) echo "proxmox" ;; - # Service/Systemd errors - 150 | 151 | 153 | 154) echo "service" ;; + # Service/Systemd errors + 150 | 151 | 153 | 154) echo "service" ;; - # Database errors (PostgreSQL, MySQL, MongoDB) - 170 | 171 | 172 | 173 | 180 | 181 | 182 | 183 | 190 | 191 | 192 | 193) echo "database" ;; + # Database errors (PostgreSQL, MySQL, MongoDB) + 170 | 171 | 172 | 173 | 180 | 181 | 182 | 183 | 190 | 191 | 192 | 193) echo "database" ;; - # Node.js / JavaScript runtime errors - 243 | 245 | 246 | 247 | 248 | 249) echo "runtime" ;; + # Node.js / JavaScript runtime errors + 243 | 245 | 246 | 247 | 248 | 249) echo "runtime" ;; - # Python environment errors - # (already covered: 160-162 under dependency) + # Python environment errors + # (already covered: 160-162 under dependency) - # Aborted by user (SIGHUP=terminal closed, SIGINT=Ctrl+C, SIGTERM=killed) - 129 | 130 | 143) echo "user_aborted" ;; + # Aborted by user (SIGHUP=terminal closed, SIGINT=Ctrl+C, SIGTERM=killed) + 129 | 130 | 143) echo "user_aborted" ;; - # Resource errors (OOM, SIGKILL, SIGABRT) - 134 | 137) echo "resource" ;; + # Resource errors (OOM, SIGKILL, SIGABRT) + 134 | 137) echo "resource" ;; - # Signal/Process errors (SIGPIPE, SIGSEGV) - 139 | 141) echo "signal" ;; + # Signal/Process errors (SIGPIPE, SIGSEGV) + 139 | 141) echo "signal" ;; - # Shell errors (general error, syntax error) - 1 | 2) echo "shell" ;; + # Shell errors (general error, syntax error) + 1 | 2) echo "shell" ;; - # Default - truly unknown - *) echo "unknown" ;; - esac + # Default - truly unknown + *) echo "unknown" ;; + esac } # ------------------------------------------------------------------------------ @@ -1165,8 +1165,8 @@ categorize_error() { # - Sets INSTALL_START_TIME global variable # ------------------------------------------------------------------------------ start_install_timer() { - INSTALL_START_TIME=$(date +%s) - export INSTALL_START_TIME + INSTALL_START_TIME=$(date +%s) + export INSTALL_START_TIME } # ------------------------------------------------------------------------------ @@ -1176,12 +1176,12 @@ start_install_timer() { # - Returns 0 if timer was not started # ------------------------------------------------------------------------------ get_install_duration() { - if [[ -z "${INSTALL_START_TIME:-}" ]]; then - echo "0" - return - fi - local now=$(date +%s) - echo $((now - INSTALL_START_TIME)) + if [[ -z "${INSTALL_START_TIME:-}" ]]; then + echo "0" + return + fi + local now=$(date +%s) + echo $((now - INSTALL_START_TIME)) } # ------------------------------------------------------------------------------ @@ -1193,18 +1193,18 @@ get_install_duration() { # * $1: exit_code from the script # ------------------------------------------------------------------------------ _telemetry_report_exit() { - local ec="${1:-0}" - local status="success" - [[ "$ec" -ne 0 ]] && status="failed" + local ec="${1:-0}" + local status="success" + [[ "$ec" -ne 0 ]] && status="failed" - # Lazy name resolution: use explicit name, fall back to $APP, then "unknown" - local name="${TELEMETRY_TOOL_NAME:-${APP:-unknown}}" + # Lazy name resolution: use explicit name, fall back to $APP, then "unknown" + local name="${TELEMETRY_TOOL_NAME:-${APP:-unknown}}" - if [[ "${TELEMETRY_TOOL_TYPE:-pve}" == "addon" ]]; then - post_addon_to_api "$name" "$status" "$ec" - else - post_tool_to_api "$name" "$status" "$ec" - fi + if [[ "${TELEMETRY_TOOL_TYPE:-pve}" == "addon" ]]; then + post_addon_to_api "$name" "$status" "$ec" + else + post_tool_to_api "$name" "$status" "$ec" + fi } # ------------------------------------------------------------------------------ @@ -1224,21 +1224,21 @@ _telemetry_report_exit() { # init_tool_telemetry "" "addon" # uses $APP at exit time # ------------------------------------------------------------------------------ init_tool_telemetry() { - local name="${1:-}" - local type="${2:-pve}" + local name="${1:-}" + local type="${2:-pve}" - [[ -n "$name" ]] && TELEMETRY_TOOL_NAME="$name" - TELEMETRY_TOOL_TYPE="$type" + [[ -n "$name" ]] && TELEMETRY_TOOL_NAME="$name" + TELEMETRY_TOOL_TYPE="$type" - # Read diagnostics opt-in/opt-out - if [[ -f /usr/local/community-scripts/diagnostics ]]; then - DIAGNOSTICS=$(grep -i "^DIAGNOSTICS=" /usr/local/community-scripts/diagnostics 2>/dev/null | awk -F'=' '{print $2}') || true - fi + # Read diagnostics opt-in/opt-out + if [[ -f /usr/local/community-scripts/diagnostics ]]; then + DIAGNOSTICS=$(grep -i "^DIAGNOSTICS=" /usr/local/community-scripts/diagnostics 2>/dev/null | awk -F'=' '{print $2}') || true + fi - start_install_timer + start_install_timer - # EXIT trap: automatically report telemetry when script ends - trap '_telemetry_report_exit "$?"' EXIT + # EXIT trap: automatically report telemetry when script ends + trap '_telemetry_report_exit "$?"' EXIT } # ------------------------------------------------------------------------------ @@ -1252,40 +1252,40 @@ init_tool_telemetry() { # - For PVE host tools, not container installations # ------------------------------------------------------------------------------ post_tool_to_api() { - command -v curl &>/dev/null || return 0 - [[ "${DIAGNOSTICS:-no}" == "no" ]] && return 0 + command -v curl &>/dev/null || return 0 + [[ "${DIAGNOSTICS:-no}" == "no" ]] && return 0 - local tool_name="${1:-unknown}" - local status="${2:-success}" - local exit_code="${3:-0}" - local error="" error_category="" - local uuid duration + local tool_name="${1:-unknown}" + local status="${2:-success}" + local exit_code="${3:-0}" + local error="" error_category="" + local uuid duration - # Generate UUID for this tool execution - uuid=$(cat /proc/sys/kernel/random/uuid 2>/dev/null || uuidgen 2>/dev/null || echo "tool-$(date +%s)") - duration=$(get_install_duration) + # Generate UUID for this tool execution + uuid=$(cat /proc/sys/kernel/random/uuid 2>/dev/null || uuidgen 2>/dev/null || echo "tool-$(date +%s)") + duration=$(get_install_duration) - # Map status - [[ "$status" == "done" ]] && status="success" + # Map status + [[ "$status" == "done" ]] && status="success" - if [[ "$status" == "failed" ]]; then - [[ ! "$exit_code" =~ ^[0-9]+$ ]] && exit_code=1 - local error_text="" - error_text=$(get_error_text) - local full_error - full_error=$(build_error_string "$exit_code" "$error_text") - error=$(json_escape "$full_error") - error_category=$(categorize_error "$exit_code") - fi + if [[ "$status" == "failed" ]]; then + [[ ! "$exit_code" =~ ^[0-9]+$ ]] && exit_code=1 + local error_text="" + error_text=$(get_error_text) + local full_error + full_error=$(build_error_string "$exit_code" "$error_text") + error=$(json_escape "$full_error") + error_category=$(categorize_error "$exit_code") + fi - local pve_version="" - if command -v pveversion &>/dev/null; then - pve_version=$(pveversion 2>/dev/null | awk -F'[/ ]' '{print $2}') || true - fi + local pve_version="" + if command -v pveversion &>/dev/null; then + pve_version=$(pveversion 2>/dev/null | awk -F'[/ ]' '{print $2}') || true + fi - local JSON_PAYLOAD - JSON_PAYLOAD=$( - cat </dev/null || true + curl -fsS -m "${TELEMETRY_TIMEOUT}" -X POST "${TELEMETRY_URL}" \ + -H "Content-Type: application/json" \ + -d "$JSON_PAYLOAD" &>/dev/null || true } # ------------------------------------------------------------------------------ @@ -1318,42 +1318,42 @@ EOF # - For addons installed inside containers # ------------------------------------------------------------------------------ post_addon_to_api() { - command -v curl &>/dev/null || return 0 - [[ "${DIAGNOSTICS:-no}" == "no" ]] && return 0 + command -v curl &>/dev/null || return 0 + [[ "${DIAGNOSTICS:-no}" == "no" ]] && return 0 - local addon_name="${1:-unknown}" - local status="${2:-success}" - local exit_code="${3:-0}" - local error="" error_category="" - local uuid duration + local addon_name="${1:-unknown}" + local status="${2:-success}" + local exit_code="${3:-0}" + local error="" error_category="" + local uuid duration - # Generate UUID for this addon installation - uuid=$(cat /proc/sys/kernel/random/uuid 2>/dev/null || uuidgen 2>/dev/null || echo "addon-$(date +%s)") - duration=$(get_install_duration) + # Generate UUID for this addon installation + uuid=$(cat /proc/sys/kernel/random/uuid 2>/dev/null || uuidgen 2>/dev/null || echo "addon-$(date +%s)") + duration=$(get_install_duration) - # Map status - [[ "$status" == "done" ]] && status="success" + # Map status + [[ "$status" == "done" ]] && status="success" - if [[ "$status" == "failed" ]]; then - [[ ! "$exit_code" =~ ^[0-9]+$ ]] && exit_code=1 - local error_text="" - error_text=$(get_error_text) - local full_error - full_error=$(build_error_string "$exit_code" "$error_text") - error=$(json_escape "$full_error") - error_category=$(categorize_error "$exit_code") - fi + if [[ "$status" == "failed" ]]; then + [[ ! "$exit_code" =~ ^[0-9]+$ ]] && exit_code=1 + local error_text="" + error_text=$(get_error_text) + local full_error + full_error=$(build_error_string "$exit_code" "$error_text") + error=$(json_escape "$full_error") + error_category=$(categorize_error "$exit_code") + fi - # Detect OS info - local os_type="" os_version="" - if [[ -f /etc/os-release ]]; then - os_type=$(grep "^ID=" /etc/os-release | cut -d= -f2 | tr -d '"' || true) - os_version=$(grep "^VERSION_ID=" /etc/os-release | cut -d= -f2 | tr -d '"' || true) - fi + # Detect OS info + local os_type="" os_version="" + if [[ -f /etc/os-release ]]; then + os_type=$(grep "^ID=" /etc/os-release | cut -d= -f2 | tr -d '"' || true) + os_version=$(grep "^VERSION_ID=" /etc/os-release | cut -d= -f2 | tr -d '"' || true) + fi - local JSON_PAYLOAD - JSON_PAYLOAD=$( - cat </dev/null || true + curl -fsS -m "${TELEMETRY_TIMEOUT}" -X POST "${TELEMETRY_URL}" \ + -H "Content-Type: application/json" \ + -d "$JSON_PAYLOAD" &>/dev/null || true } # ------------------------------------------------------------------------------ @@ -1389,63 +1389,63 @@ EOF # * GPU info (if detect_gpu was called) # ------------------------------------------------------------------------------ post_update_to_api_extended() { - # Silent fail - telemetry should never break scripts - command -v curl &>/dev/null || return 0 + # Silent fail - telemetry should never break scripts + command -v curl &>/dev/null || return 0 - # Prevent duplicate submissions - POST_UPDATE_DONE=${POST_UPDATE_DONE:-false} - [[ "$POST_UPDATE_DONE" == "true" ]] && return 0 + # Prevent duplicate submissions + POST_UPDATE_DONE=${POST_UPDATE_DONE:-false} + [[ "$POST_UPDATE_DONE" == "true" ]] && return 0 - [[ "${DIAGNOSTICS:-no}" == "no" ]] && return 0 - [[ -z "${RANDOM_UUID:-}" ]] && return 0 + [[ "${DIAGNOSTICS:-no}" == "no" ]] && return 0 + [[ -z "${RANDOM_UUID:-}" ]] && return 0 - local status="${1:-failed}" - local raw_exit_code="${2:-1}" - local exit_code=0 error="" pb_status error_category="" - local duration gpu_vendor gpu_passthrough + local status="${1:-failed}" + local raw_exit_code="${2:-1}" + local exit_code=0 error="" pb_status error_category="" + local duration gpu_vendor gpu_passthrough - # Get duration - duration=$(get_install_duration) + # Get duration + duration=$(get_install_duration) - # Get GPU info (if detected) - gpu_vendor="${GPU_VENDOR:-}" - gpu_passthrough="${GPU_PASSTHROUGH:-}" + # Get GPU info (if detected) + gpu_vendor="${GPU_VENDOR:-}" + gpu_passthrough="${GPU_PASSTHROUGH:-}" - # Map status to telemetry values - case "$status" in - done | success) - pb_status="success" - exit_code=0 - error="" - error_category="" - ;; - failed) - pb_status="failed" - ;; - *) - pb_status="unknown" - ;; - esac + # Map status to telemetry values + case "$status" in + done | success) + pb_status="success" + exit_code=0 + error="" + error_category="" + ;; + failed) + pb_status="failed" + ;; + *) + pb_status="unknown" + ;; + esac - # For failed/unknown status, resolve exit code and error description - if [[ "$pb_status" == "failed" ]] || [[ "$pb_status" == "unknown" ]]; then - if [[ "$raw_exit_code" =~ ^[0-9]+$ ]]; then - exit_code="$raw_exit_code" - else - exit_code=1 - fi - local error_text="" - error_text=$(get_error_text) - local full_error - full_error=$(build_error_string "$exit_code" "$error_text") - error=$(json_escape "$full_error") - error_category=$(categorize_error "$exit_code") - [[ -z "$error" ]] && error="Unknown error" - fi + # For failed/unknown status, resolve exit code and error description + if [[ "$pb_status" == "failed" ]] || [[ "$pb_status" == "unknown" ]]; then + if [[ "$raw_exit_code" =~ ^[0-9]+$ ]]; then + exit_code="$raw_exit_code" + else + exit_code=1 + fi + local error_text="" + error_text=$(get_error_text) + local full_error + full_error=$(build_error_string "$exit_code" "$error_text") + error=$(json_escape "$full_error") + error_category=$(categorize_error "$exit_code") + [[ -z "$error" ]] && error="Unknown error" + fi - local JSON_PAYLOAD - JSON_PAYLOAD=$( - cat </dev/null) || http_code="000" + local http_code + http_code=$(curl -sS -w "%{http_code}" -m "${STATUS_TIMEOUT}" -X POST "${TELEMETRY_URL}" \ + -H "Content-Type: application/json" \ + -d "$JSON_PAYLOAD" -o /dev/null 2>/dev/null) || http_code="000" - if [[ "$http_code" =~ ^2[0-9]{2}$ ]]; then - POST_UPDATE_DONE=true - return 0 - fi + if [[ "$http_code" =~ ^2[0-9]{2}$ ]]; then + POST_UPDATE_DONE=true + return 0 + fi - # Retry with minimal payload - sleep 1 - http_code=$(curl -sS -w "%{http_code}" -m "${STATUS_TIMEOUT}" -X POST "${TELEMETRY_URL}" \ - -H "Content-Type: application/json" \ - -d "{\"random_id\":\"${RANDOM_UUID}\",\"execution_id\":\"${EXECUTION_ID:-${RANDOM_UUID}}\",\"type\":\"${TELEMETRY_TYPE:-lxc}\",\"nsapp\":\"${NSAPP:-unknown}\",\"status\":\"${pb_status}\",\"exit_code\":${exit_code},\"install_duration\":${duration:-0}}" \ - -o /dev/null 2>/dev/null) || http_code="000" + # Retry with minimal payload + sleep 1 + http_code=$(curl -sS -w "%{http_code}" -m "${STATUS_TIMEOUT}" -X POST "${TELEMETRY_URL}" \ + -H "Content-Type: application/json" \ + -d "{\"random_id\":\"${RANDOM_UUID}\",\"execution_id\":\"${EXECUTION_ID:-${RANDOM_UUID}}\",\"type\":\"${TELEMETRY_TYPE:-lxc}\",\"nsapp\":\"${NSAPP:-unknown}\",\"status\":\"${pb_status}\",\"exit_code\":${exit_code},\"install_duration\":${duration:-0}}" \ + -o /dev/null 2>/dev/null) || http_code="000" - if [[ "$http_code" =~ ^2[0-9]{2}$ ]]; then - POST_UPDATE_DONE=true - return 0 - fi + if [[ "$http_code" =~ ^2[0-9]{2}$ ]]; then + POST_UPDATE_DONE=true + return 0 + fi - # Do NOT set POST_UPDATE_DONE=true — let EXIT trap retry + # Do NOT set POST_UPDATE_DONE=true — let EXIT trap retry } diff --git a/scripts/core/build.func b/scripts/core/build.func index 9c82bef..9f59f50 100755 --- a/scripts/core/build.func +++ b/scripts/core/build.func @@ -18,7 +18,7 @@ # # Usage: # - Sourced automatically by CT creation scripts -# - Requires core.func and error-handler.func to be loaded first +# - Requires core.func and error_handler.func to be loaded first # # ============================================================================== @@ -986,13 +986,23 @@ base_settings() { # Runtime check: Verify APT cacher is reachable if configured if [[ -n "$APT_CACHER_IP" && "$APT_CACHER" == "yes" ]]; then - if ! curl -s --connect-timeout 2 "http://${APT_CACHER_IP}:3142" >/dev/null 2>&1; then - msg_warn "APT Cacher configured but not reachable at ${APT_CACHER_IP}:3142" + local _check_host _check_port _check_url + _check_host=$(echo "$APT_CACHER_IP" | sed -e 's|https\?://||' -e 's|/.*||' | cut -d: -f1) + _check_port=$(echo "$APT_CACHER_IP" | sed -e 's|https\?://||' -e 's|/.*||' | cut -s -d: -f2) + if [[ "$APT_CACHER_IP" =~ ^https?:// ]]; then + _check_url="$APT_CACHER_IP" + _check_port="${_check_port:-80}" + else + _check_port="${_check_port:-3142}" + _check_url="http://${APT_CACHER_IP}:${_check_port}" + fi + if ! curl -s --connect-timeout 2 "${_check_url}" >/dev/null 2>&1; then + msg_warn "APT Cacher configured but not reachable at ${_check_url}" msg_custom "⚠️" "${YW}" "Disabling APT Cacher for this installation" APT_CACHER="" APT_CACHER_IP="" else - msg_ok "APT Cacher verified at ${APT_CACHER_IP}:3142" + msg_ok "APT Cacher verified at ${_check_url}" fi fi @@ -1044,7 +1054,7 @@ load_vars_file() { # Allowed var_* keys local VAR_WHITELIST=( - var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_gpu var_keyctl + var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_github_token var_gpu var_keyctl var_gateway var_hostname var_ipv6_method var_mac var_mknod var_mount_fs var_mtu var_net var_nesting var_ns var_os var_protection var_pw var_ram var_tags var_timezone var_tun var_unprivileged var_verbose var_version var_vlan var_ssh var_ssh_authorized_key var_container_storage var_template_storage var_searchdomain @@ -1199,6 +1209,13 @@ load_vars_file() { continue fi ;; + var_apt_cacher_ip) + # Allow: plain IP/hostname, http://host, https://host:port + if [[ -n "$var_val" ]] && ! [[ "$var_val" =~ ^(https?://)?[a-zA-Z0-9._-]+(:[0-9]+)?(/.*)?$ ]]; then + msg_warn "Invalid APT Cacher address '$var_val' in $file, ignoring" + continue + fi + ;; var_container_storage | var_template_storage) # Validate that the storage exists and is active on the current node local _storage_status @@ -1238,7 +1255,7 @@ default_var_settings() { # Allowed var_* keys (alphabetically sorted) # Note: Removed var_ctid (can only exist once), var_ipv6_static (static IPs are unique) local VAR_WHITELIST=( - var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_gpu var_keyctl + var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_github_token var_gpu var_keyctl var_gateway var_hostname var_ipv6_method var_mac var_mknod var_mount_fs var_mtu var_net var_nesting var_ns var_os var_protection var_pw var_ram var_tags var_timezone var_tun var_unprivileged var_verbose var_version var_vlan var_ssh var_ssh_authorized_key var_container_storage var_template_storage @@ -1311,9 +1328,11 @@ var_ipv6_method=none var_ssh=no # var_ssh_authorized_key= -# APT cacher (optional - with example) +# APT cacher (optional - IP or URL) # var_apt_cacher=yes # var_apt_cacher_ip=192.168.1.10 +# var_apt_cacher_ip=http://proxy.local +# var_apt_cacher_ip=https://proxy.local:443 # Features/Tags/verbosity var_fuse=no @@ -1331,6 +1350,10 @@ var_verbose=no # Security (root PW) – empty => autologin # var_pw= + +# GitHub Personal Access Token (optional – avoids API rate limits during installs) +# Create at https://github.com/settings/tokens – read-only public access is sufficient +# var_github_token=ghp_your_token_here EOF # Now choose storages (always prompt unless just one exists) @@ -1368,6 +1391,11 @@ EOF VERBOSE="no" fi + # 4) Map var_github_token → GITHUB_TOKEN (only if not already set in environment) + if [[ -z "${GITHUB_TOKEN:-}" && -n "${var_github_token:-}" ]]; then + export GITHUB_TOKEN="${var_github_token}" + fi + # 4) Apply base settings and show summary METHOD="mydefaults-global" base_settings "$VERBOSE" @@ -1400,7 +1428,7 @@ get_app_defaults_path() { if ! declare -p VAR_WHITELIST >/dev/null 2>&1; then # Note: Removed var_ctid (can only exist once), var_ipv6_static (static IPs are unique) declare -ag VAR_WHITELIST=( - var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_gpu + var_apt_cacher var_apt_cacher_ip var_brg var_cpu var_disk var_fuse var_github_token var_gpu var_gateway var_hostname var_ipv6_method var_mac var_mtu var_net var_ns var_os var_pw var_ram var_tags var_tun var_unprivileged var_verbose var_version var_vlan var_ssh var_ssh_authorized_key var_container_storage var_template_storage @@ -2526,7 +2554,7 @@ advanced_settings() { # Ask for IP if enabled if result=$(whiptail --backtitle "Proxmox VE Helper Scripts [Step $STEP/$MAX_STEP]" \ --title "APT CACHER IP" \ - --inputbox "\nEnter APT Cacher-NG server IP address:" 10 58 "$_apt_cacher_ip" \ + --inputbox "\nEnter APT Cacher-NG IP or URL:\n(e.g. 192.168.1.10, http://host, https://host:443)" 12 62 "$_apt_cacher_ip" \ 3>&1 1>&2 2>&3); then _apt_cacher_ip="$result" fi @@ -3525,11 +3553,18 @@ build_container() { fi # IP (always required, default dhcp) - NET_STRING+=",ip=${NET:-dhcp}" + # Guard against the literal word "static" being passed as the IP value – + # that happens when var_net=static is exported without an actual address. + if [[ "$NET" == "static" || -z "$NET" ]]; then + msg_warn "NET value '${NET:-empty}' is not a valid IP/CIDR – falling back to dhcp" + NET="dhcp" + fi + NET_STRING+=",ip=${NET}" # Gateway if [[ -n "$GATE" ]]; then case "$GATE" in + ,gw=) ;; ,gw=*) NET_STRING+="$GATE" ;; *) NET_STRING+=",gw=$GATE" ;; esac @@ -3584,17 +3619,37 @@ build_container() { fi # Build PCT_OPTIONS as string for export - TEMP_DIR=$(mktemp -d) - pushd "$TEMP_DIR" >/dev/null - local _func_url + local _func_file + local SCRIPT_DIR + SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" if [ "$var_os" == "alpine" ]; then - _func_url="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/alpine-install.func" + _func_file="${SCRIPT_DIR}/alpine-install.func" else - _func_url="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/install.func" + _func_file="${SCRIPT_DIR}/install.func" + fi + if [[ -f "$_func_file" ]]; then + # Concatenate core dependencies + install func so the container has + # everything via a single `source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"`. + # install.func has `source $(dirname BASH_SOURCE)/core.func` which + # resolves to /dev/core.func when sourced from stdin — this avoids that. + local _core_file="${SCRIPT_DIR}/core.func" + local _err_file="${SCRIPT_DIR}/error-handler.func" + local _combined="" + [[ -f "$_core_file" ]] && _combined+="$(cat "$_core_file")"$'\n' + [[ -f "$_err_file" ]] && _combined+="$(cat "$_err_file")"$'\n' + _combined+="$(cat "$_func_file")" + export FUNCTIONS_FILE_PATH="$_combined" + else + local _func_url + if [ "$var_os" == "alpine" ]; then + _func_url="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/alpine-install.func" + else + _func_url="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/install.func" + fi + export FUNCTIONS_FILE_PATH="$(curl -fsSL "$_func_url")" fi - export FUNCTIONS_FILE_PATH="$(curl -fsSL "$_func_url")" if [[ -z "$FUNCTIONS_FILE_PATH" || ${#FUNCTIONS_FILE_PATH} -lt 100 ]]; then - msg_error "Failed to download install functions from: $_func_url" + msg_error "Failed to load install functions" exit 115 fi @@ -3998,7 +4053,7 @@ EOF # Wait for IP assignment (IPv4 or IPv6) local ip_in_lxc="" - for i in {1..20}; do + for i in {1..60}; do # Try IPv4 first ip_in_lxc=$(pct exec "$CTID" -- ip -4 addr show dev eth0 2>/dev/null | awk '/inet / {print $2}' | cut -d/ -f1) # Fallback to IPv6 if IPv4 not available @@ -4006,11 +4061,18 @@ EOF ip_in_lxc=$(pct exec "$CTID" -- ip -6 addr show dev eth0 scope global 2>/dev/null | awk '/inet6 / {print $2}' | cut -d/ -f1 | head -n1) fi [ -n "$ip_in_lxc" ] && break - sleep 1 + # Progressive backoff: 1s for first 20, 2s for next 20, 3s for last 20 + if [ "$i" -le 20 ]; then + sleep 1 + elif [ "$i" -le 40 ]; then + sleep 2 + else + sleep 3 + fi done if [ -z "$ip_in_lxc" ]; then - msg_error "No IP assigned to CT $CTID after 20s" + msg_error "No IP assigned to CT $CTID after 60 attempts" msg_custom "🔧" "${YW}" "Troubleshooting:" echo " • Verify bridge ${BRG} exists and has connectivity" echo " • Check if DHCP server is reachable (if using DHCP)" @@ -4300,7 +4362,13 @@ EOF # that sends "configuring" status AFTER the host already reported "failed" export CONTAINER_INSTALLING=true - lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/install/${var_install}.sh)" + # Use local install script if available, fallback to remote download + local _local_install="${SCRIPT_DIR}/../install/${var_install}.sh" + if [[ -f "$_local_install" ]]; then + lxc-attach -n "$CTID" -- bash -c "$(cat "$_local_install")" + else + lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/install/${var_install}.sh)" + fi local lxc_exit=$? unset CONTAINER_INSTALLING @@ -4623,7 +4691,7 @@ EOF if [[ "${DEV_MODE_MOTD:-false}" == "true" ]]; then echo -e "${TAB}${HOLD}${DGN}Setting up MOTD and SSH for debugging...${CL}" if pct exec "$CTID" -- bash -c " - source "$(dirname \"\${BASH_SOURCE[0]}\")/install.func" + source /tmp/scripts/core/install.func declare -f motd_ssh >/dev/null 2>&1 && motd_ssh || true " >/dev/null 2>&1; then local ct_ip=$(pct exec "$CTID" ip a s dev eth0 2>/dev/null | awk '/inet / {print $2}' | cut -d/ -f1) @@ -4695,7 +4763,11 @@ EOF # Re-run install script in existing container (don't destroy/recreate) set +Eeuo pipefail trap - ERR - lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/install/${var_install}.sh)" + if [[ -f "$_local_install" ]]; then + lxc-attach -n "$CTID" -- bash -c "$(cat "$_local_install")" + else + lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/install/${var_install}.sh)" + fi local apt_retry_exit=$? set -Eeuo pipefail trap 'error_handler' ERR @@ -5241,9 +5313,10 @@ create_lxc_container() { exit 205 } if qm status "$CTID" &>/dev/null || pct status "$CTID" &>/dev/null; then - unset CTID - msg_error "Cannot use ID that is already in use." - exit 206 + msg_warn "Container/VM ID $CTID is already in use (detected late). Reassigning..." + CTID=$(get_valid_container_id "$((CTID + 1))") + export CTID + msg_ok "Reassigned to container ID $CTID" fi # Report installation start to API early - captures failures in storage/template/create @@ -5719,30 +5792,77 @@ create_lxc_container() { if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" $PCT_OPTIONS >"$LOGFILE" 2>&1; then msg_debug "Container creation failed on ${TEMPLATE_STORAGE}. Checking error..." - # Check if template issue - retry with fresh download - if grep -qiE 'unable to open|corrupt|invalid' "$LOGFILE"; then - msg_info "Template may be corrupted – re-downloading" - rm -f "$TEMPLATE_PATH" - pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >>"${BUILD_LOG:-/dev/null}" 2>&1 - msg_ok "Template re-downloaded" - fi + # Check if CTID collision (race condition: ID claimed between validation and creation) + if grep -qiE 'already exists|already in use' "$LOGFILE"; then + local old_ctid="$CTID" + CTID=$(get_valid_container_id "$((CTID + 1))") + export CTID + msg_warn "Container ID $old_ctid was claimed by another process. Retrying with ID $CTID" + LOGFILE="/tmp/pct_create_${CTID}_$(date +%Y%m%d_%H%M%S)_${SESSION_ID}.log" + if pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" $PCT_OPTIONS >"$LOGFILE" 2>&1; then + msg_ok "Container successfully created with new ID $CTID" + else + msg_error "Container creation failed even with new ID $CTID. See $LOGFILE" + _flush_pct_log + exit 209 + fi + else + # Not a CTID collision - check if template issue and retry with fresh download + if grep -qiE 'unable to open|corrupt|invalid' "$LOGFILE"; then + msg_info "Template may be corrupted – re-downloading" + rm -f "$TEMPLATE_PATH" + pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >>"${BUILD_LOG:-/dev/null}" 2>&1 + msg_ok "Template re-downloaded" + fi - # Retry after repair - if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" $PCT_OPTIONS >>"$LOGFILE" 2>&1; then - # Fallback to local storage if not already on local - if [[ "$TEMPLATE_STORAGE" != "local" ]]; then - msg_info "Retrying container creation with fallback to local storage" - LOCAL_TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE" - if [[ ! -f "$LOCAL_TEMPLATE_PATH" ]]; then - msg_ok "Trying local storage fallback" - msg_info "Downloading template to local" - pveam download local "$TEMPLATE" >>"${BUILD_LOG:-/dev/null}" 2>&1 - msg_ok "Template downloaded to local" + # Retry after repair + if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" $PCT_OPTIONS >>"$LOGFILE" 2>&1; then + # Fallback to local storage if not already on local + if [[ "$TEMPLATE_STORAGE" != "local" ]]; then + msg_info "Retrying container creation with fallback to local storage" + LOCAL_TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE" + if [[ ! -f "$LOCAL_TEMPLATE_PATH" ]]; then + msg_ok "Trying local storage fallback" + msg_info "Downloading template to local" + pveam download local "$TEMPLATE" >>"${BUILD_LOG:-/dev/null}" 2>&1 + msg_ok "Template downloaded to local" + else + msg_ok "Trying local storage fallback" + fi + if ! pct create "$CTID" "local:vztmpl/${TEMPLATE}" $PCT_OPTIONS >>"$LOGFILE" 2>&1; then + # Local fallback also failed - check for LXC stack version issue + if grep -qiE 'unsupported .* version' "$LOGFILE"; then + msg_warn "pct reported 'unsupported version' – LXC stack might be too old for this template" + offer_lxc_stack_upgrade_and_maybe_retry "yes" + rc=$? + case $rc in + 0) : ;; # success - container created, continue + 2) + msg_error "Upgrade declined. Please update and re-run: apt update && apt install --only-upgrade pve-container lxc-pve" + _flush_pct_log + exit 231 + ;; + 3) + msg_error "Upgrade and/or retry failed. Please inspect: $LOGFILE" + _flush_pct_log + exit 231 + ;; + esac + else + msg_error "Container creation failed. See $LOGFILE" + if whiptail --yesno "pct create failed.\nDo you want to enable verbose debug mode and view detailed logs?" 12 70; then + set -x + pct create "$CTID" "local:vztmpl/${TEMPLATE}" $PCT_OPTIONS 2>&1 | tee -a "$LOGFILE" + set +x + fi + _flush_pct_log + exit 209 + fi + else + msg_ok "Container successfully created using local fallback." + fi else - msg_ok "Trying local storage fallback" - fi - if ! pct create "$CTID" "local:vztmpl/${TEMPLATE}" $PCT_OPTIONS >>"$LOGFILE" 2>&1; then - # Local fallback also failed - check for LXC stack version issue + # Already on local storage and still failed - check LXC stack version if grep -qiE 'unsupported .* version' "$LOGFILE"; then msg_warn "pct reported 'unsupported version' – LXC stack might be too old for this template" offer_lxc_stack_upgrade_and_maybe_retry "yes" @@ -5770,50 +5890,28 @@ create_lxc_container() { _flush_pct_log exit 209 fi - else - msg_ok "Container successfully created using local fallback." fi else - # Already on local storage and still failed - check LXC stack version - if grep -qiE 'unsupported .* version' "$LOGFILE"; then - msg_warn "pct reported 'unsupported version' – LXC stack might be too old for this template" - offer_lxc_stack_upgrade_and_maybe_retry "yes" - rc=$? - case $rc in - 0) : ;; # success - container created, continue - 2) - msg_error "Upgrade declined. Please update and re-run: apt update && apt install --only-upgrade pve-container lxc-pve" - _flush_pct_log - exit 231 - ;; - 3) - msg_error "Upgrade and/or retry failed. Please inspect: $LOGFILE" - _flush_pct_log - exit 231 - ;; - esac - else - msg_error "Container creation failed. See $LOGFILE" - if whiptail --yesno "pct create failed.\nDo you want to enable verbose debug mode and view detailed logs?" 12 70; then - set -x - pct create "$CTID" "local:vztmpl/${TEMPLATE}" $PCT_OPTIONS 2>&1 | tee -a "$LOGFILE" - set +x - fi - _flush_pct_log - exit 209 - fi + msg_ok "Container successfully created after template repair." fi - else - msg_ok "Container successfully created after template repair." - fi + fi # close CTID collision else-branch fi - # Verify container exists - pct list | awk '{print $1}' | grep -qx "$CTID" || { - msg_error "Container ID $CTID not listed in 'pct list'. See $LOGFILE" + # Verify container exists (allow up to 10s for pmxcfs sync in clusters) + local _pct_visible=false + for _pct_check in {1..10}; do + if pct list | awk '{print $1}' | grep -qx "$CTID"; then + _pct_visible=true + break + fi + sleep 1 + done + if [[ "$_pct_visible" != true ]]; then + msg_error "Container ID $CTID not listed in 'pct list' after 10s. See $LOGFILE" + msg_custom "🔧" "${YW}" "This can happen in clusters with pmxcfs sync delays." _flush_pct_log exit 215 - } + fi # Verify config rootfs grep -q '^rootfs:' "/etc/pve/lxc/$CTID.conf" || { @@ -5853,6 +5951,12 @@ create_lxc_container() { # ------------------------------------------------------------------------------ description() { IP=$(pct exec "$CTID" ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1) + local script_slug script_url donate_url + + script_slug="${SCRIPT_SLUG:-${NSAPP}}" + script_slug="$(echo "$script_slug" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')" + script_url="https://community-scripts.org/scripts/${script_slug}" + donate_url="https://community-scripts.org/donate" # Generate LXC Description DESCRIPTION=$( @@ -5865,8 +5969,14 @@ description() {

${APP} LXC

- - spend Coffee + + Sponsoring and donations + +

+ +

+ + Open script page

@@ -5959,9 +6069,9 @@ ensure_log_on_host() { # TRAP MANAGEMENT # ============================================================================== # All traps (ERR, EXIT, INT, TERM, HUP) are set by catch_errors() in -# error-handler.func — called at the top of this file after sourcing. +# error_handler.func — called at the top of this file after sourcing. # -# Do NOT set duplicate traps here. The handlers in error-handler.func +# Do NOT set duplicate traps here. The handlers in error_handler.func # (on_exit, on_interrupt, on_terminate, on_hangup, error_handler) already: # - Send telemetry via post_update_to_api / _send_abort_telemetry # - Stop orphaned containers via _stop_container_if_installing diff --git a/scripts/core/core.func b/scripts/core/core.func index 38d918a..bceb949 100644 --- a/scripts/core/core.func +++ b/scripts/core/core.func @@ -143,7 +143,7 @@ ensure_profile_loaded() { # Source all profile.d scripts to ensure PATH is complete if [[ -d /etc/profile.d ]]; then for script in /etc/profile.d/*.sh; do - [[ -r "$script" ]] && source "$script" + [[ -r "$script" ]] && source "$script" || true done fi @@ -527,29 +527,23 @@ silent() { fi if [[ $rc -ne 0 ]]; then - # Source explain_exit_code if needed - if ! declare -f explain_exit_code >/dev/null 2>&1; then - if ! source "$(dirname "${BASH_SOURCE[0]}")/error-handler.func"; then - explain_exit_code() { echo "unknown (error-handler.func download failed)"; } - fi - fi + # Return instead of exit so that callers can use `$STD cmd || true` + # or `if $STD cmd; then ...` to handle errors gracefully. + # When no || / if is used, set -e + ERR trap will still catch it + # and error_handler() will display the error and exit. + # + # Set flag so error_handler knows to show log tail from silent's logfile + export _SILENT_FAILED_RC="$rc" + export _SILENT_FAILED_CMD="$cmd" + export _SILENT_FAILED_LINE="$caller_line" + export _SILENT_FAILED_LOG="$logfile" - local explanation - explanation="$(explain_exit_code "$rc")" - - printf "\e[?25h" - msg_error "in line ${caller_line}: exit code ${rc} (${explanation})" - msg_custom "→" "${YWB}" "${cmd}" - - if [[ -s "$logfile" ]]; then - echo -e "\n${TAB}--- Last 20 lines of log ---" - tail -n 20 "$logfile" - echo -e "${TAB}-----------------------------------" - echo -e "${TAB}📋 Full log: ${logfile}\n" - fi - - exit "$rc" + return "$rc" fi + + # Clear stale flags on success (prevents false positives if a previous + # $STD cmd || true failed and a later non-silent command triggers error_handler) + unset _SILENT_FAILED_RC _SILENT_FAILED_CMD _SILENT_FAILED_LINE _SILENT_FAILED_LOG 2>/dev/null || true } # ------------------------------------------------------------------------------ diff --git a/scripts/core/error-handler.func b/scripts/core/error-handler.func index b65ec49..d20ce55 100644 --- a/scripts/core/error-handler.func +++ b/scripts/core/error-handler.func @@ -15,7 +15,7 @@ # - Initialization function for trap setup # # Usage: -# source <(curl -fsSL .../error-handler.func) +# source <(curl -fsSL .../error_handler.func) # catch_errors # # ------------------------------------------------------------------------------ @@ -236,6 +236,16 @@ error_handler() { command="${command//\$STD/}" + # If error originated from silent(), use its captured metadata + # This provides the actual command and line number instead of "silent ..." + if [[ -n "${_SILENT_FAILED_RC:-}" ]]; then + exit_code="$_SILENT_FAILED_RC" + command="$_SILENT_FAILED_CMD" + line_number="$_SILENT_FAILED_LINE" + # Clear flags to prevent stale data on subsequent errors + unset _SILENT_FAILED_RC _SILENT_FAILED_CMD _SILENT_FAILED_LINE + fi + if [[ "$exit_code" -eq 0 ]]; then return 0 fi @@ -279,8 +289,12 @@ error_handler() { fi # Get active log file (BUILD_LOG or INSTALL_LOG) + # Prefer silent()'s logfile when available (contains the actual command output) local active_log="" - if declare -f get_active_logfile >/dev/null 2>&1; then + if [[ -n "${_SILENT_FAILED_LOG:-}" && -s "${_SILENT_FAILED_LOG}" ]]; then + active_log="$_SILENT_FAILED_LOG" + unset _SILENT_FAILED_LOG + elif declare -f get_active_logfile >/dev/null 2>&1; then active_log="$(get_active_logfile)" elif [[ -n "${SILENT_LOGFILE:-}" ]]; then active_log="$SILENT_LOGFILE" diff --git a/scripts/core/install.func b/scripts/core/install.func index 0870b20..365ef6d 100755 --- a/scripts/core/install.func +++ b/scripts/core/install.func @@ -28,20 +28,25 @@ # ============================================================================== if ! command -v curl >/dev/null 2>&1; then - printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2 - apt update >/dev/null 2>&1 - apt install -y curl >/dev/null 2>&1 + printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2 + apt update >/dev/null 2>&1 + apt install -y curl >/dev/null 2>&1 +fi +# Only source sibling files when running directly (not via stdin/FUNCTIONS_FILE_PATH). +# When sourced as `source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"`, BASH_SOURCE[0] is +# /dev/stdin — dirname resolves to /dev, which doesn't contain these files. +if [[ "${BASH_SOURCE[0]}" != "/dev/stdin" && "${BASH_SOURCE[0]}" != "stdin" ]]; then + source "$(dirname "${BASH_SOURCE[0]}")/core.func" + source "$(dirname "${BASH_SOURCE[0]}")/error-handler.func" fi -source "$(dirname "${BASH_SOURCE[0]}")/core.func" -source "$(dirname "${BASH_SOURCE[0]}")/error-handler.func" load_functions catch_errors # Persist diagnostics setting inside container (exported from build.func) # so addon scripts running later can find the user's choice if [[ ! -f /usr/local/community-scripts/diagnostics ]]; then - mkdir -p /usr/local/community-scripts - echo "DIAGNOSTICS=${DIAGNOSTICS:-no}" >/usr/local/community-scripts/diagnostics + mkdir -p /usr/local/community-scripts + echo "DIAGNOSTICS=${DIAGNOSTICS:-no}" >/usr/local/community-scripts/diagnostics fi # Get LXC IP address (must be called INSIDE container, after network is up) @@ -59,15 +64,15 @@ get_lxc_ip # - Only executes if DIAGNOSTICS=yes and RANDOM_UUID is set # ------------------------------------------------------------------------------ post_progress_to_api() { - command -v curl &>/dev/null || return 0 - [[ "${DIAGNOSTICS:-no}" == "no" ]] && return 0 - [[ -z "${RANDOM_UUID:-}" ]] && return 0 + command -v curl &>/dev/null || return 0 + [[ "${DIAGNOSTICS:-no}" == "no" ]] && return 0 + [[ -z "${RANDOM_UUID:-}" ]] && return 0 - local progress_status="${1:-configuring}" + local progress_status="${1:-configuring}" - curl -fsS -m 5 -X POST "https://telemetry.community-scripts.org/telemetry" \ - -H "Content-Type: application/json" \ - -d "{\"random_id\":\"${RANDOM_UUID}\",\"execution_id\":\"${EXECUTION_ID:-${RANDOM_UUID}}\",\"type\":\"lxc\",\"nsapp\":\"${app:-unknown}\",\"status\":\"${progress_status}\"}" &>/dev/null || true + curl -fsS -m 5 -X POST "https://telemetry.community-scripts.org/telemetry" \ + -H "Content-Type: application/json" \ + -d "{\"random_id\":\"${RANDOM_UUID}\",\"execution_id\":\"${EXECUTION_ID:-${RANDOM_UUID}}\",\"type\":\"lxc\",\"nsapp\":\"${app:-unknown}\",\"status\":\"${progress_status}\"}" &>/dev/null || true } # ============================================================================== @@ -82,20 +87,20 @@ post_progress_to_api() { # - Sets verbose mode via set_std_mode() # ------------------------------------------------------------------------------ verb_ip6() { - set_std_mode # Set STD mode based on VERBOSE + set_std_mode # Set STD mode based on VERBOSE - if [ "${IPV6_METHOD:-}" = "disable" ]; then - msg_info "Disabling IPv6 (this may affect some services)" - mkdir -p /etc/sysctl.d - $STD tee /etc/sysctl.d/99-disable-ipv6.conf >/dev/null </dev/null </dev/null) || true - fi + # Fix Debian 13 LXC template bug where / is owned by nobody + # Only attempt in privileged containers (unprivileged cannot chown /) + if [[ "$(stat -c '%U' /)" != "root" ]]; then + (chown root:root / 2>/dev/null) || true + fi - for ((i = RETRY_NUM; i > 0; i--)); do - if [ "$(hostname -I)" != "" ]; then - break - fi - echo 1>&2 -en "${CROSS}${RD} No Network! " - sleep $RETRY_EVERY - done - if [ "$(hostname -I)" = "" ]; then - echo 1>&2 -e "\n${CROSS}${RD} No Network After $RETRY_NUM Tries${CL}" - echo -e "${NETWORK}Check Network Settings" - exit 121 - fi - rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED - systemctl disable -q --now systemd-networkd-wait-online.service - msg_ok "Set up Container OS" - #msg_custom "${CM}" "${GN}" "Network Connected: ${BL}$(hostname -I)" - msg_ok "Network Connected: ${BL}$(hostname -I)" - post_progress_to_api + for ((i = RETRY_NUM; i > 0; i--)); do + if [ "$(hostname -I)" != "" ]; then + break + fi + echo 1>&2 -en "${CROSS}${RD} No Network! " + sleep $RETRY_EVERY + done + if [ "$(hostname -I)" = "" ]; then + echo 1>&2 -e "\n${CROSS}${RD} No Network After $RETRY_NUM Tries${CL}" + echo -e "${NETWORK}Check Network Settings" + exit 121 + fi + rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED + systemctl disable -q --now systemd-networkd-wait-online.service + msg_ok "Set up Container OS" + #msg_custom "${CM}" "${GN}" "Network Connected: ${BL}$(hostname -I)" + msg_ok "Network Connected: ${BL}$(hostname -I)" + post_progress_to_api } # ------------------------------------------------------------------------------ @@ -148,62 +153,62 @@ setting_up_container() { # - Uses fatal() on DNS resolution failure for critical hosts # ------------------------------------------------------------------------------ network_check() { - set +e - trap - ERR - ipv4_connected=false - ipv6_connected=false - sleep 1 + set +e + trap - ERR + ipv4_connected=false + ipv6_connected=false + sleep 1 - # Check IPv4 connectivity to Google, Cloudflare & Quad9 DNS servers. - if ping -c 1 -W 1 1.1.1.1 &>/dev/null || ping -c 1 -W 1 8.8.8.8 &>/dev/null || ping -c 1 -W 1 9.9.9.9 &>/dev/null; then - msg_ok "IPv4 Internet Connected" - ipv4_connected=true - else - msg_error "IPv4 Internet Not Connected" - fi + # Check IPv4 connectivity to Google, Cloudflare & Quad9 DNS servers. + if ping -c 1 -W 1 1.1.1.1 &>/dev/null || ping -c 1 -W 1 8.8.8.8 &>/dev/null || ping -c 1 -W 1 9.9.9.9 &>/dev/null; then + msg_ok "IPv4 Internet Connected" + ipv4_connected=true + else + msg_error "IPv4 Internet Not Connected" + fi - # Check IPv6 connectivity to Google, Cloudflare & Quad9 DNS servers. - if ping6 -c 1 -W 1 2606:4700:4700::1111 &>/dev/null || ping6 -c 1 -W 1 2001:4860:4860::8888 &>/dev/null || ping6 -c 1 -W 1 2620:fe::fe &>/dev/null; then - msg_ok "IPv6 Internet Connected" - ipv6_connected=true - else - msg_error "IPv6 Internet Not Connected" - fi + # Check IPv6 connectivity to Google, Cloudflare & Quad9 DNS servers. + if ping6 -c 1 -W 1 2606:4700:4700::1111 &>/dev/null || ping6 -c 1 -W 1 2001:4860:4860::8888 &>/dev/null || ping6 -c 1 -W 1 2620:fe::fe &>/dev/null; then + msg_ok "IPv6 Internet Connected" + ipv6_connected=true + else + msg_error "IPv6 Internet Not Connected" + fi - # If both IPv4 and IPv6 checks fail, prompt the user - if [[ $ipv4_connected == false && $ipv6_connected == false ]]; then - read -r -p "No Internet detected, would you like to continue anyway? " prompt - if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then - echo -e "${INFO}${RD}Expect Issues Without Internet${CL}" - else - echo -e "${NETWORK}Check Network Settings" - exit 122 - fi - fi + # If both IPv4 and IPv6 checks fail, prompt the user + if [[ $ipv4_connected == false && $ipv6_connected == false ]]; then + read -r -p "No Internet detected, would you like to continue anyway? " prompt + if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then + echo -e "${INFO}${RD}Expect Issues Without Internet${CL}" + else + echo -e "${NETWORK}Check Network Settings" + exit 122 + fi + fi - # DNS resolution checks for GitHub-related domains (IPv4 and/or IPv6) - GIT_HOSTS=("github.com" "raw.githubusercontent.com" "api.github.com" "git.community-scripts.org") - GIT_STATUS="Git DNS:" - DNS_FAILED=false + # DNS resolution checks for GitHub-related domains (IPv4 and/or IPv6) + GIT_HOSTS=("github.com" "raw.githubusercontent.com" "api.github.com" "git.community-scripts.org") + GIT_STATUS="Git DNS:" + DNS_FAILED=false - for HOST in "${GIT_HOSTS[@]}"; do - RESOLVEDIP=$(getent hosts "$HOST" | awk '{ print $1 }' | grep -E '(^([0-9]{1,3}\.){3}[0-9]{1,3}$)|(^[a-fA-F0-9:]+$)' | head -n1) - if [[ -z "$RESOLVEDIP" ]]; then - GIT_STATUS+="$HOST:($DNSFAIL)" - DNS_FAILED=true - else - GIT_STATUS+=" $HOST:($DNSOK)" - fi - done + for HOST in "${GIT_HOSTS[@]}"; do + RESOLVEDIP=$(getent hosts "$HOST" | awk '{ print $1 }' | grep -E '(^([0-9]{1,3}\.){3}[0-9]{1,3}$)|(^[a-fA-F0-9:]+$)' | head -n1) + if [[ -z "$RESOLVEDIP" ]]; then + GIT_STATUS+="$HOST:($DNSFAIL)" + DNS_FAILED=true + else + GIT_STATUS+=" $HOST:($DNSOK)" + fi + done - if [[ "$DNS_FAILED" == true ]]; then - fatal "$GIT_STATUS" - else - msg_ok "$GIT_STATUS" - fi + if [[ "$DNS_FAILED" == true ]]; then + fatal "$GIT_STATUS" + else + msg_ok "$GIT_STATUS" + fi - set -e - trap 'error_handler' ERR + set -e + trap 'error_handler' ERR } # ============================================================================== @@ -220,161 +225,161 @@ network_check() { # - Detects hash mismatch, SSL errors, and generic apt failures # ------------------------------------------------------------------------------ apt_update_safe() { - if $STD apt-get update; then - return 0 - fi + if $STD apt-get update; then + return 0 + fi - local failed_mirror - failed_mirror=$(grep -m1 -oP '(?<=URIs: https?://)[^/]+' /etc/apt/sources.list.d/debian.sources 2>/dev/null || grep -m1 -oP '(?<=deb https?://)[^/]+' /etc/apt/sources.list 2>/dev/null || echo "unknown") - msg_warn "apt-get update failed (${failed_mirror}), trying alternate mirrors..." + local failed_mirror + failed_mirror=$(grep -m1 -oP '(?<=URIs: https?://)[^/]+' /etc/apt/sources.list.d/debian.sources 2>/dev/null || grep -m1 -oP '(?<=deb https?://)[^/]+' /etc/apt/sources.list 2>/dev/null || echo "unknown") + msg_warn "apt-get update failed (${failed_mirror}), trying alternate mirrors..." - local distro - distro=$(. /etc/os-release 2>/dev/null && echo "$ID" || echo "debian") + local distro + distro=$(. /etc/os-release 2>/dev/null && echo "$ID" || echo "debian") - local eu_mirrors us_mirrors ap_mirrors - if [[ "$distro" == "ubuntu" ]]; then - eu_mirrors="de.archive.ubuntu.com fr.archive.ubuntu.com se.archive.ubuntu.com nl.archive.ubuntu.com it.archive.ubuntu.com ch.archive.ubuntu.com mirrors.xtom.de" - us_mirrors="us.archive.ubuntu.com archive.ubuntu.com mirrors.edge.kernel.org mirror.csclub.uwaterloo.ca mirrors.ocf.berkeley.edu mirror.math.princeton.edu" - ap_mirrors="au.archive.ubuntu.com jp.archive.ubuntu.com kr.archive.ubuntu.com tw.archive.ubuntu.com mirror.aarnet.edu.au" - else - eu_mirrors="ftp.de.debian.org ftp.fr.debian.org ftp.nl.debian.org ftp.uk.debian.org ftp.ch.debian.org ftp.se.debian.org ftp.it.debian.org ftp.fau.de ftp.halifax.rwth-aachen.de debian.mirror.lrz.de mirror.init7.net debian.ethz.ch mirrors.dotsrc.org debian.mirrors.ovh.net" - us_mirrors="ftp.us.debian.org ftp.ca.debian.org debian.csail.mit.edu mirrors.ocf.berkeley.edu mirrors.wikimedia.org debian.osuosl.org mirror.cogentco.com" - ap_mirrors="ftp.au.debian.org ftp.jp.debian.org ftp.tw.debian.org ftp.kr.debian.org ftp.hk.debian.org ftp.sg.debian.org mirror.aarnet.edu.au mirror.nitc.ac.in" - fi + local eu_mirrors us_mirrors ap_mirrors + if [[ "$distro" == "ubuntu" ]]; then + eu_mirrors="de.archive.ubuntu.com fr.archive.ubuntu.com se.archive.ubuntu.com nl.archive.ubuntu.com it.archive.ubuntu.com ch.archive.ubuntu.com mirrors.xtom.de" + us_mirrors="us.archive.ubuntu.com archive.ubuntu.com mirrors.edge.kernel.org mirror.csclub.uwaterloo.ca mirrors.ocf.berkeley.edu mirror.math.princeton.edu" + ap_mirrors="au.archive.ubuntu.com jp.archive.ubuntu.com kr.archive.ubuntu.com tw.archive.ubuntu.com mirror.aarnet.edu.au" + else + eu_mirrors="ftp.de.debian.org ftp.fr.debian.org ftp.nl.debian.org ftp.uk.debian.org ftp.ch.debian.org ftp.se.debian.org ftp.it.debian.org ftp.fau.de ftp.halifax.rwth-aachen.de debian.mirror.lrz.de mirror.init7.net debian.ethz.ch mirrors.dotsrc.org debian.mirrors.ovh.net" + us_mirrors="ftp.us.debian.org ftp.ca.debian.org debian.csail.mit.edu mirrors.ocf.berkeley.edu mirrors.wikimedia.org debian.osuosl.org mirror.cogentco.com" + ap_mirrors="ftp.au.debian.org ftp.jp.debian.org ftp.tw.debian.org ftp.kr.debian.org ftp.hk.debian.org ftp.sg.debian.org mirror.aarnet.edu.au mirror.nitc.ac.in" + fi - local tz regional others - tz=$(cat /etc/timezone 2>/dev/null || echo "UTC") - case "$tz" in - Europe/* | Arctic/*) - regional="$eu_mirrors" - others="$us_mirrors $ap_mirrors" - ;; - America/*) - regional="$us_mirrors" - others="$eu_mirrors $ap_mirrors" - ;; - Asia/* | Australia/* | Pacific/*) - regional="$ap_mirrors" - others="$eu_mirrors $us_mirrors" - ;; - *) - regional="" - others="$eu_mirrors $us_mirrors $ap_mirrors" - ;; - esac + local tz regional others + tz=$(cat /etc/timezone 2>/dev/null || echo "UTC") + case "$tz" in + Europe/* | Arctic/*) + regional="$eu_mirrors" + others="$us_mirrors $ap_mirrors" + ;; + America/*) + regional="$us_mirrors" + others="$eu_mirrors $ap_mirrors" + ;; + Asia/* | Australia/* | Pacific/*) + regional="$ap_mirrors" + others="$eu_mirrors $us_mirrors" + ;; + *) + regional="" + others="$eu_mirrors $us_mirrors $ap_mirrors" + ;; + esac - echo 'Acquire::By-Hash "no";' >/etc/apt/apt.conf.d/99no-by-hash + echo 'Acquire::By-Hash "no";' >/etc/apt/apt.conf.d/99no-by-hash - _try_apt_mirror() { - local m=$1 - for src in /etc/apt/sources.list.d/debian.sources /etc/apt/sources.list; do - [[ -f "$src" ]] && sed -i "s|URIs: http[s]*://[^/]*/|URIs: http://${m}/|g; s|deb http[s]*://[^/]*/|deb http://${m}/|g" "$src" - done - rm -rf /var/lib/apt/lists/* - local out - out=$(apt-get update 2>&1) - if echo "$out" | grep -qi "hashsum\|hash sum"; then - msg_warn "Mirror ${m} failed (hash mismatch)" - return 1 - elif echo "$out" | grep -qi "SSL\|certificate"; then - msg_warn "Mirror ${m} failed (SSL/certificate error)" - return 1 - elif echo "$out" | grep -q "^E:"; then - msg_warn "Mirror ${m} failed (apt-get update error)" - return 1 - else - msg_ok "CDN set to ${m}: tests passed" - return 0 - fi - } + _try_apt_mirror() { + local m=$1 + for src in /etc/apt/sources.list.d/debian.sources /etc/apt/sources.list; do + [[ -f "$src" ]] && sed -i "s|URIs: http[s]*://[^/]*/|URIs: http://${m}/|g; s|deb http[s]*://[^/]*/|deb http://${m}/|g" "$src" + done + rm -rf /var/lib/apt/lists/* + local out + out=$(apt-get update 2>&1) + if echo "$out" | grep -qi "hashsum\|hash sum"; then + msg_warn "Mirror ${m} failed (hash mismatch)" + return 1 + elif echo "$out" | grep -qi "SSL\|certificate"; then + msg_warn "Mirror ${m} failed (SSL/certificate error)" + return 1 + elif echo "$out" | grep -q "^E:"; then + msg_warn "Mirror ${m} failed (apt-get update error)" + return 1 + else + msg_ok "CDN set to ${m}: tests passed" + return 0 + fi + } - _scan_reachable() { - local result="" - for m in $1; do - if timeout 2 bash -c "echo >/dev/tcp/$m/80" 2>/dev/null; then - result="$result $m" - fi - done - echo "$result" | xargs - } + _scan_reachable() { + local result="" + for m in $1; do + if timeout 2 bash -c "echo >/dev/tcp/$m/80" 2>/dev/null; then + result="$result $m" + fi + done + echo "$result" | xargs + } - local apt_ok=false + local apt_ok=false - # Phase 1: Scan global mirrors first (independent of local CDN issues) - local others_ok - others_ok=$(_scan_reachable "$others") - local others_pick - others_pick=$(printf '%s\n' $others_ok | shuf | head -3 | xargs) + # Phase 1: Scan global mirrors first (independent of local CDN issues) + local others_ok + others_ok=$(_scan_reachable "$others") + local others_pick + others_pick=$(printf '%s\n' $others_ok | shuf | head -3 | xargs) - for mirror in $others_pick; do - msg_custom "${INFO}" "${YW}" "Attempting mirror: ${mirror}" - if _try_apt_mirror "$mirror"; then - apt_ok=true - break - fi - done + for mirror in $others_pick; do + msg_custom "${INFO}" "${YW}" "Attempting mirror: ${mirror}" + if _try_apt_mirror "$mirror"; then + apt_ok=true + break + fi + done - # Phase 2: Try primary mirror - if [[ "$apt_ok" != true ]]; then - local primary - if [[ "$distro" == "ubuntu" ]]; then - primary="archive.ubuntu.com" - else - primary="ftp.debian.org" - fi - if timeout 2 bash -c "echo >/dev/tcp/$primary/80" 2>/dev/null; then - msg_custom "${INFO}" "${YW}" "Attempting mirror: ${primary}" - if _try_apt_mirror "$primary"; then - apt_ok=true - fi - fi - fi + # Phase 2: Try primary mirror + if [[ "$apt_ok" != true ]]; then + local primary + if [[ "$distro" == "ubuntu" ]]; then + primary="archive.ubuntu.com" + else + primary="ftp.debian.org" + fi + if timeout 2 bash -c "echo >/dev/tcp/$primary/80" 2>/dev/null; then + msg_custom "${INFO}" "${YW}" "Attempting mirror: ${primary}" + if _try_apt_mirror "$primary"; then + apt_ok=true + fi + fi + fi - # Phase 3: Fall back to regional mirrors - if [[ "$apt_ok" != true ]]; then - local regional_ok - regional_ok=$(_scan_reachable "$regional") - local regional_pick - regional_pick=$(printf '%s\n' $regional_ok | shuf | head -3 | xargs) + # Phase 3: Fall back to regional mirrors + if [[ "$apt_ok" != true ]]; then + local regional_ok + regional_ok=$(_scan_reachable "$regional") + local regional_pick + regional_pick=$(printf '%s\n' $regional_ok | shuf | head -3 | xargs) - for mirror in $regional_pick; do - msg_custom "${INFO}" "${YW}" "Attempting mirror: ${mirror}" - if _try_apt_mirror "$mirror"; then - apt_ok=true - break - fi - done - fi + for mirror in $regional_pick; do + msg_custom "${INFO}" "${YW}" "Attempting mirror: ${mirror}" + if _try_apt_mirror "$mirror"; then + apt_ok=true + break + fi + done + fi - # Phase 4: All auto mirrors failed, prompt user - if [[ "$apt_ok" != true ]]; then - msg_warn "Multiple mirrors failed (possible CDN synchronization issue)." - if [[ "$distro" == "ubuntu" ]]; then - msg_warn "Find Ubuntu mirrors at: https://launchpad.net/ubuntu/+archivemirrors" - else - msg_warn "Find Debian mirrors at: https://www.debian.org/mirror/list" - fi - local custom_mirror - while true; do - read -rp " Enter a mirror hostname (or 'skip' to abort): " custom_mirror /etc/apt/apt.conf.d/00aptproxy - cat </usr/local/bin/apt-proxy-detect.sh + msg_info "Updating Container OS" + if [[ "$CACHER" == "yes" ]]; then + echo 'Acquire::http::Proxy-Auto-Detect "/usr/local/bin/apt-proxy-detect.sh";' >/etc/apt/apt.conf.d/00aptproxy + local _proxy_raw="${CACHER_IP}" + local _proxy_host _proxy_port _proxy_url + # Parse host and port from URL or plain IP/hostname + _proxy_host=$(echo "$_proxy_raw" | sed -e 's|https\?://||' -e 's|/.*||' | cut -d: -f1) + _proxy_port=$(echo "$_proxy_raw" | sed -e 's|https\?://||' -e 's|/.*||' | cut -s -d: -f2) + if [[ "$_proxy_raw" =~ ^https?:// ]]; then + # Full URL provided — use as-is for proxy output, extract port for nc check + _proxy_url="$_proxy_raw" + _proxy_port="${_proxy_port:-80}" + else + # Legacy: plain IP or hostname — default to http + port 3142 + _proxy_port="${_proxy_port:-3142}" + _proxy_url="http://${_proxy_raw}:${_proxy_port}" + fi + cat </usr/local/bin/apt-proxy-detect.sh #!/bin/bash -if nc -w1 -z "${CACHER_IP}" 3142; then - echo -n "http://${CACHER_IP}:3142" +if nc -w1 -z "${_proxy_host}" ${_proxy_port}; then + echo -n "${_proxy_url}" else echo -n "DIRECT" fi EOF - chmod +x /usr/local/bin/apt-proxy-detect.sh - fi - apt_update_safe - $STD apt-get -o Dpkg::Options::="--force-confold" -y dist-upgrade - rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED - msg_ok "Updated Container OS" - post_progress_to_api + chmod +x /usr/local/bin/apt-proxy-detect.sh + fi + apt_update_safe + $STD apt-get -o Dpkg::Options::="--force-confold" -y dist-upgrade + rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED + msg_ok "Updated Container OS" + post_progress_to_api - source "$(dirname "${BASH_SOURCE[0]}")/tools.func" + local tools_content + local _tools_local + _tools_local="$(dirname "${BASH_SOURCE[0]}")/tools.func" + if [[ -f "$_tools_local" ]]; then + tools_content=$(cat "$_tools_local") || { + msg_error "Failed to load tools.func from local" + exit 115 + } + else + tools_content=$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func) || { + msg_error "Failed to download tools.func" + exit 115 + } + fi + source /dev/stdin <<<"$tools_content" + if ! declare -f fetch_and_deploy_gh_release >/dev/null 2>&1; then + msg_error "tools.func loaded but incomplete — missing expected functions" + exit 115 + fi } # ============================================================================== @@ -428,26 +465,26 @@ EOF # - Configures TERM environment variable for better terminal support # ------------------------------------------------------------------------------ motd_ssh() { - # Set terminal to 256-color mode - grep -qxF "export TERM='xterm-256color'" /root/.bashrc || echo "export TERM='xterm-256color'" >>/root/.bashrc + # Set terminal to 256-color mode + grep -qxF "export TERM='xterm-256color'" /root/.bashrc || echo "export TERM='xterm-256color'" >>/root/.bashrc - PROFILE_FILE="/etc/profile.d/00_lxc-details.sh" - echo "echo -e \"\"" >"$PROFILE_FILE" - echo -e "echo -e \"${BOLD}${APPLICATION} LXC Container${CL}"\" >>"$PROFILE_FILE" - echo -e "echo -e \"${TAB}${GATEWAY}${YW} Provided by: ${GN}community-scripts ORG ${YW}| GitHub: ${GN}https://github.com/community-scripts/ProxmoxVE${CL}\"" >>"$PROFILE_FILE" - echo "echo \"\"" >>"$PROFILE_FILE" - echo -e "echo -e \"${TAB}${OS}${YW} OS: ${GN}\$(grep ^NAME /etc/os-release | cut -d= -f2 | tr -d '\"') - Version: \$(grep ^VERSION_ID /etc/os-release | cut -d= -f2 | tr -d '\"')${CL}\"" >>"$PROFILE_FILE" - echo -e "echo -e \"${TAB}${HOSTNAME}${YW} Hostname: ${GN}\$(hostname)${CL}\"" >>"$PROFILE_FILE" - echo -e "echo -e \"${TAB}${INFO}${YW} IP Address: ${GN}\$(hostname -I | awk '{print \$1}')${CL}\"" >>"$PROFILE_FILE" + PROFILE_FILE="/etc/profile.d/00_lxc-details.sh" + echo "echo -e \"\"" >"$PROFILE_FILE" + echo -e "echo -e \"${BOLD}${APPLICATION} LXC Container${CL}"\" >>"$PROFILE_FILE" + echo -e "echo -e \"${TAB}${GATEWAY}${YW} Provided by: ${GN}community-scripts ORG ${YW}| GitHub: ${GN}https://github.com/community-scripts/ProxmoxVE${CL}\"" >>"$PROFILE_FILE" + echo "echo \"\"" >>"$PROFILE_FILE" + echo -e "echo -e \"${TAB}${OS}${YW} OS: ${GN}\$(grep ^NAME /etc/os-release | cut -d= -f2 | tr -d '\"') - Version: \$(grep ^VERSION_ID /etc/os-release | cut -d= -f2 | tr -d '\"')${CL}\"" >>"$PROFILE_FILE" + echo -e "echo -e \"${TAB}${HOSTNAME}${YW} Hostname: ${GN}\$(hostname)${CL}\"" >>"$PROFILE_FILE" + echo -e "echo -e \"${TAB}${INFO}${YW} IP Address: ${GN}\$(hostname -I | awk '{print \$1}')${CL}\"" >>"$PROFILE_FILE" - # Disable default MOTD scripts - chmod -x /etc/update-motd.d/* + # Disable default MOTD scripts + chmod -x /etc/update-motd.d/* - if [[ "${SSH_ROOT}" == "yes" ]]; then - sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/g" /etc/ssh/sshd_config - systemctl restart sshd - fi - post_progress_to_api + if [[ "${SSH_ROOT}" == "yes" ]]; then + sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/g" /etc/ssh/sshd_config + systemctl restart sshd + fi + post_progress_to_api } # ============================================================================== @@ -464,27 +501,27 @@ motd_ssh() { # - Sets proper permissions on SSH directories and key files # ------------------------------------------------------------------------------ customize() { - if [[ "$PASSWORD" == "" ]]; then - msg_info "Customizing Container" - GETTY_OVERRIDE="/etc/systemd/system/container-getty@1.service.d/override.conf" - mkdir -p "$(dirname "$GETTY_OVERRIDE")" - cat <"$GETTY_OVERRIDE" + if [[ "$PASSWORD" == "" ]]; then + msg_info "Customizing Container" + GETTY_OVERRIDE="/etc/systemd/system/container-getty@1.service.d/override.conf" + mkdir -p "$(dirname "$GETTY_OVERRIDE")" + cat <"$GETTY_OVERRIDE" [Service] ExecStart= ExecStart=-/sbin/agetty --autologin root --noclear --keep-baud tty%I 115200,38400,9600 \$TERM EOF - systemctl daemon-reload - systemctl restart "$(basename "$(dirname "$GETTY_OVERRIDE")" | sed 's/\.d//')" - msg_ok "Customized Container" - fi - echo "bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/${app}.sh)\"" >/usr/bin/update - chmod +x /usr/bin/update + systemctl daemon-reload + systemctl restart "$(basename "$(dirname "$GETTY_OVERRIDE")" | sed 's/\.d//')" + msg_ok "Customized Container" + fi + echo "bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/${app}.sh)\"" >/usr/bin/update + chmod +x /usr/bin/update - if [[ -n "${SSH_AUTHORIZED_KEY}" ]]; then - mkdir -p /root/.ssh - echo "${SSH_AUTHORIZED_KEY}" >/root/.ssh/authorized_keys - chmod 700 /root/.ssh - chmod 600 /root/.ssh/authorized_keys - fi - post_progress_to_api + if [[ -n "${SSH_AUTHORIZED_KEY}" ]]; then + mkdir -p /root/.ssh + echo "${SSH_AUTHORIZED_KEY}" >/root/.ssh/authorized_keys + chmod 700 /root/.ssh + chmod 600 /root/.ssh/authorized_keys + fi + post_progress_to_api } diff --git a/scripts/core/tools.func b/scripts/core/tools.func index 52c6cb3..eb64a9a 100644 --- a/scripts/core/tools.func +++ b/scripts/core/tools.func @@ -1117,15 +1117,90 @@ is_package_installed() { fi } +# ------------------------------------------------------------------------------ +# validate_github_token() +# Checks a GitHub token via the /user endpoint. +# Prints a status message and returns: +# 0 - token is valid +# 1 - token is invalid / expired (HTTP 401) +# 2 - token has no public repo scope (HTTP 200 but missing scope) +# 3 - network/API error +# Also reports expiry date if the token carries an x-oauth-expiry header. +# ------------------------------------------------------------------------------ +validate_github_token() { + local token="${1:-${GITHUB_TOKEN:-}}" + [[ -z "$token" ]] && return 3 + + local response headers http_code expiry_date scopes + headers=$(mktemp) + response=$(curl -sSL -w "%{http_code}" \ + -D "$headers" \ + -o /dev/null \ + -H "Authorization: Bearer $token" \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + "https://api.github.com/user" 2>/dev/null) || { + rm -f "$headers" + return 3 + } + http_code="$response" + + # Read expiry header (fine-grained PATs carry this) + expiry_date=$(grep -i '^github-authentication-token-expiration:' "$headers" | + sed 's/.*: *//' | tr -d '\r\n' || true) + # Read token scopes (classic PATs) + scopes=$(grep -i '^x-oauth-scopes:' "$headers" | + sed 's/.*: *//' | tr -d '\r\n' || true) + rm -f "$headers" + + case "$http_code" in + 200) + if [[ -n "$expiry_date" ]]; then + msg_ok "GitHub token is valid (expires: $expiry_date)." + else + msg_ok "GitHub token is valid (no expiry / fine-grained PAT)." + fi + # Warn if classic PAT has no public_repo scope + if [[ -n "$scopes" && "$scopes" != *"public_repo"* && "$scopes" != *"repo"* ]]; then + msg_warn "Token has no 'public_repo' scope - private repos and some release APIs may fail." + return 2 + fi + return 0 + ;; + 401) + msg_error "GitHub token is invalid or expired (HTTP 401)." + return 1 + ;; + *) + msg_warn "GitHub token validation returned HTTP $http_code - treating as valid." + return 0 + ;; + esac +} + # ------------------------------------------------------------------------------ # Prompt user to enter a GitHub Personal Access Token (PAT) interactively # Returns 0 if a valid token was provided, 1 otherwise # ------------------------------------------------------------------------------ prompt_for_github_token() { if [[ ! -t 0 ]]; then + # Non-interactive: pick up var_github_token if set (from default.vars / app.vars / env) + if [[ -z "${GITHUB_TOKEN:-}" && -n "${var_github_token:-}" ]]; then + export GITHUB_TOKEN="${var_github_token}" + msg_ok "GitHub token loaded from var_github_token." + return 0 + fi return 1 fi + # Prefer var_github_token when already set and no interactive override needed + if [[ -z "${GITHUB_TOKEN:-}" && -n "${var_github_token:-}" ]]; then + export GITHUB_TOKEN="${var_github_token}" + msg_ok "GitHub token loaded from var_github_token." + validate_github_token || true + return 0 + fi + local reply read -rp "${TAB}Would you like to enter a GitHub Personal Access Token (PAT)? [y/N]: " reply reply="${reply:-n}" @@ -1147,10 +1222,16 @@ prompt_for_github_token() { msg_warn "Token must not contain spaces. Please try again." continue fi - break + # Validate before accepting + export GITHUB_TOKEN="$token" + if validate_github_token "$token"; then + break + else + msg_warn "Please enter a valid token, or press Ctrl+C to abort." + unset GITHUB_TOKEN + fi done - export GITHUB_TOKEN="$token" msg_ok "GitHub token has been set." return 0 } @@ -2860,7 +2941,7 @@ function fetch_and_deploy_codeberg_release() { while ((attempt < ${#api_timeouts[@]})); do resp=$(curl --connect-timeout 10 --max-time "${api_timeouts[$attempt]}" -fsSL -w "%{http_code}" -o /tmp/codeberg_rel.json "$api_url") && success=true && break - ((attempt++)) + attempt=$((attempt + 1)) if ((attempt < ${#api_timeouts[@]})); then msg_warn "API request timed out after ${api_timeouts[$((attempt - 1))]}s, retrying... (attempt $((attempt + 1))/${#api_timeouts[@]})" fi @@ -3370,7 +3451,8 @@ function fetch_and_deploy_gh_release() { if prompt_for_github_token; then header=(-H "Authorization: token $GITHUB_TOKEN") retry_delay=2 - attempt=0 + attempt=1 + continue fi fi else @@ -4458,7 +4540,7 @@ function setup_hwaccel() { local in_ct="${CTTYPE:-0}" - # ═════════════════════════════════════════════════════�����═════════════════════ + # ═══════════════════════════════════════════════════════════════════════════ # Process Selected GPUs # ═══════════════════════════════════════════════════════════════════════════ for idx in "${SELECTED_INDICES[@]}"; do diff --git a/scripts/tools/addon/arcane.sh b/scripts/tools/addon/arcane.sh new file mode 100644 index 0000000..b63b830 --- /dev/null +++ b/scripts/tools/addon/arcane.sh @@ -0,0 +1,220 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: summoningpixels +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/getarcaneapp/arcane +if ! command -v curl &>/dev/null; then + printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2 + apt-get update >/dev/null 2>&1 + apt-get install -y curl >/dev/null 2>&1 +fi +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) 2>/dev/null || true +declare -f init_tool_telemetry &>/dev/null && init_tool_telemetry "arcane" "addon" + +# Enable error handling +set -Eeuo pipefail +trap 'error_handler' ERR + +# ============================================================================== +# CONFIGURATION +# ============================================================================== +APP="Arcane" +APP_TYPE="addon" +INSTALL_PATH="/opt/arcane" +COMPOSE_FILE="${INSTALL_PATH}/compose.yaml" +ENV_FILE="${INSTALL_PATH}/.env" +DEFAULT_PORT=3552 + +# Initialize all core functions (colors, formatting, icons, STD mode) +load_functions + +# ============================================================================== +# HEADER +# ============================================================================== +function header_info { + clear + cat <<"EOF" + ___ ____ _________ _ ________ + / | / __ \/ ____/ | / | / / ____/ + / /| | / /_/ / / / /| | / |/ / __/ + / ___ |/ _, _/ /___/ ___ |/ /| / /___ +/_/ |_/_/ |_|\____/_/ |_/_/ |_/_____/ + +EOF +} + +# ============================================================================== +# UNINSTALL +# ============================================================================== +function uninstall() { + msg_info "Uninstalling ${APP}" + + if [[ -f "$COMPOSE_FILE" ]]; then + msg_info "Stopping and removing Docker containers" + cd "$INSTALL_PATH" + $STD docker compose down --volumes --remove-orphans + msg_ok "Stopped and removed Docker containers" + fi + + rm -rf "$INSTALL_PATH" + rm -f "/usr/local/bin/update_arcane" + msg_ok "${APP} has been uninstalled" +} + +# ============================================================================== +# UPDATE +# ============================================================================== +function update() { + msg_info "Pulling latest ${APP} image" + cd "$INSTALL_PATH" + $STD docker compose pull + msg_ok "Pulled latest image" + + msg_info "Restarting ${APP}" + $STD docker compose up -d --remove-orphans + msg_ok "Restarted ${APP}" + + msg_ok "Updated successfully" + exit +} + +# ============================================================================== +# CHECK DOCKER +# ============================================================================== +function check_docker() { + if ! command -v docker &>/dev/null; then + msg_error "Docker is not installed. This script requires an existing Docker LXC. Exiting." + exit 10 + fi + if ! docker compose version &>/dev/null; then + msg_error "Docker Compose plugin is not available. Please install it before running this script. Exiting." + exit 10 + fi + msg_ok "Docker $(docker --version | cut -d' ' -f3 | tr -d ',') and Docker Compose are available" +} + +# ============================================================================== +# INSTALL +# ============================================================================== +function install() { + check_docker + + msg_info "Creating install directory" + mkdir -p "$INSTALL_PATH" + msg_ok "Created ${INSTALL_PATH}" + + # Generate secrets and config values + local ENCRYPTION_KEY JWT_SECRET PROJ_DIR + ENCRYPTION_KEY=$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | head -c32) + JWT_SECRET=$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | head -c32) + PROJ_DIR="/etc/arcane/projects" + + msg_info "Creating stacks directory" + mkdir -p "$PROJ_DIR" + msg_ok "Created ${PROJ_DIR}" + + msg_info "Downloading Docker Compose file" + curl -fsSL "https://raw.githubusercontent.com/getarcaneapp/arcane/refs/heads/main/docker/examples/compose.basic.yaml" -o "$COMPOSE_FILE" + msg_ok "Downloaded Docker Compose file" + + msg_info "Downloading .env file" + curl -fsSL "https://raw.githubusercontent.com/getarcaneapp/arcane/refs/heads/main/.env.example" -o "$ENV_FILE" + chmod 600 "$ENV_FILE" + msg_ok "Downloaded .env file" + + msg_info "Configuring compose and env files" + sed -i '/^[[:space:]]*#/!s|/host/path/to/projects|'"$PROJ_DIR"'|g' "$COMPOSE_FILE" + sed -i '/^[[:space:]]*#/!s|ENCRYPTION_KEY=.*|ENCRYPTION_KEY='"$ENCRYPTION_KEY"'|g' "$COMPOSE_FILE" + sed -i '/^[[:space:]]*#/!s|JWT_SECRET=.*|JWT_SECRET='"$JWT_SECRET"'|g' "$COMPOSE_FILE" + sed -i '/^[[:space:]]*#/!s|APP_URL=.*|APP_URL=http://localhost:'"$DEFAULT_PORT"'|g' "$ENV_FILE" + sed -i '/^[[:space:]]*#/!s|ENCRYPTION_KEY=.*|#&|g' "$ENV_FILE" + sed -i '/^[[:space:]]*#/!s|JWT_SECRET=.*|#&|g' "$ENV_FILE" + msg_ok "Configured compose and env files" + + msg_info "Starting ${APP}" + cd "$INSTALL_PATH" + $STD docker compose up -d + msg_ok "Started ${APP}" + + # Create update script + msg_info "Creating update script" + cat <<'UPDATEEOF' >/usr/local/bin/update_arcane +#!/usr/bin/env bash +# Arcane Update Script +type=update bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/arcane.sh)" +UPDATEEOF + chmod +x /usr/local/bin/update_arcane + msg_ok "Created update script (/usr/local/bin/update_arcane)" + + echo "" + msg_ok "${APP} is reachable at: ${BL}http://${LOCAL_IP}:${DEFAULT_PORT}${CL}" + echo "" + echo -e "Arcane Credentials" + echo -e "==================" + echo -e "User: arcane" + echo -e "Password: arcane-admin" + echo "" + msg_warn "On first access, you'll be prompted to change your password." +} + +# ============================================================================== +# MAIN +# ============================================================================== + +# Handle type=update (called from update script) +if [[ "${type:-}" == "update" ]]; then + header_info + if [[ -f "$COMPOSE_FILE" ]]; then + update + else + msg_error "${APP} is not installed. Nothing to update." + exit 233 + fi + exit 0 +fi + +header_info +get_lxc_ip + +# Check if already installed +if [[ -f "$COMPOSE_FILE" ]]; then + msg_warn "${APP} is already installed." + echo "" + + echo -n "${TAB}Uninstall ${APP}? (y/N): " + read -r uninstall_prompt + if [[ "${uninstall_prompt,,}" =~ ^(y|yes)$ ]]; then + uninstall + exit 0 + fi + + echo -n "${TAB}Update ${APP}? (y/N): " + read -r update_prompt + if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then + update + exit 0 + fi + + msg_warn "No action selected. Exiting." + exit 0 +fi + +# Fresh installation +msg_warn "${APP} is not installed." +echo "" +echo -e "${TAB}${INFO} This will install:" +echo -e "${TAB} - Arcane (via Docker Compose)" +echo "" + +echo -n "${TAB}Install ${APP}? (y/N): " +read -r install_prompt +if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then + install +else + msg_warn "Installation cancelled. Exiting." + exit 0 +fi diff --git a/server.js b/server.js index edfb108..2926b47 100644 --- a/server.js +++ b/server.js @@ -79,6 +79,7 @@ const handle = app.getRequestHandler(); * @property {boolean} [isShell] * @property {boolean} [isBackup] * @property {boolean} [isClone] + * @property {boolean} [executeInContainer] * @property {string} [containerId] * @property {string} [storage] * @property {string} [backupStorage] @@ -317,7 +318,7 @@ class ScriptExecutionHandler { * @param {WebSocketMessage} message */ async handleMessage(ws, message) { - const { action, scriptPath, executionId, input, mode, server, isUpdate, isShell, isBackup, isClone, containerId, storage, backupStorage, cloneCount, hostnames, containerType, envVars } = message; + const { action, scriptPath, executionId, input, mode, server, isUpdate, isShell, isBackup, isClone, executeInContainer, containerId, storage, backupStorage, cloneCount, hostnames, containerType, envVars } = message; switch (action) { case 'start': @@ -332,9 +333,11 @@ class ScriptExecutionHandler { } else if (isBackup && containerId && storage) { await this.startBackupExecution(ws, containerId, executionId, storage, mode, resolved); } else if (isUpdate && containerId) { - await this.startUpdateExecution(ws, containerId, executionId, mode, resolved, backupStorage); + await this.startUpdateExecution(ws, containerId, executionId, mode, resolved, backupStorage, envVars); } else if (isShell && containerId) { await this.startShellExecution(ws, containerId, executionId, mode, resolved, containerType); + } else if (executeInContainer && containerId) { + await this.startInContainerScriptExecution(ws, scriptPath, executionId, mode, resolved, envVars, containerId, containerType ?? 'lxc'); } else { await this.startScriptExecution(ws, scriptPath, executionId, mode, resolved, envVars); } @@ -552,6 +555,171 @@ class ScriptExecutionHandler { } } + + /** + * Execute a script INSIDE a container via `pct exec` (LXC) or `qm guest exec` (VM). + * For SSH mode the scripts folder is already transferred to /tmp/scripts on the PVE host by + * startSSHScriptExecution; we re-use that mechanism and then run the script inside the CT. + * For local mode we pipe the script through `pct exec`. + * + * @param {ExtendedWebSocket} ws + * @param {string} scriptPath + * @param {string} executionId + * @param {string} mode + * @param {ServerInfo|null} server + * @param {Object} envVars + * @param {string} containerId + * @param {'lxc'|'vm'} containerType + */ + async startInContainerScriptExecution(ws, scriptPath, executionId, mode = 'local', server = null, envVars = {}, containerId, containerType = 'lxc') { + /** @type {number|null} */ + let installationId = null; + try { + if (this.activeExecutions.has(executionId)) { + this.sendMessage(ws, { type: 'error', data: 'Script execution already running', timestamp: Date.now() }); + return; + } + + const scriptName = scriptPath.split('/').pop() ?? scriptPath.split('\\').pop() ?? 'Unknown Script'; + const serverId = server ? (server.id ?? null) : null; + installationId = await this.createInstallationRecord(scriptName, scriptPath, mode, serverId); + + // Build env-var export prefix + const envExports = Object.entries(envVars ?? {}) + .map(([k, v]) => `export ${k}=${JSON.stringify(String(v))}`) + .join('; '); + const envPrefix = envExports ? `${envExports}; ` : ''; + + if (mode === 'ssh' && server) { + // Transfer scripts folder to PVE host, then exec inside container + const sshService = getSSHExecutionService(); + this.sendMessage(ws, { type: 'start', data: `Connecting to ${server.ip}…`, timestamp: Date.now() }); + + const relScript = scriptPath.replace(/^scripts[/\\]/, ''); + const remoteScript = `/tmp/scripts/${relScript}`; + + // Transfer scripts folder silently — suppress verbose rsync file listing + this.sendMessage(ws, { type: 'output', data: 'Syncing scripts…\r\n', timestamp: Date.now() }); + await sshService.transferScriptsFolder(server, + () => {}, // suppress rsync stdout (verbose file listing) + (/** @type {string} */ err) => { + // Ignore harmless SSH host-key / known-hosts notices from rsync stderr + if (!err.includes('Warning:') && !err.includes('Permanently added')) { + this.sendMessage(ws, { type: 'error', data: err, timestamp: Date.now() }); + } + } + ); + + let inContainerCmd; + + if (containerType === 'lxc') { + // For LXC we must copy the script from host (/tmp/scripts/...) into the container first. + // Otherwise pct exec tries to run a host path that does not exist inside the CT. + const remoteTarget = `/tmp/${scriptName}`; + const pushCmd = `pct push ${containerId} ${remoteScript} ${remoteTarget}`; + + // Run pct push silently (no terminal output needed for this bookkeeping step) + await new Promise((resolve, reject) => { + sshService.executeCommand(server, pushCmd, + () => {}, // suppress push output + () => {}, // suppress push stderr + (/** @type {number} */ code) => { + if (code === 0) resolve(true); + else reject(new Error(`pct push failed with exit code ${code}`)); + }, + ); + }); + + inContainerCmd = `pct exec ${containerId} -- bash -c "chmod +x ${remoteTarget}; ${envPrefix}bash ${remoteTarget}"`; + } else { + // VM execution currently relies on guest exec and assumes script path exists in guest context. + inContainerCmd = `qm guest exec ${containerId} -- bash -c "${envPrefix}bash ${remoteScript}"`; + } + + this.activeExecutions.set(executionId, { process: null, ws, installationId, outputBuffer: '' }); + + // executeCommand resolves immediately with the PTY process — store it so + // interactive input (y/n prompts etc.) can be forwarded via sendInputToProcess. + const execResult = await sshService.executeCommand(server, inContainerCmd, + (/** @type {string} */ data) => { + const execution = this.activeExecutions.get(executionId); + if (execution) execution.outputBuffer += data; + this.sendMessage(ws, { type: 'output', data, timestamp: Date.now() }); + }, + (/** @type {string} */ err) => { + this.sendMessage(ws, { type: 'error', data: err, timestamp: Date.now() }); + }, + async (/** @type {number} */ exitCode) => { + const execution = this.activeExecutions.get(executionId); + if (installationId && execution) { + await this.updateInstallationRecord(installationId, { + status: exitCode === 0 ? 'success' : 'failed', + output_log: execution.outputBuffer + }); + } + this.sendMessage(ws, { type: 'end', data: `Finished with code: ${exitCode}`, timestamp: Date.now() }); + this.activeExecutions.delete(executionId); + } + ); + + // Attach the real PTY process so keyboard input can reach interactive prompts + const storedExec = this.activeExecutions.get(executionId); + if (storedExec && execResult && /** @type {any} */(execResult).process) { + storedExec.process = /** @type {any} */(execResult).process; + } + return; + } + + // Local mode: pipe the script content into `pct exec -- bash` + const scriptsDir = join(process.cwd(), 'scripts'); + const resolvedPath = resolve(scriptPath); + if (!resolvedPath.startsWith(resolve(scriptsDir))) { + this.sendMessage(ws, { type: 'error', data: 'Script path outside scripts directory', timestamp: Date.now() }); + if (installationId) await this.updateInstallationRecord(installationId, { status: 'failed' }); + return; + } + + const bashCmd = `${envPrefix}bash ${resolvedPath}`; + const args = containerType === 'lxc' + ? ['exec', containerId, '--', 'bash', '-c', bashCmd] + : ['guest', 'exec', containerId, '--', 'bash', '-c', bashCmd]; + const cmd = containerType === 'lxc' ? 'pct' : 'qm'; + + const childProcess = ptySpawn(cmd, args, { + cwd: scriptsDir, + name: 'xterm-256color', + cols: 80, + rows: 24, + env: { ...process.env, TERM: 'xterm-256color' } + }); + + this.activeExecutions.set(executionId, { process: childProcess, ws, installationId, outputBuffer: '' }); + this.sendMessage(ws, { type: 'start', data: `Executing inside container ${containerId}…`, timestamp: Date.now() }); + + childProcess.onData((data) => { + const execution = this.activeExecutions.get(executionId); + if (execution) execution.outputBuffer += data; + this.sendMessage(ws, { type: 'output', data, timestamp: Date.now() }); + }); + + childProcess.onExit(async (e) => { + const execution = this.activeExecutions.get(executionId); + if (installationId && execution) { + await this.updateInstallationRecord(installationId, { + status: e.exitCode === 0 ? 'success' : 'failed', + output_log: execution.outputBuffer + }); + } + this.sendMessage(ws, { type: 'end', data: `Script finished with code: ${e.exitCode}`, timestamp: Date.now() }); + this.activeExecutions.delete(executionId); + }); + + } catch (error) { + this.sendMessage(ws, { type: 'error', data: `Failed to start in-container script: ${error instanceof Error ? error.message : String(error)}`, timestamp: Date.now() }); + if (installationId) await this.updateInstallationRecord(installationId, { status: 'failed' }); + } + } + /** * Start SSH script execution * @param {ExtendedWebSocket} ws @@ -1303,7 +1471,7 @@ class ScriptExecutionHandler { * @param {ServerInfo|undefined} server * @param {string} [backupStorage] - Optional storage to backup to before update */ - async startUpdateExecution(ws, containerId, executionId, mode = 'local', server = undefined, backupStorage = undefined) { + async startUpdateExecution(ws, containerId, executionId, mode = 'local', server = undefined, backupStorage = undefined, envVars = {}) { try { // If backup storage is provided, run backup first if (backupStorage && mode === 'ssh' && server) { @@ -1364,9 +1532,9 @@ class ScriptExecutionHandler { }); if (mode === 'ssh' && server) { - await this.startSSHUpdateExecution(ws, containerId, executionId, server); + await this.startSSHUpdateExecution(ws, containerId, executionId, server, envVars); } else { - await this.startLocalUpdateExecution(ws, containerId, executionId); + await this.startLocalUpdateExecution(ws, containerId, executionId, envVars); } } catch (error) { @@ -1384,7 +1552,7 @@ class ScriptExecutionHandler { * @param {string} containerId * @param {string} executionId */ - async startLocalUpdateExecution(ws, containerId, executionId) { + async startLocalUpdateExecution(ws, containerId, executionId, envVars = {}) { const { spawn } = await import('node-pty'); // Create a shell process that will run pct enter and then update @@ -1411,9 +1579,24 @@ class ScriptExecutionHandler { }); }); + // Build env export commands (e.g. for PHS_SILENT=1) + const envExports = Object.entries(envVars) + .filter(([key]) => key.startsWith('PHS_') || key.startsWith('var_')) + .map(([key, value]) => { + const safeValue = String(value) + .replace(/\\/g, '\\\\') + .replace(/"/g, '\\"'); + return `export ${key}="${safeValue}"`; + }) + .join('; '); + // Send the update command after a delay to ensure we're in the container setTimeout(() => { - childProcess.write('update\n'); + if (envExports) { + childProcess.write(`${envExports}; update\n`); + } else { + childProcess.write('update\n'); + } }, 4000); // Handle process exit @@ -1435,7 +1618,7 @@ class ScriptExecutionHandler { * @param {string} executionId * @param {ServerInfo} server */ - async startSSHUpdateExecution(ws, containerId, executionId, server) { + async startSSHUpdateExecution(ws, containerId, executionId, server, envVars = {}) { const sshService = getSSHExecutionService(); try { @@ -1476,9 +1659,24 @@ class ScriptExecutionHandler { ws }); + // Build env export commands (e.g. for PHS_SILENT=1) + const envExports = Object.entries(envVars) + .filter(([key]) => key.startsWith('PHS_') || key.startsWith('var_')) + .map(([key, value]) => { + const safeValue = String(value) + .replace(/\\/g, '\\\\') + .replace(/"/g, '\\"'); + return `export ${key}="${safeValue}"`; + }) + .join('; '); + // Send the update command after a delay to ensure we're in the container setTimeout(() => { - /** @type {any} */ (execution).process.write('update\n'); + if (envExports) { + /** @type {any} */ (execution).process.write(`${envExports}; update\n`); + } else { + /** @type {any} */ (execution).process.write('update\n'); + } }, 4000); } catch (error) { diff --git a/src/app/_components/AppearanceButton.tsx b/src/app/_components/AppearanceButton.tsx new file mode 100644 index 0000000..f3978ec --- /dev/null +++ b/src/app/_components/AppearanceButton.tsx @@ -0,0 +1,27 @@ +"use client"; + +import { useState } from "react"; +import { AppearanceModal } from "./AppearanceModal"; +import { Button } from "./ui/button"; +import { Paintbrush } from "lucide-react"; + +export function AppearanceButton() { + const [isOpen, setIsOpen] = useState(false); + + return ( + <> + + + setIsOpen(false)} /> + + ); +} diff --git a/src/app/_components/AppearanceModal.tsx b/src/app/_components/AppearanceModal.tsx new file mode 100644 index 0000000..ecfb67d --- /dev/null +++ b/src/app/_components/AppearanceModal.tsx @@ -0,0 +1,216 @@ +"use client"; + +import { useState, useEffect } from "react"; +import { Button } from "./ui/button"; +import { useRegisterModal, ModalPortal } from "./modal/ModalStackProvider"; +import { useTheme } from "./ThemeProvider"; +import { + Sun, + Moon, + Type, + Maximize2, + Minimize2, + X, + Paintbrush, +} from "lucide-react"; + +type TextSize = "small" | "medium" | "large"; +type LayoutWidth = "default" | "full"; + +function loadAppearance(): { textSize: TextSize; layoutWidth: LayoutWidth } { + if (typeof window === "undefined") + return { textSize: "medium", layoutWidth: "default" }; + try { + const ts = localStorage.getItem("pve-text-size"); + const lw = localStorage.getItem("pve-layout-width"); + return { + textSize: + ts === "small" || ts === "medium" || ts === "large" ? ts : "medium", + layoutWidth: lw === "full" ? "full" : "default", + }; + } catch { + return { textSize: "medium", layoutWidth: "default" }; + } +} + +function applyTextSize(size: TextSize) { + const root = document.documentElement; + root.classList.remove( + "text-size-small", + "text-size-medium", + "text-size-large", + ); + root.classList.add(`text-size-${size}`); + localStorage.setItem("pve-text-size", size); +} + +function applyLayoutWidth(width: LayoutWidth) { + const root = document.documentElement; + root.style.setProperty( + "--layout-max-w", + width === "full" ? "1800px" : "1440px", + ); + localStorage.setItem("pve-layout-width", width); +} + +interface AppearanceModalProps { + isOpen: boolean; + onClose: () => void; +} + +export function AppearanceModal({ isOpen, onClose }: AppearanceModalProps) { + const zIndex = useRegisterModal(isOpen, { + id: "appearance-modal", + allowEscape: true, + onClose, + }); + const { theme, setTheme } = useTheme(); + const [textSize, setTextSize] = useState("medium"); + const [layoutWidth, setLayoutWidth] = useState("default"); + + useEffect(() => { + if (isOpen) { + const a = loadAppearance(); + setTextSize(a.textSize); + setLayoutWidth(a.layoutWidth); + } + }, [isOpen]); + + if (!isOpen) return null; + + const handleBackdropClick = (e: React.MouseEvent) => { + if (e.target === e.currentTarget) onClose(); + }; + + return ( + +
+
+ {/* Header */} +
+
+
+ +
+

+ Appearance +

+
+ +
+ + {/* Content */} +
+ {/* Theme */} +
+

+ Theme +

+
+ {[ + { value: "light" as const, label: "Light", Icon: Sun }, + { value: "dark" as const, label: "Dark", Icon: Moon }, + ].map(({ value, label, Icon }) => ( + + ))} +
+
+ + {/* Text Size */} +
+

+ + Text Size +

+
+ {[ + { value: "small" as const, label: "Small" }, + { value: "medium" as const, label: "Medium" }, + { value: "large" as const, label: "Large" }, + ].map(({ value, label }) => ( + + ))} +
+
+ + {/* Layout Width */} +
+

+ Layout Width +

+
+ {[ + { + value: "default" as const, + label: "Default", + sub: "1440px", + Icon: Minimize2, + }, + { + value: "full" as const, + label: "Wide", + sub: "1800px", + Icon: Maximize2, + }, + ].map(({ value, label, sub, Icon }) => ( + + ))} +
+
+
+
+
+
+ ); +} diff --git a/src/app/_components/AuthGuard.tsx b/src/app/_components/AuthGuard.tsx index 4a0aacf..a5b17a0 100644 --- a/src/app/_components/AuthGuard.tsx +++ b/src/app/_components/AuthGuard.tsx @@ -1,57 +1,35 @@ -'use client'; +"use client"; -import { useState, useEffect, type ReactNode } from 'react'; -import { useAuth } from './AuthProvider'; -import { AuthModal } from './AuthModal'; -import { SetupModal } from './SetupModal'; +import { useState, type ReactNode } from "react"; +import { useAuth } from "./AuthProvider"; +import { AuthModal } from "./AuthModal"; +import { SetupModal } from "./SetupModal"; interface AuthGuardProps { children: ReactNode; } -interface AuthConfig { - username: string | null; - enabled: boolean; - hasCredentials: boolean; - setupCompleted: boolean; -} - export function AuthGuard({ children }: AuthGuardProps) { - const { isAuthenticated, isLoading } = useAuth(); - const [authConfig, setAuthConfig] = useState(null); - const [configLoading, setConfigLoading] = useState(true); - const [setupCompleted, setSetupCompleted] = useState(false); + const { + isAuthenticated, + isLoading, + setupCompleted, + authEnabled, + refreshConfig, + } = useAuth(); + const [localSetupCompleted, setLocalSetupCompleted] = useState(false); const handleSetupComplete = async () => { - setSetupCompleted(true); - // Refresh auth config without reloading the page - await fetchAuthConfig(); + setLocalSetupCompleted(true); + await refreshConfig(); }; - const fetchAuthConfig = async () => { - try { - const response = await fetch('/api/settings/auth-credentials'); - if (response.ok) { - const config = await response.json() as AuthConfig; - setAuthConfig(config); - } - } catch (error) { - console.error('Error fetching auth config:', error); - } finally { - setConfigLoading(false); - } - }; - - useEffect(() => { - void fetchAuthConfig(); - }, []); - - // Show loading while checking auth status - if (isLoading || configLoading) { + // Show loading while AuthProvider is still checking + if (isLoading || setupCompleted === null) { return ( -
+
-
+

Loading...

@@ -59,12 +37,12 @@ export function AuthGuard({ children }: AuthGuardProps) { } // Show setup modal if setup has not been completed yet - if (authConfig && !authConfig.setupCompleted && !setupCompleted) { + if (!setupCompleted && !localSetupCompleted) { return ; } // Show auth modal if auth is enabled but user is not authenticated - if (authConfig && authConfig.enabled && !isAuthenticated) { + if (authEnabled && !isAuthenticated) { return ; } diff --git a/src/app/_components/AuthModal.tsx b/src/app/_components/AuthModal.tsx index 271509f..f8472b0 100644 --- a/src/app/_components/AuthModal.tsx +++ b/src/app/_components/AuthModal.tsx @@ -1,21 +1,25 @@ -'use client'; +"use client"; -import { useState } from 'react'; -import { Button } from './ui/button'; -import { Input } from './ui/input'; -import { useAuth } from './AuthProvider'; -import { Lock, User, AlertCircle } from 'lucide-react'; -import { useRegisterModal } from './modal/ModalStackProvider'; +import { useState } from "react"; +import { Button } from "./ui/button"; +import { Input } from "./ui/input"; +import { useAuth } from "./AuthProvider"; +import { Lock, User, AlertCircle } from "lucide-react"; +import { useRegisterModal, ModalPortal } from "./modal/ModalStackProvider"; interface AuthModalProps { isOpen: boolean; } export function AuthModal({ isOpen }: AuthModalProps) { - useRegisterModal(isOpen, { id: 'auth-modal', allowEscape: false, onClose: () => null }); + const zIndex = useRegisterModal(isOpen, { + id: "auth-modal", + allowEscape: false, + onClose: () => null, + }); const { login } = useAuth(); - const [username, setUsername] = useState(''); - const [password, setPassword] = useState(''); + const [username, setUsername] = useState(""); + const [password, setPassword] = useState(""); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); @@ -25,89 +29,102 @@ export function AuthModal({ isOpen }: AuthModalProps) { setError(null); const success = await login(username, password); - + if (!success) { - setError('Invalid username or password'); + setError("Invalid username or password"); } - + setIsLoading(false); }; if (!isOpen) return null; return ( -
-
- {/* Header */} -
-
- -

Authentication Required

+ +
+
+ {/* Header */} +
+
+ +

+ Authentication Required +

+
+
+ + {/* Content */} +
+

+ Please enter your credentials to access the application. +

+ +
+
+ +
+ + setUsername(e.target.value)} + disabled={isLoading} + className="pl-10" + required + /> +
+
+ +
+ +
+ + setPassword(e.target.value)} + disabled={isLoading} + className="pl-10" + required + /> +
+
+ + {error && ( +
+ + {error} +
+ )} + + +
- - {/* Content */} -
-

- Please enter your credentials to access the application. -

- -
-
- -
- - setUsername(e.target.value)} - disabled={isLoading} - className="pl-10" - required - /> -
-
- -
- -
- - setPassword(e.target.value)} - disabled={isLoading} - className="pl-10" - required - /> -
-
- - {error && ( -
- - {error} -
- )} - - -
-
-
+ ); } diff --git a/src/app/_components/AuthProvider.tsx b/src/app/_components/AuthProvider.tsx index 0888081..22466fe 100644 --- a/src/app/_components/AuthProvider.tsx +++ b/src/app/_components/AuthProvider.tsx @@ -14,9 +14,12 @@ interface AuthContextType { username: string | null; isLoading: boolean; expirationTime: number | null; + setupCompleted: boolean | null; + authEnabled: boolean | null; login: (username: string, password: string) => Promise; logout: () => void; checkAuth: () => Promise; + refreshConfig: () => Promise; } const AuthContext = createContext(undefined); @@ -30,6 +33,8 @@ export function AuthProvider({ children }: AuthProviderProps) { const [username, setUsername] = useState(null); const [isLoading, setIsLoading] = useState(true); const [expirationTime, setExpirationTime] = useState(null); + const [setupCompleted, setSetupCompleted] = useState(null); + const [authEnabled, setAuthEnabled] = useState(null); const checkAuthInternal = async (retryCount = 0) => { try { @@ -41,6 +46,9 @@ export function AuthProvider({ children }: AuthProviderProps) { enabled: boolean; }; + setSetupCompleted(setupData.setupCompleted); + setAuthEnabled(setupData.enabled); + // If setup is not completed or auth is disabled, don't verify if (!setupData.setupCompleted || !setupData.enabled) { setIsAuthenticated(false); @@ -99,6 +107,22 @@ export function AuthProvider({ children }: AuthProviderProps) { return checkAuthInternal(0); }, []); + const refreshConfig = useCallback(async () => { + try { + const response = await fetch("/api/settings/auth-credentials"); + if (response.ok) { + const data = (await response.json()) as { + setupCompleted: boolean; + enabled: boolean; + }; + setSetupCompleted(data.setupCompleted); + setAuthEnabled(data.enabled); + } + } catch (error) { + console.error("Error refreshing auth config:", error); + } + }, []); + const login = async ( username: string, password: string, @@ -158,9 +182,12 @@ export function AuthProvider({ children }: AuthProviderProps) { username, isLoading, expirationTime, + setupCompleted, + authEnabled, login, logout, checkAuth, + refreshConfig, }} > {children} diff --git a/src/app/_components/BackupWarningModal.tsx b/src/app/_components/BackupWarningModal.tsx index d5e3f5f..2146520 100644 --- a/src/app/_components/BackupWarningModal.tsx +++ b/src/app/_components/BackupWarningModal.tsx @@ -2,7 +2,7 @@ import { Button } from "./ui/button"; import { AlertTriangle } from "lucide-react"; -import { useRegisterModal } from "./modal/ModalStackProvider"; +import { useRegisterModal, ModalPortal } from "./modal/ModalStackProvider"; interface BackupWarningModalProps { isOpen: boolean; @@ -15,7 +15,7 @@ export function BackupWarningModal({ onClose, onProceed, }: BackupWarningModalProps) { - useRegisterModal(isOpen, { + const zIndex = useRegisterModal(isOpen, { id: "backup-warning-modal", allowEscape: true, onClose, @@ -24,51 +24,56 @@ export function BackupWarningModal({ if (!isOpen) return null; return ( -
-
- {/* Header */} -
-
- -

- Backup Failed -

+ +
+
+ {/* Header */} +
+
+ +

+ Backup Failed +

+
-
- {/* Content */} -
-

- The backup failed, but you can still proceed with the update if you - wish. -
-
- Warning: Proceeding - without a backup means you won't be able to restore the - container if something goes wrong during the update. -

+ {/* Content */} +
+

+ The backup failed, but you can still proceed with the update if + you wish. +
+
+ Warning: Proceeding + without a backup means you won't be able to restore the + container if something goes wrong during the update. +

- {/* Action Buttons */} -
- - + {/* Action Buttons */} +
+ + +
-
+
); } diff --git a/src/app/_components/BackupsTab.tsx b/src/app/_components/BackupsTab.tsx index 5048e8a..a249d39 100644 --- a/src/app/_components/BackupsTab.tsx +++ b/src/app/_components/BackupsTab.tsx @@ -1,6 +1,7 @@ "use client"; import { useState, useEffect } from "react"; +import { createPortal } from "react-dom"; import { api } from "~/trpc/react"; import { Button } from "./ui/button"; import { Badge } from "./ui/badge"; @@ -13,6 +14,8 @@ import { Server, CheckCircle, AlertCircle, + Plus, + ArrowLeft, } from "lucide-react"; import { DropdownMenu, @@ -22,6 +25,8 @@ import { } from "./ui/dropdown-menu"; import { ConfirmationModal } from "./ConfirmationModal"; import { LoadingModal } from "./LoadingModal"; +import { useShell } from "./ShellContext"; +import type { Server as ServerType } from "~/types/server"; interface Backup { id: number; @@ -47,6 +52,8 @@ export function BackupsTab() { const [expandedContainers, setExpandedContainers] = useState>( new Set(), ); + const shell = useShell(); + const [servers, setServers] = useState([]); const [hasAutoDiscovered, setHasAutoDiscovered] = useState(false); const [restoreConfirmOpen, setRestoreConfirmOpen] = useState(false); const [selectedBackup, setSelectedBackup] = useState<{ @@ -58,6 +65,17 @@ export function BackupsTab() { const [restoreError, setRestoreError] = useState(null); const [shouldPollRestore, setShouldPollRestore] = useState(false); + // Create-backup dialog state + // mode "existing": opened from container row (serverId + containerIds pre-filled) + // mode "new": opened from header button (pick server → containers → storage) + const [createDialog, setCreateDialog] = useState<{ + mode: "existing" | "new"; + step: "server" | "containers" | "storage"; + serverId: number | null; + containerIds: string[]; // multi-select + } | null>(null); + const [selectedStorage, setSelectedStorage] = useState(""); + const { data: backupsData, refetch: refetchBackups, @@ -69,6 +87,41 @@ export function BackupsTab() { }, }); + // Storages for create-backup dialog (shown once at least one container is selected) + const storagesQuery = api.installedScripts.getBackupStorages.useQuery( + { serverId: createDialog?.serverId ?? 0 }, + { + enabled: + (createDialog?.serverId ?? 0) > 0 && + (createDialog?.containerIds.length ?? 0) > 0, + }, + ); + + // Containers for new-backup dialog (shown when server is picked) + const containersQuery = api.installedScripts.listContainersOnServer.useQuery( + { serverId: createDialog?.serverId ?? 0 }, + { + enabled: + createDialog?.mode === "new" && + createDialog.step === "containers" && + (createDialog?.serverId ?? 0) > 0, + }, + ); + + // Estimate backup size from selected containers (sum of configured disk sizes) + const resourceTemplatesQuery = + api.installedScripts.getContainersResourceTemplates.useQuery( + { + serverId: createDialog?.serverId ?? 0, + containerIds: createDialog?.containerIds ?? [], + }, + { + enabled: + (createDialog?.serverId ?? 0) > 0 && + (createDialog?.containerIds.length ?? 0) > 0, + }, + ); + // Poll for restore progress const { data: restoreLogsData } = api.backups.getRestoreProgress.useQuery( undefined, @@ -154,6 +207,16 @@ export function BackupsTab() { ? restoreProgress[restoreProgress.length - 1] : "Restoring backup..."; + // Load servers for the create-backup dialog + useEffect(() => { + fetch("/api/servers") + .then((r) => r.json()) + .then((data: ServerType[]) => setServers(data)) + .catch(() => { + /* ignore */ + }); + }, []); + // Auto-discover backups when tab is first opened useEffect(() => { if (!hasAutoDiscovered && !isLoading && backupsData) { @@ -169,6 +232,38 @@ export function BackupsTab() { discoverMutation.mutate(); }; + const handleOpenCreateBackup = (containerId: string, serverId: number) => { + setCreateDialog({ + mode: "existing", + step: "storage", + serverId, + containerIds: [containerId], + }); + setSelectedStorage(""); + }; + + const handleStartBackup = () => { + if ( + !createDialog?.containerIds.length || + !createDialog?.serverId || + !selectedStorage + ) + return; + const server = servers.find((s) => s.id === createDialog.serverId); + if (!server) return; + for (const cid of createDialog.containerIds) { + shell.open({ + containerId: cid, + server, + containerType: "lxc", + backupStorage: selectedStorage, + onComplete: () => discoverMutation.mutate(), + }); + } + setCreateDialog(null); + setSelectedStorage(""); + }; + const handleRestoreClick = (backup: Backup, containerId: string) => { setSelectedBackup({ backup, containerId }); setRestoreConfirmOpen(true); @@ -253,16 +348,34 @@ export function BackupsTab() { Discovered backups grouped by container ID

- +
+ + +
{/* Loading state */} @@ -308,11 +421,11 @@ export function BackupsTab() { className="bg-card border-border overflow-hidden rounded-lg border shadow-sm" > {/* Container header - collapsible */} -
-
- + + {/* Create Backup button — only shown when server is known */} + {(container.backups[0]?.server_id ?? 0) > 0 && ( + + )} +
{/* Container content - backups list */} {isExpanded && ( @@ -546,6 +677,400 @@ export function BackupsTab() {
)} + + {/* ── Create Backup Dialog ── */} + {createDialog && + (() => { + // Build typed container list once + type CT = { + id: string; + name: string; + status: string; + type: "CT" | "VM"; + }; + const lxcItems: CT[] = (containersQuery.data?.lxc ?? []).map((c) => ({ + id: c.id, + name: c.name, + status: c.status, + type: "CT" as const, + })); + const vmItems: CT[] = (containersQuery.data?.vm ?? []).map((c) => ({ + id: c.id, + name: c.name, + status: c.status, + type: "VM" as const, + })); + const allContainers: CT[] = [...lxcItems, ...vmItems]; + + const isServerStep = + createDialog.mode === "new" && createDialog.step === "server"; + const isContainerStep = + createDialog.mode === "new" && createDialog.step === "containers"; + const isStorageStep = createDialog.step === "storage"; + + const templates: Record< + string, + { cpu: number | null; ramMB: number | null; diskGB: number | null } + > = resourceTemplatesQuery.data?.templates ?? {}; + const estimatedBackupGb = createDialog.containerIds.reduce( + (sum, id) => sum + (templates[id]?.diskGB ?? 0), + 0, + ); + + const storageOptions = + storagesQuery.data?.storages?.filter((s) => s.supportsBackup) ?? []; + + const stepLabel = + createDialog.mode === "existing" + ? `Backup CT ${createDialog.containerIds[0]} — select storage` + : isServerStep + ? "Select Server" + : isStorageStep + ? `${createDialog.containerIds.length} container${createDialog.containerIds.length > 1 ? "s" : ""} selected — select storage` + : "Select Containers"; + + return createPortal( +
+
+
+ {/* Header */} +
+ {createDialog.mode === "new" && + createDialog.step !== "server" && ( + + )} +
+

+ {createDialog.mode === "existing" + ? "Create Backup" + : "New Backup"} +

+

+ {stepLabel} +

+
+ +
+ + {/* Body */} +
+ {isServerStep && ( +
+

+ Choose a server +

+ {servers.length === 0 ? ( +

+ No servers configured. +

+ ) : ( + servers.map((srv) => ( + + )) + )} +
+ )} + + {isContainerStep && ( +
+

+ Select containers (multiple allowed) +

+ {containersQuery.isLoading ? ( +
+ + + Loading containers… + +
+ ) : allContainers.length === 0 ? ( +

+ No containers found on this server. +

+ ) : ( +
+ {allContainers.map((ct) => { + const selected = + createDialog.containerIds.includes(ct.id); + return ( + + ); + })} +
+ )} +
+ )} + + {isStorageStep && ( +
+ {createDialog.mode === "new" && ( +
+ {createDialog.containerIds.map((id) => ( + + CT {id} + + ))} +
+ )} + + {createDialog.containerIds.length > 0 && ( +
+ + Estimated maximum backup size:{" "} + + + {estimatedBackupGb > 0 + ? `${estimatedBackupGb} GB` + : "Unknown"} + + {resourceTemplatesQuery.isLoading && ( + + (calculating…) + + )} +
+ )} + +

+ Select backup storage +

+ + {storagesQuery.isLoading ? ( +
+ + + Loading storages… + +
+ ) : storageOptions.length === 0 ? ( +

+ No backup-capable storages found on this server. +

+ ) : ( +
+ {storageOptions.map((storage) => { + const availableGb = + typeof storage.availableGB === "number" + ? storage.availableGB + : null; + const lowSpace = + availableGb != null && + estimatedBackupGb > 0 && + estimatedBackupGb > availableGb; + return ( + + ); + })} +
+ )} +
+ )} +
+ + {/* Footer */} +
+ +
+ {isContainerStep && ( + + )} + {isStorageStep && ( + + )} +
+
+
+
+
, + document.body, + ); + })()}
); } diff --git a/src/app/_components/Badge.tsx b/src/app/_components/Badge.tsx index cbf2ff5..4a6abbd 100644 --- a/src/app/_components/Badge.tsx +++ b/src/app/_components/Badge.tsx @@ -1,93 +1,107 @@ -'use client'; +"use client"; -import React from 'react'; +import React from "react"; interface BadgeProps { - variant: 'type' | 'updateable' | 'privileged' | 'status' | 'note' | 'execution-mode'; + variant: + | "type" + | "updateable" + | "privileged" + | "status" + | "note" + | "execution-mode"; type?: string; - noteType?: 'info' | 'warning' | 'error'; - status?: 'success' | 'failed' | 'in_progress'; - executionMode?: 'local' | 'ssh'; + noteType?: "info" | "warning" | "error"; + status?: "success" | "failed" | "in_progress"; + executionMode?: "local" | "ssh"; children: React.ReactNode; className?: string; } -export function Badge({ variant, type, noteType, status, executionMode, children, className = '' }: BadgeProps) { +export function Badge({ + variant, + type, + noteType, + status, + executionMode, + children, + className = "", +}: BadgeProps) { const getTypeStyles = (scriptType: string) => { switch (scriptType.toLowerCase()) { - case 'ct': - return 'bg-primary/10 text-primary border-primary/20'; - case 'addon': - return 'bg-primary/10 text-primary border-primary/20'; - case 'vm': - return 'bg-success/10 text-success border-success/20'; - case 'pve': - return 'bg-warning/10 text-warning border-warning/20'; + case "ct": + return "bg-primary/10 text-primary border-primary/20"; + case "addon": + return "bg-primary/10 text-primary border-primary/20"; + case "vm": + return "bg-success/10 text-success border-success/20"; + case "pve": + return "bg-warning/10 text-warning border-warning/20"; default: - return 'bg-muted text-muted-foreground border-border'; + return "bg-muted text-muted-foreground border-border"; } }; const getVariantStyles = () => { switch (variant) { - case 'type': - return `inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium border ${type ? getTypeStyles(type) : getTypeStyles('unknown')}`; - - case 'updateable': - return 'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-success/10 text-success border border-success/20'; - - case 'privileged': - return 'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-destructive/10 text-destructive border border-destructive/20'; - - case 'status': + case "type": + return `inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium border ${type ? getTypeStyles(type) : getTypeStyles("unknown")}`; + + case "updateable": + return "inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-success/10 text-success border border-success/20"; + + case "privileged": + return "inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-destructive/10 text-destructive border border-destructive/20"; + + case "status": switch (status) { - case 'success': - return 'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-success/10 text-success border border-success/20'; - case 'failed': - return 'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-error/10 text-error border border-error/20'; - case 'in_progress': - return 'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-warning/10 text-warning border border-warning/20'; + case "success": + return "inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-success/10 text-success border border-success/20"; + case "failed": + return "inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-error/10 text-error border border-error/20"; + case "in_progress": + return "inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-warning/10 text-warning border border-warning/20"; default: - return 'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-muted text-muted-foreground border border-border'; + return "inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-muted text-muted-foreground border border-border"; } - - case 'execution-mode': + + case "execution-mode": switch (executionMode) { - case 'local': - return 'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-primary/10 text-primary border border-primary/20'; - case 'ssh': - return 'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-primary/10 text-primary border border-primary/20'; + case "local": + return "inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-primary/10 text-primary border border-primary/20"; + case "ssh": + return "inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-primary/10 text-primary border border-primary/20"; default: - return 'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-muted text-muted-foreground border border-border'; + return "inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-muted text-muted-foreground border border-border"; } - - case 'note': + + case "note": switch (noteType) { - case 'warning': - return 'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-warning/10 text-warning border border-warning/20'; - case 'error': - return 'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-destructive/10 text-destructive border border-destructive/20'; + case "warning": + return "inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-warning/10 text-warning border border-warning/20"; + case "error": + return "inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-destructive/10 text-destructive border border-destructive/20"; default: - return 'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-primary/10 text-primary border border-primary/20'; + return "inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-primary/10 text-primary border border-primary/20"; } - + default: - return 'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-muted text-muted-foreground border border-border'; + return "inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-muted text-muted-foreground border border-border"; } }; // Format the text for type badges const formatText = () => { - if (variant === 'type' && type) { + if (variant === "type" && type) { switch (type.toLowerCase()) { - case 'ct': - return 'LXC'; - case 'addon': - return 'ADDON'; - case 'vm': - return 'VM'; - case 'pve': - return 'PVE'; + case "ct": + return "LXC"; + case "addon": + return "ADDON"; + case "vm": + return "VM"; + case "pve": + return "PVE"; default: return type.toUpperCase(); } @@ -96,14 +110,18 @@ export function Badge({ variant, type, noteType, status, executionMode, children }; return ( - - {formatText()} - + {formatText()} ); } // Convenience components for common use cases -export const TypeBadge = ({ type, className }: { type: string; className?: string }) => ( +export const TypeBadge = ({ + type, + className, +}: { + type: string; + className?: string; +}) => ( {type} @@ -121,20 +139,60 @@ export const PrivilegedBadge = ({ className }: { className?: string }) => ( ); -export const StatusBadge = ({ status, children, className }: { status: 'success' | 'failed' | 'in_progress'; children: React.ReactNode; className?: string }) => ( +export const StatusBadge = ({ + status, + children, + className, +}: { + status: "success" | "failed" | "in_progress"; + children: React.ReactNode; + className?: string; +}) => ( {children} ); -export const ExecutionModeBadge = ({ mode, children, className }: { mode: 'local' | 'ssh'; children: React.ReactNode; className?: string }) => ( +export const ExecutionModeBadge = ({ + mode, + children, + className, +}: { + mode: "local" | "ssh"; + children: React.ReactNode; + className?: string; +}) => ( {children} ); -export const NoteBadge = ({ noteType, children, className }: { noteType: 'info' | 'warning' | 'error'; children: React.ReactNode; className?: string }) => ( +export const NoteBadge = ({ + noteType, + children, + className, +}: { + noteType: "info" | "warning" | "error"; + children: React.ReactNode; + className?: string; +}) => ( {children} -); \ No newline at end of file +); + +export const DevBadge = ({ className }: { className?: string }) => ( + + DEV + +); + +export const ArmBadge = ({ className }: { className?: string }) => ( + + ARM + +); diff --git a/src/app/_components/CategorySidebar.tsx b/src/app/_components/CategorySidebar.tsx index 61cb723..895745d 100644 --- a/src/app/_components/CategorySidebar.tsx +++ b/src/app/_components/CategorySidebar.tsx @@ -1,195 +1,164 @@ -'use client'; +"use client"; -import { useState } from 'react'; -import { ContextualHelpIcon } from './ContextualHelpIcon'; +import { useState } from "react"; +import { ContextualHelpIcon } from "./ContextualHelpIcon"; interface CategorySidebarProps { categories: string[]; categoryCounts: Record; + categoryDevCounts?: Record; totalScripts: number; selectedCategory: string | null; onCategorySelect: (category: string | null) => void; + showDevScripts?: boolean; } // Icon mapping for categories -const CategoryIcon = ({ iconName, className = "w-5 h-5" }: { iconName: string; className?: string }) => { - const iconMap: Record = { - server: ( - - - - ), - monitor: ( - - - - ), - box: ( - - - - ), - shield: ( - - - - ), - "shield-check": ( - - - - ), - key: ( - - - - ), - archive: ( - - - - ), - database: ( - - - - ), - "chart-bar": ( - - - - ), - template: ( - - - - ), - "folder-open": ( - - - - ), - "document-text": ( - - - - ), - film: ( - - - - ), - download: ( - - - - ), - "video-camera": ( - - - - ), - home: ( - - - - ), - wifi: ( - - - - ), - "chat-alt": ( - - - - ), - clock: ( - - - - ), - code: ( - - - - ), - "external-link": ( - - - - ), - sparkles: ( - - - - ), - "currency-dollar": ( - - - - ), - puzzle: ( - - - - ), - office: ( - - - - ), - }; +const categoryIconColorMap: Record = { + server: "text-blue-500", + monitor: "text-sky-400", + box: "text-orange-400", + shield: "text-green-500", + "shield-check": "text-green-500", + key: "text-yellow-500", + archive: "text-amber-400", + database: "text-indigo-500", + "chart-bar": "text-emerald-500", + template: "text-violet-500", + "folder-open": "text-cyan-500", + "document-text": "text-slate-400", + film: "text-rose-500", + download: "text-cyan-500", + "video-camera": "text-pink-500", + home: "text-lime-500", + wifi: "text-fuchsia-500", + "chat-alt": "text-sky-500", + clock: "text-orange-500", + code: "text-green-400", + "external-link": "text-blue-400", + sparkles: "text-purple-500", + "currency-dollar": "text-emerald-400", + puzzle: "text-pink-400", + office: "text-stone-500", +}; - return iconMap[iconName] ?? ( - - +const iconPaths: Record = { + server: + "M5 12h14M5 12a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v4a2 2 0 01-2 2M5 12a2 2 0 00-2 2v4a2 2 0 002 2h14a2 2 0 002-2v-4a2 2 0 00-2-2m-2-4h.01M17 16h.01", + monitor: + "M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z", + box: "M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4", + shield: + "M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z", + "shield-check": + "M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z", + key: "M15 7a2 2 0 012 2m4 0a6 6 0 01-7.743 5.743L11 17H9v2H7v2H4a1 1 0 01-1-1v-2.586a1 1 0 01.293-.707l5.964-5.964A6 6 0 1 0 21 9z", + archive: + "M5 8h14M5 8a2 2 0 110-4h14a2 2 0 110 4M5 8v10a2 2 0 002 2h10a2 2 0 002-2V8m-9 4h4", + database: + "M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4", + "chart-bar": + "M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z", + template: + "M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z", + "folder-open": + "M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z", + "document-text": + "M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z", + film: "M7 4V2a1 1 0 011-1h8a1 1 0 011 1v2m0 0V1.5a.5.5 0 01.5-.5h1a.5.5 0 01.5.5V4m-3 0H9m3 0v16a1 1 0 01-1 1H8a1 1 0 01-1-1V4m6 0h2a2 2 0 012 2v12a2 2 0 01-2 2h-2V4z", + download: + "M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z", + "video-camera": + "M15 10l4.553-2.276A1 1 0 0121 8.618v6.764a1 1 0 01-1.447.894L15 14M5 18h8a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v8a2 2 0 002 2z", + home: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6", + wifi: "M8.111 16.404a5.5 5.5 0 017.778 0M12 20h.01m-7.08-7.071c3.904-3.905 10.236-3.905 14.141 0M1.394 9.393c5.857-5.857 15.355-5.857 21.213 0", + "chat-alt": + "M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z", + clock: "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z", + code: "M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4", + "external-link": + "M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14", + sparkles: + "M5 3v4M3 5h4M6 17v4m-2-2h4m5-16l2.286 6.857L21 12l-5.714 2.143L13 21l-2.286-6.857L5 12l5.714-2.143L13 3z", + "currency-dollar": + "M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1", + puzzle: + "M11 4a2 2 0 114 0v1a1 1 0 001 1h3a1 1 0 011 1v3a1 1 0 01-1 1h-1a2 2 0 100 4h1a1 1 0 011 1v3a1 1 0 01-1 1h-3a1 1 0 01-1-1v-1a2 2 0 10-4 0v1a1 1 0 01-1 1H7a1 1 0 01-1-1v-3a1 1 0 00-1-1H4a2 2 0 110-4h1a1 1 0 001-1V7a1 1 0 011-1h3a1 1 0 001-1V4z", + office: + "M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4", +}; + +const FALLBACK_PATH = + "M7 21a4 4 0 01-4-4V5a2 2 0 012-2h4a2 2 0 012 2v12a4 4 0 01-4 4zM21 5a2 2 0 00-2-2h-4a2 2 0 00-2 2v12a4 4 0 004 4 4 4 0 004-4V5z"; + +const CategoryIcon = ({ + iconName, + className = "w-5 h-5", +}: { + iconName: string; + className?: string; +}) => { + return ( + + ); }; -export function CategorySidebar({ - categories, - categoryCounts, - totalScripts, - selectedCategory, - onCategorySelect +export function CategorySidebar({ + categories, + categoryCounts, + categoryDevCounts, + totalScripts, + selectedCategory, + onCategorySelect, + showDevScripts = false, }: CategorySidebarProps) { const [isCollapsed, setIsCollapsed] = useState(false); // Category to icon mapping (based on metadata.json) const categoryIconMapping: Record = { - 'Proxmox & Virtualization': 'server', - 'Operating Systems': 'monitor', - 'Containers & Docker': 'box', - 'Network & Firewall': 'shield', - 'Adblock & DNS': 'shield-check', - 'Authentication & Security': 'key', - 'Backup & Recovery': 'archive', - 'Databases': 'database', - 'Monitoring & Analytics': 'chart-bar', - 'Dashboards & Frontends': 'template', - 'Files & Downloads': 'folder-open', - 'Documents & Notes': 'document-text', - 'Media & Streaming': 'film', - '*Arr Suite': 'download', - 'NVR & Cameras': 'video-camera', - 'IoT & Smart Home': 'home', - 'ZigBee, Z-Wave & Matter': 'wifi', - 'MQTT & Messaging': 'chat-alt', - 'Automation & Scheduling': 'clock', - 'AI / Coding & Dev-Tools': 'code', - 'Webservers & Proxies': 'external-link', - 'Bots & ChatOps': 'sparkles', - 'Finance & Budgeting': 'currency-dollar', - 'Gaming & Leisure': 'puzzle', - 'Business & ERP': 'office', - 'Miscellaneous': 'box' + "Proxmox & Virtualization": "server", + "Operating Systems": "monitor", + "Containers & Docker": "box", + "Network & Firewall": "shield", + "Adblock & DNS": "shield-check", + "Authentication & Security": "key", + "Backup & Recovery": "archive", + Databases: "database", + "Monitoring & Analytics": "chart-bar", + "Dashboards & Frontends": "template", + "Files & Downloads": "folder-open", + "Documents & Notes": "document-text", + "Media & Streaming": "film", + "*Arr Suite": "download", + "NVR & Cameras": "video-camera", + "IoT & Smart Home": "home", + "ZigBee, Z-Wave & Matter": "wifi", + "MQTT & Messaging": "chat-alt", + "Automation & Scheduling": "clock", + "AI / Coding & Dev-Tools": "code", + "Webservers & Proxies": "external-link", + "Bots & ChatOps": "sparkles", + "Finance & Budgeting": "currency-dollar", + "Gaming & Leisure": "puzzle", + "Business & ERP": "office", + Miscellaneous: "box", }; // Filter categories to only show those with scripts, then sort by count (descending) and alphabetically const sortedCategories = categories - .map(category => [category, categoryCounts[category] ?? 0] as const) + .map((category) => [category, categoryCounts[category] ?? 0] as const) .filter(([, count]) => count > 0) // Only show categories with at least one script .sort(([a, countA], [b, countB]) => { if (countB !== countA) return countB - countA; @@ -197,34 +166,48 @@ export function CategorySidebar({ }); return ( -
+
{/* Header */} -
+
{!isCollapsed && ( -
+
-

Categories

-

{totalScripts} Total scripts

+

+ Categories +

+

+ {totalScripts} Total scripts +

- +
)}
@@ -236,24 +219,26 @@ export function CategorySidebar({ {/* "All Categories" option */} @@ -261,33 +246,46 @@ export function CategorySidebar({ {/* Individual Categories */} {sortedCategories.map(([category, count]) => { const isSelected = selectedCategory === category; - + return ( ); })} @@ -297,32 +295,34 @@ export function CategorySidebar({ {/* Collapsed state - show only icons with counters and tooltips */} {isCollapsed && ( -
+
{/* "All Categories" option */}
- + {/* Tooltip */} -
+
All Categories ({totalScripts})
@@ -330,32 +330,34 @@ export function CategorySidebar({ {/* Individual Categories */} {sortedCategories.map(([category, count]) => { const isSelected = selectedCategory === category; - + return (
- + {/* Tooltip */} -
+
{category} ({count})
@@ -365,4 +367,4 @@ export function CategorySidebar({ )}
); -} \ No newline at end of file +} diff --git a/src/app/_components/CloneCountInputModal.tsx b/src/app/_components/CloneCountInputModal.tsx index eb32ac5..a9ae245 100644 --- a/src/app/_components/CloneCountInputModal.tsx +++ b/src/app/_components/CloneCountInputModal.tsx @@ -1,10 +1,10 @@ -'use client'; +"use client"; -import { useState, useEffect } from 'react'; -import { Button } from './ui/button'; -import { Input } from './ui/input'; -import { Copy, X } from 'lucide-react'; -import { useRegisterModal } from './modal/ModalStackProvider'; +import { useState, useEffect } from "react"; +import { Button } from "./ui/button"; +import { Input } from "./ui/input"; +import { Copy, X } from "lucide-react"; +import { useRegisterModal, ModalPortal } from "./modal/ModalStackProvider"; interface CloneCountInputModalProps { isOpen: boolean; @@ -17,11 +17,15 @@ export function CloneCountInputModal({ isOpen, onClose, onSubmit, - storageName + storageName, }: CloneCountInputModalProps) { const [cloneCount, setCloneCount] = useState(1); - - useRegisterModal(isOpen, { id: 'clone-count-input-modal', allowEscape: true, onClose }); + + const zIndex = useRegisterModal(isOpen, { + id: "clone-count-input-modal", + allowEscape: true, + onClose, + }); useEffect(() => { if (isOpen) { @@ -44,86 +48,97 @@ export function CloneCountInputModal({ }; return ( -
-
- {/* Header */} -
-
- -

Clone Count

-
- -
- - {/* Content */} -
-

- How many clones would you like to create? -

- - {storageName && ( -
-

Storage:

-

{storageName}

+ +
+
+ {/* Header */} +
+
+ +

+ Clone Count +

- )} - -
- - { - const value = parseInt(e.target.value, 10); - if (!isNaN(value) && value >= 1 && value <= 100) { - setCloneCount(value); - } else if (e.target.value === '') { - setCloneCount(1); - } - }} - className="w-full" - placeholder="1" - /> -

- Enter a number between 1 and 100 -

-
- - {/* Action Buttons */} -
-
+ + {/* Content */} +
+

+ How many clones would you like to create? +

+ + {storageName && ( +
+

Storage:

+

+ {storageName} +

+
+ )} + +
+ + { + const value = parseInt(e.target.value, 10); + if (!isNaN(value) && value >= 1 && value <= 100) { + setCloneCount(value); + } else if (e.target.value === "") { + setCloneCount(1); + } + }} + className="w-full" + placeholder="1" + /> +

+ Enter a number between 1 and 100 +

+
+ + {/* Action Buttons */} +
+ + +
+
-
+
); } - diff --git a/src/app/_components/ConfigurationModal.tsx b/src/app/_components/ConfigurationModal.tsx index f4ac0b4..07ce6b4 100644 --- a/src/app/_components/ConfigurationModal.tsx +++ b/src/app/_components/ConfigurationModal.tsx @@ -6,7 +6,7 @@ import type { Script } from "~/types/script"; import type { Server } from "~/types/server"; import { Button } from "./ui/button"; import { Input } from "./ui/input"; -import { useRegisterModal } from "./modal/ModalStackProvider"; +import { useRegisterModal, ModalPortal } from "./modal/ModalStackProvider"; export type EnvVars = Record; @@ -27,7 +27,7 @@ export function ConfigurationModal({ server, mode, }: ConfigurationModalProps) { - useRegisterModal(isOpen, { + const zIndex = useRegisterModal(isOpen, { id: "configuration-modal", allowEscape: true, onClose, @@ -63,6 +63,25 @@ export function ConfigurationModal({ // Advanced mode state const [advancedVars, setAdvancedVars] = useState({}); + // Server presets + const [showSavePreset, setShowSavePreset] = useState(false); + const [presetName, setPresetName] = useState(""); + const { data: presetsData, refetch: refetchPresets } = + api.serverPresets.getByServerId.useQuery( + { serverId: server?.id ?? 0 }, + { enabled: !!server?.id && isOpen && mode === "advanced" }, + ); + const createPresetMutation = api.serverPresets.create.useMutation({ + onSuccess: () => { + void refetchPresets(); + setShowSavePreset(false); + setPresetName(""); + }, + }); + const deletePresetMutation = api.serverPresets.delete.useMutation({ + onSuccess: () => void refetchPresets(), + }); + // Discovered SSH keys on the Proxmox host (advanced mode only) const [discoveredSshKeys, setDiscoveredSshKeys] = useState([]); const [discoveredSshKeysLoading, setDiscoveredSshKeysLoading] = @@ -107,6 +126,7 @@ export function ConfigurationModal({ var_ns: "", // Identity + var_ctid: "", var_hostname: slug, var_pw: "", var_tags: "community-script", @@ -129,6 +149,7 @@ export function ConfigurationModal({ var_verbose: "no", var_apt_cacher: "no", var_apt_cacher_ip: "", + var_github_token: "", // Storage var_container_storage: "", @@ -138,6 +159,30 @@ export function ConfigurationModal({ } }, [actualScript, server, mode, resources, slug]); + // Load persistent APT proxy settings for advanced mode + useEffect(() => { + if (!isOpen || mode !== "advanced") return; + let cancelled = false; + fetch("/api/settings/apt-proxy") + .then((res) => res.json() as Promise<{ enabled: boolean; ip: string }>) + .then((data) => { + if (cancelled) return; + if (data.enabled && data.ip) { + setAdvancedVars((prev) => ({ + ...prev, + var_apt_cacher: "yes", + var_apt_cacher_ip: data.ip, + })); + } + }) + .catch(() => { + /* ignore */ + }); + return () => { + cancelled = true; + }; + }, [isOpen, mode]); + // Discover SSH keys on the Proxmox host when advanced mode is open useEffect(() => { if (!server?.id || !isOpen || mode !== "advanced") { @@ -367,10 +412,16 @@ export function ConfigurationModal({ // Advanced mode: all vars envVars = { ...advancedVars }; - // If network mode is static and var_ip is set, replace var_net with the CIDR - if (envVars.var_net === "static" && envVars.var_ip) { - envVars.var_net = envVars.var_ip as string; - delete envVars.var_ip; // Remove the temporary var_ip + // If network mode is static and var_ip is set, replace var_net with the CIDR. + // If var_ip is missing (user left it blank), remove var_net so the script + // defaults to dhcp rather than receiving the literal string "static". + if (envVars.var_net === "static") { + if (envVars.var_ip) { + envVars.var_net = envVars.var_ip as string; + } else { + delete envVars.var_net; + } + delete envVars.var_ip; } // Format password correctly: if var_pw is set, format it as "-password " @@ -438,951 +489,1156 @@ export function ConfigurationModal({ } }; + const applyPreset = ( + preset: NonNullable["presets"][number], + ) => { + setAdvancedVars((prev) => ({ + ...prev, + ...(preset.cpu != null && { var_cpu: preset.cpu }), + ...(preset.ram != null && { var_ram: preset.ram }), + ...(preset.disk != null && { var_disk: preset.disk }), + var_unprivileged: preset.privileged ? 0 : 1, + ...(preset.bridge && { var_brg: preset.bridge }), + ...(preset.vlan && { var_vlan: preset.vlan }), + ...(preset.dns && { var_ns: preset.dns }), + var_ssh: preset.ssh ? "yes" : "no", + var_nesting: preset.nesting ? 1 : 0, + var_fuse: preset.fuse ? 1 : 0, + ...(preset.apt_proxy_on && + preset.apt_proxy_addr && { + var_apt_cacher: "yes", + var_apt_cacher_ip: preset.apt_proxy_addr, + }), + })); + }; + + const saveCurrentAsPreset = () => { + if (!server?.id || !presetName.trim()) return; + createPresetMutation.mutate({ + serverId: server.id, + name: presetName.trim(), + cpu: + typeof advancedVars.var_cpu === "number" + ? advancedVars.var_cpu + : undefined, + ram: + typeof advancedVars.var_ram === "number" + ? advancedVars.var_ram + : undefined, + disk: + typeof advancedVars.var_disk === "number" + ? advancedVars.var_disk + : undefined, + privileged: advancedVars.var_unprivileged === 0, + bridge: + typeof advancedVars.var_brg === "string" + ? advancedVars.var_brg + : undefined, + vlan: + typeof advancedVars.var_vlan === "string" + ? advancedVars.var_vlan + : undefined, + dns: + typeof advancedVars.var_ns === "string" + ? advancedVars.var_ns + : undefined, + ssh: advancedVars.var_ssh === "yes", + nesting: advancedVars.var_nesting === 1, + fuse: advancedVars.var_fuse === 1, + aptProxyAddr: + typeof advancedVars.var_apt_cacher_ip === "string" + ? advancedVars.var_apt_cacher_ip + : undefined, + aptProxyOn: advancedVars.var_apt_cacher === "yes", + }); + }; + if (!isOpen) return null; const rootfsStorages = rootfsStoragesData?.storages ?? []; const templateStorages = templateStoragesData?.storages ?? []; return ( -
-
- {/* Header */} -
-

- {mode === "default" - ? "Default Configuration" - : "Advanced Configuration"} -

- -
+ + + + +
- {/* Content */} -
- {mode === "default" ? ( - /* Default Mode */ -
-
- - - {rootfsStorages.length === 0 && ( -

- Could not fetch storages. Script will use default selection. -

+ {/* Content */} +
+ {mode === "default" ? ( + /* Default Mode */ +
+
+ + + {rootfsStorages.length === 0 && ( +

+ Could not fetch storages. Script will use default + selection. +

+ )} +
+ +
+

+ Default Values +

+
+

Hostname: {slug}

+

Bridge: vmbr0

+

Network: DHCP

+

IPv6: Auto

+

SSH: Disabled

+

Nesting: Enabled

+

CPU: {resources?.cpu ?? 1}

+

RAM: {resources?.ram ?? 1024} MB

+

Disk: {resources?.hdd ?? 4} GB

+
+
+
+ ) : ( + /* Advanced Mode */ +
+ {/* Server Presets */} + {(presetsData?.presets?.length ?? 0) > 0 && ( +
+

+ Load Preset +

+
+ {presetsData?.presets.map((preset) => ( +
+ + +
+ ))} +
+
)} -
-
-

- Default Values -

-
-

Hostname: {slug}

-

Bridge: vmbr0

-

Network: DHCP

-

IPv6: Auto

-

SSH: Disabled

-

Nesting: Enabled

-

CPU: {resources?.cpu ?? 1}

-

RAM: {resources?.ram ?? 1024} MB

-

Disk: {resources?.hdd ?? 4} GB

-
-
-
- ) : ( - /* Advanced Mode */ -
- {/* Resources */} -
-

- Resources -

-
-
- - - updateAdvancedVar( - "var_cpu", - parseInt(e.target.value) || 1, - ) - } - className={errors.var_cpu ? "border-destructive" : ""} - /> - {errors.var_cpu && ( -

- {errors.var_cpu} -

- )} -
-
- - - updateAdvancedVar( - "var_ram", - parseInt(e.target.value) || 1024, - ) - } - className={errors.var_ram ? "border-destructive" : ""} - /> - {errors.var_ram && ( -

- {errors.var_ram} -

- )} -
-
- - - updateAdvancedVar( - "var_disk", - parseInt(e.target.value) || 4, - ) - } - className={errors.var_disk ? "border-destructive" : ""} - /> - {errors.var_disk && ( -

- {errors.var_disk} -

- )} -
-
- - -
-
-
- - {/* Network */} -
-

- Network -

-
-
- - setPresetName(e.target.value)} + placeholder="Preset name..." + className="max-w-[200px]" + onKeyDown={(e) => + e.key === "Enter" && saveCurrentAsPreset() } - }} - className="border-input bg-background text-foreground focus:ring-ring w-full rounded-md border px-3 py-2 text-sm focus:ring-2 focus:outline-none" + /> + + + + ) : ( +
- {(advancedVars.var_net === "static" || - (typeof advancedVars.var_net === "string" && - advancedVars.var_net.includes("/"))) && ( + Save Current as Preset + + )} +
+ + {/* Resources */} +
+

+ Resources +

+
+ updateAdvancedVar( + "var_cpu", + parseInt(e.target.value) || 1, + ) + } + className={errors.var_cpu ? "border-destructive" : ""} + /> + {errors.var_cpu && ( +

+ {errors.var_cpu} +

+ )} +
+
+ + + updateAdvancedVar( + "var_ram", + parseInt(e.target.value) || 1024, + ) + } + className={errors.var_ram ? "border-destructive" : ""} + /> + {errors.var_ram && ( +

+ {errors.var_ram} +

+ )} +
+
+ + + updateAdvancedVar( + "var_disk", + parseInt(e.target.value) || 4, + ) + } + className={errors.var_disk ? "border-destructive" : ""} + /> + {errors.var_disk && ( +

+ {errors.var_disk} +

+ )} +
+
+ + +
+
+
+ + {/* Network */} +
+

+ Network +

+
+
+ +
- )} -
- - - updateAdvancedVar("var_brg", e.target.value) - } - placeholder="vmbr0" - /> -
-
- - - updateAdvancedVar("var_gateway", e.target.value) - } - placeholder="Auto" - className={errors.var_gateway ? "border-destructive" : ""} - /> - {errors.var_gateway && ( -

- {errors.var_gateway} -

+ {(advancedVars.var_net === "static" || + (typeof advancedVars.var_net === "string" && + advancedVars.var_net.includes("/"))) && ( +
+ + { + // Store in var_ip temporarily, will be moved to var_net on confirm + updateAdvancedVar("var_ip", e.target.value); + }} + placeholder="10.10.10.1/24" + className={errors.var_ip ? "border-destructive" : ""} + /> + {errors.var_ip && ( +

+ {errors.var_ip} +

+ )} +
)} -
-
- - -
- {advancedVars.var_ipv6_method === "static" && (
- updateAdvancedVar("var_ipv6_static", e.target.value) + updateAdvancedVar("var_brg", e.target.value) } - placeholder="2001:db8::1/64" + placeholder="vmbr0" + /> +
+
+ + + updateAdvancedVar("var_gateway", e.target.value) + } + placeholder="Auto" className={ - errors.var_ipv6_static ? "border-destructive" : "" + errors.var_gateway ? "border-destructive" : "" } /> - {errors.var_ipv6_static && ( + {errors.var_gateway && (

- {errors.var_ipv6_static} + {errors.var_gateway}

)}
- )} -
- - - updateAdvancedVar( - "var_vlan", - e.target.value ? parseInt(e.target.value) : "", - ) - } - placeholder="None" - className={errors.var_vlan ? "border-destructive" : ""} - /> - {errors.var_vlan && ( -

- {errors.var_vlan} -

+
+ + +
+ {advancedVars.var_ipv6_method === "static" && ( +
+ + + updateAdvancedVar("var_ipv6_static", e.target.value) + } + placeholder="2001:db8::1/64" + className={ + errors.var_ipv6_static ? "border-destructive" : "" + } + /> + {errors.var_ipv6_static && ( +

+ {errors.var_ipv6_static} +

+ )} +
)} -
-
- - - updateAdvancedVar( - "var_mtu", - e.target.value ? parseInt(e.target.value) : 1500, - ) - } - placeholder="1500" - className={errors.var_mtu ? "border-destructive" : ""} - /> - {errors.var_mtu && ( -

- {errors.var_mtu} -

- )} -
-
- - - updateAdvancedVar("var_mac", e.target.value) - } - placeholder="Auto" - className={errors.var_mac ? "border-destructive" : ""} - /> - {errors.var_mac && ( -

- {errors.var_mac} -

- )} -
-
- - - updateAdvancedVar("var_ns", e.target.value) - } - placeholder="Auto" - className={errors.var_ns ? "border-destructive" : ""} - /> - {errors.var_ns && ( -

- {errors.var_ns} -

- )} -
-
-
- - {/* Identity & Metadata */} -
-

- Identity & Metadata -

-
-
- - - updateAdvancedVar("var_hostname", e.target.value) - } - placeholder={slug} - /> -
-
- - - updateAdvancedVar("var_pw", e.target.value) - } - placeholder="Random (empty = auto-login)" - /> -
-
- - - updateAdvancedVar("var_tags", e.target.value) - } - placeholder="e.g. tag1; tag2" - /> -
-
-
- - {/* SSH Access */} -
-

- SSH Access -

-
-
- - -
-
- - {discoveredSshKeysLoading && ( -

- Detecting SSH keys... -

- )} - {discoveredSshKeysError && !discoveredSshKeysLoading && ( -

- Could not detect keys on host -

- )} - {discoveredSshKeys.length > 0 && - !discoveredSshKeysLoading && ( -
- - -
+
+ + + updateAdvancedVar( + "var_vlan", + e.target.value ? parseInt(e.target.value) : "", + ) + } + placeholder="None" + className={errors.var_vlan ? "border-destructive" : ""} + /> + {errors.var_vlan && ( +

+ {errors.var_vlan} +

)} - - updateAdvancedVar( - "var_ssh_authorized_key", - e.target.value, - ) - } - placeholder="Or paste a public key: ssh-rsa AAAA..." - /> +
+
+ + + updateAdvancedVar( + "var_mtu", + e.target.value ? parseInt(e.target.value) : 1500, + ) + } + placeholder="1500" + className={errors.var_mtu ? "border-destructive" : ""} + /> + {errors.var_mtu && ( +

+ {errors.var_mtu} +

+ )} +
+
+ + + updateAdvancedVar("var_mac", e.target.value) + } + placeholder="Auto" + className={errors.var_mac ? "border-destructive" : ""} + /> + {errors.var_mac && ( +

+ {errors.var_mac} +

+ )} +
+
+ + + updateAdvancedVar("var_ns", e.target.value) + } + placeholder="Auto" + className={errors.var_ns ? "border-destructive" : ""} + /> + {errors.var_ns && ( +

+ {errors.var_ns} +

+ )} +
-
- {/* Container Features */} -
-

- Container Features -

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

- For Tailscale, WireGuard, OpenVPN -

-
-
- - -
-
- - - updateAdvancedVar("var_mount_fs", e.target.value) - } - placeholder="nfs,cifs" - /> -
-
- - -
-
-
- - {/* System Configuration */} -
-

- System Configuration -

-
-
- - - updateAdvancedVar("var_timezone", e.target.value) - } - placeholder="System" - /> -
-
- - -
-
- - -
-
- - - updateAdvancedVar("var_apt_cacher_ip", e.target.value) - } - placeholder="192.168.1.10 or apt-cacher.internal" - className={ - errors.var_apt_cacher_ip ? "border-destructive" : "" - } - /> - {errors.var_apt_cacher_ip && ( -

- {errors.var_apt_cacher_ip} -

- )} -
-
-
- - {/* Storage Selection */} -
-

- Storage Selection -

-
-
- - - {rootfsStorages.length === 0 && ( + {/* Identity & Metadata */} +
+

+ Identity & Metadata +

+
+
+ + + updateAdvancedVar("var_ctid", e.target.value) + } + placeholder="Auto (next available)" + />

- Could not fetch storages. Leave empty for auto - selection. + Leave empty for auto-assignment

- )} +
+
+ + + updateAdvancedVar("var_hostname", e.target.value) + } + placeholder={slug} + /> +
+
+ + + updateAdvancedVar("var_pw", e.target.value) + } + placeholder="Random (empty = auto-login)" + /> +
+
+ + + updateAdvancedVar("var_tags", e.target.value) + } + placeholder="e.g. tag1; tag2" + /> +
-
- - - {templateStorages.length === 0 && ( +
+ + {/* SSH Access */} +
+

+ SSH Access +

+
+
+ + +
+
+ + {discoveredSshKeysLoading && ( +

+ Detecting SSH keys... +

+ )} + {discoveredSshKeysError && !discoveredSshKeysLoading && ( +

+ Could not detect keys on host +

+ )} + {discoveredSshKeys.length > 0 && + !discoveredSshKeysLoading && ( +
+ + +
+ )} + + updateAdvancedVar( + "var_ssh_authorized_key", + e.target.value, + ) + } + placeholder="Or paste a public key: ssh-rsa AAAA..." + /> +
+
+
+ + {/* Container Features */} +
+

+ Container Features +

+
+
+ + +
+
+ + +
+
+ + +
+
+ +

- Could not fetch storages. Leave empty for auto - selection. + For Tailscale, WireGuard, OpenVPN

- )} +
+
+ + +
+
+ + + updateAdvancedVar("var_mount_fs", e.target.value) + } + placeholder="nfs,cifs" + /> +
+
+ + +
+
+
+ + {/* System Configuration */} +
+

+ System Configuration +

+
+
+ + + updateAdvancedVar("var_timezone", e.target.value) + } + placeholder="System" + /> +
+
+ + +
+
+ + +
+
+ + + updateAdvancedVar("var_apt_cacher_ip", e.target.value) + } + placeholder="192.168.1.10 or apt-cacher.internal" + className={ + errors.var_apt_cacher_ip ? "border-destructive" : "" + } + /> + {errors.var_apt_cacher_ip && ( +

+ {errors.var_apt_cacher_ip} +

+ )} +
+
+ + + updateAdvancedVar("var_github_token", e.target.value) + } + placeholder="ghp_... (optional)" + autoComplete="off" + /> +

+ Passed as GITHUB_TOKEN to avoid API rate limits +

+
+
+
+ + {/* Storage Selection */} +
+

+ Storage Selection +

+
+
+ + + {rootfsStorages.length === 0 && ( +

+ Could not fetch storages. Leave empty for auto + selection. +

+ )} +
+
+ + + {templateStorages.length === 0 && ( +

+ Could not fetch storages. Leave empty for auto + selection. +

+ )} +
+ )} + + {/* Action Buttons */} +
+ +
- )} - - {/* Action Buttons */} -
- -
-
+ ); } diff --git a/src/app/_components/ConfirmationModal.tsx b/src/app/_components/ConfirmationModal.tsx index cfe8b69..d089314 100644 --- a/src/app/_components/ConfirmationModal.tsx +++ b/src/app/_components/ConfirmationModal.tsx @@ -1,9 +1,9 @@ -'use client'; +"use client"; -import { useMemo, useState } from 'react'; -import { Button } from './ui/button'; -import { AlertTriangle, Info } from 'lucide-react'; -import { useRegisterModal } from './modal/ModalStackProvider'; +import { useMemo, useState } from "react"; +import { Button } from "./ui/button"; +import { AlertTriangle, Info } from "lucide-react"; +import { useRegisterModal, ModalPortal } from "./modal/ModalStackProvider"; interface ConfirmationModalProps { isOpen: boolean; @@ -11,7 +11,7 @@ interface ConfirmationModalProps { onConfirm: () => void; title: string; message: string; - variant: 'simple' | 'danger'; + variant: "simple" | "danger"; confirmText?: string; // What the user must type for danger variant confirmButtonText?: string; cancelButtonText?: string; @@ -25,14 +25,18 @@ export function ConfirmationModal({ message, variant, confirmText, - confirmButtonText = 'Confirm', - cancelButtonText = 'Cancel' + confirmButtonText = "Confirm", + cancelButtonText = "Cancel", }: ConfirmationModalProps) { - const [typedText, setTypedText] = useState(''); - const isDanger = variant === 'danger'; + const [typedText, setTypedText] = useState(""); + const isDanger = variant === "danger"; const allowEscape = useMemo(() => !isDanger, [isDanger]); - useRegisterModal(isOpen, { id: 'confirmation-modal', allowEscape, onClose }); + const zIndex = useRegisterModal(isOpen, { + id: "confirmation-modal", + allowEscape, + onClose, + }); if (!isOpen) return null; const isConfirmEnabled = isDanger ? typedText === confirmText : true; @@ -40,75 +44,84 @@ export function ConfirmationModal({ const handleConfirm = () => { if (isConfirmEnabled) { onConfirm(); - setTypedText(''); // Reset for next time + setTypedText(""); // Reset for next time } }; const handleClose = () => { onClose(); - setTypedText(''); // Reset when closing + setTypedText(""); // Reset when closing }; return ( -
-
- {/* Header */} -
-
- {isDanger ? ( - - ) : ( - - )} -

{title}

-
-
- - {/* Content */} -
-

- {message} -

- - {/* Type-to-confirm input for danger variant */} - {isDanger && confirmText && ( -
- - setTypedText(e.target.value)} - className="w-full px-3 py-2 border border-input rounded-md bg-background text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:border-ring" - placeholder={`Type "${confirmText}" here`} - autoComplete="off" - /> + +
+
+ {/* Header */} +
+
+ {isDanger ? ( + + ) : ( + + )} +

+ {title} +

- )} +
- {/* Action Buttons */} -
- - + {/* Content */} +
+

{message}

+ + {/* Type-to-confirm input for danger variant */} + {isDanger && confirmText && ( +
+ + setTypedText(e.target.value)} + className="border-input bg-background text-foreground placeholder:text-muted-foreground focus:ring-ring focus:border-ring w-full rounded-md border px-3 py-2 focus:ring-2 focus:outline-none" + placeholder={`Type "${confirmText}" here`} + autoComplete="off" + /> +
+ )} + + {/* Action Buttons */} +
+ + +
-
+
); } diff --git a/src/app/_components/DiffViewer.tsx b/src/app/_components/DiffViewer.tsx index 48a5b61..3ba9660 100644 --- a/src/app/_components/DiffViewer.tsx +++ b/src/app/_components/DiffViewer.tsx @@ -1,7 +1,7 @@ -'use client'; +"use client"; -import { useState } from 'react'; -import { api } from '~/trpc/react'; +import { useState } from "react"; +import { api } from "~/trpc/react"; interface DiffViewerProps { scriptSlug: string; @@ -10,13 +10,18 @@ interface DiffViewerProps { onClose: () => void; } -export function DiffViewer({ scriptSlug, filePath, isOpen, onClose }: DiffViewerProps) { +export function DiffViewer({ + scriptSlug, + filePath, + isOpen, + onClose, +}: DiffViewerProps) { const [isLoading, setIsLoading] = useState(false); // Get diff content const { data: diffData, refetch } = api.scripts.getScriptDiff.useQuery( { slug: scriptSlug, filePath }, - { enabled: isOpen && !!scriptSlug && !!filePath } + { enabled: isOpen && !!scriptSlug && !!filePath }, ); const handleBackdropClick = (e: React.MouseEvent) => { @@ -36,27 +41,31 @@ export function DiffViewer({ scriptSlug, filePath, isOpen, onClose }: DiffViewer const renderDiffLine = (line: string, index: number) => { const lineNumberMatch = /^([+-]?\d+):/.exec(line); const lineNumber = lineNumberMatch?.[1]; - const content = line.replace(/^[+-]?\d+:\s*/, ''); - const isAdded = line.startsWith('+'); - const isRemoved = line.startsWith('-'); + const content = line.replace(/^[+-]?\d+:\s*/, ""); + const isAdded = line.startsWith("+"); + const isRemoved = line.startsWith("-"); return (
-
+
{lineNumber}
- - {isAdded ? '+' : isRemoved ? '-' : ' '} + + {isAdded ? "+" : isRemoved ? "-" : " "} {content}
@@ -66,82 +75,117 @@ export function DiffViewer({ scriptSlug, filePath, isOpen, onClose }: DiffViewer return (
-
+
{/* Header */} -
+
-

Script Diff

-

{filePath}

+

Script Diff

+

{filePath}

{/* Legend */} -
+
-
+
Added (Remote)
-
+
Removed (Local)
-
+
Unchanged
{/* Diff Content */} -
+
{diffData?.success ? ( diffData.diff ? ( -
- {diffData.diff.split('\n').map((line, index) => - line.trim() ? renderDiffLine(line, index) : null - )} +
+ {diffData.diff + .split("\n") + .map((line, index) => + line.trim() ? renderDiffLine(line, index) : null, + )}
) : ( -
- - +
+ +

No differences found

-

The local and remote files are identical

+

+ The local and remote files are identical +

) ) : diffData?.error ? ( -
- - +
+ +

Error loading diff

{diffData.error}

) : ( -
-
+
+

Loading diff...

)} diff --git a/src/app/_components/DownloadedScriptsTab.tsx b/src/app/_components/DownloadedScriptsTab.tsx index 3a38020..3b7b1d8 100644 --- a/src/app/_components/DownloadedScriptsTab.tsx +++ b/src/app/_components/DownloadedScriptsTab.tsx @@ -1,6 +1,12 @@ "use client"; -import React, { useState, useRef, useEffect } from "react"; +import React, { + useState, + useRef, + useEffect, + useCallback, + useMemo, +} from "react"; import { api } from "~/trpc/react"; import { ScriptCard } from "./ScriptCard"; import { ScriptCardList } from "./ScriptCardList"; @@ -12,21 +18,10 @@ import { ConfirmationModal } from "./ConfirmationModal"; import { Button } from "./ui/button"; import { RefreshCw } from "lucide-react"; import type { ScriptCard as ScriptCardType } from "~/types/script"; -import type { Server } from "~/types/server"; import { getDefaultFilters, mergeFiltersWithDefaults } from "./filterUtils"; +import { useShell } from "./ShellContext"; -interface DownloadedScriptsTabProps { - onInstallScript?: ( - scriptPath: string, - scriptName: string, - mode?: "local" | "ssh", - server?: Server, - ) => void; -} - -export function DownloadedScriptsTab({ - onInstallScript, -}: DownloadedScriptsTabProps) { +export function DownloadedScriptsTab() { const [selectedSlug, setSelectedSlug] = useState(null); const [isModalOpen, setIsModalOpen] = useState(false); const [selectedCategory, setSelectedCategory] = useState(null); @@ -34,6 +29,8 @@ export function DownloadedScriptsTab({ const [filters, setFilters] = useState(getDefaultFilters()); const [saveFiltersEnabled, setSaveFiltersEnabled] = useState(false); const [isLoadingFilters, setIsLoadingFilters] = useState(true); + const filtersInitRef = useRef(false); + const viewModeInitRef = useRef(false); const [updateAllConfirmOpen, setUpdateAllConfirmOpen] = useState(false); const [updateResult, setUpdateResult] = useState<{ successCount: number; @@ -53,35 +50,37 @@ export function DownloadedScriptsTab({ data: localScriptsData, isLoading: localLoading, error: localError, + refetch: refetchLocal, } = api.scripts.getAllDownloadedScripts.useQuery(); const { data: scriptData } = api.scripts.getScriptBySlug.useQuery( { slug: selectedSlug ?? "" }, { enabled: !!selectedSlug }, ); - const loadMultipleScriptsMutation = api.scripts.loadMultipleScripts.useMutation({ - onSuccess: (data) => { - void utils.scripts.getAllDownloadedScripts.invalidate(); - void utils.scripts.getScriptCardsWithCategories.invalidate(); - setUpdateResult({ - successCount: data.successful?.length ?? 0, - failCount: data.failed?.length ?? 0, - failed: (data.failed ?? []).map((f) => ({ - slug: f.slug, - error: f.error ?? "Unknown error", - })), - }); - setTimeout(() => setUpdateResult(null), 8000); - }, - onError: (error) => { - setUpdateResult({ - successCount: 0, - failCount: 1, - failed: [{ slug: "Request failed", error: error.message }], - }); - setTimeout(() => setUpdateResult(null), 8000); - }, - }); + const loadMultipleScriptsMutation = + api.scripts.loadMultipleScripts.useMutation({ + onSuccess: (data) => { + void utils.scripts.getAllDownloadedScripts.invalidate(); + void utils.scripts.getScriptCardsWithCategories.invalidate(); + setUpdateResult({ + successCount: data.successful?.length ?? 0, + failCount: data.failed?.length ?? 0, + failed: (data.failed ?? []).map((f) => ({ + slug: f.slug, + error: f.error ?? "Unknown error", + })), + }); + setTimeout(() => setUpdateResult(null), 8000); + }, + onError: (error) => { + setUpdateResult({ + successCount: 0, + failCount: 1, + failed: [{ slug: "Request failed", error: error.message }], + }); + setTimeout(() => setUpdateResult(null), 8000); + }, + }); // Load SAVE_FILTER setting, saved filters, and view mode on component mount useEffect(() => { @@ -135,6 +134,11 @@ export function DownloadedScriptsTab({ // Save filters when they change (if SAVE_FILTER is enabled) useEffect(() => { if (!saveFiltersEnabled || isLoadingFilters) return; + // Skip the first fire after load — values haven't changed yet + if (!filtersInitRef.current) { + filtersInitRef.current = true; + return; + } const saveFilters = async () => { try { @@ -158,6 +162,11 @@ export function DownloadedScriptsTab({ // Save view mode when it changes useEffect(() => { if (isLoadingFilters) return; + // Skip the first fire after load — value hasn't changed yet + if (!viewModeInitRef.current) { + viewModeInitRef.current = true; + return; + } const saveViewMode = async () => { try { @@ -336,13 +345,11 @@ export function DownloadedScriptsTab({ scripts = scripts.filter((script) => { if (!script) return false; const scriptType = (script.type ?? "").toLowerCase(); - - // Map non-standard types to standard categories - const mappedType = scriptType === "turnkey" ? "ct" : scriptType; - - return filters.selectedTypes.some( - (type) => type.toLowerCase() === mappedType, - ); + return filters.selectedTypes.some((type) => { + const t = type.toLowerCase(); + if (t === "ct") return scriptType === "ct" || scriptType === "lxc"; + return scriptType === t; + }); }); } @@ -376,6 +383,21 @@ export function DownloadedScriptsTab({ compareValue = (a.name ?? "").localeCompare(b.name ?? ""); } break; + case "updated": + // Sort by date_created as a proxy (JSON doesn't have updated date) + // For downloaded scripts, treat more recent date_created as "recently updated" + const aUpdated = a?.date_created ?? ""; + const bUpdated = b?.date_created ?? ""; + if (aUpdated && bUpdated) { + compareValue = aUpdated.localeCompare(bUpdated); + } else if (aUpdated && !bUpdated) { + compareValue = -1; + } else if (!aUpdated && bUpdated) { + compareValue = 1; + } else { + compareValue = (a.name ?? "").localeCompare(b.name ?? ""); + } + break; default: compareValue = (a.name ?? "").localeCompare(b.name ?? ""); } @@ -432,6 +454,61 @@ export function DownloadedScriptsTab({ setSelectedSlug(null); }; + const { open: openShell } = useShell(); + const { data: installedScriptsData } = + api.installedScripts.getAllInstalledScripts.useQuery(); + + const normalizeSlug = (s?: string): string => + (s ?? "") + .toLowerCase() + .replace(/\.(sh|bash|py|js|ts)$/i, "") + .replace(/[^a-z0-9]+/g, "-") + .replace(/^-+|-+$/g, ""); + + const installedContainerMap = useMemo((): Map => { + const map = new Map(); + const scripts = (installedScriptsData as any)?.scripts ?? []; + for (const s of scripts) { + if (!s.container_id || s.status === "failed") continue; + const key = normalizeSlug(s.script_name); + if (!map.has(key)) map.set(key, s); + } + return map; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [installedScriptsData]); + + const handleShellClick = useCallback( + (script: ScriptCardType) => { + const container = installedContainerMap.get(normalizeSlug(script.slug)); + if (!container) return; + const server = + container.server_id && container.server_user + ? { + id: container.server_id, + name: container.server_name ?? "", + ip: container.server_ip ?? "", + user: container.server_user, + password: container.server_password ?? undefined, + auth_type: (container.server_auth_type ?? "password") as any, + ssh_key: container.server_ssh_key ?? undefined, + ssh_key_passphrase: + container.server_ssh_key_passphrase ?? undefined, + ssh_port: container.server_ssh_port ?? 22, + created_at: null, + updated_at: null, + } + : undefined; + openShell({ + containerId: container.container_id, + containerName: container.script_name, + server, + containerType: container.is_vm ? "vm" : "lxc", + }); + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [installedContainerMap, openShell], + ); + const handleUpdateAllClick = () => { setUpdateResult(null); setUpdateAllConfirmOpen(true); @@ -541,6 +618,19 @@ export function DownloadedScriptsTab({
{/* Update all downloaded scripts */}
+
@@ -657,6 +753,11 @@ export function DownloadedScriptsTab({ key={uniqueKey} script={script} onClick={handleCardClick} + onShell={ + installedContainerMap.has(normalizeSlug(script.slug)) + ? () => handleShellClick(script) + : undefined + } /> ); })} @@ -677,6 +778,11 @@ export function DownloadedScriptsTab({ key={uniqueKey} script={script} onClick={handleCardClick} + onShell={ + installedContainerMap.has(normalizeSlug(script.slug)) + ? () => handleShellClick(script) + : undefined + } /> ); })} @@ -687,7 +793,8 @@ export function DownloadedScriptsTab({ script={scriptData?.success ? scriptData.script : null} isOpen={isModalOpen} onClose={handleCloseModal} - onInstallScript={onInstallScript} + orderedSlugs={filteredScripts.map((s) => s.slug)} + onSelectSlug={(slug) => setSelectedSlug(slug)} /> { if (isOpen) { @@ -36,54 +40,63 @@ export function ErrorModal({ if (!isOpen) return null; return ( -
-
- {/* Header */} -
-
- {type === 'success' ? ( - - ) : ( - + +
+
+ {/* Header */} +
+
+ {type === "success" ? ( + + ) : ( + + )} +

{title}

+
+
+ + {/* Content */} +
+

{message}

+ {details && ( +
+

+ {type === "success" ? "Details:" : "Error Details:"} +

+
+                  {details}
+                
+
)} -

{title}

+
+ + {/* Footer */} +
+
- - {/* Content */} -
-

{message}

- {details && ( -
-

- {type === 'success' ? 'Details:' : 'Error Details:'} -

-
-                {details}
-              
-
- )} -
- - {/* Footer */} -
- -
-
+ ); } diff --git a/src/app/_components/ExecutionModeModal.tsx b/src/app/_components/ExecutionModeModal.tsx index fce78ca..32eb35b 100644 --- a/src/app/_components/ExecutionModeModal.tsx +++ b/src/app/_components/ExecutionModeModal.tsx @@ -1,32 +1,47 @@ -'use client'; - -import { useState, useEffect } from 'react'; -import type { Server } from '../../types/server'; -import type { Script } from '../../types/script'; -import { Button } from './ui/button'; -import { ColorCodedDropdown } from './ColorCodedDropdown'; -import { SettingsModal } from './SettingsModal'; -import { ConfigurationModal, type EnvVars } from './ConfigurationModal'; -import { useRegisterModal } from './modal/ModalStackProvider'; +"use client"; +import { useState, useEffect } from "react"; +import type { Server } from "../../types/server"; +import type { Script } from "../../types/script"; +import { Button } from "./ui/button"; +import { ColorCodedDropdown } from "./ColorCodedDropdown"; +import { SettingsModal } from "./SettingsModal"; +import { ConfigurationModal, type EnvVars } from "./ConfigurationModal"; +import { useRegisterModal, ModalPortal } from "./modal/ModalStackProvider"; interface ExecutionModeModalProps { isOpen: boolean; onClose: () => void; - onExecute: (mode: 'local' | 'ssh', server?: Server, envVars?: EnvVars) => void; + onExecute: ( + mode: "local" | "ssh", + server?: Server, + envVars?: EnvVars, + ) => void; scriptName: string; script?: Script | null; } -export function ExecutionModeModal({ isOpen, onClose, onExecute, scriptName, script }: ExecutionModeModalProps) { - useRegisterModal(isOpen, { id: 'execution-mode-modal', allowEscape: true, onClose }); +export function ExecutionModeModal({ + isOpen, + onClose, + onExecute, + scriptName, + script, +}: ExecutionModeModalProps) { + const zIndex = useRegisterModal(isOpen, { + id: "execution-mode-modal", + allowEscape: true, + onClose, + }); const [servers, setServers] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [selectedServer, setSelectedServer] = useState(null); const [settingsModalOpen, setSettingsModalOpen] = useState(false); const [configModalOpen, setConfigModalOpen] = useState(false); - const [configMode, setConfigMode] = useState<'default' | 'advanced'>('default'); + const [configMode, setConfigMode] = useState<"default" | "advanced">( + "default", + ); useEffect(() => { if (isOpen) { @@ -52,26 +67,26 @@ export function ExecutionModeModal({ isOpen, onClose, onExecute, scriptName, scr setLoading(true); setError(null); try { - const response = await fetch('/api/servers'); + const response = await fetch("/api/servers"); if (!response.ok) { - throw new Error('Failed to fetch servers'); + throw new Error("Failed to fetch servers"); } const data = await response.json(); // Sort servers by name alphabetically - const sortedServers = (data as Server[]).sort((a, b) => - (a.name ?? '').localeCompare(b.name ?? '') + const sortedServers = (data as Server[]).sort((a, b) => + (a.name ?? "").localeCompare(b.name ?? ""), ); setServers(sortedServers); } catch (err) { - setError(err instanceof Error ? err.message : 'An error occurred'); + setError(err instanceof Error ? err.message : "An error occurred"); } finally { setLoading(false); } }; - const handleConfigModeSelect = (mode: 'default' | 'advanced') => { + const handleConfigModeSelect = (mode: "default" | "advanced") => { if (!selectedServer) { - setError('Please select a server first'); + setError("Please select a server first"); return; } setConfigMode(mode); @@ -81,7 +96,7 @@ export function ExecutionModeModal({ isOpen, onClose, onExecute, scriptName, scr const handleConfigConfirm = (envVars: EnvVars) => { if (!selectedServer) return; setConfigModalOpen(false); - onExecute('ssh', selectedServer, envVars); + onExecute("ssh", selectedServer, envVars); onClose(); }; @@ -90,158 +105,127 @@ export function ExecutionModeModal({ isOpen, onClose, onExecute, scriptName, scr setError(null); // Clear error when server is selected }; - if (!isOpen) return null; return ( <> -
-
- {/* Header */} -
-

Select Server

- -
- - {/* Content */} -
- {error && ( -
-
-
- - - -
-
-

{error}

-
-
-
- )} - - {loading ? ( -
-
-

Loading servers...

-
- ) : servers.length === 0 ? ( -
-

No servers configured

-

Add servers in Settings to execute scripts

- -
- ) : servers.length === 1 ? ( - /* Single Server Confirmation View */ -
-
-

- Install Script Confirmation -

-

- Do you want to install "{scriptName}" on the following server? -

-
- -
-
+ + + +
+ + {/* Content */} +
+ {error && ( +
+
-
+ + +
-
-

- {selectedServer?.name ?? 'Unnamed Server'} -

-

- {selectedServer?.ip} -

+
+

{error}

+ )} - {/* Configuration Mode Selection */} -
-

- Choose configuration mode: + {loading ? ( +

+
+

+ Loading servers...

-
- - -
- - {/* Action Buttons */} -
+ ) : servers.length === 0 ? ( +
+

No servers configured

+

+ Add servers in Settings to execute scripts +

-
- ) : ( - /* Multiple Servers Selection View */ -
-
-

- Select server to execute "{scriptName}" -

-
+ ) : servers.length === 1 ? ( + /* Single Server Confirmation View */ +
+
+

+ Install Script Confirmation +

+

+ Do you want to install "{scriptName}" on the + following server? +

+
- {/* Server Selection */} -
- - -
+
+
+
+
+
+
+

+ {selectedServer?.name ?? "Unnamed Server"} +

+

+ {selectedServer?.ip} +

+
+
+
- {/* Configuration Mode Selection - only show when server is selected */} - {selectedServer && ( -
-

+ {/* Configuration Mode Selection */} +

+

Choose configuration mode:

- )} - {/* Action Buttons */} -
- + {/* Action Buttons */} +
+ +
-
- )} + ) : ( + /* Multiple Servers Selection View */ +
+
+

+ Select server to execute "{scriptName}" +

+
+ + {/* Server Selection */} +
+ + +
+ + {/* Configuration Mode Selection - only show when server is selected */} + {selectedServer && ( +
+

+ Choose configuration mode: +

+
+ + +
+
+ )} + + {/* Action Buttons */} +
+ +
+
+ )} +
-
+ {/* Server Settings Modal */} - {/* Configuration Modal */} diff --git a/src/app/_components/FilterBar.tsx b/src/app/_components/FilterBar.tsx index eb55b47..d751ab4 100644 --- a/src/app/_components/FilterBar.tsx +++ b/src/app/_components/FilterBar.tsx @@ -6,24 +6,41 @@ import { ContextualHelpIcon } from "./ContextualHelpIcon"; import { Package, Monitor, - Wrench, - Server, FileText, Calendar, RefreshCw, Filter, GitBranch, + Layers, + TrendingUp, + Sparkles, + Clock, + TrendingDown, + FlaskConical, + Cpu, + Settings2, } from "lucide-react"; import { api } from "~/trpc/react"; import { getDefaultFilters } from "./filterUtils"; +export type QuickFilter = + | "all" + | "popular" + | "new" + | "updated" + | "unpopular" + | "dev" + | "arm"; + export interface FilterState { searchQuery: string; showUpdatable: boolean | null; // null = all, true = only updatable, false = only non-updatable selectedTypes: string[]; // Array of selected types: 'lxc', 'vm', 'addon', 'pve' selectedRepositories: string[]; // Array of selected repository URLs - sortBy: "name" | "created"; // Sort criteria (removed 'updated') + sortBy: "name" | "created" | "updated"; // Sort criteria sortOrder: "asc" | "desc"; // Sort direction + quickFilter: QuickFilter; + selectedCategory: string | null; // null = all categories } interface FilterBarProps { @@ -34,13 +51,17 @@ interface FilterBarProps { updatableCount?: number; saveFiltersEnabled?: boolean; isLoadingFilters?: boolean; + categories?: string[]; + categoryCounts?: Record; + showDevScripts?: boolean; } const SCRIPT_TYPES = [ { value: "ct", label: "LXC Container", Icon: Package }, { value: "vm", label: "Virtual Machine", Icon: Monitor }, - { value: "addon", label: "Add-on", Icon: Wrench }, - { value: "pve", label: "PVE Host", Icon: Server }, + { value: "pve", label: "PVE Tools", Icon: Settings2 }, + { value: "addon", label: "Addons", Icon: Sparkles }, + { value: "turnkey", label: "TurnKey", Icon: FileText }, ]; export function FilterBar({ @@ -51,9 +72,13 @@ export function FilterBar({ updatableCount = 0, saveFiltersEnabled = false, isLoadingFilters = false, + categories = [], + categoryCounts = {}, + showDevScripts = false, }: FilterBarProps) { const [isTypeDropdownOpen, setIsTypeDropdownOpen] = useState(false); const [isSortDropdownOpen, setIsSortDropdownOpen] = useState(false); + const [isCategoryDropdownOpen, setIsCategoryDropdownOpen] = useState(false); const [isMinimized, setIsMinimized] = useState(false); // Fetch enabled repositories @@ -86,8 +111,10 @@ export function FilterBar({ filters.showUpdatable !== null || filters.selectedTypes.length > 0 || filters.selectedRepositories.length > 0 || + filters.selectedCategory !== null || filters.sortBy !== "name" || - filters.sortOrder !== "asc"; + filters.sortOrder !== "asc" || + filters.quickFilter !== "all"; const getUpdatableButtonText = () => { if (filters.showUpdatable === null) return "Updatable: All"; @@ -158,6 +185,35 @@ export function FilterBar({ {/* Filter Content - Conditionally rendered based on minimized state */} {!isMinimized && !isLoadingFilters && ( <> + {/* Quick Filters */} +
+ {[ + { key: "all" as const, label: "All", Icon: Layers }, + { key: "new" as const, label: "New", Icon: Sparkles }, + { key: "updated" as const, label: "Updated", Icon: Clock }, + ...(showDevScripts + ? [{ key: "dev" as const, label: "In Dev", Icon: FlaskConical }] + : []), + { key: "arm" as const, label: "ARM", Icon: Cpu }, + ].map(({ key, label, Icon }) => { + const isActive = filters.quickFilter === key; + return ( + + ); + })} +
+ {/* Search Bar */}
@@ -319,6 +375,84 @@ export function FilterBar({ )}
+ {/* Repository Filter Buttons - Only show if more than one enabled repo */} + {categories.length > 0 && ( +
+ + + {isCategoryDropdownOpen && ( +
+
+ + {categories.map((cat) => ( + + ))} +
+
+ )} +
+ )} + {/* Repository Filter Buttons - Only show if more than one enabled repo */} {enabledRepos.length > 1 && enabledRepos.map((repo: { id: number; url: string }) => { @@ -372,7 +506,11 @@ export function FilterBar({ )} - {filters.sortBy === "name" ? "By Name" : "By Created Date"} + {filters.sortBy === "name" + ? "By Name" + : filters.sortBy === "created" + ? "By Created Date" + : "By Updated Date"} By Created Date +
)} @@ -541,12 +693,13 @@ export function FilterBar({ )} {/* Click outside to close dropdowns */} - {(isTypeDropdownOpen || isSortDropdownOpen) && ( + {(isTypeDropdownOpen || isSortDropdownOpen || isCategoryDropdownOpen) && (
{ setIsTypeDropdownOpen(false); setIsSortDropdownOpen(false); + setIsCategoryDropdownOpen(false); }} /> )} diff --git a/src/app/_components/FloatingShell.tsx b/src/app/_components/FloatingShell.tsx new file mode 100644 index 0000000..9d8a548 --- /dev/null +++ b/src/app/_components/FloatingShell.tsx @@ -0,0 +1,323 @@ +"use client"; + +import { useState, useRef, useCallback, useEffect } from "react"; +import { createPortal } from "react-dom"; +import { + Minus, + Maximize2, + Minimize2, + X, + Terminal as TerminalIcon, + HardDrive, + ChevronUp, +} from "lucide-react"; +import { Terminal } from "./Terminal"; +import { useShell } from "./ShellContext"; +import type { ShellEntry } from "./ShellContext"; + +const WIN_W = 820; +const WIN_H = 520; +const STAGGER = 28; // px offset for each subsequent window + +// ── Single floating window ──────────────────────────────────────────────────── +function FloatingShellWindow({ + entry, + stackIndex, + onClose, + onMinimize, + isVisible, +}: { + entry: ShellEntry; + stackIndex: number; + onClose: () => void; + onMinimize: () => void; + isVisible: boolean; +}) { + const { session } = entry; + const [isMaximized, setIsMaximized] = useState(false); + const [pos, setPos] = useState<{ x: number; y: number } | null>(null); + const windowRef = useRef(null); + const dragRef = useRef<{ + startMouseX: number; + startMouseY: number; + startWinX: number; + startWinY: number; + } | null>(null); + + // Set initial staggered position on mount + useEffect(() => { + const baseX = Math.max( + 0, + Math.min( + window.innerWidth / 2 - WIN_W / 2 + stackIndex * STAGGER, + window.innerWidth - WIN_W, + ), + ); + const baseY = Math.max( + 0, + Math.min( + window.innerHeight / 2 - WIN_H / 2 + stackIndex * STAGGER, + window.innerHeight - WIN_H - 40, + ), + ); + setPos({ x: baseX, y: baseY }); + }, []); // only on mount + + const handleDragStart = useCallback( + (e: React.MouseEvent) => { + if (isMaximized) return; + if ((e.target as HTMLElement).closest("button")) return; + e.preventDefault(); + + const rect = windowRef.current?.getBoundingClientRect(); + const startWinX = rect?.left ?? window.innerWidth / 2 - WIN_W / 2; + const startWinY = rect?.top ?? window.innerHeight / 2 - WIN_H / 2; + + dragRef.current = { + startMouseX: e.clientX, + startMouseY: e.clientY, + startWinX, + startWinY, + }; + + const onMove = (ev: MouseEvent) => { + if (!dragRef.current) return; + const dx = ev.clientX - dragRef.current.startMouseX; + const dy = ev.clientY - dragRef.current.startMouseY; + setPos({ + x: Math.max( + 0, + Math.min(window.innerWidth - WIN_W, dragRef.current.startWinX + dx), + ), + y: Math.max( + 0, + Math.min(window.innerHeight - 40, dragRef.current.startWinY + dy), + ), + }); + }; + + const onUp = () => { + dragRef.current = null; + document.removeEventListener("mousemove", onMove); + document.removeEventListener("mouseup", onUp); + }; + + document.addEventListener("mousemove", onMove); + document.addEventListener("mouseup", onUp); + }, + [isMaximized], + ); + + const isGenericTerminal = !!session.terminal; + const isBackupTask = !isGenericTerminal && !!session.backupStorage; + + const title = + session.title ?? + (isGenericTerminal + ? (session.terminal?.scriptPath.split("/").pop() ?? "Terminal") + : isBackupTask + ? `Backup CT ${session.containerId} → ${session.backupStorage}` + : session.containerName + ? `${session.containerName}${session.containerId ? ` (${session.containerId})` : ""}` + : `Shell${session.containerId ? ` — ${session.containerId}` : ""}`); + + const terminalProps = isGenericTerminal + ? { + scriptPath: session.terminal!.scriptPath, + onClose, + mode: session.terminal!.mode ?? (session.terminal!.server ? ("ssh" as const) : ("local" as const)), + server: session.terminal!.server, + isUpdate: session.terminal!.isUpdate, + isShell: session.terminal!.isShell, + isBackup: session.terminal!.isBackup, + isClone: session.terminal!.isClone, + executeInContainer: session.terminal!.executeInContainer, + containerId: session.terminal!.containerId, + storage: session.terminal!.storage, + backupStorage: session.terminal!.backupStorage, + executionId: session.terminal!.executionId, + cloneCount: session.terminal!.cloneCount, + hostnames: session.terminal!.hostnames, + containerType: session.terminal!.containerType, + envVars: session.terminal!.envVars, + } + : isBackupTask + ? { + scriptPath: `backup-${session.containerId}-${session.backupStorage}`, + onClose, + mode: "ssh" as const, + server: session.server, + isBackup: true, + containerId: session.containerId, + storage: session.backupStorage, + } + : { + scriptPath: `shell-${session.containerId}`, + onClose, + mode: session.server ? ("ssh" as const) : ("local" as const), + server: session.server, + isShell: true, + containerId: session.containerId, + containerType: session.containerType ?? "lxc", + }; + + const headerIcon = isBackupTask ? ( + + ) : ( + + ); + + const vmHint = + !isGenericTerminal && !isBackupTask && session.containerType === "vm" && ( +

+ VM shell uses the Proxmox serial console. The VM must have a serial port + configured (e.g.{" "} + + qm set {session.containerId} -serial0 socket + + ). Detach with Ctrl+O. +

+ ); + + const windowStyle: React.CSSProperties = isMaximized + ? { inset: 0, width: "100vw", height: "100vh", borderRadius: 0 } + : pos + ? { left: pos.x, top: pos.y, width: WIN_W, height: WIN_H } + : { + left: "50%", + top: "50%", + transform: "translate(-50%, -50%)", + width: WIN_W, + height: WIN_H, + }; + + return ( +
+ {/* Header — drag handle */} +
+
+ {headerIcon} + {title} + {!isBackupTask && session.containerType === "vm" && ( + + VM + + )} +
+
+ + {isMaximized ? ( + + ) : ( + + )} + +
+
+ {vmHint} +
+ +
+
+ ); +} + +// ── Root component rendered in app-shell ────────────────────────────────────── +export function FloatingShell() { + const { sessions, close, minimize, restore } = useShell(); + const [mounted, setMounted] = useState(false); + useEffect(() => setMounted(true), []); + if (!mounted) return null; + + const openSessions = sessions.filter((e) => e.state === "open"); + const minimizedSessions = sessions.filter((e) => e.state === "minimized"); + + return createPortal( + <> + {/* All windows — minimized ones are hidden via CSS to preserve terminal state */} + {sessions.map((entry, idx) => { + const isVisible = entry.state === "open"; + const stackIndex = openSessions.indexOf(entry); + return ( + = 0 ? stackIndex : idx} + isVisible={isVisible} + onClose={() => { + close(entry.id); + entry.session.onComplete?.(); + }} + onMinimize={() => minimize(entry.id)} + /> + ); + })} + + {/* Minimised pills — stacked bottom-right */} + {minimizedSessions.length > 0 && ( +
+ {minimizedSessions.map((entry) => { + const isBackup = !!entry.session.backupStorage; + const label = + entry.session.title ?? + (isBackup + ? `Backup CT ${entry.session.containerId}` + : entry.session.containerName + ? `${entry.session.containerName}${entry.session.containerId ? ` (${entry.session.containerId})` : ""}` + : entry.session.terminal + ? (entry.session.title ?? (entry.session.terminal.scriptPath.split("/").pop() ?? "Terminal")) + : `Shell${entry.session.containerId ? ` — ${entry.session.containerId}` : ""}`); + return ( + + ); + })} +
+ )} + , + document.body, + ); +} diff --git a/src/app/_components/Footer.tsx b/src/app/_components/Footer.tsx index 7d3b5e1..33ea787 100644 --- a/src/app/_components/Footer.tsx +++ b/src/app/_components/Footer.tsx @@ -1,8 +1,8 @@ -'use client'; +"use client"; -import { api } from '~/trpc/react'; -import { Button } from './ui/button'; -import { ExternalLink, FileText } from 'lucide-react'; +import { api } from "~/trpc/react"; +import { Button } from "./ui/button"; +import { ExternalLink, FileText, Heart } from "lucide-react"; interface FooterProps { onOpenReleaseNotes: () => void; @@ -12,48 +12,83 @@ export function Footer({ onOpenReleaseNotes }: FooterProps) { const { data: versionData } = api.version.getCurrentVersion.useQuery(); return ( -