Мультиплатформенный менеджер для репозитория расширений fan
  • Rust 69.4%
  • Svelte 27.5%
  • TypeScript 1.6%
  • HTML 0.9%
  • Python 0.5%
Find a file
Aristman b354993eb0 Бамп версии 0.5.1
Исправлена упаковка ченджлога
2026-09-03 13:00:41 +03:00
assets feat: add app icon (fan blades in green-cyan gradient on dark zinc) 2026-08-04 11:50:48 +03:00
docs docs(fan-store-manager): finalize pipeline report — 15/15 functions, 99 tests, all verified 2026-07-20 15:22:39 +03:00
scripts feat: add app icon (fan blades in green-cyan gradient on dark zinc) 2026-08-04 11:50:48 +03:00
src Бамп версии 0.5.1 2026-09-03 13:00:41 +03:00
src-tauri Бамп версии 0.5.1 2026-09-03 13:00:41 +03:00
.gitignore feat(fan-store-manager): implement F-3.5 Upload, F-3.6 Dist, F-3.8 Versions, F-3.9 confirm-dialog, F-4.1 Packages, F-4.2 drag-n-drop 2026-07-20 15:09:32 +03:00
CHANGELOG.md Release v0.4.0: publish CHANGELOG.md to server dist on fan version publish 2026-08-07 18:08:45 +03:00
package-lock.json Бамп версии 0.2.0 2026-07-22 23:06:50 +03:00
package.json Бамп версии 0.5.1 2026-09-03 13:00:41 +03:00
README.md docs(fan-store-manager): add README.md 2026-07-20 15:21:33 +03:00
svelte.config.js chore: initialize Tauri 2 + SvelteKit + Tailwind CSS project 2026-07-20 12:36:30 +03:00
tsconfig.json chore: initialize Tauri 2 + SvelteKit + Tailwind CSS project 2026-07-20 12:36:30 +03:00
vite.config.ts feat: display app version in header after title 2026-07-31 13:21:39 +03:00

FAN Store Manager

Кросс-платформенный десктоп для управления серверным репозиторием FAN Store

Описание

FAN Store Manager — кросс-платформенное десктоп-приложение на Tauri 2 + SvelteKit 2 для визуального управления серверным репозиторием FAN Store. Заменяет CLI-скрипты fan-store / fan-store.ps1, добавляя SSH/SFTP-подключение, drag-n-drop загрузку пакетов, управление дистрибутивами fan с rollback, атомарные операции с backup/rollback и прогресс-бары для всех transfer-операций.

Один пользователь (разработчик FAN), личный рабочий инструмент.

Возможности

  • SSH-подключение — подключение по ключу (ed25519/RSA), тест соединения, хранение настроек в локальном store
  • Browse — визуальное дерево каталогов сервера (packages/, dist/, releases/), JSON viewer с подсветкой синтаксиса
  • Загрузка пакетов — drag-n-drop .tar.gz, инспекция метаданных, SHA-256, обновление index.json
  • Загрузка дистрибутивов — 5 платформ (darwin-arm64, darwin-x64, linux-arm64, linux-x64, windows-x64), валидация версий, активация через manifest.json
  • Откат fan — 3 режима: только смена активной версии / удаление новых / архивация в releases/
  • Удаление пакетов — 3 режима: только из индекса / полное удаление / архивация в releases/
  • Атомарные операции — backup → операция → verify → rollback при ошибке (все модули в ops/)
  • Прогресс — стриминг progress-событий через Tauri Channel с процентами и ETA
  • Dry-run — просмотр эффекта операции без внесения изменений на сервере
  • Auto-reconnect — reconnect с exponential backoff при разрыве SSH-сессии

Стек

Компонент Технология
Каркас Tauri 2
Frontend SvelteKit 2 (Svelte 5)
Стили Tailwind CSS 4
Сборка Vite 8
Адаптер @sveltejs/adapter-static (SPA mode)
SSH/SFTP russh 0.50 + russh-sftp 2
Хеширование sha2 0.10
Архивы tar 0.4 + flate2 1
Сериализация serde + serde_json
Async tokio (full features)
Ошибки thiserror 2
Логи log 0.4

Prerequisites

  • Node.js 18+
  • Rust 1.70+
  • Tauri 2 CLI: cargo install tauri-cli
  • Системные зависимости: Tauri prerequisites
    • Windows: WebView2 Runtime (обычно предустановлен)
    • macOS: Xcode Command Line Tools
    • Linux: gtk3, webkit2gtk-4.1, libayatana-appindicator3-dev

Установка и запуск

# Клонировать
git clone <repo-url>
cd fan-store-manager

# Установить зависимости
npm install

# Development mode
npm run tauri dev

# Build
npm run tauri build

Scripts

Команда Описание
npm run dev Vite dev server (фронтенд)
npm run tauri dev Tauri dev (бэкенд + фронтенд)
npm run build Production build фронтенда
npm run preview Preview production build
npm run check Svelte type-check

Структура проекта

fan-store-manager/
├── src-tauri/              # Rust backend (Tauri core)
│   ├── src/
│   │   ├── main.rs         # Tauri entrypoint + plugin registration
│   │   ├── ssh_client.rs   # SSH client (russh): connect, auth, session
│   │   ├── sftp_ops.rs     # SFTP primitives: list, read, write, upload, download
│   │   ├── archive_inspect.rs  # Read package.json from .tar.gz (tar + flate2)
│   │   ├── hash.rs         # SHA-256 utilities
│   │   ├── index_json.rs   # Parse / update index.json
│   │   ├── manifest_json.rs # Parse / update manifest.json
│   │   ├── atomic.rs       # Atomic ops: backup → execute → verify → rollback
│   │   ├── commands.rs     # Tauri IPC command handlers
│   │   ├── progress.rs     # Progress event streaming via Tauri Channel
│   │   ├── ops/            # Business operations
│   │   │   ├── mod.rs      # Module exports
│   │   │   ├── upload_package.rs    # Upload extension/skill/theme
│   │   │   ├── upload_dist.rs       # Upload fan distributions (5 platforms)
│   │   │   ├── rollback_fan.rs      # 3 rollback modes
│   │   │   └── delete_package.rs    # 3 delete modes
│   │   └── lib.rs          # Library root
│   ├── Cargo.toml
│   ├── tauri.conf.json
│   ├── capabilities/default.json
│   ├── build.rs
│   └── icons/              # App icons (multi-platform)
├── src/                    # SvelteKit frontend
│   ├── routes/
│   │   ├── +layout.svelte  # App shell (sidebar + header)
│   │   ├── +layout.ts      # ssr = false (SPA mode)
│   │   ├── +page.svelte    # Root redirect
│   │   ├── connect/        # SSH connection page
│   │   ├── browse/         # Server directory tree
│   │   ├── upload/         # Package upload
│   │   ├── dist/           # Distribution management
│   │   ├── versions/       # Version management + rollback
│   │   └── packages/       # Package list + deletion
│   └── lib/
│       ├── components/     # UI components
│       │   ├── confirm-dialog.svelte   # Preview + confirm modal
│       │   ├── file-tree.svelte        # Server directory tree
│       │   ├── json-viewer.svelte      # Syntax-highlighted JSON
│       │   └── progress-bar.svelte     # Upload/operation progress
│       ├── stores/         # Svelte stores
│       │   ├── connection.ts     # Connection state
│       │   └── operations.ts     # Active operations + progress
│       └── utils/
│           └── format.ts         # File size / date formatting
├── docs/                   # Documentation
│   ├── specs/              # Feature specifications
│   │   └── spec_fan-store-manager_2026-07-20.md
│   └── features/           # Roadmaps & reports
│       └── fan-store-manager/
├── svelte.config.js
│ vite.config.ts
├── tsconfig.json
├── tailwind.config.ts
└── package.json

Серверная структура

Приложение управляет следующей структурой на сервере (/opt/repos/fan-store/):

/opt/repos/fan-store/
├── index.json          # Индекс всех пакетов
├── packages/           # Текущие версии пакетов (*.tar.gz)
├── dist/               # Дистрибутивы fan
│   └── manifest.json   # Активная версия + платформы
└── releases/           # Архивные версии (long-term storage)

Форматы данных

index.json — индекс пакетов:

{
  "packages": {
    "<name>": {
      "name": "string",
      "version": "string",
      "type": "extension | skill | theme",
      "filename": "string",
      "sha256": "string",
      "size": number,
      "uploadedAt": "ISO-8601"
    }
  }
}

manifest.json — активные дистрибутивы:

{
  "latest": "string (semver)",
  "releasedAt": "ISO-8601",
  "platforms": {
    "<platform>": { "filename": "string", "sha256": "string", "size": number }
  }
}

Платформы: darwin-arm64, darwin-x64, linux-arm64, linux-x64, windows-x64.

Лицензия

Private tool — not for distribution.