# Frontend - Client

## Modal de connexion et aides

### Interface de connexion

* `renderer/components/mainPages/connectionModal.jsx` contient le modal utilisé pour se connecter à un serveur et configurer un espace de travail distant. Ceci utilise beaucoup le fichier suivant :
* `main/utils/remoteFunctions.js` contient la plupart des fonctions utilisées pour établir des tunnels SSH, effectuer des opérations sur l'ordinateur distant via SSH (installer le serveur, renommer des fichiers/dossiers, etc.) et gérer l'état local de la connexion établie. Cet état est stocké et synchronisé dans 2 fichiers :&#x20;
  * `renderer/components/tunnel/TunnelContext.jsx` pour les composants React&#x20;
  * `renderer/utilities/tunnelState.js` pour les autres composants
* `renderer/components/mainPages/remoteServer.tsx` contient le panneau qui affiche le statut, les journaux et les tunnels établis vers le serveur distant.
* `main/sshKeygen.js` est utilisé pour la génération de paires de clés SSH utilisées lors de la configuration de la connexion distante.

### Requêtes et utilitaires

* Quelques fichiers d'aide aux requêtes (`requests.js`, `mongoDBUtils.js`, `workspaceUtils.js`) ont été modifiés pour ajuster leur comportement selon que l'espace de travail est marqué comme distant (`workspace.isRemote`) ou si un tunnel est connecté (pour acheminer les requêtes vers le port correct, en utilisant `tunnelState.js`)
* `renderer/utilities/fileManagement/fileOps.js` devient le nouveau point d'entrée pour toutes les fonctions dans `fileManagementUtils.js`, qui sera toujours utilisé si l'espace de travail est local. Sinon, il utilise l'alternative basée sur SSH présente dans `fileOps.js`.

## Pont pour l'architecture distante

* `main/background.js` a été mis à jour pour changer le processus de démarrage du client, vérifiant si le serveur se trouve localement puis l'exécutant le cas échéant. Il a perdu certains IPC liés au démarrage de serveurs spécifiques (comme Mongo et Go, qui sont maintenant dans les fichiers backend) et en a gagné d'autres pour l'installation, la détection et la mise à jour du serveur local.
* `main/preload.js` est une surface d'API renderer sécurisée qui expose des méthodes de requête backend/tunnel via IPC, afin d'envoyer facilement des requêtes Express depuis du code. Voici un exemple :\
  `const response = wait window.backend.requestExpress({ method: 'get', path: '/status', host: '127.0.0.1', port: 5000, timeout: 3000 })`
