diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..4c3c077 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,37 @@ +name: CI + +on: + pull_request: + push: + branches: + - main + +permissions: + contents: read + +jobs: + desktop: + name: Desktop checks + runs-on: macos-latest + + steps: + - name: Check out repository + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + + - name: Install frontend dependencies + run: npm ci + + - name: Build frontend + run: npm run build + + - name: Test Rust backend + working-directory: src-tauri + run: cargo test --all-targets diff --git a/.gitignore b/.gitignore index 157943f..09f3e0d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,14 +1,46 @@ +# OS and editor files .DS_Store -.build/ -build/ -dist/ -*.dmg -DerivedData/ +.idea/ .vscode/ +*.suo +*.sw? *.xcuserdata/ *.xcuserstate -# Local secrets and exported signing keys +# Frontend output and logs +node_modules/ +dist/ +dist-ssr/ +logs/ +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* +*.local + +# Rust and Tauri output +target/ +src-tauri/target/ +src-tauri/gen/ + +# Locally provisioned native engines +src-tauri/binaries/aria2c +src-tauri/binaries/deno +src-tauri/binaries/ffmpeg +src-tauri/binaries/yt-dlp +src-tauri/binaries/_internal/certifi/cacert.pem + +# Packaged artifacts +build/ +*.dmg +*.AppImage +*.deb +*.msi +*.exe + +# Local secrets and signing material .env .env.* *.key @@ -22,15 +54,17 @@ sparkle_private_key* SparklePrivateKey* private-key* private_key* -yt-dlp -deno -ffmpeg -aria2c -Sources/Firelink/*-version.txt -Sources/Firelink/_internal/ -Sources/Firelink/aria2-libs/ -Sources/Firelink/aria2-licenses/ -Sources/Firelink/aria2-cacert.pem -!Sources/Firelink/_internal/ -Sources/Firelink/_internal/* -!Sources/Firelink/_internal/.gitkeep + +# Legacy Swift build output and downloaded engines +legacy/swift/.build/ +legacy/swift/DerivedData/ +legacy/swift/Sources/Firelink/*-version.txt +legacy/swift/Sources/Firelink/yt-dlp +legacy/swift/Sources/Firelink/deno +legacy/swift/Sources/Firelink/ffmpeg +legacy/swift/Sources/Firelink/aria2c +legacy/swift/Sources/Firelink/_internal/* +legacy/swift/Sources/Firelink/aria2-libs/ +legacy/swift/Sources/Firelink/aria2-licenses/ +legacy/swift/Sources/Firelink/aria2-cacert.pem +!legacy/swift/Sources/Firelink/_internal/.gitkeep diff --git a/CHANGELOG.md b/CHANGELOG.md index bf2a4f1..e9c387e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed +- Promote the Rust, Tauri, React, and TypeScript application to the repository root. +- Archive the original SwiftUI implementation under `legacy/swift`. +- Refresh project documentation, package metadata, CI, and the in-app About section for the current architecture and migration status. + +### Removed +- Delete obsolete template assets, scratch files, duplicate icon exports, and unused backend helpers. + ## [0.7.3] - 2026-06-11 ### New Features & Improvements diff --git a/README.md b/README.md index 3f2e841..fce55dd 100644 --- a/README.md +++ b/README.md @@ -1,110 +1,135 @@
- Firelink Icon -

Firelink

-

The modern, blazing-fast download manager built natively for Apple Silicon macOS.

+ Firelink - Swift Version - Platform Support - Engine - yt-dlp Engine - ffmpeg Engine - Deno Engine - License + # Firelink + + **A fast, focused desktop download manager powered by Rust and Tauri.** + + [![Version](https://img.shields.io/badge/version-0.7.3-6f42c1?style=flat-square)](https://github.com/nimbold/Firelink/releases) + [![Platform](https://img.shields.io/badge/platform-macOS-111111?style=flat-square&logo=apple)](#project-status) + [![Tauri](https://img.shields.io/badge/Tauri-2-24C8DB?style=flat-square&logo=tauri&logoColor=white)](https://tauri.app/) + [![Rust](https://img.shields.io/badge/Rust-backend-000000?style=flat-square&logo=rust)](https://www.rust-lang.org/) + [![License](https://img.shields.io/github/license/nimbold/Firelink?style=flat-square)](LICENSE) + [![CI](https://img.shields.io/github/actions/workflow/status/nimbold/Firelink/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/nimbold/Firelink/actions/workflows/ci.yml) + + [Features](#features) ยท [Install](#installation) ยท [Development](#development) ยท [Project status](#project-status)
---- +Firelink brings segmented downloads, media extraction, scheduling, and browser +integration into one native-feeling desktop application. The current app uses a +Rust backend with a React and TypeScript interface, replacing the original +SwiftUI implementation. -**Firelink** reimagines macOS file downloading by wrapping legendary open-source engines (`aria2c`, `yt-dlp`, and `ffmpeg`) in a beautifully crafted, highly polished SwiftUI interface. Enjoy high-speed segmented downloads, native media extraction, seamless browser integration, and intelligent file organization without compromising on the aesthetics of your Mac. +## Features ---- +- **Fast transfers** with segmented downloading powered by aria2 +- **Media downloads** through yt-dlp, FFmpeg, and Deno +- **Persistent queues** with configurable concurrency and speed limits +- **Download scheduling** with optional post-queue system actions +- **Pause, resume, retry, and duplicate-file handling** +- **Smart organization** with categories and configurable destinations +- **Browser integration** through the Firelink Companion extension +- **Secure local handoff** using authenticated extension pairing +- **System integration** including tray controls, notifications, and sleep prevention +- **Built-in update checks** backed by GitHub Releases -## ๐Ÿ“ธ Screenshots +## Installation -
- Firelink main window - Add downloads window - Settings -
- A premium native experience, from batch linking to advanced settings. -
+> [!IMPORTANT] +> The Rust and Tauri application is still completing release packaging. The +> current `v0.7.3` macOS asset on GitHub Releases belongs to the archived SwiftUI +> implementation. -
-Light Theme Screenshots -
+For now, run the maintained application from source using the development +instructions below. New packaged builds will be published through +[GitHub Releases](https://github.com/nimbold/Firelink/releases) once the +migration is complete. -
- Firelink main window light theme - Add downloads window light theme - Settings light theme -
+Firelink is currently developed and tested on macOS. Production bundles include +the media engines, so packaged releases will not require separate aria2, yt-dlp, +FFmpeg, or Deno installations. -
+### Browser Extension ---- +Install [Firelink Companion for Firefox](https://addons.mozilla.org/en-US/firefox/addon/firelink-companion/) +to send browser downloads directly to Firelink. Pair the extension from +**Settings โ†’ Integrations** using the generated local token. -## โœจ Features +## Project Status -- โšก **Multi-Segmented Engine:** Ultra-fast parallel downloading powered by `aria2c` with configurable speed limits and a built-in download scheduler. -- ๐Ÿช„ **Media Downloader:** Instantly extract high-quality media (4K, 1080p, MP3) with smart cascading format pickers, powered by bundled `yt-dlp` and `ffmpeg`. -- ๐ŸŽจ **Premium Native UI:** A responsive, frosted-glass SwiftUI interface strictly adhering to Apple Human Interface Guidelines, featuring a visual chunk map and dynamic progress tracking. -- ๐ŸŒ **Seamless Browser Integration:** Send downloads directly from your browser via the secure Firelink Companion extension. -- ๐Ÿ›ก๏ธ **Privacy & Security:** Zero-configuration setup with deferred Keychain integration and secure HMAC-SHA256 authenticated local API endpoints ensure your system remains strictly isolated and protected from malicious scripts. -- ๐Ÿ—‚๏ธ **Smart Organization:** Auto-categorizes incoming files and remembers your preferred download locations. -- ๐Ÿ”„ **Native Updater:** Built-in seamless GitHub release checking for lightweight and transparent app updates. +The migration from SwiftUI to Rust, Tauri, React, and TypeScript is in its final +stage. The new application is the maintained implementation at the repository +root. ---- +| Target | Status | +| --- | --- | +| macOS | Active development and automated testing | +| Windows | Core architecture prepared; packaging and validation pending | +| Linux | Core architecture prepared; packaging and validation pending | +| Legacy SwiftUI app | Archived in [`legacy/swift`](legacy/swift) | -## ๐Ÿงฉ Browser Integration +See the [changelog](CHANGELOG.md) for release history and recent work. -We are live! Send downloads directly from your browser to the Firelink app with zero friction. +## Development -Install on Firefox +### Requirements -*(Check out the [Firelink-Extension source code](https://github.com/nimbold/Firelink-Extension) to contribute or learn more.)* +- Node.js 22 or newer +- npm +- Rust and Cargo +- [Tauri 2 platform prerequisites](https://v2.tauri.app/start/prerequisites/) ---- +Clone the repository with its browser-extension submodule: -## ๐ŸŒ Cross-Platform Evolution (Firelink Reborn) - -I'm currently rewriting Firelink from the ground up using **Tauri, React, and Rust** to bring our blazing-fast native experience to Windows and Linux, while maintaining our standard of excellence on macOS. - -### ๐Ÿš€ Development Progress -- [x] **Core Engine Port:** `aria2c` and `yt-dlp` integration in Rust -- [x] **UI Foundation:** Pixel-perfect React + Tailwind interface -- [x] **Settings & State:** Fully wired frontend-to-backend communication -- [ ] **Cross-Platform Binaries:** Automated builds for Windows (`.exe`) and Linux (`.AppImage`) -- [ ] **Feature Parity:** Porting remaining media extraction and scheduler features - -*Stay tuned as we prepare our first true cross-platform beta release!* - ---- - -## ๐Ÿ› ๏ธ Quick Start - -**OS Support:** macOS 14.0 or newer (Apple Silicon natively). - -Run the application directly: -```bash -swift run Firelink +```sh +git clone --recurse-submodules https://github.com/nimbold/Firelink.git +cd Firelink ``` -Or build a production `.app` bundle: -```bash -make app && open build/Firelink.app +Install dependencies and launch the desktop app: + +```sh +npm install +npm run tauri dev ``` ---- +Run the frontend build and backend tests: -## ๐Ÿ† Credits +```sh +npm run build +cd src-tauri +cargo test --all-targets +``` -Firelink stands on the shoulders of giants. A massive thank you to the contributors of these phenomenal open-source projects: -- **[aria2](https://aria2.github.io/)** - The legendary multi-protocol download utility driving our core engine. -- **[yt-dlp](https://github.com/yt-dlp/yt-dlp)** - The definitive command-line audio/video downloader. -- **[FFmpeg](https://ffmpeg.org/)** - The industry standard for media stream manipulation and merging. -- **[Deno](https://deno.com/)** - The secure runtime for JavaScript and TypeScript solving complex media extraction challenges. +Create a production bundle: ---- +```sh +npm run tauri build +``` -## ๐Ÿ“„ License +Native media executables and runtime files are expected in +`src-tauri/binaries` when running or packaging the application locally. -Firelink is released under the MIT License. See [LICENSE](LICENSE) for details. +## Repository Structure + +```text +. +โ”œโ”€โ”€ src/ React and TypeScript interface +โ”œโ”€โ”€ src-tauri/ Rust backend and Tauri configuration +โ”œโ”€โ”€ Extensions/Firefox/ Firelink Companion submodule +โ””โ”€โ”€ legacy/swift/ Archived SwiftUI application +``` + +## Technology + +- [Tauri 2](https://tauri.app/) for the desktop runtime +- [Rust](https://www.rust-lang.org/) and [Tokio](https://tokio.rs/) for native application logic +- [React](https://react.dev/) and [TypeScript](https://www.typescriptlang.org/) for the interface +- [Zustand](https://zustand-demo.pmnd.rs/) for frontend state +- [SQLite](https://www.sqlite.org/) for persistent application data +- [aria2](https://aria2.github.io/), [yt-dlp](https://github.com/yt-dlp/yt-dlp), + [FFmpeg](https://ffmpeg.org/), and [Deno](https://deno.com/) for download and media processing + +## License + +Firelink is available under the [MIT License](LICENSE). diff --git a/apps/desktop/.gitignore b/apps/desktop/.gitignore deleted file mode 100644 index a547bf3..0000000 --- a/apps/desktop/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/apps/desktop/README.md b/apps/desktop/README.md deleted file mode 100644 index 102e366..0000000 --- a/apps/desktop/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# Tauri + React + Typescript - -This template should help get you started developing with Tauri, React and Typescript in Vite. - -## Recommended IDE Setup - -- [VS Code](https://code.visualstudio.com/) + [Tauri](https://marketplace.visualstudio.com/items?itemName=tauri-apps.tauri-vscode) + [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer) diff --git a/apps/desktop/app-icon-padded.png b/apps/desktop/app-icon-padded.png deleted file mode 100644 index 4d5d0c9..0000000 Binary files a/apps/desktop/app-icon-padded.png and /dev/null differ diff --git a/apps/desktop/app-icon-small.png b/apps/desktop/app-icon-small.png deleted file mode 100644 index e71efa0..0000000 Binary files a/apps/desktop/app-icon-small.png and /dev/null differ diff --git a/apps/desktop/app-icon-transparent.png b/apps/desktop/app-icon-transparent.png deleted file mode 100644 index d646ee6..0000000 Binary files a/apps/desktop/app-icon-transparent.png and /dev/null differ diff --git a/apps/desktop/public/tauri.svg b/apps/desktop/public/tauri.svg deleted file mode 100644 index 31b62c9..0000000 --- a/apps/desktop/public/tauri.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/apps/desktop/public/vite.svg b/apps/desktop/public/vite.svg deleted file mode 100644 index e7b8dfb..0000000 --- a/apps/desktop/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/desktop/src-tauri/src/fetch_test.rs b/apps/desktop/src-tauri/src/fetch_test.rs deleted file mode 100644 index 60c38c4..0000000 --- a/apps/desktop/src-tauri/src/fetch_test.rs +++ /dev/null @@ -1,13 +0,0 @@ -use reqwest; - -#[tokio::main] -async fn main() { - let url = "https://speed.hetzner.de/100MB.bin"; - let client = reqwest::Client::builder() - .user_agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36") - .build() - .unwrap(); - let res = client.head(url).send().await.unwrap(); - println!("Status: {}", res.status()); - println!("Headers: {:?}", res.headers()); -} diff --git a/apps/desktop/src/assets/app-icon.png b/apps/desktop/src/assets/app-icon.png deleted file mode 100644 index 872bbec..0000000 Binary files a/apps/desktop/src/assets/app-icon.png and /dev/null differ diff --git a/apps/desktop/src/assets/react.svg b/apps/desktop/src/assets/react.svg deleted file mode 100644 index 6c87de9..0000000 --- a/apps/desktop/src/assets/react.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/desktop/test_download.js b/apps/desktop/test_download.js deleted file mode 100644 index ae37383..0000000 --- a/apps/desktop/test_download.js +++ /dev/null @@ -1,2 +0,0 @@ -import { invoke } from '@tauri-apps/api/core'; -invoke('start_media_download', { id: "test", url: "https://www.youtube.com/watch?v=1PBRhm5ZnjU", destination: "/tmp", filename: "test.mp4", formatSelector: null }).then(console.log).catch(console.error); diff --git a/apps/desktop/index.html b/index.html similarity index 89% rename from apps/desktop/index.html rename to index.html index c2c2a84..4cde6fc 100644 --- a/apps/desktop/index.html +++ b/index.html @@ -2,7 +2,7 @@ - + Firelink Download Manager diff --git a/.github/workflows/release.yml b/legacy/swift/.github/workflows/release.yml similarity index 100% rename from .github/workflows/release.yml rename to legacy/swift/.github/workflows/release.yml diff --git a/legacy/swift/CHANGELOG.md b/legacy/swift/CHANGELOG.md new file mode 100644 index 0000000..9221447 --- /dev/null +++ b/legacy/swift/CHANGELOG.md @@ -0,0 +1,364 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +## [0.7.3] - 2026-06-11 + +### New Features & Improvements +- Add Deno to about credits and engines list. +- Enhance speed and ETA display logic during pause and drop. +- Accumulate track sizes to present a unified overall progress bar. + +### Fixes +- Resolve unknown speed flickering and ultra-wide high-resolution detection. +- Emit distinct status messages for individual tracks during download. +- Pad overall progress total for first track to prevent 100% snapback. + +## [0.7.2] - 2026-06-11 + +### Fixed +- Prevented yt-dlp and JavaScript child processes from keeping metadata fetches or canceled downloads alive indefinitely. +- Replaced the repeatedly extracted one-file yt-dlp build with a stable prewarmed runtime cache. +- Bundled Deno so YouTube JavaScript challenges and formats above 720p do not depend on system-installed tools. +- Stopped masking empty-format extraction failures and removed brittle forced YouTube client selection. + +### Changed +- Pinned and checksum-verified yt-dlp, Deno, FFmpeg, aria2, and aria2's libraries for matching local and GitHub Actions builds. +- Removed aria2's runtime dependency on Homebrew and configured its bundled CA certificate for direct and yt-dlp-delegated HTTPS downloads. +- Added bounded network retries and optional aria2c acceleration for large direct media downloads. + +## [0.7.1] - 2026-06-11 + +### Fixes +- Increased the `yt-dlp` metadata extraction timeout to 120 seconds to properly handle YouTube's new JavaScript Proof-of-Work bot protection challenges. +- Improved the `AddDownloadsView` UI to display the exact underlying error message during extraction failures rather than a generic masked string. + +### Security Fixes +- Addressed multiple vulnerabilities identified in the v0.7.0 security audit. +- Moved `yt-dlp` credential passing from CLI arguments to secure temporary configuration files to prevent process list leakage. +- Enforced strict `0o600` POSIX permissions on `aria2c` temporary configuration files to protect generated RPC secrets. +- Replaced the unauthenticated local connection protocol with a secure HMAC-SHA256 signature validation. +- Excluded sensitive properties like `rpcSecret` and `rpcPort` from `DownloadItem` serialization so they are never saved to disk in plaintext. +- Mitigated SSRF (Server-Side Request Forgery) by strictly validating metadata fetch requests against private IP addresses and loopback ranges. +- Prevented potential path traversal vulnerabilities by validating destination file URLs during duplicate resolution. +- Sanitized custom HTTP headers to prevent CR/LF injection vectors. +- Re-architected `aria2c` port-finding with POSIX sockets to eliminate a known race-condition window. +- Applied rate-limiting and text length bounds to the custom `firelink://` scheme to mitigate DoS and injection attempts. + +### Fixes +- Fixed a metadata extraction timeout when downloading from YouTube by preventing child processes from holding process pipes open. +- Resolved an issue to correctly assign filenames for auto-captured downloads. +- Restored the UUID fallback for token generation to prevent silent failures if secure random byte generation fails. +- Hardened local API security by immediately rejecting requests if the expected pairing token is completely empty. +- Implemented a thread-safe cleanup mechanism for temporary directories to resolve a concurrency race condition during engine cancellation. + +## [0.7.0] - 2026-06-11 + +### New Features & Improvements +- Complete UI modernization for the context menu, toolbar, download list, and sidebar to adhere strictly to Apple's Human Interface Guidelines (HIG). +- Overhaul of the Settings panes including Site Logins, Engine, About, Locations, and Downloads for a unified, cleaner look. +- Introduce an "Ask where to save" global configuration option for manual location picking per download. +- Add "Stop Time" option to the Scheduler and unit picker for the global Speed Limiter. +- Enhance the Integration pane with a visible step counter and an up-to-date status icon. +- Optimize `yt-dlp` execution for noticeably faster media extraction speeds. +- Defer Keychain access prompts and track executable modification dates for a more secure "priming" mechanism. + +### Fixes +- Fix issues regarding proxy environment propagation into media download processes. +- Resolve multiple critical bugs related to configuration storage and download stability. +- Address multiple underlying issues identified during comprehensive code reviews to improve overall resilience. + +## [0.6.6] - 2026-06-10 + +### New Features +- Add cascading media format pickers with inline loading states during metadata extraction. +- Redesign the Integration settings pane for a more modern experience. +- Overhaul the built-in update checker UI to integrate seamlessly into the settings. + +### Improvements +- Implement keychain permission priming to defer secure access until explicitly granted, preventing unexpected macOS prompts. +- Optimize core UI components to significantly improve rendering performance and overall app stability. + +### Fixes +- Fix layout and dynamic sizing bugs in the Add Downloads window. +- Fix formatting inconsistencies in media options selection. +- Fix toast notification rendering glitches. + +## [0.6.5] - 2026-06-09 + +### Fixes +- Fix GitHub Actions build failure caused by an ambiguous bundle format when attempting to codesign `yt-dlp`'s embedded PyInstaller `Python.framework`. + +## [0.6.4] - 2026-06-09 + +### New Features +- Replace Sparkle with a lightweight native GitHub release checker for seamless and reliable updates. + +### Improvements +- Polish the browser extension pairing UI with a secure masked token field and improved styling. + +### Changes +- Remove stale references to the legacy static token from the Firelink Companion extension. + +### Fixes +- Fix an issue where the app failed to detect newer padded version numbers (e.g., `1.0` vs `1.0.0`). +- Fix missing macOS code signatures for `yt-dlp`'s embedded Python runtime, resolving potential Gatekeeper rejections. + +## [0.6.3] - 2026-06-09 + +### Improvements +- Upgrade pairing token generation to use a 32-byte cryptographically secure random sequence. +- Migrate pairing token storage from UserDefaults to KeychainCredentialStore for enhanced security. +- Redesign the "Connect Browser Extension" settings pane to be browser-agnostic with links to both Firefox and Chrome extension stores. +- Add a "Regenerate" button to instantly invalidate and recreate the pairing token. + +### Fixes +- Fix CORS preflight failures for the new `/ping` extension connection check by allowing `GET` methods in the local server. + +## [0.6.2] - 2026-06-08 + +### Fixes +- Fix a bug where confirming a duplicate resolution failed to close the Add Downloads window, misleading users into thinking the download didn't start. +- Fix keyboard shortcut collision that caused the main window to intercept Enter/Escape keys when the duplicate resolution sheet was open. +- Fix UI freeze when checking release notes for an update by parsing HTML asynchronously on a background thread. +- Improve update changelog formatting by converting release note markup to clean Markdown instead of stripping it into an unreadable block of text. +- Change the internal `Process xxxxx` status message to a cleaner `Starting...` message when queueing a new download. +- Fix `EXC_BREAKPOINT` crash on app launch in production builds by prioritizing `Bundle.main` over `Bundle.module` when accessing resources. + +## [0.6.1] - 2026-06-08 + +### New Features +- No new user-facing features in this patch release. + +### Improvements +- Package bundled `yt-dlp` and `ffmpeg` executables into the macOS app bundle so media extraction works in release builds. +- Resolve bundled media engines from both app resources and SwiftPM resources to support packaged apps and local development builds. + +### Changes +- Fetch release-time media engine binaries in GitHub Actions instead of storing large binaries in git. +- Use the changelog entry for GitHub release page descriptions so published release notes match the source tree. +- Remove stale media add-on update language now that media engines are bundled with the app. +- Update Firelink Companion to `1.0.8`. + +### Fixes +- Replace the stale pinned FFmpeg download URL with Martin Riedl's latest macOS ARM64 release redirect. +- Fail release builds early when `yt-dlp` or `ffmpeg` cannot be fetched or made executable. +- Remove unused media inspector and media download entry-point code left behind by the removed engine update flow. +- Prevent Firelink Companion global capture from canceling browser downloads unless the native app confirms the local API handoff. + +## [0.6.0] - 2026-06-08 + +### New features +- Enhance mixed media support and add duplicate resolution. +- Redesign settings panes and enhance update flows. +- Improve yt-dlp fetching speed and redesign media detection UI. +- Enhance media engine settings with cookie extraction and update checks. +- Modernize Integration settings UI and add official install button. +- Integrate yt-dlp to DownloadController and add global queue support. +- Implement smart progressive disclosure UI and media extraction engine. +- Implement gatekeeper architecture for on-demand media engine binaries. +- Inline update checks to avoid unnecessary modals. + +### Changes +- Add backward compatibility support for extension tokens. +- Update Firelink-Extension submodule to latest. +- Update app icons and icon generation scripts. +- Tone down icon gradient to 1.9x for modern subtle look. +- Increase gradient contrast for stronger lighting effect. +- Switch to lighter gradient (+1 to 0). +- Revert to plain mode without gradient. +- Apply premium gradient to the correct new icon and app icon. +- Remove redundant version string from up-to-date message. +- Update release metadata for the framework-embedded dmg. + +### Fixes +- Cap max height of download links text editor. +- Harden media download flow. +- Pass extractor arguments to yt-dlp download process. +- Restore single click selection by removing simultaneousGesture. +- Restore Download Properties routing and gestures. +- Pass UUID as String for download properties WindowGroup to prevent routing failures. +- Size column fallback and table row interactions. +- Media download UX and table row selection. +- Media downloads connections, progress parsing, file size, and selection highlight. +- Stabilize yt-dlp metadata and add-on updates. +- Block automatic metadata fetch for private IP addresses (security). +- Actually update extension icons with the 1.9x gradient icon. +- Correctly remove black padding and mask corners. +- Harden release metadata. +- Correct no-update handling to prevent false error messages. + +## [0.5.7] - 2026-06-06 + +### New features +- Replaced the basic in-app update checker with an integrated release-checking flow. +- Added secure update metadata checks before presenting new releases in the app. + +## [0.5.6] - 2026-06-05 + +### New features +- Added the official transparent GitHub icon to the Source Code link in the About page. + +### Changes +- Compacted the About settings pane to reduce vertical padding, placing the app identity and updates prominently at the top. +- Consolidated developer, credits, and legal links into a single unified footer section in the About pane. + +### Fixes +- Fixed a build script bug that prevented bundled images (like the GitHub icon) from being copied into the final app bundle. + +## [0.5.5] - 2026-06-05 + +### New features +- Added a compact Download Properties inspector with a persistent progress summary and redownload-aware transfer settings. +- Added authenticated metadata probing so batch previews can use custom or saved credentials. + +### Changes +- Updated Download Properties disclosure sections so their full title row opens and closes them. +- Compacted Add Downloads with a smaller summary strip, queue picker, and clearer per-file speed limit wording. +- Expanded download table hit areas so double-clicks register across empty cell space. + +### Fixes +- Fixed active downloads that could remain stuck at 99% until manually stopped by detecting `aria2` completion through RPC. +- Fixed Chunk Map layout overlap in Download Properties. +- Fixed Download Properties controls that implied completed or active file identity edits would apply immediately. + +## [0.5.4] - 2026-06-04 + +### New features +- Added direct double-click access to Download Properties for unfinished downloads. +- Added a `make verify` command for local build and Firefox extension manifest checks. + +### Changes +- Updated Firefox integration to probe the same local fallback ports used by the app. +- Updated global speed limiting so changes apply to active downloads through `aria2` RPC. +- Declared SwiftPM resources and added development fallbacks for app icons and Firefox extension copying. +- Narrowed saved site-login matching so plain host patterns match exact hosts unless a wildcard is used. + +### Fixes +- Fixed browser handoff failures when the default local extension port is unavailable. +- Fixed dropped `Referer` headers from browser extension requests. +- Fixed scheduler configurations that could be enabled without any runnable queue target. +- Fixed unsafe file names from URLs, metadata responses, and manual property edits. +- Fixed a possible duplicate-open glitch when double-clicking unfinished downloads. + +## [0.5.3] - 2026-06-04 + +### New features +- Added `ChunkMapView` to visualize active segmented downloads using `aria2` RPC with minimal performance overhead. +- Added seamless drag-and-drop support for URLs and text files in the main window and dock icon. + +### Changes +- Refactored all Settings panes to use standard macOS HIG `Form` and `.toolbar` layouts. +- Updated the "Add Downloads" dialog to use native macOS `.toolbar` with integrated cancel actions. + +### Fixes +- Fixed a DNS rebinding vulnerability by rigorously validating the `Host` header within the local extension server. +- Fixed a potentially unbounded memory leak in the download console buffer by introducing a strict 512KB cap. +- Fixed an intermittent UI hang during the `aria2c` version check by fully decoupling the process execution into a detached background task. + +## [0.5.2] - 2026-06-04 + +### Fixes +- Fixed the hit-testing area on Settings tabs so the entire tab frame is clickable, not just the text/icon. +- Re-architected the Settings tab bar layout to perfectly distribute available horizontal space, ensuring symmetric right/left padding. + +## [0.5.1] - 2026-06-04 + +### Changes +- Added sleek SF Symbol icons to the Settings capsule tabs to improve visual scannability and modernize the interface. + +## [0.5.0] - 2026-06-04 + +### New features +- Added a dedicated Speed Limiter UI to the main sidebar for instant global bandwidth throttling. +- Integrated Settings directly into the main application window instead of a separate macOS scene, paving the way for future Windows/Linux cross-platform parity. + +### Changes +- Modernized Settings with a sleek horizontal tab bar layout. +- Added persistent state retention across views (remembers the last visited settings tab and custom speed limits). +- Compacted the README file to be more concise and user-friendly. + +### Fixes +- Fixed a critical memory crash (`EXC_BAD_ACCESS`) inside the Download Table caused by ephemeral string sorting during active downloads. +- Fixed sidebar layout glitches to prevent text overlap during scroll. + +## [0.4.3] - 2026-06-03 + +### Changes +- Refined About page UI and simplified the delete confirmation dialog. + +### Fixes +- Optimized disk writes and UI state updates to significantly reduce main thread CPU usage and SSD wear during concurrent downloads and table resizing. + +## [0.4.2] - 2026-06-03 + +### Features added +- Added double-click to open completed files directly from the download table. +- Added redownload functionality for completed or failed items. +- Added 'Copy Address' context menu action. +- Added a monochrome template tray icon loaded explicitly with precise dimensions. + +### Changes +- Improved context menu organization and conditionally displayed actions based on download status. + +## [0.4.1] - 2026-06-03 + +### Features added +- Added app theming engine with Look and Feel settings. +- Added Font Size, List Row Density, and Menu Bar Icon settings. +- Added tray icon and context menu for main window and queues. +- Added site logins integration directly into the Add Downloads window. + +### Changes +- Updated the paste hint to use a visual Command icon. + +### Fixes +- Resolved SwiftUI infinite layout freeze caused by MenuBarExtra binding. +- Fixed a bug with Light/System theme appearance. +- Fixed phantom state issues with Menu Bar Icon setting and conditionally applied theme backgrounds to preserve native macOS translucency. + +## [0.4.0] - 2026-06-03 + +### Changes +- Reorganized Settings sections so related download preferences sit together and app diagnostics live under App. +- Hardened the release workflow with explicit macOS 26 SDK checks, newer GitHub Actions, and app signature verification. +- Prefer the bundled `aria2c` binary inside release builds. + +### Fixes +- Fixed queue-specific starts so one queue no longer starts unrelated queued downloads. +- Fixed scheduler completion handling so empty queues do not trigger post-download system actions. +- Fixed queue drag reordering when moving items downward. +- Fixed scheduler Automation permission prompting. + +### Features added +- Added scheduler controls with explicit Automation permission UI. +- Added global and per-download speed limits. +- Added advanced transfer options for checksums, headers, cookies, and mirror URLs. + +## [0.3.0] - 2026-06-02 + +### Added +- **Zero-Config Setup:** Firelink now automatically bundles the `aria2c` engine and all of its dynamic library dependencies internally via `dylibbundler`. End-users no longer need to install Homebrew or `aria2c` manually! + +### Changed +- **README Redesign:** Modernized the README with a clean layout, centered App Icon header, and updated roadmap. +- **CI Releases:** The GitHub Actions DMG release pipeline now automatically fetches and packages dependencies during builds. + +## [0.2.1] - 2026-06-02 +### Changed +- Fixed CI release runner specifying macOS 26. + +## [0.2.0] - 2026-06-01 +### Added +- **In-App Update Checker:** Built-in GitHub release checks inside the Settings About pane. +- **Queue Management:** Advanced drag-and-drop priority ordering and queue management controls. +- **Download Recovery:** Built-in download recovery and automated retry policies. +- Initial core download engine with `aria2c` support. +- Native macOS Settings pane. +- Smart file categorization and organization based on extension detection. +- Keychain-secured authentication integration. diff --git a/Makefile b/legacy/swift/Makefile similarity index 100% rename from Makefile rename to legacy/swift/Makefile diff --git a/Package.swift b/legacy/swift/Package.swift similarity index 100% rename from Package.swift rename to legacy/swift/Package.swift diff --git a/legacy/swift/README.md b/legacy/swift/README.md new file mode 100644 index 0000000..33440d6 --- /dev/null +++ b/legacy/swift/README.md @@ -0,0 +1,114 @@ +> [!NOTE] +> This is the archived SwiftUI implementation. The maintained Rust, Tauri, +> React, and TypeScript application now lives at the repository root. + +
+ Firelink Icon +

Firelink

+

The modern, blazing-fast download manager built natively for Apple Silicon macOS.

+ + Swift Version + Platform Support + Engine + yt-dlp Engine + ffmpeg Engine + Deno Engine + License +
+ +--- + +**Firelink** reimagines macOS file downloading by wrapping legendary open-source engines (`aria2c`, `yt-dlp`, and `ffmpeg`) in a beautifully crafted, highly polished SwiftUI interface. Enjoy high-speed segmented downloads, native media extraction, seamless browser integration, and intelligent file organization without compromising on the aesthetics of your Mac. + +--- + +## ๐Ÿ“ธ Screenshots + +
+ Firelink main window + Add downloads window + Settings +
+ A premium native experience, from batch linking to advanced settings. +
+ +
+Light Theme Screenshots +
+ +
+ Firelink main window light theme + Add downloads window light theme + Settings light theme +
+ +
+ +--- + +## โœจ Features + +- โšก **Multi-Segmented Engine:** Ultra-fast parallel downloading powered by `aria2c` with configurable speed limits and a built-in download scheduler. +- ๐Ÿช„ **Media Downloader:** Instantly extract high-quality media (4K, 1080p, MP3) with smart cascading format pickers, powered by bundled `yt-dlp` and `ffmpeg`. +- ๐ŸŽจ **Premium Native UI:** A responsive, frosted-glass SwiftUI interface strictly adhering to Apple Human Interface Guidelines, featuring a visual chunk map and dynamic progress tracking. +- ๐ŸŒ **Seamless Browser Integration:** Send downloads directly from your browser via the secure Firelink Companion extension. +- ๐Ÿ›ก๏ธ **Privacy & Security:** Zero-configuration setup with deferred Keychain integration and secure HMAC-SHA256 authenticated local API endpoints ensure your system remains strictly isolated and protected from malicious scripts. +- ๐Ÿ—‚๏ธ **Smart Organization:** Auto-categorizes incoming files and remembers your preferred download locations. +- ๐Ÿ”„ **Native Updater:** Built-in seamless GitHub release checking for lightweight and transparent app updates. + +--- + +## ๐Ÿงฉ Browser Integration + +We are live! Send downloads directly from your browser to the Firelink app with zero friction. + +Install on Firefox + +*(Check out the [Firelink-Extension source code](https://github.com/nimbold/Firelink-Extension) to contribute or learn more.)* + +--- + +## ๐ŸŒ Cross-Platform Evolution (Firelink Reborn) + +I'm currently rewriting Firelink from the ground up using **Tauri, React, and Rust** to bring our blazing-fast native experience to Windows and Linux, while maintaining our standard of excellence on macOS. + +### ๐Ÿš€ Development Progress +- [x] **Core Engine Port:** `aria2c` and `yt-dlp` integration in Rust +- [x] **UI Foundation:** Pixel-perfect React + Tailwind interface +- [x] **Settings & State:** Fully wired frontend-to-backend communication +- [ ] **Cross-Platform Binaries:** Automated builds for Windows (`.exe`) and Linux (`.AppImage`) +- [ ] **Feature Parity:** Porting remaining media extraction and scheduler features + +*Stay tuned as we prepare our first true cross-platform beta release!* + +--- + +## ๐Ÿ› ๏ธ Quick Start + +**OS Support:** macOS 14.0 or newer (Apple Silicon natively). + +Run the application directly: +```bash +swift run Firelink +``` + +Or build a production `.app` bundle: +```bash +make app && open build/Firelink.app +``` + +--- + +## ๐Ÿ† Credits + +Firelink stands on the shoulders of giants. A massive thank you to the contributors of these phenomenal open-source projects: +- **[aria2](https://aria2.github.io/)** - The legendary multi-protocol download utility driving our core engine. +- **[yt-dlp](https://github.com/yt-dlp/yt-dlp)** - The definitive command-line audio/video downloader. +- **[FFmpeg](https://ffmpeg.org/)** - The industry standard for media stream manipulation and merging. +- **[Deno](https://deno.com/)** - The secure runtime for JavaScript and TypeScript solving complex media extraction challenges. + +--- + +## ๐Ÿ“„ License + +Firelink is released under the MIT License. See [LICENSE](LICENSE) for details. diff --git a/Resources/AppIcon.icns b/legacy/swift/Resources/AppIcon.icns similarity index 100% rename from Resources/AppIcon.icns rename to legacy/swift/Resources/AppIcon.icns diff --git a/Resources/AppIcon.png b/legacy/swift/Resources/AppIcon.png similarity index 100% rename from Resources/AppIcon.png rename to legacy/swift/Resources/AppIcon.png diff --git a/Resources/GitHubTemplate.png b/legacy/swift/Resources/GitHubTemplate.png similarity index 100% rename from Resources/GitHubTemplate.png rename to legacy/swift/Resources/GitHubTemplate.png diff --git a/Resources/Screenshots/Dark/AddWindow.png b/legacy/swift/Resources/Screenshots/Dark/AddWindow.png similarity index 100% rename from Resources/Screenshots/Dark/AddWindow.png rename to legacy/swift/Resources/Screenshots/Dark/AddWindow.png diff --git a/Resources/Screenshots/Dark/MainPage.png b/legacy/swift/Resources/Screenshots/Dark/MainPage.png similarity index 100% rename from Resources/Screenshots/Dark/MainPage.png rename to legacy/swift/Resources/Screenshots/Dark/MainPage.png diff --git a/Resources/Screenshots/Dark/Settings.png b/legacy/swift/Resources/Screenshots/Dark/Settings.png similarity index 100% rename from Resources/Screenshots/Dark/Settings.png rename to legacy/swift/Resources/Screenshots/Dark/Settings.png diff --git a/Resources/Screenshots/Light/AddWindow.png b/legacy/swift/Resources/Screenshots/Light/AddWindow.png similarity index 100% rename from Resources/Screenshots/Light/AddWindow.png rename to legacy/swift/Resources/Screenshots/Light/AddWindow.png diff --git a/Resources/Screenshots/Light/MainPage.png b/legacy/swift/Resources/Screenshots/Light/MainPage.png similarity index 100% rename from Resources/Screenshots/Light/MainPage.png rename to legacy/swift/Resources/Screenshots/Light/MainPage.png diff --git a/Resources/Screenshots/Light/Settings.png b/legacy/swift/Resources/Screenshots/Light/Settings.png similarity index 100% rename from Resources/Screenshots/Light/Settings.png rename to legacy/swift/Resources/Screenshots/Light/Settings.png diff --git a/Resources/new_icon_source.png b/legacy/swift/Resources/new_icon_source.png similarity index 100% rename from Resources/new_icon_source.png rename to legacy/swift/Resources/new_icon_source.png diff --git a/Scripts/create_app_bundle.sh b/legacy/swift/Scripts/create_app_bundle.sh similarity index 100% rename from Scripts/create_app_bundle.sh rename to legacy/swift/Scripts/create_app_bundle.sh diff --git a/Scripts/create_dmg.sh b/legacy/swift/Scripts/create_dmg.sh similarity index 100% rename from Scripts/create_dmg.sh rename to legacy/swift/Scripts/create_dmg.sh diff --git a/Scripts/fetch_media_engines.sh b/legacy/swift/Scripts/fetch_media_engines.sh similarity index 100% rename from Scripts/fetch_media_engines.sh rename to legacy/swift/Scripts/fetch_media_engines.sh diff --git a/Scripts/verify.sh b/legacy/swift/Scripts/verify.sh similarity index 100% rename from Scripts/verify.sh rename to legacy/swift/Scripts/verify.sh diff --git a/Sources/Firelink/AddDownloadsView.swift b/legacy/swift/Sources/Firelink/AddDownloadsView.swift similarity index 100% rename from Sources/Firelink/AddDownloadsView.swift rename to legacy/swift/Sources/Firelink/AddDownloadsView.swift diff --git a/Sources/Firelink/AppSettings.swift b/legacy/swift/Sources/Firelink/AppSettings.swift similarity index 100% rename from Sources/Firelink/AppSettings.swift rename to legacy/swift/Sources/Firelink/AppSettings.swift diff --git a/Sources/Firelink/Aria2DownloadEngine.swift b/legacy/swift/Sources/Firelink/Aria2DownloadEngine.swift similarity index 100% rename from Sources/Firelink/Aria2DownloadEngine.swift rename to legacy/swift/Sources/Firelink/Aria2DownloadEngine.swift diff --git a/Sources/Firelink/Assets.xcassets/GitHub.imageset/Contents.json b/legacy/swift/Sources/Firelink/Assets.xcassets/GitHub.imageset/Contents.json similarity index 100% rename from Sources/Firelink/Assets.xcassets/GitHub.imageset/Contents.json rename to legacy/swift/Sources/Firelink/Assets.xcassets/GitHub.imageset/Contents.json diff --git a/Sources/Firelink/Assets.xcassets/GitHub.imageset/github-mark.png b/legacy/swift/Sources/Firelink/Assets.xcassets/GitHub.imageset/github-mark.png similarity index 100% rename from Sources/Firelink/Assets.xcassets/GitHub.imageset/github-mark.png rename to legacy/swift/Sources/Firelink/Assets.xcassets/GitHub.imageset/github-mark.png diff --git a/Sources/Firelink/Assets.xcassets/MenuBarIcon.imageset/Contents.json b/legacy/swift/Sources/Firelink/Assets.xcassets/MenuBarIcon.imageset/Contents.json similarity index 100% rename from Sources/Firelink/Assets.xcassets/MenuBarIcon.imageset/Contents.json rename to legacy/swift/Sources/Firelink/Assets.xcassets/MenuBarIcon.imageset/Contents.json diff --git a/Sources/Firelink/Assets.xcassets/MenuBarIcon.imageset/MenuBarIconTemplate.png b/legacy/swift/Sources/Firelink/Assets.xcassets/MenuBarIcon.imageset/MenuBarIconTemplate.png similarity index 100% rename from Sources/Firelink/Assets.xcassets/MenuBarIcon.imageset/MenuBarIconTemplate.png rename to legacy/swift/Sources/Firelink/Assets.xcassets/MenuBarIcon.imageset/MenuBarIconTemplate.png diff --git a/Sources/Firelink/ChunkMapView.swift b/legacy/swift/Sources/Firelink/ChunkMapView.swift similarity index 100% rename from Sources/Firelink/ChunkMapView.swift rename to legacy/swift/Sources/Firelink/ChunkMapView.swift diff --git a/Sources/Firelink/ContentView.swift b/legacy/swift/Sources/Firelink/ContentView.swift similarity index 100% rename from Sources/Firelink/ContentView.swift rename to legacy/swift/Sources/Firelink/ContentView.swift diff --git a/Sources/Firelink/DownloadController.swift b/legacy/swift/Sources/Firelink/DownloadController.swift similarity index 100% rename from Sources/Firelink/DownloadController.swift rename to legacy/swift/Sources/Firelink/DownloadController.swift diff --git a/Sources/Firelink/DownloadMetadataFetcher.swift b/legacy/swift/Sources/Firelink/DownloadMetadataFetcher.swift similarity index 100% rename from Sources/Firelink/DownloadMetadataFetcher.swift rename to legacy/swift/Sources/Firelink/DownloadMetadataFetcher.swift diff --git a/Sources/Firelink/DownloadPropertiesView.swift b/legacy/swift/Sources/Firelink/DownloadPropertiesView.swift similarity index 100% rename from Sources/Firelink/DownloadPropertiesView.swift rename to legacy/swift/Sources/Firelink/DownloadPropertiesView.swift diff --git a/Sources/Firelink/DownloadTable.swift b/legacy/swift/Sources/Firelink/DownloadTable.swift similarity index 100% rename from Sources/Firelink/DownloadTable.swift rename to legacy/swift/Sources/Firelink/DownloadTable.swift diff --git a/Sources/Firelink/DuplicateResolutionView.swift b/legacy/swift/Sources/Firelink/DuplicateResolutionView.swift similarity index 100% rename from Sources/Firelink/DuplicateResolutionView.swift rename to legacy/swift/Sources/Firelink/DuplicateResolutionView.swift diff --git a/Sources/Firelink/FileClassifier.swift b/legacy/swift/Sources/Firelink/FileClassifier.swift similarity index 100% rename from Sources/Firelink/FileClassifier.swift rename to legacy/swift/Sources/Firelink/FileClassifier.swift diff --git a/Sources/Firelink/FirelinkApp.swift b/legacy/swift/Sources/Firelink/FirelinkApp.swift similarity index 100% rename from Sources/Firelink/FirelinkApp.swift rename to legacy/swift/Sources/Firelink/FirelinkApp.swift diff --git a/Sources/Firelink/KeychainCredentialStore.swift b/legacy/swift/Sources/Firelink/KeychainCredentialStore.swift similarity index 100% rename from Sources/Firelink/KeychainCredentialStore.swift rename to legacy/swift/Sources/Firelink/KeychainCredentialStore.swift diff --git a/Sources/Firelink/LocalExtensionServer.swift b/legacy/swift/Sources/Firelink/LocalExtensionServer.swift similarity index 100% rename from Sources/Firelink/LocalExtensionServer.swift rename to legacy/swift/Sources/Firelink/LocalExtensionServer.swift diff --git a/Sources/Firelink/MediaDetector.swift b/legacy/swift/Sources/Firelink/MediaDetector.swift similarity index 100% rename from Sources/Firelink/MediaDetector.swift rename to legacy/swift/Sources/Firelink/MediaDetector.swift diff --git a/Sources/Firelink/MediaDownloadEngine.swift b/legacy/swift/Sources/Firelink/MediaDownloadEngine.swift similarity index 100% rename from Sources/Firelink/MediaDownloadEngine.swift rename to legacy/swift/Sources/Firelink/MediaDownloadEngine.swift diff --git a/Sources/Firelink/MediaEngineManager.swift b/legacy/swift/Sources/Firelink/MediaEngineManager.swift similarity index 100% rename from Sources/Firelink/MediaEngineManager.swift rename to legacy/swift/Sources/Firelink/MediaEngineManager.swift diff --git a/Sources/Firelink/MediaExtractionEngine.swift b/legacy/swift/Sources/Firelink/MediaExtractionEngine.swift similarity index 100% rename from Sources/Firelink/MediaExtractionEngine.swift rename to legacy/swift/Sources/Firelink/MediaExtractionEngine.swift diff --git a/Sources/Firelink/Models.swift b/legacy/swift/Sources/Firelink/Models.swift similarity index 100% rename from Sources/Firelink/Models.swift rename to legacy/swift/Sources/Firelink/Models.swift diff --git a/Sources/Firelink/ProcessTreeTerminator.swift b/legacy/swift/Sources/Firelink/ProcessTreeTerminator.swift similarity index 100% rename from Sources/Firelink/ProcessTreeTerminator.swift rename to legacy/swift/Sources/Firelink/ProcessTreeTerminator.swift diff --git a/Sources/Firelink/ReleaseUpdateChecker.swift b/legacy/swift/Sources/Firelink/ReleaseUpdateChecker.swift similarity index 100% rename from Sources/Firelink/ReleaseUpdateChecker.swift rename to legacy/swift/Sources/Firelink/ReleaseUpdateChecker.swift diff --git a/Sources/Firelink/SchedulerController.swift b/legacy/swift/Sources/Firelink/SchedulerController.swift similarity index 100% rename from Sources/Firelink/SchedulerController.swift rename to legacy/swift/Sources/Firelink/SchedulerController.swift diff --git a/Sources/Firelink/SchedulerView.swift b/legacy/swift/Sources/Firelink/SchedulerView.swift similarity index 100% rename from Sources/Firelink/SchedulerView.swift rename to legacy/swift/Sources/Firelink/SchedulerView.swift diff --git a/Sources/Firelink/Settings/AboutSettingsPane.swift b/legacy/swift/Sources/Firelink/Settings/AboutSettingsPane.swift similarity index 100% rename from Sources/Firelink/Settings/AboutSettingsPane.swift rename to legacy/swift/Sources/Firelink/Settings/AboutSettingsPane.swift diff --git a/Sources/Firelink/Settings/DownloadSettingsPane.swift b/legacy/swift/Sources/Firelink/Settings/DownloadSettingsPane.swift similarity index 100% rename from Sources/Firelink/Settings/DownloadSettingsPane.swift rename to legacy/swift/Sources/Firelink/Settings/DownloadSettingsPane.swift diff --git a/Sources/Firelink/Settings/EngineSettingsPane.swift b/legacy/swift/Sources/Firelink/Settings/EngineSettingsPane.swift similarity index 100% rename from Sources/Firelink/Settings/EngineSettingsPane.swift rename to legacy/swift/Sources/Firelink/Settings/EngineSettingsPane.swift diff --git a/Sources/Firelink/Settings/IntegrationSettingsPane.swift b/legacy/swift/Sources/Firelink/Settings/IntegrationSettingsPane.swift similarity index 100% rename from Sources/Firelink/Settings/IntegrationSettingsPane.swift rename to legacy/swift/Sources/Firelink/Settings/IntegrationSettingsPane.swift diff --git a/Sources/Firelink/Settings/KeychainAccessCard.swift b/legacy/swift/Sources/Firelink/Settings/KeychainAccessCard.swift similarity index 100% rename from Sources/Firelink/Settings/KeychainAccessCard.swift rename to legacy/swift/Sources/Firelink/Settings/KeychainAccessCard.swift diff --git a/Sources/Firelink/Settings/LocationsSettingsPane.swift b/legacy/swift/Sources/Firelink/Settings/LocationsSettingsPane.swift similarity index 100% rename from Sources/Firelink/Settings/LocationsSettingsPane.swift rename to legacy/swift/Sources/Firelink/Settings/LocationsSettingsPane.swift diff --git a/Sources/Firelink/Settings/LookAndFeelSettingsPane.swift b/legacy/swift/Sources/Firelink/Settings/LookAndFeelSettingsPane.swift similarity index 100% rename from Sources/Firelink/Settings/LookAndFeelSettingsPane.swift rename to legacy/swift/Sources/Firelink/Settings/LookAndFeelSettingsPane.swift diff --git a/Sources/Firelink/Settings/NetworkSettingsPane.swift b/legacy/swift/Sources/Firelink/Settings/NetworkSettingsPane.swift similarity index 100% rename from Sources/Firelink/Settings/NetworkSettingsPane.swift rename to legacy/swift/Sources/Firelink/Settings/NetworkSettingsPane.swift diff --git a/Sources/Firelink/Settings/PowerSettingsPane.swift b/legacy/swift/Sources/Firelink/Settings/PowerSettingsPane.swift similarity index 100% rename from Sources/Firelink/Settings/PowerSettingsPane.swift rename to legacy/swift/Sources/Firelink/Settings/PowerSettingsPane.swift diff --git a/Sources/Firelink/Settings/SettingsContainer.swift b/legacy/swift/Sources/Firelink/Settings/SettingsContainer.swift similarity index 100% rename from Sources/Firelink/Settings/SettingsContainer.swift rename to legacy/swift/Sources/Firelink/Settings/SettingsContainer.swift diff --git a/Sources/Firelink/Settings/SiteLoginsSettingsPane.swift b/legacy/swift/Sources/Firelink/Settings/SiteLoginsSettingsPane.swift similarity index 100% rename from Sources/Firelink/Settings/SiteLoginsSettingsPane.swift rename to legacy/swift/Sources/Firelink/Settings/SiteLoginsSettingsPane.swift diff --git a/Sources/Firelink/Settings/ToastNotification.swift b/legacy/swift/Sources/Firelink/Settings/ToastNotification.swift similarity index 100% rename from Sources/Firelink/Settings/ToastNotification.swift rename to legacy/swift/Sources/Firelink/Settings/ToastNotification.swift diff --git a/Sources/Firelink/SidebarView.swift b/legacy/swift/Sources/Firelink/SidebarView.swift similarity index 100% rename from Sources/Firelink/SidebarView.swift rename to legacy/swift/Sources/Firelink/SidebarView.swift diff --git a/Sources/Firelink/SpeedLimiterView.swift b/legacy/swift/Sources/Firelink/SpeedLimiterView.swift similarity index 100% rename from Sources/Firelink/SpeedLimiterView.swift rename to legacy/swift/Sources/Firelink/SpeedLimiterView.swift diff --git a/Sources/Firelink/StatusBar.swift b/legacy/swift/Sources/Firelink/StatusBar.swift similarity index 100% rename from Sources/Firelink/StatusBar.swift rename to legacy/swift/Sources/Firelink/StatusBar.swift diff --git a/Sources/Firelink/Theme.swift b/legacy/swift/Sources/Firelink/Theme.swift similarity index 100% rename from Sources/Firelink/Theme.swift rename to legacy/swift/Sources/Firelink/Theme.swift diff --git a/Sources/Firelink/TrayMenuView.swift b/legacy/swift/Sources/Firelink/TrayMenuView.swift similarity index 100% rename from Sources/Firelink/TrayMenuView.swift rename to legacy/swift/Sources/Firelink/TrayMenuView.swift diff --git a/Sources/Firelink/_internal/.gitkeep b/legacy/swift/Sources/Firelink/_internal/.gitkeep similarity index 100% rename from Sources/Firelink/_internal/.gitkeep rename to legacy/swift/Sources/Firelink/_internal/.gitkeep diff --git a/apps/desktop/package-lock.json b/package-lock.json similarity index 54% rename from apps/desktop/package-lock.json rename to package-lock.json index 0a98cf7..927a39d 100644 --- a/apps/desktop/package-lock.json +++ b/package-lock.json @@ -1,12 +1,13 @@ { - "name": "tauri-app", + "name": "firelink", "version": "0.7.3", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "tauri-app", + "name": "firelink", "version": "0.7.3", + "license": "MIT", "dependencies": { "@tailwindcss/vite": "^4.3.0", "@tauri-apps/api": "^2", @@ -22,710 +23,46 @@ "@tauri-apps/cli": "^2", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", - "@vitejs/plugin-react": "^4.6.0", + "@vitejs/plugin-react": "^6.0.2", "autoprefixer": "^10.5.0", "postcss": "^8.5.15", "tailwindcss": "^4.3.0", "typescript": "~5.8.3", - "vite": "^7.0.4" + "vite": "^8.0.16" + }, + "engines": { + "node": ">=22" } }, - "node_modules/@babel/code-frame": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", - "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", - "dev": true, + "node_modules/@emnapi/core": { + "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": { - "@babel/helper-validator-identifier": "^7.29.7", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" } }, - "node_modules/@babel/compat-data": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", - "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", - "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", - "dev": true, + "node_modules/@emnapi/runtime": { + "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": { - "@babel/code-frame": "^7.29.7", - "@babel/generator": "^7.29.7", - "@babel/helper-compilation-targets": "^7.29.7", - "@babel/helper-module-transforms": "^7.29.7", - "@babel/helpers": "^7.29.7", - "@babel/parser": "^7.29.7", - "@babel/template": "^7.29.7", - "@babel/traverse": "^7.29.7", - "@babel/types": "^7.29.7", - "@jridgewell/remapping": "^2.3.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" + "tslib": "^2.4.0" } }, - "node_modules/@babel/generator": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", - "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", - "dev": true, + "node_modules/@emnapi/wasi-threads": { + "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": { - "@babel/parser": "^7.29.7", - "@babel/types": "^7.29.7", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", - "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.29.7", - "@babel/helper-validator-option": "^7.29.7", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-globals": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", - "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", - "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.29.7", - "@babel/types": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", - "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.29.7", - "@babel/helper-validator-identifier": "^7.29.7", - "@babel/traverse": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", - "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", - "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", - "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", - "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", - "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.29.7", - "@babel/types": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", - "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.7" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz", - "integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz", - "integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", - "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/parser": "^7.29.7", - "@babel/types": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", - "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/generator": "^7.29.7", - "@babel/helper-globals": "^7.29.7", - "@babel/parser": "^7.29.7", - "@babel/template": "^7.29.7", - "@babel/types": "^7.29.7", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", - "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.29.7", - "@babel/helper-validator-identifier": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@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" - ], - "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" - ], - "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" - ], - "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" - ], - "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" - ], - "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" - ], - "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" - ], - "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" - ], - "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" - ], - "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" - ], - "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" - ], - "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" - ], - "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" - ], - "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" - ], - "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" - ], - "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" - ], - "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" - ], - "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" - ], - "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" - ], - "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" - ], - "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" - ], - "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" - ], - "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" - ], - "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" - ], - "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" - ], - "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" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" + "tslib": "^2.4.0" } }, "node_modules/@jridgewell/gen-mapping": { @@ -773,30 +110,37 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", - "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.61.1.tgz", - "integrity": "sha512-JnBB8MdXj45cajvTuO5FmPlvFVJRQgvrz1uSEl3NwqFnReAPGwb8EanbGi4z2nRaqLzjJSv5/JmycoTKlRZxHA==", - "cpu": [ - "arm" - ], + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.5.tgz", + "integrity": "sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==", "license": "MIT", "optional": true, - "os": [ - "android" - ] + "dependencies": { + "@tybys/wasm-util": "^0.10.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.61.1.tgz", - "integrity": "sha512-Jx2g7iSjw4AOT0HDPHM9RV3GNjRXwybWtSFZiZAYUTjUwjVrYIwq3kBf+LnhqJlzXFAqTAh2F7IGI+O568exPw==", + "node_modules/@oxc-project/types": { + "version": "0.133.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.133.0.tgz", + "integrity": "sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.3.tgz", + "integrity": "sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==", "cpu": [ "arm64" ], @@ -804,12 +148,15 @@ "optional": true, "os": [ "android" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.61.1.tgz", - "integrity": "sha512-0F1L/Z3Eqv8mT2n3dCpeO8GcTvHvVqkP5/t6DMsn0KzhYVcg+s7Ncl5DS8qjKYEeio6Az0Gt6nyBORay5qIlCA==", + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.3.tgz", + "integrity": "sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==", "cpu": [ "arm64" ], @@ -817,12 +164,15 @@ "optional": true, "os": [ "darwin" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.61.1.tgz", - "integrity": "sha512-qLttcH871ujY4YcVfUSShhOw+CsoTatYz8gRbHO7Bb92QH059/P0y5do1KMs41fY0BpD2x4AJH/gID0zFiqVKQ==", + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.3.tgz", + "integrity": "sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==", "cpu": [ "x64" ], @@ -830,25 +180,15 @@ "optional": true, "os": [ "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.61.1.tgz", - "integrity": "sha512-fUI4RapGE0Oh3mb8mgfvC1O2nU1RpDZUKnDQm3xB1Ipg7C2wTs5Kstz7G2uWK99a8S2yTMq8/P4uycwNa0nJyw==", - "cpu": [ - "arm64" ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.61.1.tgz", - "integrity": "sha512-H5YrdvJaDtI/U9/emrD4b++xkvp3y/JvOe4rizHbxvkyMfRS/CiRYdji+Pl8D0brEaNFWUh1drQxgAGIl6Xudw==", + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.3.tgz", + "integrity": "sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==", "cpu": [ "x64" ], @@ -856,44 +196,31 @@ "optional": true, "os": [ "freebsd" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.61.1.tgz", - "integrity": "sha512-Q8CBCCQtDFrYtXoeUXSrnFXKOnyUhx6bz+SkL6A0E7V8kAiCJ5pamq1WtbfpVGhR5TSpXY6ak3avmDc5fHTyJA==", + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.3.tgz", + "integrity": "sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==", "cpu": [ "arm" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.61.1.tgz", - "integrity": "sha512-nwnhk1581l0FBVellGcVCAT0Oi06onEA3WB53sf01VO3I0UPBkMH9sXONYME2K0ovXcNayJfNtHfm6mpJElatQ==", - "cpu": [ - "arm" ], - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.61.1.tgz", - "integrity": "sha512-x5Xr49hwt3hdW75UOZm3395YwwzPyauktslv29KpWL/T+vVAzoT3azLcTWv0eMciBNrx+DYjH4paehHoLpPvpg==", + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.3.tgz", + "integrity": "sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==", "cpu": [ "arm64" ], @@ -904,12 +231,15 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.61.1.tgz", - "integrity": "sha512-unMS3H73DpaoPyyEVPjGKleM/s0mkmsauTENpw4INQY8y4+IuLNjkueQ5QCtC0D3N38Y38yhAU8OoZ20S2Tm6w==", + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.3.tgz", + "integrity": "sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==", "cpu": [ "arm64" ], @@ -920,44 +250,15 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.61.1.tgz", - "integrity": "sha512-zNZzGRnAhwjFEYmvphJRV5XaQGjs62cCmeYYHUT//NbvEnHauw+I85nGG+SiVg5ld4GX8D1IbKIX+ozITQnhMQ==", - "cpu": [ - "loong64" - ], - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.61.1.tgz", - "integrity": "sha512-LdpWGL8X209B2SIvWjqlc8VZgM6PKfontSerGepuldQmHYrAOtnMCXeJkxXGbC+PPZVOuu5czJo7fNV6aeW8rQ==", - "cpu": [ - "loong64" - ], - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.61.1.tgz", - "integrity": "sha512-EC5kTtNaNGOmbMGqar8dvJy6y/hg99GAwjfBz++pxZhQATXGcRjd6c5en5wcbru0vkRmiMGsQKdMJOOf6sza4g==", + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.3.tgz", + "integrity": "sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==", "cpu": [ "ppc64" ], @@ -968,60 +269,15 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.61.1.tgz", - "integrity": "sha512-8hiwp6D4acEcNK78I4rP0/XtS1sknWIAMJBPdR4l6zUtyTm5KiTDr5bXmWt4foY7nAN7AThDHgkLIEZOWKbzWw==", - "cpu": [ - "ppc64" - ], - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.61.1.tgz", - "integrity": "sha512-10dh/h/BqA7DuMPWSxkR8uks18FRwnwOEqr5zOTEl+NOwP/OMzKX8OFR/Of9xxDA7D5qef1Nzar5WDD2kCCr1g==", - "cpu": [ - "riscv64" - ], - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.61.1.tgz", - "integrity": "sha512-YKJ5lg35DP17gcAOggnihe+APw9HLyj1Xn7gsmGumBJAUDa6NGXNixJzmkWLhcK9TOuuyQjdamzvJefkO7qHZQ==", - "cpu": [ - "riscv64" - ], - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.61.1.tgz", - "integrity": "sha512-Mlil5G2Jj6a7B3LWGctg+XPL9vdXYuzCtNXfxOQ0nPjc2m6ueUktocPGH9bnAM0bNRKb/bAWTujUU7IJQdQA+g==", + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.3.tgz", + "integrity": "sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==", "cpu": [ "s390x" ], @@ -1032,12 +288,15 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.61.1.tgz", - "integrity": "sha512-bVWIOIk6pV01p4CdUbPP7CJ/434z+OooYjDuFcR+44N35YvKUC66G8MGnvcWx5mWKW3g61J+t74l3Kj15Kwn2Q==", + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.3.tgz", + "integrity": "sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==", "cpu": [ "x64" ], @@ -1048,12 +307,15 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.61.1.tgz", - "integrity": "sha512-qy5pBvZbqNFheBz61R1rzsezjm0J7O2oNGoWtGoY89SZYLUfxAJTBAqDChqAIdB4rCiIbi9nF7yZ83GnNiLwSw==", + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.3.tgz", + "integrity": "sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==", "cpu": [ "x64" ], @@ -1064,25 +326,15 @@ "optional": true, "os": [ "linux" - ] - }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.61.1.tgz", - "integrity": "sha512-E83TXjI4zm0+5f2qO+UOudaCYIhYwpJ5jq6YCZNIZ+6CbfhKrkAGezeiASBL9ElxAxFsRS9ZhESv8mfnj6TKeg==", - "cpu": [ - "x64" ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.61.1.tgz", - "integrity": "sha512-fbWnKqVkjrJN38vNe3ahkbk6iejS/3b0Nt7EEtPpE6RBacZcGXNKbzfHN3GUUlXOPghUg0j6XUGrtjX9z1sIvA==", + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.3.tgz", + "integrity": "sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==", "cpu": [ "arm64" ], @@ -1090,12 +342,33 @@ "optional": true, "os": [ "openharmony" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.61.1.tgz", - "integrity": "sha512-ArMl38iVAbk0New1ogihQNY6iphLi4ZaRsa037gUzv5yeKPY8TD3Dmy4x2RNC1VztU/uqm+G+/RwFrSka3Oy2g==", + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.3.tgz", + "integrity": "sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz", + "integrity": "sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==", "cpu": [ "arm64" ], @@ -1103,25 +376,15 @@ "optional": true, "os": [ "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.61.1.tgz", - "integrity": "sha512-0mYtjHS9ucAbcATycCNK9IGBk/cCe/ma7EmSLGZdsxnOA8cjRIyU04wDpVAD9NiOfLUR9KTxdiO53uOkherqjQ==", - "cpu": [ - "ia32" ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.61.1.tgz", - "integrity": "sha512-gK1iCEPfpoSG9wfBihXxvBMi8ZfcWffYkEsC/Eih+iFENTaewvNcrEQ69lIOWYO5pePHKLHHO7nq5AILGO/HQQ==", + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.3.tgz", + "integrity": "sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==", "cpu": [ "x64" ], @@ -1129,20 +392,16 @@ "optional": true, "os": [ "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.61.1.tgz", - "integrity": "sha512-X+zaP2x+j4RXGfbp/seSoRHWnPxzApilDszisZxbYH5C/jTxFhCtDNdPGZb9lJyYPs24wGxruPF7Y+sIXt9Gzw==", - "cpu": [ - "x64" ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "license": "MIT" }, "node_modules/@tailwindcss/node": { "version": "4.3.0", @@ -1682,57 +941,16 @@ "@tauri-apps/api": "^2.11.0" } }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, + "node_modules/@tybys/wasm-util": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", "license": "MIT", + "optional": true, "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "tslib": "^2.4.0" } }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", - "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.2" - } - }, - "node_modules/@types/estree": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", - "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", - "license": "MIT" - }, "node_modules/@types/react": { "version": "19.2.17", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz", @@ -1754,24 +972,29 @@ } }, "node_modules/@vitejs/plugin-react": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", - "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.2.tgz", + "integrity": "sha512-DlSMqo4WhThw4vB8Mpn0Woe9J+Jfq1geJ61AKW0QEgLzGMNwtIMdxbDUzLxcun8W7NbJO0e2Jg/Nxm3cCSVzzg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.28.0", - "@babel/plugin-transform-react-jsx-self": "^7.27.1", - "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.27", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.17.0" + "@rolldown/pluginutils": "^1.0.0" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^20.19.0 || >=22.12.0" }, "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + } } }, "node_modules/autoprefixer": { @@ -1879,13 +1102,6 @@ ], "license": "CC-BY-4.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", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, "node_modules/csstype": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", @@ -1893,24 +1109,6 @@ "devOptional": true, "license": "MIT" }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -1940,47 +1138,6 @@ "node": ">=10.13.0" } }, - "node_modules/esbuild": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", - "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", - "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", @@ -2036,16 +1193,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -2061,39 +1208,6 @@ "jiti": "lib/jiti-cli.mjs" } }, - "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/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/lightningcss": { "version": "1.32.0", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", @@ -2355,16 +1469,6 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, "node_modules/lucide-react": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.17.0.tgz", @@ -2383,13 +1487,6 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, "node_modules/nanoid": { "version": "3.3.12", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", @@ -2492,58 +1589,37 @@ "react": "^19.2.7" } }, - "node_modules/react-refresh": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", - "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rollup": { - "version": "4.61.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.61.1.tgz", - "integrity": "sha512-I4KW6iuRpuu2uHBLraZ1wNZe0DP7lnRha+VJ9tNaYVaVgKhW0aI3h4RYnoRPeql0flHm/Co55b7snEDcOfOJrA==", + "node_modules/rolldown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.3.tgz", + "integrity": "sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==", "license": "MIT", "dependencies": { - "@types/estree": "1.0.9" + "@oxc-project/types": "=0.133.0", + "@rolldown/pluginutils": "^1.0.0" }, "bin": { - "rollup": "dist/bin/rollup" + "rolldown": "bin/cli.mjs" }, "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" + "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.61.1", - "@rollup/rollup-android-arm64": "4.61.1", - "@rollup/rollup-darwin-arm64": "4.61.1", - "@rollup/rollup-darwin-x64": "4.61.1", - "@rollup/rollup-freebsd-arm64": "4.61.1", - "@rollup/rollup-freebsd-x64": "4.61.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.61.1", - "@rollup/rollup-linux-arm-musleabihf": "4.61.1", - "@rollup/rollup-linux-arm64-gnu": "4.61.1", - "@rollup/rollup-linux-arm64-musl": "4.61.1", - "@rollup/rollup-linux-loong64-gnu": "4.61.1", - "@rollup/rollup-linux-loong64-musl": "4.61.1", - "@rollup/rollup-linux-ppc64-gnu": "4.61.1", - "@rollup/rollup-linux-ppc64-musl": "4.61.1", - "@rollup/rollup-linux-riscv64-gnu": "4.61.1", - "@rollup/rollup-linux-riscv64-musl": "4.61.1", - "@rollup/rollup-linux-s390x-gnu": "4.61.1", - "@rollup/rollup-linux-x64-gnu": "4.61.1", - "@rollup/rollup-linux-x64-musl": "4.61.1", - "@rollup/rollup-openbsd-x64": "4.61.1", - "@rollup/rollup-openharmony-arm64": "4.61.1", - "@rollup/rollup-win32-arm64-msvc": "4.61.1", - "@rollup/rollup-win32-ia32-msvc": "4.61.1", - "@rollup/rollup-win32-x64-gnu": "4.61.1", - "@rollup/rollup-win32-x64-msvc": "4.61.1", - "fsevents": "~2.3.2" + "@rolldown/binding-android-arm64": "1.0.3", + "@rolldown/binding-darwin-arm64": "1.0.3", + "@rolldown/binding-darwin-x64": "1.0.3", + "@rolldown/binding-freebsd-x64": "1.0.3", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.3", + "@rolldown/binding-linux-arm64-gnu": "1.0.3", + "@rolldown/binding-linux-arm64-musl": "1.0.3", + "@rolldown/binding-linux-ppc64-gnu": "1.0.3", + "@rolldown/binding-linux-s390x-gnu": "1.0.3", + "@rolldown/binding-linux-x64-gnu": "1.0.3", + "@rolldown/binding-linux-x64-musl": "1.0.3", + "@rolldown/binding-openharmony-arm64": "1.0.3", + "@rolldown/binding-wasm32-wasi": "1.0.3", + "@rolldown/binding-win32-arm64-msvc": "1.0.3", + "@rolldown/binding-win32-x64-msvc": "1.0.3" } }, "node_modules/scheduler": { @@ -2552,16 +1628,6 @@ "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", "license": "MIT" }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -2606,6 +1672,13 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "optional": true + }, "node_modules/typescript": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", @@ -2652,17 +1725,16 @@ } }, "node_modules/vite": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.5.tgz", - "integrity": "sha512-KuOaNhcnGFN2zIPGA7wRmzF+lJA1sea7rHq17aiJ++9lzY1WWG6Jpwqwe1KNbRVPIqHmr8GLYx7jbrQcN/7/ww==", + "version": "8.0.16", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.16.tgz", + "integrity": "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==", "license": "MIT", "dependencies": { - "esbuild": "^0.27.0", - "fdir": "^6.5.0", - "picomatch": "^4.0.3", - "postcss": "^8.5.6", - "rollup": "^4.43.0", - "tinyglobby": "^0.2.15" + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.15", + "rolldown": "1.0.3", + "tinyglobby": "^0.2.17" }, "bin": { "vite": "bin/vite.js" @@ -2678,9 +1750,10 @@ }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.1.18", + "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", - "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", @@ -2693,15 +1766,18 @@ "@types/node": { "optional": true }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, "jiti": { "optional": true }, "less": { "optional": true }, - "lightningcss": { - "optional": true - }, "sass": { "optional": true }, @@ -2725,13 +1801,6 @@ } } }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, "node_modules/zustand": { "version": "5.0.14", "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.14.tgz", diff --git a/apps/desktop/package.json b/package.json similarity index 58% rename from apps/desktop/package.json rename to package.json index 19012a3..33343d0 100644 --- a/apps/desktop/package.json +++ b/package.json @@ -1,7 +1,30 @@ { - "name": "tauri-app", + "name": "firelink", "private": true, "version": "0.7.3", + "description": "A fast desktop download manager powered by Rust, Tauri, React, and TypeScript.", + "license": "MIT", + "homepage": "https://github.com/nimbold/Firelink", + "repository": { + "type": "git", + "url": "https://github.com/nimbold/Firelink.git" + }, + "bugs": { + "url": "https://github.com/nimbold/Firelink/issues" + }, + "keywords": [ + "download-manager", + "tauri", + "rust", + "react", + "typescript", + "aria2", + "yt-dlp", + "desktop" + ], + "engines": { + "node": ">=22" + }, "type": "module", "scripts": { "dev": "vite", @@ -25,11 +48,11 @@ "@tauri-apps/cli": "^2", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", - "@vitejs/plugin-react": "^4.6.0", + "@vitejs/plugin-react": "^6.0.2", "autoprefixer": "^10.5.0", "postcss": "^8.5.15", "tailwindcss": "^4.3.0", "typescript": "~5.8.3", - "vite": "^7.0.4" + "vite": "^8.0.16" } } diff --git a/apps/desktop/src-tauri/.gitignore b/src-tauri/.gitignore similarity index 100% rename from apps/desktop/src-tauri/.gitignore rename to src-tauri/.gitignore diff --git a/apps/desktop/src-tauri/Cargo.lock b/src-tauri/Cargo.lock similarity index 99% rename from apps/desktop/src-tauri/Cargo.lock rename to src-tauri/Cargo.lock index fcebbcd..548e25d 100644 --- a/apps/desktop/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -1229,6 +1229,45 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +[[package]] +name = "firelink" +version = "0.7.3" +dependencies = [ + "axum", + "chrono", + "cocoa", + "futures-util", + "hmac", + "keepawake", + "keyring", + "objc", + "regex 1.12.4", + "reqwest 0.12.28", + "rusqlite", + "semver", + "serde", + "serde_json", + "sha2", + "sysinfo", + "sysproxy", + "system_shutdown", + "tauri", + "tauri-build", + "tauri-plugin-deep-link", + "tauri-plugin-dialog", + "tauri-plugin-notification", + "tauri-plugin-opener", + "tauri-plugin-single-instance", + "tempfile", + "thiserror 2.0.18", + "tokio", + "tokio-tungstenite", + "tower-http", + "ts-rs", + "url", + "uuid", +] + [[package]] name = "flate2" version = "1.1.9" @@ -4409,45 +4448,6 @@ dependencies = [ "windows 0.61.3", ] -[[package]] -name = "tauri-app" -version = "0.7.3" -dependencies = [ - "axum", - "chrono", - "cocoa", - "futures-util", - "hmac", - "keepawake", - "keyring", - "objc", - "regex 1.12.4", - "reqwest 0.12.28", - "rusqlite", - "semver", - "serde", - "serde_json", - "sha2", - "sysinfo", - "sysproxy", - "system_shutdown", - "tauri", - "tauri-build", - "tauri-plugin-deep-link", - "tauri-plugin-dialog", - "tauri-plugin-notification", - "tauri-plugin-opener", - "tauri-plugin-single-instance", - "tempfile", - "thiserror 2.0.18", - "tokio", - "tokio-tungstenite", - "tower-http", - "ts-rs", - "url", - "uuid", -] - [[package]] name = "tauri-build" version = "2.6.2" diff --git a/apps/desktop/src-tauri/Cargo.toml b/src-tauri/Cargo.toml similarity index 83% rename from apps/desktop/src-tauri/Cargo.toml rename to src-tauri/Cargo.toml index af055b7..11e960d 100644 --- a/apps/desktop/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,9 +1,14 @@ [package] -name = "tauri-app" +name = "firelink" version = "0.7.3" -description = "A native download manager for fast, organized, segmented transfers" +description = "A fast desktop download manager powered by Rust and Tauri" authors = ["NimBold"] edition = "2021" +license = "MIT" +repository = "https://github.com/nimbold/Firelink" +homepage = "https://github.com/nimbold/Firelink" +keywords = ["download-manager", "tauri", "aria2", "yt-dlp"] +categories = ["network-programming"] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html @@ -11,7 +16,7 @@ edition = "2021" # The `_lib` suffix may seem redundant but it is necessary # to make the lib name unique and wouldn't conflict with the bin name. # This seems to be only an issue on Windows, see https://github.com/rust-lang/cargo/issues/8519 -name = "tauri_app_lib" +name = "firelink_lib" crate-type = ["staticlib", "cdylib", "rlib"] [build-dependencies] diff --git a/apps/desktop/src-tauri/binaries/_internal/.gitkeep b/src-tauri/binaries/_internal/.gitkeep similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/.gitkeep rename to src-tauri/binaries/_internal/.gitkeep diff --git a/apps/desktop/src-tauri/binaries/_internal/81d243bd2c585b0f4821__mypyc.cpython-314-darwin.so b/src-tauri/binaries/_internal/81d243bd2c585b0f4821__mypyc.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/81d243bd2c585b0f4821__mypyc.cpython-314-darwin.so rename to src-tauri/binaries/_internal/81d243bd2c585b0f4821__mypyc.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_ARC4.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Cipher/_ARC4.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_ARC4.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Cipher/_ARC4.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_Salsa20.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Cipher/_Salsa20.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_Salsa20.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Cipher/_Salsa20.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_chacha20.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Cipher/_chacha20.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_chacha20.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Cipher/_chacha20.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_pkcs1_decode.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Cipher/_pkcs1_decode.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_pkcs1_decode.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Cipher/_pkcs1_decode.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_aes.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_aes.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_aes.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_aes.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_arc2.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_arc2.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_arc2.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_arc2.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_blowfish.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_blowfish.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_blowfish.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_blowfish.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_cast.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_cast.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_cast.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_cast.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_cbc.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_cbc.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_cbc.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_cbc.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_cfb.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_cfb.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_cfb.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_cfb.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_ctr.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_ctr.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_ctr.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_ctr.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_des.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_des.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_des.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_des.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_des3.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_des3.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_des3.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_des3.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_ecb.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_ecb.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_ecb.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_ecb.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_eksblowfish.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_eksblowfish.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_eksblowfish.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_eksblowfish.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_ocb.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_ocb.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_ocb.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_ocb.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_ofb.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_ofb.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_ofb.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Cipher/_raw_ofb.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_BLAKE2b.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Hash/_BLAKE2b.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_BLAKE2b.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Hash/_BLAKE2b.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_BLAKE2s.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Hash/_BLAKE2s.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_BLAKE2s.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Hash/_BLAKE2s.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_MD2.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Hash/_MD2.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_MD2.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Hash/_MD2.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_MD4.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Hash/_MD4.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_MD4.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Hash/_MD4.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_MD5.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Hash/_MD5.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_MD5.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Hash/_MD5.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_RIPEMD160.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Hash/_RIPEMD160.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_RIPEMD160.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Hash/_RIPEMD160.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_SHA1.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Hash/_SHA1.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_SHA1.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Hash/_SHA1.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_SHA224.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Hash/_SHA224.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_SHA224.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Hash/_SHA224.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_SHA256.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Hash/_SHA256.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_SHA256.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Hash/_SHA256.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_SHA384.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Hash/_SHA384.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_SHA384.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Hash/_SHA384.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_SHA512.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Hash/_SHA512.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_SHA512.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Hash/_SHA512.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_ghash_portable.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Hash/_ghash_portable.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_ghash_portable.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Hash/_ghash_portable.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_keccak.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Hash/_keccak.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_keccak.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Hash/_keccak.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_poly1305.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Hash/_poly1305.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Hash/_poly1305.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Hash/_poly1305.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Math/_modexp.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Math/_modexp.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Math/_modexp.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Math/_modexp.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Protocol/_scrypt.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Protocol/_scrypt.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Protocol/_scrypt.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Protocol/_scrypt.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/PublicKey/_curve25519.abi3.so b/src-tauri/binaries/_internal/Cryptodome/PublicKey/_curve25519.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/PublicKey/_curve25519.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/PublicKey/_curve25519.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/PublicKey/_curve448.abi3.so b/src-tauri/binaries/_internal/Cryptodome/PublicKey/_curve448.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/PublicKey/_curve448.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/PublicKey/_curve448.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/PublicKey/_ec_ws.abi3.so b/src-tauri/binaries/_internal/Cryptodome/PublicKey/_ec_ws.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/PublicKey/_ec_ws.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/PublicKey/_ec_ws.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/PublicKey/_ed25519.abi3.so b/src-tauri/binaries/_internal/Cryptodome/PublicKey/_ed25519.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/PublicKey/_ed25519.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/PublicKey/_ed25519.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/PublicKey/_ed448.abi3.so b/src-tauri/binaries/_internal/Cryptodome/PublicKey/_ed448.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/PublicKey/_ed448.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/PublicKey/_ed448.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Util/_cpuid_c.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Util/_cpuid_c.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Util/_cpuid_c.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Util/_cpuid_c.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Cryptodome/Util/_strxor.abi3.so b/src-tauri/binaries/_internal/Cryptodome/Util/_strxor.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Cryptodome/Util/_strxor.abi3.so rename to src-tauri/binaries/_internal/Cryptodome/Util/_strxor.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/Python b/src-tauri/binaries/_internal/Python similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Python rename to src-tauri/binaries/_internal/Python diff --git a/apps/desktop/src-tauri/binaries/_internal/Python.framework/Python b/src-tauri/binaries/_internal/Python.framework/Python similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Python.framework/Python rename to src-tauri/binaries/_internal/Python.framework/Python diff --git a/apps/desktop/src-tauri/binaries/_internal/Python.framework/Resources/Info.plist b/src-tauri/binaries/_internal/Python.framework/Resources/Info.plist similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Python.framework/Resources/Info.plist rename to src-tauri/binaries/_internal/Python.framework/Resources/Info.plist diff --git a/apps/desktop/src-tauri/binaries/_internal/Python.framework/Versions/3.14/Python b/src-tauri/binaries/_internal/Python.framework/Versions/3.14/Python similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Python.framework/Versions/3.14/Python rename to src-tauri/binaries/_internal/Python.framework/Versions/3.14/Python diff --git a/apps/desktop/src-tauri/binaries/_internal/Python.framework/Versions/3.14/Resources/Info.plist b/src-tauri/binaries/_internal/Python.framework/Versions/3.14/Resources/Info.plist similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Python.framework/Versions/3.14/Resources/Info.plist rename to src-tauri/binaries/_internal/Python.framework/Versions/3.14/Resources/Info.plist diff --git a/apps/desktop/src-tauri/binaries/_internal/Python.framework/Versions/Current/Python b/src-tauri/binaries/_internal/Python.framework/Versions/Current/Python similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Python.framework/Versions/Current/Python rename to src-tauri/binaries/_internal/Python.framework/Versions/Current/Python diff --git a/apps/desktop/src-tauri/binaries/_internal/Python.framework/Versions/Current/Resources/Info.plist b/src-tauri/binaries/_internal/Python.framework/Versions/Current/Resources/Info.plist similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/Python.framework/Versions/Current/Resources/Info.plist rename to src-tauri/binaries/_internal/Python.framework/Versions/Current/Resources/Info.plist diff --git a/apps/desktop/src-tauri/binaries/_internal/_brotli.cpython-314-darwin.so b/src-tauri/binaries/_internal/_brotli.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/_brotli.cpython-314-darwin.so rename to src-tauri/binaries/_internal/_brotli.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/_cffi_backend.cpython-314-darwin.so b/src-tauri/binaries/_internal/_cffi_backend.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/_cffi_backend.cpython-314-darwin.so rename to src-tauri/binaries/_internal/_cffi_backend.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/base_library.zip b/src-tauri/binaries/_internal/base_library.zip similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/base_library.zip rename to src-tauri/binaries/_internal/base_library.zip diff --git a/apps/desktop/src-tauri/binaries/_internal/certifi/py.typed b/src-tauri/binaries/_internal/certifi/py.typed similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/certifi/py.typed rename to src-tauri/binaries/_internal/certifi/py.typed diff --git a/apps/desktop/src-tauri/binaries/_internal/charset_normalizer/cd.cpython-314-darwin.so b/src-tauri/binaries/_internal/charset_normalizer/cd.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/charset_normalizer/cd.cpython-314-darwin.so rename to src-tauri/binaries/_internal/charset_normalizer/cd.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/charset_normalizer/md.cpython-314-darwin.so b/src-tauri/binaries/_internal/charset_normalizer/md.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/charset_normalizer/md.cpython-314-darwin.so rename to src-tauri/binaries/_internal/charset_normalizer/md.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/INSTALLER b/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/INSTALLER similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/INSTALLER rename to src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/INSTALLER diff --git a/apps/desktop/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/METADATA b/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/METADATA similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/METADATA rename to src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/METADATA diff --git a/apps/desktop/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/RECORD b/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/RECORD similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/RECORD rename to src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/RECORD diff --git a/apps/desktop/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/REQUESTED b/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/REQUESTED similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/REQUESTED rename to src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/REQUESTED diff --git a/apps/desktop/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/WHEEL b/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/WHEEL similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/WHEEL rename to src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/WHEEL diff --git a/apps/desktop/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/direct_url.json b/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/direct_url.json similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/direct_url.json rename to src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/direct_url.json diff --git a/apps/desktop/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/entry_points.txt b/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/entry_points.txt similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/entry_points.txt rename to src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/entry_points.txt diff --git a/apps/desktop/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/licenses/LICENSE b/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/licenses/LICENSE similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/licenses/LICENSE rename to src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/licenses/LICENSE diff --git a/apps/desktop/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/top_level.txt b/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/top_level.txt similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/top_level.txt rename to src-tauri/binaries/_internal/curl_cffi-0.15.0.dist-info/top_level.txt diff --git a/apps/desktop/src-tauri/binaries/_internal/curl_cffi/_wrapper.abi3.so b/src-tauri/binaries/_internal/curl_cffi/_wrapper.abi3.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/curl_cffi/_wrapper.abi3.so rename to src-tauri/binaries/_internal/curl_cffi/_wrapper.abi3.so diff --git a/apps/desktop/src-tauri/binaries/_internal/libcrypto.3.dylib b/src-tauri/binaries/_internal/libcrypto.3.dylib similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/libcrypto.3.dylib rename to src-tauri/binaries/_internal/libcrypto.3.dylib diff --git a/apps/desktop/src-tauri/binaries/_internal/libssl.3.dylib b/src-tauri/binaries/_internal/libssl.3.dylib similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/libssl.3.dylib rename to src-tauri/binaries/_internal/libssl.3.dylib diff --git a/apps/desktop/src-tauri/binaries/_internal/libzstd.1.dylib b/src-tauri/binaries/_internal/libzstd.1.dylib similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/libzstd.1.dylib rename to src-tauri/binaries/_internal/libzstd.1.dylib diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_asyncio.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_asyncio.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_asyncio.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_asyncio.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_bisect.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_bisect.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_bisect.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_bisect.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_blake2.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_blake2.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_blake2.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_blake2.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_bz2.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_bz2.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_bz2.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_bz2.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_cn.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_cn.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_cn.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_cn.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_hk.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_hk.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_hk.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_hk.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_iso2022.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_iso2022.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_iso2022.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_iso2022.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_jp.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_jp.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_jp.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_jp.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_kr.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_kr.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_kr.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_kr.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_tw.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_tw.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_tw.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_codecs_tw.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_csv.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_csv.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_csv.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_csv.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_ctypes.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_ctypes.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_ctypes.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_ctypes.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_decimal.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_decimal.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_decimal.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_decimal.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_elementtree.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_elementtree.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_elementtree.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_elementtree.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_hashlib.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_hashlib.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_hashlib.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_hashlib.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_heapq.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_heapq.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_heapq.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_heapq.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_hmac.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_hmac.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_hmac.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_hmac.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_interpqueues.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_interpqueues.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_interpqueues.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_interpqueues.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_interpreters.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_interpreters.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_interpreters.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_interpreters.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_json.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_json.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_json.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_json.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_lzma.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_lzma.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_lzma.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_lzma.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_md5.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_md5.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_md5.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_md5.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_multibytecodec.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_multibytecodec.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_multibytecodec.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_multibytecodec.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_multiprocessing.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_multiprocessing.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_multiprocessing.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_multiprocessing.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_pickle.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_pickle.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_pickle.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_pickle.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_posixshmem.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_posixshmem.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_posixshmem.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_posixshmem.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_posixsubprocess.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_posixsubprocess.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_posixsubprocess.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_posixsubprocess.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_queue.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_queue.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_queue.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_queue.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_random.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_random.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_random.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_random.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_scproxy.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_scproxy.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_scproxy.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_scproxy.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_sha1.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_sha1.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_sha1.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_sha1.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_sha2.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_sha2.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_sha2.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_sha2.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_sha3.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_sha3.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_sha3.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_sha3.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_socket.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_socket.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_socket.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_socket.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_sqlite3.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_sqlite3.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_sqlite3.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_sqlite3.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_ssl.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_ssl.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_ssl.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_ssl.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_statistics.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_statistics.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_statistics.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_statistics.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_struct.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_struct.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_struct.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_struct.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_uuid.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_uuid.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_uuid.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_uuid.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_zstd.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/_zstd.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/_zstd.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/_zstd.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/array.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/array.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/array.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/array.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/binascii.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/binascii.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/binascii.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/binascii.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/fcntl.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/fcntl.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/fcntl.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/fcntl.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/grp.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/grp.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/grp.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/grp.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/math.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/math.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/math.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/math.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/mmap.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/mmap.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/mmap.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/mmap.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/pyexpat.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/pyexpat.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/pyexpat.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/pyexpat.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/readline.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/readline.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/readline.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/readline.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/resource.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/resource.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/resource.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/resource.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/select.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/select.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/select.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/select.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/syslog.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/syslog.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/syslog.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/syslog.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/termios.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/termios.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/termios.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/termios.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/unicodedata.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/unicodedata.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/unicodedata.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/unicodedata.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/zlib.cpython-314-darwin.so b/src-tauri/binaries/_internal/python3.14/lib-dynload/zlib.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/python3.14/lib-dynload/zlib.cpython-314-darwin.so rename to src-tauri/binaries/_internal/python3.14/lib-dynload/zlib.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/INSTALLER b/src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/INSTALLER similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/INSTALLER rename to src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/INSTALLER diff --git a/apps/desktop/src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/METADATA b/src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/METADATA similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/METADATA rename to src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/METADATA diff --git a/apps/desktop/src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/RECORD b/src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/RECORD similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/RECORD rename to src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/RECORD diff --git a/apps/desktop/src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/REQUESTED b/src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/REQUESTED similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/REQUESTED rename to src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/REQUESTED diff --git a/apps/desktop/src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/WHEEL b/src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/WHEEL similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/WHEEL rename to src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/WHEEL diff --git a/apps/desktop/src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/licenses/LICENSE b/src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/licenses/LICENSE similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/licenses/LICENSE rename to src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/licenses/LICENSE diff --git a/apps/desktop/src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/top_level.txt b/src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/top_level.txt similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/top_level.txt rename to src-tauri/binaries/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/top_level.txt diff --git a/apps/desktop/src-tauri/binaries/_internal/setuptools/_vendor/jaraco/text/Lorem ipsum.txt b/src-tauri/binaries/_internal/setuptools/_vendor/jaraco/text/Lorem ipsum.txt similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/setuptools/_vendor/jaraco/text/Lorem ipsum.txt rename to src-tauri/binaries/_internal/setuptools/_vendor/jaraco/text/Lorem ipsum.txt diff --git a/apps/desktop/src-tauri/binaries/_internal/websockets-16.0.dist-info/INSTALLER b/src-tauri/binaries/_internal/websockets-16.0.dist-info/INSTALLER similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/websockets-16.0.dist-info/INSTALLER rename to src-tauri/binaries/_internal/websockets-16.0.dist-info/INSTALLER diff --git a/apps/desktop/src-tauri/binaries/_internal/websockets-16.0.dist-info/METADATA b/src-tauri/binaries/_internal/websockets-16.0.dist-info/METADATA similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/websockets-16.0.dist-info/METADATA rename to src-tauri/binaries/_internal/websockets-16.0.dist-info/METADATA diff --git a/apps/desktop/src-tauri/binaries/_internal/websockets-16.0.dist-info/RECORD b/src-tauri/binaries/_internal/websockets-16.0.dist-info/RECORD similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/websockets-16.0.dist-info/RECORD rename to src-tauri/binaries/_internal/websockets-16.0.dist-info/RECORD diff --git a/apps/desktop/src-tauri/binaries/_internal/websockets-16.0.dist-info/REQUESTED b/src-tauri/binaries/_internal/websockets-16.0.dist-info/REQUESTED similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/websockets-16.0.dist-info/REQUESTED rename to src-tauri/binaries/_internal/websockets-16.0.dist-info/REQUESTED diff --git a/apps/desktop/src-tauri/binaries/_internal/websockets-16.0.dist-info/WHEEL b/src-tauri/binaries/_internal/websockets-16.0.dist-info/WHEEL similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/websockets-16.0.dist-info/WHEEL rename to src-tauri/binaries/_internal/websockets-16.0.dist-info/WHEEL diff --git a/apps/desktop/src-tauri/binaries/_internal/websockets-16.0.dist-info/direct_url.json b/src-tauri/binaries/_internal/websockets-16.0.dist-info/direct_url.json similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/websockets-16.0.dist-info/direct_url.json rename to src-tauri/binaries/_internal/websockets-16.0.dist-info/direct_url.json diff --git a/apps/desktop/src-tauri/binaries/_internal/websockets-16.0.dist-info/entry_points.txt b/src-tauri/binaries/_internal/websockets-16.0.dist-info/entry_points.txt similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/websockets-16.0.dist-info/entry_points.txt rename to src-tauri/binaries/_internal/websockets-16.0.dist-info/entry_points.txt diff --git a/apps/desktop/src-tauri/binaries/_internal/websockets-16.0.dist-info/licenses/LICENSE b/src-tauri/binaries/_internal/websockets-16.0.dist-info/licenses/LICENSE similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/websockets-16.0.dist-info/licenses/LICENSE rename to src-tauri/binaries/_internal/websockets-16.0.dist-info/licenses/LICENSE diff --git a/apps/desktop/src-tauri/binaries/_internal/websockets-16.0.dist-info/top_level.txt b/src-tauri/binaries/_internal/websockets-16.0.dist-info/top_level.txt similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/websockets-16.0.dist-info/top_level.txt rename to src-tauri/binaries/_internal/websockets-16.0.dist-info/top_level.txt diff --git a/apps/desktop/src-tauri/binaries/_internal/websockets/speedups.cpython-314-darwin.so b/src-tauri/binaries/_internal/websockets/speedups.cpython-314-darwin.so similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/websockets/speedups.cpython-314-darwin.so rename to src-tauri/binaries/_internal/websockets/speedups.cpython-314-darwin.so diff --git a/apps/desktop/src-tauri/binaries/_internal/yt_dlp_ejs/yt/solver/core.min.js b/src-tauri/binaries/_internal/yt_dlp_ejs/yt/solver/core.min.js similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/yt_dlp_ejs/yt/solver/core.min.js rename to src-tauri/binaries/_internal/yt_dlp_ejs/yt/solver/core.min.js diff --git a/apps/desktop/src-tauri/binaries/_internal/yt_dlp_ejs/yt/solver/lib.min.js b/src-tauri/binaries/_internal/yt_dlp_ejs/yt/solver/lib.min.js similarity index 100% rename from apps/desktop/src-tauri/binaries/_internal/yt_dlp_ejs/yt/solver/lib.min.js rename to src-tauri/binaries/_internal/yt_dlp_ejs/yt/solver/lib.min.js diff --git a/apps/desktop/src-tauri/binaries/aria2-libs/libcares.2.dylib b/src-tauri/binaries/aria2-libs/libcares.2.dylib similarity index 100% rename from apps/desktop/src-tauri/binaries/aria2-libs/libcares.2.dylib rename to src-tauri/binaries/aria2-libs/libcares.2.dylib diff --git a/apps/desktop/src-tauri/binaries/aria2-libs/libcrypto.3.dylib b/src-tauri/binaries/aria2-libs/libcrypto.3.dylib similarity index 100% rename from apps/desktop/src-tauri/binaries/aria2-libs/libcrypto.3.dylib rename to src-tauri/binaries/aria2-libs/libcrypto.3.dylib diff --git a/apps/desktop/src-tauri/binaries/aria2-libs/libintl.8.dylib b/src-tauri/binaries/aria2-libs/libintl.8.dylib similarity index 100% rename from apps/desktop/src-tauri/binaries/aria2-libs/libintl.8.dylib rename to src-tauri/binaries/aria2-libs/libintl.8.dylib diff --git a/apps/desktop/src-tauri/binaries/aria2-libs/libsqlite3.dylib b/src-tauri/binaries/aria2-libs/libsqlite3.dylib similarity index 100% rename from apps/desktop/src-tauri/binaries/aria2-libs/libsqlite3.dylib rename to src-tauri/binaries/aria2-libs/libsqlite3.dylib diff --git a/apps/desktop/src-tauri/binaries/aria2-libs/libssh2.1.dylib b/src-tauri/binaries/aria2-libs/libssh2.1.dylib similarity index 100% rename from apps/desktop/src-tauri/binaries/aria2-libs/libssh2.1.dylib rename to src-tauri/binaries/aria2-libs/libssh2.1.dylib diff --git a/apps/desktop/src-tauri/binaries/aria2-libs/libssl.3.dylib b/src-tauri/binaries/aria2-libs/libssl.3.dylib similarity index 100% rename from apps/desktop/src-tauri/binaries/aria2-libs/libssl.3.dylib rename to src-tauri/binaries/aria2-libs/libssl.3.dylib diff --git a/apps/desktop/src-tauri/build.rs b/src-tauri/build.rs similarity index 100% rename from apps/desktop/src-tauri/build.rs rename to src-tauri/build.rs diff --git a/apps/desktop/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json similarity index 100% rename from apps/desktop/src-tauri/capabilities/default.json rename to src-tauri/capabilities/default.json diff --git a/apps/desktop/src-tauri/icons/128x128.png b/src-tauri/icons/128x128.png similarity index 100% rename from apps/desktop/src-tauri/icons/128x128.png rename to src-tauri/icons/128x128.png diff --git a/apps/desktop/src-tauri/icons/128x128@2x.png b/src-tauri/icons/128x128@2x.png similarity index 100% rename from apps/desktop/src-tauri/icons/128x128@2x.png rename to src-tauri/icons/128x128@2x.png diff --git a/apps/desktop/src-tauri/icons/32x32.png b/src-tauri/icons/32x32.png similarity index 100% rename from apps/desktop/src-tauri/icons/32x32.png rename to src-tauri/icons/32x32.png diff --git a/apps/desktop/src-tauri/icons/64x64.png b/src-tauri/icons/64x64.png similarity index 100% rename from apps/desktop/src-tauri/icons/64x64.png rename to src-tauri/icons/64x64.png diff --git a/apps/desktop/src-tauri/icons/Square107x107Logo.png b/src-tauri/icons/Square107x107Logo.png similarity index 100% rename from apps/desktop/src-tauri/icons/Square107x107Logo.png rename to src-tauri/icons/Square107x107Logo.png diff --git a/apps/desktop/src-tauri/icons/Square142x142Logo.png b/src-tauri/icons/Square142x142Logo.png similarity index 100% rename from apps/desktop/src-tauri/icons/Square142x142Logo.png rename to src-tauri/icons/Square142x142Logo.png diff --git a/apps/desktop/src-tauri/icons/Square150x150Logo.png b/src-tauri/icons/Square150x150Logo.png similarity index 100% rename from apps/desktop/src-tauri/icons/Square150x150Logo.png rename to src-tauri/icons/Square150x150Logo.png diff --git a/apps/desktop/src-tauri/icons/Square284x284Logo.png b/src-tauri/icons/Square284x284Logo.png similarity index 100% rename from apps/desktop/src-tauri/icons/Square284x284Logo.png rename to src-tauri/icons/Square284x284Logo.png diff --git a/apps/desktop/src-tauri/icons/Square30x30Logo.png b/src-tauri/icons/Square30x30Logo.png similarity index 100% rename from apps/desktop/src-tauri/icons/Square30x30Logo.png rename to src-tauri/icons/Square30x30Logo.png diff --git a/apps/desktop/src-tauri/icons/Square310x310Logo.png b/src-tauri/icons/Square310x310Logo.png similarity index 100% rename from apps/desktop/src-tauri/icons/Square310x310Logo.png rename to src-tauri/icons/Square310x310Logo.png diff --git a/apps/desktop/src-tauri/icons/Square44x44Logo.png b/src-tauri/icons/Square44x44Logo.png similarity index 100% rename from apps/desktop/src-tauri/icons/Square44x44Logo.png rename to src-tauri/icons/Square44x44Logo.png diff --git a/apps/desktop/src-tauri/icons/Square71x71Logo.png b/src-tauri/icons/Square71x71Logo.png similarity index 100% rename from apps/desktop/src-tauri/icons/Square71x71Logo.png rename to src-tauri/icons/Square71x71Logo.png diff --git a/apps/desktop/src-tauri/icons/Square89x89Logo.png b/src-tauri/icons/Square89x89Logo.png similarity index 100% rename from apps/desktop/src-tauri/icons/Square89x89Logo.png rename to src-tauri/icons/Square89x89Logo.png diff --git a/apps/desktop/src-tauri/icons/StoreLogo.png b/src-tauri/icons/StoreLogo.png similarity index 100% rename from apps/desktop/src-tauri/icons/StoreLogo.png rename to src-tauri/icons/StoreLogo.png diff --git a/apps/desktop/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml b/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from apps/desktop/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml rename to src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml diff --git a/apps/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png b/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png similarity index 100% rename from apps/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png rename to src-tauri/icons/android/mipmap-hdpi/ic_launcher.png diff --git a/apps/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png b/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png similarity index 100% rename from apps/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png rename to src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png diff --git a/apps/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png b/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png similarity index 100% rename from apps/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png rename to src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png diff --git a/apps/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png b/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png similarity index 100% rename from apps/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png rename to src-tauri/icons/android/mipmap-mdpi/ic_launcher.png diff --git a/apps/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png b/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png similarity index 100% rename from apps/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png rename to src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png diff --git a/apps/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png b/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png similarity index 100% rename from apps/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png rename to src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png diff --git a/apps/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png b/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from apps/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png rename to src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png diff --git a/apps/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png b/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png similarity index 100% rename from apps/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png rename to src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png diff --git a/apps/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png b/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png similarity index 100% rename from apps/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png rename to src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png diff --git a/apps/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png b/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from apps/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png rename to src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png diff --git a/apps/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png b/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png similarity index 100% rename from apps/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png rename to src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png diff --git a/apps/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png b/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png similarity index 100% rename from apps/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png rename to src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png diff --git a/apps/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png b/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from apps/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png rename to src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png diff --git a/apps/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png b/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png similarity index 100% rename from apps/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png rename to src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png diff --git a/apps/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png b/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png similarity index 100% rename from apps/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png rename to src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/apps/desktop/src-tauri/icons/android/values/ic_launcher_background.xml b/src-tauri/icons/android/values/ic_launcher_background.xml similarity index 100% rename from apps/desktop/src-tauri/icons/android/values/ic_launcher_background.xml rename to src-tauri/icons/android/values/ic_launcher_background.xml diff --git a/apps/desktop/src-tauri/icons/icon.icns b/src-tauri/icons/icon.icns similarity index 100% rename from apps/desktop/src-tauri/icons/icon.icns rename to src-tauri/icons/icon.icns diff --git a/apps/desktop/src-tauri/icons/icon.ico b/src-tauri/icons/icon.ico similarity index 100% rename from apps/desktop/src-tauri/icons/icon.ico rename to src-tauri/icons/icon.ico diff --git a/apps/desktop/src-tauri/icons/icon.png b/src-tauri/icons/icon.png similarity index 100% rename from apps/desktop/src-tauri/icons/icon.png rename to src-tauri/icons/icon.png diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-20x20@1x.png b/src-tauri/icons/ios/AppIcon-20x20@1x.png similarity index 100% rename from apps/desktop/src-tauri/icons/ios/AppIcon-20x20@1x.png rename to src-tauri/icons/ios/AppIcon-20x20@1x.png diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-20x20@2x-1.png b/src-tauri/icons/ios/AppIcon-20x20@2x-1.png similarity index 100% rename from apps/desktop/src-tauri/icons/ios/AppIcon-20x20@2x-1.png rename to src-tauri/icons/ios/AppIcon-20x20@2x-1.png diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-20x20@2x.png b/src-tauri/icons/ios/AppIcon-20x20@2x.png similarity index 100% rename from apps/desktop/src-tauri/icons/ios/AppIcon-20x20@2x.png rename to src-tauri/icons/ios/AppIcon-20x20@2x.png diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-20x20@3x.png b/src-tauri/icons/ios/AppIcon-20x20@3x.png similarity index 100% rename from apps/desktop/src-tauri/icons/ios/AppIcon-20x20@3x.png rename to src-tauri/icons/ios/AppIcon-20x20@3x.png diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-29x29@1x.png b/src-tauri/icons/ios/AppIcon-29x29@1x.png similarity index 100% rename from apps/desktop/src-tauri/icons/ios/AppIcon-29x29@1x.png rename to src-tauri/icons/ios/AppIcon-29x29@1x.png diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-29x29@2x-1.png b/src-tauri/icons/ios/AppIcon-29x29@2x-1.png similarity index 100% rename from apps/desktop/src-tauri/icons/ios/AppIcon-29x29@2x-1.png rename to src-tauri/icons/ios/AppIcon-29x29@2x-1.png diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-29x29@2x.png b/src-tauri/icons/ios/AppIcon-29x29@2x.png similarity index 100% rename from apps/desktop/src-tauri/icons/ios/AppIcon-29x29@2x.png rename to src-tauri/icons/ios/AppIcon-29x29@2x.png diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-29x29@3x.png b/src-tauri/icons/ios/AppIcon-29x29@3x.png similarity index 100% rename from apps/desktop/src-tauri/icons/ios/AppIcon-29x29@3x.png rename to src-tauri/icons/ios/AppIcon-29x29@3x.png diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-40x40@1x.png b/src-tauri/icons/ios/AppIcon-40x40@1x.png similarity index 100% rename from apps/desktop/src-tauri/icons/ios/AppIcon-40x40@1x.png rename to src-tauri/icons/ios/AppIcon-40x40@1x.png diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-40x40@2x-1.png b/src-tauri/icons/ios/AppIcon-40x40@2x-1.png similarity index 100% rename from apps/desktop/src-tauri/icons/ios/AppIcon-40x40@2x-1.png rename to src-tauri/icons/ios/AppIcon-40x40@2x-1.png diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-40x40@2x.png b/src-tauri/icons/ios/AppIcon-40x40@2x.png similarity index 100% rename from apps/desktop/src-tauri/icons/ios/AppIcon-40x40@2x.png rename to src-tauri/icons/ios/AppIcon-40x40@2x.png diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-40x40@3x.png b/src-tauri/icons/ios/AppIcon-40x40@3x.png similarity index 100% rename from apps/desktop/src-tauri/icons/ios/AppIcon-40x40@3x.png rename to src-tauri/icons/ios/AppIcon-40x40@3x.png diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-512@2x.png b/src-tauri/icons/ios/AppIcon-512@2x.png similarity index 100% rename from apps/desktop/src-tauri/icons/ios/AppIcon-512@2x.png rename to src-tauri/icons/ios/AppIcon-512@2x.png diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-60x60@2x.png b/src-tauri/icons/ios/AppIcon-60x60@2x.png similarity index 100% rename from apps/desktop/src-tauri/icons/ios/AppIcon-60x60@2x.png rename to src-tauri/icons/ios/AppIcon-60x60@2x.png diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-60x60@3x.png b/src-tauri/icons/ios/AppIcon-60x60@3x.png similarity index 100% rename from apps/desktop/src-tauri/icons/ios/AppIcon-60x60@3x.png rename to src-tauri/icons/ios/AppIcon-60x60@3x.png diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-76x76@1x.png b/src-tauri/icons/ios/AppIcon-76x76@1x.png similarity index 100% rename from apps/desktop/src-tauri/icons/ios/AppIcon-76x76@1x.png rename to src-tauri/icons/ios/AppIcon-76x76@1x.png diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-76x76@2x.png b/src-tauri/icons/ios/AppIcon-76x76@2x.png similarity index 100% rename from apps/desktop/src-tauri/icons/ios/AppIcon-76x76@2x.png rename to src-tauri/icons/ios/AppIcon-76x76@2x.png diff --git a/apps/desktop/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png b/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png similarity index 100% rename from apps/desktop/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png rename to src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png diff --git a/apps/desktop/src-tauri/icons/trayTemplate.png b/src-tauri/icons/trayTemplate.png similarity index 100% rename from apps/desktop/src-tauri/icons/trayTemplate.png rename to src-tauri/icons/trayTemplate.png diff --git a/apps/desktop/src-tauri/src/db.rs b/src-tauri/src/db.rs similarity index 79% rename from apps/desktop/src-tauri/src/db.rs rename to src-tauri/src/db.rs index 6aac5a1..57f7bf5 100644 --- a/apps/desktop/src-tauri/src/db.rs +++ b/src-tauri/src/db.rs @@ -53,22 +53,6 @@ pub fn insert_download(conn: &Connection, id: &str, status: &str, queue_id: &str Ok(()) } -pub fn update_download_status(conn: &Connection, id: &str, status: &str) -> Result<()> { - conn.execute( - "UPDATE downloads SET status = ?1 WHERE id = ?2", - params![status, id], - )?; - Ok(()) -} - -pub fn update_download_data(conn: &Connection, id: &str, data: &str) -> Result<()> { - conn.execute( - "UPDATE downloads SET data = ?1 WHERE id = ?2", - params![data, id], - )?; - Ok(()) -} - pub fn delete_download(conn: &Connection, id: &str) -> Result<()> { conn.execute("DELETE FROM downloads WHERE id = ?1", params![id])?; Ok(()) @@ -84,16 +68,6 @@ pub fn get_all_downloads(conn: &Connection) -> Result> { Ok(res) } -pub fn get_downloads_by_status(conn: &Connection, status: &str) -> Result> { - let mut stmt = conn.prepare("SELECT data FROM downloads WHERE status = ?1")?; - let iter = stmt.query_map(params![status], |row| row.get(0))?; - let mut res = Vec::new(); - for data in iter { - res.push(data?); - } - Ok(res) -} - // Settings CRUD pub fn get_settings(conn: &Connection) -> Result> { let mut stmt = conn.prepare("SELECT data FROM settings WHERE id = 1")?; diff --git a/apps/desktop/src-tauri/src/download.rs b/src-tauri/src/download.rs similarity index 100% rename from apps/desktop/src-tauri/src/download.rs rename to src-tauri/src/download.rs diff --git a/apps/desktop/src-tauri/src/error.rs b/src-tauri/src/error.rs similarity index 100% rename from apps/desktop/src-tauri/src/error.rs rename to src-tauri/src/error.rs diff --git a/apps/desktop/src-tauri/src/extension_server.rs b/src-tauri/src/extension_server.rs similarity index 100% rename from apps/desktop/src-tauri/src/extension_server.rs rename to src-tauri/src/extension_server.rs diff --git a/apps/desktop/src-tauri/src/ipc.rs b/src-tauri/src/ipc.rs similarity index 100% rename from apps/desktop/src-tauri/src/ipc.rs rename to src-tauri/src/ipc.rs diff --git a/apps/desktop/src-tauri/src/lib.rs b/src-tauri/src/lib.rs similarity index 99% rename from apps/desktop/src-tauri/src/lib.rs rename to src-tauri/src/lib.rs index 95d82fe..7267ff8 100644 --- a/apps/desktop/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -183,12 +183,6 @@ async fn fetch_media_metadata(app_handle: tauri::AppHandle, url: String, cookie_ } } -#[tauri::command] -fn greet(name: &str) -> String { - println!("greet called with name: {}", name); - format!("Hello, {}! You've been greeted from Rust!", name) -} - #[tauri::command] async fn test_ytdlp(app_handle: tauri::AppHandle) -> Result { println!("test_ytdlp called!"); @@ -1484,7 +1478,7 @@ pub fn run() { } }) .invoke_handler(tauri::generate_handler![ - greet, test_ytdlp, test_aria2c, test_ffmpeg, test_deno, open_file, show_in_folder, + test_ytdlp, test_aria2c, test_ffmpeg, test_deno, open_file, show_in_folder, start_download, start_media_download, pause_download, fetch_metadata, fetch_media_metadata, update_dock_badge, set_prevent_sleep, get_free_space, perform_system_action, request_automation_permission, open_automation_settings, diff --git a/apps/desktop/src-tauri/src/main.rs b/src-tauri/src/main.rs similarity index 86% rename from apps/desktop/src-tauri/src/main.rs rename to src-tauri/src/main.rs index 2abccd9..85e9488 100644 --- a/apps/desktop/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -2,5 +2,5 @@ #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] fn main() { - tauri_app_lib::run() + firelink_lib::run() } diff --git a/apps/desktop/src-tauri/src/parity.rs b/src-tauri/src/parity.rs similarity index 100% rename from apps/desktop/src-tauri/src/parity.rs rename to src-tauri/src/parity.rs diff --git a/apps/desktop/src-tauri/src/scheduler.rs b/src-tauri/src/scheduler.rs similarity index 100% rename from apps/desktop/src-tauri/src/scheduler.rs rename to src-tauri/src/scheduler.rs diff --git a/apps/desktop/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json similarity index 100% rename from apps/desktop/src-tauri/tauri.conf.json rename to src-tauri/tauri.conf.json diff --git a/apps/desktop/src-tauri/tests/README.md b/src-tauri/tests/README.md similarity index 93% rename from apps/desktop/src-tauri/tests/README.md rename to src-tauri/tests/README.md index 4e65f55..e122ed2 100644 --- a/apps/desktop/src-tauri/tests/README.md +++ b/src-tauri/tests/README.md @@ -3,7 +3,7 @@ Run the full Rust suite: ```sh -cd apps/desktop/src-tauri +cd src-tauri cargo test --all-targets ``` @@ -11,7 +11,7 @@ Run only the async download integration harness with deterministic serial performance measurements and visible test output: ```sh -cd apps/desktop/src-tauri +cd src-tauri RUST_BACKTRACE=1 cargo test --test download_engine -- --test-threads=1 --nocapture ``` diff --git a/apps/desktop/src-tauri/tests/download_engine.rs b/src-tauri/tests/download_engine.rs similarity index 99% rename from apps/desktop/src-tauri/tests/download_engine.rs rename to src-tauri/tests/download_engine.rs index 9501af6..d12a468 100644 --- a/apps/desktop/src-tauri/tests/download_engine.rs +++ b/src-tauri/tests/download_engine.rs @@ -19,7 +19,7 @@ use std::{ }, time::{Duration, Instant}, }; -use tauri_app_lib::download::{DownloadCmd, DownloadCoordinator, DownloadEvent, DownloadPayload}; +use firelink_lib::download::{DownloadCmd, DownloadCoordinator, DownloadEvent, DownloadPayload}; use tempfile::TempDir; use tokio::{net::TcpListener, sync::mpsc, task::JoinHandle}; use uuid::Uuid; diff --git a/apps/desktop/src/App.css b/src/App.css similarity index 97% rename from apps/desktop/src/App.css rename to src/App.css index 85f7a4a..246295d 100644 --- a/apps/desktop/src/App.css +++ b/src/App.css @@ -91,9 +91,6 @@ button { outline: none; } -#greet-input { - margin-right: 5px; -} @media (prefers-color-scheme: dark) { :root { diff --git a/apps/desktop/src/App.tsx b/src/App.tsx similarity index 100% rename from apps/desktop/src/App.tsx rename to src/App.tsx diff --git a/apps/desktop/src/ErrorBoundary.tsx b/src/ErrorBoundary.tsx similarity index 100% rename from apps/desktop/src/ErrorBoundary.tsx rename to src/ErrorBoundary.tsx diff --git a/apps/desktop/app-icon.png b/src/assets/app-icon.png similarity index 100% rename from apps/desktop/app-icon.png rename to src/assets/app-icon.png diff --git a/apps/desktop/src/bindings/ActiveView.ts b/src/bindings/ActiveView.ts similarity index 100% rename from apps/desktop/src/bindings/ActiveView.ts rename to src/bindings/ActiveView.ts diff --git a/apps/desktop/src/bindings/AppFontSize.ts b/src/bindings/AppFontSize.ts similarity index 100% rename from apps/desktop/src/bindings/AppFontSize.ts rename to src/bindings/AppFontSize.ts diff --git a/apps/desktop/src/bindings/AvailableReleaseUpdate.ts b/src/bindings/AvailableReleaseUpdate.ts similarity index 100% rename from apps/desktop/src/bindings/AvailableReleaseUpdate.ts rename to src/bindings/AvailableReleaseUpdate.ts diff --git a/apps/desktop/src/bindings/DownloadCategory.ts b/src/bindings/DownloadCategory.ts similarity index 100% rename from apps/desktop/src/bindings/DownloadCategory.ts rename to src/bindings/DownloadCategory.ts diff --git a/apps/desktop/src/bindings/DownloadItem.ts b/src/bindings/DownloadItem.ts similarity index 100% rename from apps/desktop/src/bindings/DownloadItem.ts rename to src/bindings/DownloadItem.ts diff --git a/apps/desktop/src/bindings/DownloadProgressEvent.ts b/src/bindings/DownloadProgressEvent.ts similarity index 100% rename from apps/desktop/src/bindings/DownloadProgressEvent.ts rename to src/bindings/DownloadProgressEvent.ts diff --git a/apps/desktop/src/bindings/DownloadStatus.ts b/src/bindings/DownloadStatus.ts similarity index 100% rename from apps/desktop/src/bindings/DownloadStatus.ts rename to src/bindings/DownloadStatus.ts diff --git a/apps/desktop/src/bindings/ExtensionDownload.ts b/src/bindings/ExtensionDownload.ts similarity index 100% rename from apps/desktop/src/bindings/ExtensionDownload.ts rename to src/bindings/ExtensionDownload.ts diff --git a/apps/desktop/src/bindings/ListRowDensity.ts b/src/bindings/ListRowDensity.ts similarity index 100% rename from apps/desktop/src/bindings/ListRowDensity.ts rename to src/bindings/ListRowDensity.ts diff --git a/apps/desktop/src/bindings/MediaCookieSource.ts b/src/bindings/MediaCookieSource.ts similarity index 100% rename from apps/desktop/src/bindings/MediaCookieSource.ts rename to src/bindings/MediaCookieSource.ts diff --git a/apps/desktop/src/bindings/MetadataResponse.ts b/src/bindings/MetadataResponse.ts similarity index 100% rename from apps/desktop/src/bindings/MetadataResponse.ts rename to src/bindings/MetadataResponse.ts diff --git a/apps/desktop/src/bindings/PersistedSettings.ts b/src/bindings/PersistedSettings.ts similarity index 100% rename from apps/desktop/src/bindings/PersistedSettings.ts rename to src/bindings/PersistedSettings.ts diff --git a/apps/desktop/src/bindings/PostQueueAction.ts b/src/bindings/PostQueueAction.ts similarity index 100% rename from apps/desktop/src/bindings/PostQueueAction.ts rename to src/bindings/PostQueueAction.ts diff --git a/apps/desktop/src/bindings/ProxyMode.ts b/src/bindings/ProxyMode.ts similarity index 100% rename from apps/desktop/src/bindings/ProxyMode.ts rename to src/bindings/ProxyMode.ts diff --git a/apps/desktop/src/bindings/Queue.ts b/src/bindings/Queue.ts similarity index 100% rename from apps/desktop/src/bindings/Queue.ts rename to src/bindings/Queue.ts diff --git a/apps/desktop/src/bindings/ReleaseCheckOutcome.ts b/src/bindings/ReleaseCheckOutcome.ts similarity index 100% rename from apps/desktop/src/bindings/ReleaseCheckOutcome.ts rename to src/bindings/ReleaseCheckOutcome.ts diff --git a/apps/desktop/src/bindings/SchedulerSettings.ts b/src/bindings/SchedulerSettings.ts similarity index 100% rename from apps/desktop/src/bindings/SchedulerSettings.ts rename to src/bindings/SchedulerSettings.ts diff --git a/apps/desktop/src/bindings/SettingsTab.ts b/src/bindings/SettingsTab.ts similarity index 100% rename from apps/desktop/src/bindings/SettingsTab.ts rename to src/bindings/SettingsTab.ts diff --git a/apps/desktop/src/bindings/SiteLogin.ts b/src/bindings/SiteLogin.ts similarity index 100% rename from apps/desktop/src/bindings/SiteLogin.ts rename to src/bindings/SiteLogin.ts diff --git a/apps/desktop/src/bindings/Theme.ts b/src/bindings/Theme.ts similarity index 100% rename from apps/desktop/src/bindings/Theme.ts rename to src/bindings/Theme.ts diff --git a/apps/desktop/src/components/AddDownloadsModal.tsx b/src/components/AddDownloadsModal.tsx similarity index 100% rename from apps/desktop/src/components/AddDownloadsModal.tsx rename to src/components/AddDownloadsModal.tsx diff --git a/apps/desktop/src/components/DownloadTable.tsx b/src/components/DownloadTable.tsx similarity index 100% rename from apps/desktop/src/components/DownloadTable.tsx rename to src/components/DownloadTable.tsx diff --git a/apps/desktop/src/components/DuplicateResolutionModal.tsx b/src/components/DuplicateResolutionModal.tsx similarity index 100% rename from apps/desktop/src/components/DuplicateResolutionModal.tsx rename to src/components/DuplicateResolutionModal.tsx diff --git a/apps/desktop/src/components/PropertiesModal.tsx b/src/components/PropertiesModal.tsx similarity index 100% rename from apps/desktop/src/components/PropertiesModal.tsx rename to src/components/PropertiesModal.tsx diff --git a/apps/desktop/src/components/SchedulerView.tsx b/src/components/SchedulerView.tsx similarity index 100% rename from apps/desktop/src/components/SchedulerView.tsx rename to src/components/SchedulerView.tsx diff --git a/apps/desktop/src/components/SettingsView.tsx b/src/components/SettingsView.tsx similarity index 98% rename from apps/desktop/src/components/SettingsView.tsx rename to src/components/SettingsView.tsx index 846813c..46c094e 100644 --- a/apps/desktop/src/components/SettingsView.tsx +++ b/src/components/SettingsView.tsx @@ -10,6 +10,7 @@ import { Moon, Terminal, Puzzle, Info, Plus, Trash2, Copy, RefreshCw, Code } from 'lucide-react'; import { open } from '@tauri-apps/plugin-dialog'; +import { getVersion } from '@tauri-apps/api/app'; import { invokeCommand as invoke } from '../ipc'; import { WindowDragRegion } from './WindowDragRegion'; import appIcon from '../assets/app-icon.png'; @@ -35,6 +36,7 @@ export default function SettingsView() { const [ytdlpVersion, setYtdlpVersion] = useState('Checking...'); const [ffmpegVersion, setFfmpegVersion] = useState('Checking...'); const [denoVersion, setDenoVersion] = useState('Checking...'); + const [appVersion, setAppVersion] = useState('0.7.3'); const getEngineStatus = (v: string) => { if (v === 'Checking...') return Checking...; @@ -59,6 +61,10 @@ export default function SettingsView() { } }, [toastMessage]); + useEffect(() => { + getVersion().then(setAppVersion).catch(() => undefined); + }, []); + // Fetch engine versions when Engine tab is opened useEffect(() => { if (settings.activeView === 'settings' && activeTab === 'engine') { @@ -833,9 +839,9 @@ export default function SettingsView() { Firelink Icon

Firelink

-

Version 0.7.3

+

Version {appVersion}

- A native macOS download manager for fast, organized, segmented transfers. + A fast desktop download manager powered by Rust and Tauri.

@@ -886,9 +892,12 @@ export default function SettingsView() {
- Powered by aria2 โ€ข yt-dlp โ€ข ffmpeg โ€ข Deno + Built with Rust โ€ข Tauri โ€ข React โ€ข TypeScript MIT License
+
+ Download engines: aria2 โ€ข yt-dlp โ€ข FFmpeg โ€ข Deno +
Copyright ยฉ 2026 NimBold. All rights reserved.
diff --git a/apps/desktop/src/components/Sidebar.tsx b/src/components/Sidebar.tsx similarity index 100% rename from apps/desktop/src/components/Sidebar.tsx rename to src/components/Sidebar.tsx diff --git a/apps/desktop/src/components/SpeedLimiterView.tsx b/src/components/SpeedLimiterView.tsx similarity index 100% rename from apps/desktop/src/components/SpeedLimiterView.tsx rename to src/components/SpeedLimiterView.tsx diff --git a/apps/desktop/src/components/WindowDragRegion.tsx b/src/components/WindowDragRegion.tsx similarity index 100% rename from apps/desktop/src/components/WindowDragRegion.tsx rename to src/components/WindowDragRegion.tsx diff --git a/apps/desktop/src/index.css b/src/index.css similarity index 100% rename from apps/desktop/src/index.css rename to src/index.css diff --git a/apps/desktop/src/ipc.ts b/src/ipc.ts similarity index 99% rename from apps/desktop/src/ipc.ts rename to src/ipc.ts index e5e2951..1700576 100644 --- a/apps/desktop/src/ipc.ts +++ b/src/ipc.ts @@ -52,7 +52,6 @@ type CommandMap = { args: { url: string; cookieBrowser: string | null; username: string | null; password: string | null }; result: string; }; - greet: { args: { name: string }; result: string }; test_ytdlp: { args: undefined; result: string }; test_aria2c: { args: undefined; result: string }; test_ffmpeg: { args: undefined; result: string }; diff --git a/apps/desktop/src/main.tsx b/src/main.tsx similarity index 100% rename from apps/desktop/src/main.tsx rename to src/main.tsx diff --git a/apps/desktop/src/store/useDownloadStore.ts b/src/store/useDownloadStore.ts similarity index 100% rename from apps/desktop/src/store/useDownloadStore.ts rename to src/store/useDownloadStore.ts diff --git a/apps/desktop/src/store/useSettingsStore.ts b/src/store/useSettingsStore.ts similarity index 100% rename from apps/desktop/src/store/useSettingsStore.ts rename to src/store/useSettingsStore.ts diff --git a/apps/desktop/src/utils/downloads.ts b/src/utils/downloads.ts similarity index 100% rename from apps/desktop/src/utils/downloads.ts rename to src/utils/downloads.ts diff --git a/apps/desktop/src/vite-env.d.ts b/src/vite-env.d.ts similarity index 100% rename from apps/desktop/src/vite-env.d.ts rename to src/vite-env.d.ts diff --git a/apps/desktop/tailwind.config.js b/tailwind.config.js similarity index 100% rename from apps/desktop/tailwind.config.js rename to tailwind.config.js diff --git a/test_regex.rs b/test_regex.rs deleted file mode 100644 index 3e1bef4..0000000 --- a/test_regex.rs +++ /dev/null @@ -1,13 +0,0 @@ -use regex::Regex; - -fn main() { - let pct_re = Regex::new(r"\[download\]\s+(\d+(?:\.\d+)?)%").unwrap(); - let line = "[download] 0.0% of 15.59MiB at 7.28KiB/s ETA 36:34"; - if line.contains("[download]") && line.contains("%") { - let fraction = pct_re.captures(&line) - .and_then(|cap| cap.get(1)) - .and_then(|m| m.as_str().parse::().ok()) - .unwrap_or(0.0) / 100.0; - println!("Fraction: {}", fraction); - } -} diff --git a/apps/desktop/tsconfig.json b/tsconfig.json similarity index 100% rename from apps/desktop/tsconfig.json rename to tsconfig.json diff --git a/apps/desktop/tsconfig.node.json b/tsconfig.node.json similarity index 100% rename from apps/desktop/tsconfig.node.json rename to tsconfig.node.json diff --git a/apps/desktop/vite.config.ts b/vite.config.ts similarity index 100% rename from apps/desktop/vite.config.ts rename to vite.config.ts diff --git a/yt_out.log b/yt_out.log deleted file mode 100644 index 4a8b434..0000000 --- a/yt_out.log +++ /dev/null @@ -1,54 +0,0 @@ -[youtube] Extracting URL: https://www.youtube.com/watch?v=1PBRhm5ZnjU -[youtube] 1PBRhm5ZnjU: Downloading webpage -[youtube] 1PBRhm5ZnjU: Downloading android vr player API JSON -[youtube] 1PBRhm5ZnjU: Downloading player 445213fb-main -[youtube] [jsc:deno] Solving JS challenges using deno -[youtube] 1PBRhm5ZnjU: Downloading m3u8 information -[info] 1PBRhm5ZnjU: Downloading 1 format(s): 399+140 -[download] Destination: /Users/nima/Downloads/test2.f399.mp4 -[download] 0.0% of 15.59MiB at 7.28KiB/s ETA 36:34 -[download] 0.0% of 15.59MiB at 21.51KiB/s ETA 12:22 -[download] 0.0% of 15.59MiB at 49.76KiB/s ETA 05:20 -[download] 0.1% of 15.59MiB at 106.20KiB/s ETA 02:30 -[download] 0.2% of 15.59MiB at 152.25KiB/s ETA 01:44 -[download] 0.4% of 15.59MiB at 214.52KiB/s ETA 01:14 -[download] 0.8% of 15.59MiB at 330.14KiB/s ETA 00:47 -[download] 1.6% of 15.59MiB at 534.67KiB/s ETA 00:29 -[download] 3.2% of 15.59MiB at 765.21KiB/s ETA 00:20 -[download] 6.4% of 15.59MiB at 1.23MiB/s ETA 00:11 -[download] 12.8% of 15.59MiB at 1.97MiB/s ETA 00:06 -[download] 25.6% of 15.59MiB at 3.05MiB/s ETA 00:03 -[download] 51.3% of 15.59MiB at 3.56MiB/s ETA 00:02 -[download] 61.6% of 15.59MiB at 3.72MiB/s ETA 00:01 -[download] 61.6% of 15.59MiB at 43.49KiB/s ETA 02:20 -[download] 61.6% of 15.59MiB at 113.07KiB/s ETA 00:54 -[download] 61.7% of 15.59MiB at 254.33KiB/s ETA 00:24 -[download] 61.7% of 15.59MiB at 532.02KiB/s ETA 00:11 -[download] 61.8% of 15.59MiB at 1.05MiB/s ETA 00:05 -[download] 62.0% of 15.59MiB at 2.10MiB/s ETA 00:02 -[download] 62.4% of 15.59MiB at 3.06MiB/s ETA 00:01 -[download] 63.2% of 15.59MiB at 3.17MiB/s ETA 00:01 -[download] 64.8% of 15.59MiB at 3.10MiB/s ETA 00:01 -[download] 68.0% of 15.59MiB at 3.04MiB/s ETA 00:01 -[download] 74.4% of 15.59MiB at 2.70MiB/s ETA 00:01 -[download] 87.3% of 15.59MiB at 2.60MiB/s ETA 00:00 -[download] 100.0% of 15.59MiB at 2.72MiB/s ETA 00:00 -[download] 100% of 15.59MiB in 00:00:08 at 1.91MiB/s -[download] Destination: /Users/nima/Downloads/test2.f140.m4a -[download] 0.0% of 4.76MiB at 837.69KiB/s ETA 00:05 -[download] 0.1% of 4.76MiB at 1.54MiB/s ETA 00:03 -[download] 0.1% of 4.76MiB at 2.40MiB/s ETA 00:01 -[download] 0.3% of 4.76MiB at 4.34MiB/s ETA 00:01 -[download] 0.6% of 4.76MiB at 7.93MiB/s ETA 00:00 -[download] 1.3% of 4.76MiB at 14.52MiB/s ETA 00:00 -[download] 2.6% of 4.76MiB at 26.50MiB/s ETA 00:00 -[download] 5.2% of 4.76MiB at 7.70MiB/s ETA 00:00 -[download] 10.5% of 4.76MiB at 5.40MiB/s ETA 00:00 -[download] 21.0% of 4.76MiB at 4.61MiB/s ETA 00:00 -[download] 42.0% of 4.76MiB at 4.31MiB/s ETA 00:00 -[download] 84.0% of 4.76MiB at 4.15MiB/s ETA 00:00 -[download] 100.0% of 4.76MiB at 4.11MiB/s ETA 00:00 -[download] 100% of 4.76MiB in 00:00:01 at 3.20MiB/s -[Merger] Merging formats into "/Users/nima/Downloads/test2.mp4" -Deleting original file /Users/nima/Downloads/test2.f140.m4a (pass -k to keep) -Deleting original file /Users/nima/Downloads/test2.f399.mp4 (pass -k to keep)