Overlay de jeu transparent pour Foxhole, intégré à l'API ArtyCon.
Affiche en temps réel les groupes d'artillerie, batteries, cibles et solutions de tir
pour les instances dont l'utilisateur connecté est membre.
Stack : Tauri v2 (Rust) + TypeScript + Vite
Cible de déploiement : Windows x86_64 (cross-compilé depuis Linux)
Authentification : OAuth2 loopback Discord ou login local + tokens JWT Bearer
- Prérequis
- Environnement de développement Linux
- Cross-compilation Windows
- Commandes
- Structure du projet
- Architecture
- Contribuer
| Outil | Version min | Notes |
|---|---|---|
| Rust (stable) | 1.80+ | via rustup |
| Node.js | 24+ | LTS recommandé |
| npm | 10+ | inclus avec Node |
| clang + llvm | 14+ | nécessaire pour cargo-xwin |
| cargo-xwin | 0.20+ | cargo install cargo-xwin |
sudo apt update
sudo apt install -y \
build-essential \
curl \
wget \
file \
pkg-config \
clang \
llvm \
libdbus-1-dev \
libglib2.0-dev \
libsoup-3.0-dev \
libwebkit2gtk-4.1-dev \
libgtk-3-dev \
libjavascriptcoregtk-4.1-dev \
libayatana-appindicator3-dev \
librsvg2-dev \
libssl-dev \
libxdo-devNote :
libxdo-devest requis partauri-plugin-global-shortcutpour la détection des touches sur X11.
# Installer rustup si absent
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
# Vérifier
rustc --versionUtiliser nvm ou le gestionnaire de paquets de la distro :
# Via nvm (recommandé)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
nvm install --lts
nvm use --ltsnpm installVoir le guide détaillé : docs/cross-compilation.md
Résumé rapide :
# Ajouter la cible Windows MSVC
rustup target add x86_64-pc-windows-msvc
# Installer cargo-xwin
cargo install cargo-xwin
# Compiler (génère un .exe dans src-tauri/target/x86_64-pc-windows-msvc/release/)
npm run packageLa première exécution télécharge le Windows SDK (~1 Go) dans ~/.xwin-cache.
Les compilations suivantes réutilisent le cache.
| Commande | Description |
|---|---|
npm run dev |
Lance Tauri en mode dev (hot-reload, fenêtre native Linux) |
npm run dev:vite |
Lance uniquement le serveur Vite (port 1420) |
npm run build:vite |
Build le frontend (obfusqué en production) |
npm run package |
Cross-compile pour Windows → .exe sans installeur |
npm run test |
Lance la suite de tests Vitest |
npm run test:coverage |
Tests avec rapport de couverture |
npm run typecheck |
Vérification TypeScript sans émission |
11eOverlay/
├── src/
│ └── renderer/
│ ├── overlay/ # Fenêtre overlay principale (transparent, always-on-top)
│ └── settings/ # Fenêtre de configuration
├── src-tauri/
│ └── src/
│ ├── main.rs # Point d'entrée Tauri, gestion des fenêtres et tray
│ ├── settings.rs # Persistance des paramètres utilisateur
│ ├── content.rs # Chargement des données statiques (content.json)
│ └── api/
│ ├── auth.rs # OAuth2 loopback + login local
│ ├── client.rs # Client HTTP (reqwest + rustls)
│ ├── sse.rs # Connexion Server-Sent Events temps réel
│ ├── tokens.rs # Stockage chiffré des tokens (AES-256-GCM)
│ ├── crypto.rs # Dérivation de clé (HKDF-SHA256)
│ └── types.rs # Types partagés Rust
└── src/shared/
├── types.ts # Types partagés TypeScript
└── settings.ts # Interface des paramètres
┌──────────────────────────────────────────────┐
│ Frontend (TypeScript + Vite) │
│ overlay/main.ts ←──SSE──→ settings/main.ts │
└────────────────┬─────────────────────────────┘
│ Tauri IPC (invoke / listen)
┌────────────────▼─────────────────────────────┐
│ Backend Rust (Tauri v2) │
│ ┌──────────┐ ┌──────────┐ ┌────────────┐ │
│ │ ApiClient│ │SseManager│ │ TokenStore │ │
│ │ (reqwest)│ │ (tokio) │ │ (AES-GCM) │ │
│ └────┬─────┘ └────┬─────┘ └────────────┘ │
└───────┼─────────────┼────────────────────────┘
│ │ HTTPS + Bearer JWT
▼ ▼
ArtyCon API (https://artycon.11e-foxhole.com)
- Tokens JWT stockés chiffrés sur disque (AES-256-GCM, clé dérivée via HKDF depuis un secret machine-specific)
- Transport exclusivement via
rustls(pas d'OpenSSL système) - CSP stricte sur les WebView
- User-Agent bindé au token (hash SHA-256 côté serveur)
Les contributions sont les bienvenues. Voir CONTRIBUTING.md pour les détails.
