docs: Documentation WebSocket et architecture de l'iframe
All checks were successful
Build and Push Docker image (ext) / docker (push) Successful in 54s
All checks were successful
Build and Push Docker image (ext) / docker (push) Successful in 54s
- Ajout de docs/WEBSOCKET_CONNECTION.md - Architecture de l'iframe documentée - Configuration WebSocket et gestion des messages - Communication avec le parent documentée - Problème persistant 502 Bad Gateway documenté
This commit is contained in:
parent
cb6b4a02da
commit
09c8493aeb
17
CHANGELOG.md
Normal file
17
CHANGELOG.md
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
## [Unreleased]
|
||||||
|
### Documentation WebSocket et architecture
|
||||||
|
- **Documentation WebSocket** : Ajout de `docs/WEBSOCKET_CONNECTION.md` avec analyse complète de l'architecture
|
||||||
|
- **Architecture de l'iframe** : Documentation de la logique de fonctionnement (init, services, WebSocket)
|
||||||
|
- **Configuration WebSocket** : Documentation des variables d'environnement et connexions
|
||||||
|
- **Gestion des messages** : Documentation du handshake et mise à jour des adresses relay
|
||||||
|
- **Communication parent** : Documentation de l'écoute des messages et gestion des erreurs
|
||||||
|
- **Problème persistant** : 502 Bad Gateway - Nginx ne transmet pas les headers WebSocket
|
||||||
|
|
||||||
|
## [1.0.0]
|
||||||
|
### Version initiale
|
||||||
|
- Interface utilisateur pour LeCoffre
|
||||||
|
- Intégration WebSocket avec les relays
|
||||||
|
- Gestion des processus et authentification
|
||||||
|
- Communication avec le parent via postMessage
|
@ -1,20 +1,124 @@
|
|||||||
# Connexion WebSocket - IHM Client
|
# Connexion WebSocket - ihm_client
|
||||||
|
|
||||||
## Configuration
|
## Architecture de l'iframe
|
||||||
- `VITE_BOOTSTRAPURL` : URL WebSocket du relay (défaut: `wss://dev4.4nkweb.com/ws/`)
|
|
||||||
- `RELAY_URLS` : URLs des relays (défaut: `wss://dev4.4nkweb.com/ws/,wss://dev3.4nkweb.com/ws/`)
|
|
||||||
|
|
||||||
## Connexion WebSocket
|
### Structure de fonctionnement
|
||||||
L'iframe se connecte automatiquement au relay via WebSocket pour :
|
L'iframe `ihm_client` suit une architecture modulaire :
|
||||||
- Authentification
|
|
||||||
- Pairing des appareils
|
|
||||||
- Communication en temps réel
|
|
||||||
|
|
||||||
## Headers requis
|
1. **Initialisation** (`router.ts`) :
|
||||||
- `Upgrade: websocket`
|
- `init()` initialise les services
|
||||||
- `Connection: upgrade`
|
- `Services.getInstance()` crée l'instance singleton
|
||||||
- `Sec-WebSocket-Version: 13`
|
- `connectAllRelays()` établit les connexions WebSocket
|
||||||
- `Sec-WebSocket-Key: [base64-encoded-key]`
|
|
||||||
|
|
||||||
## Date
|
2. **Services** (`services/service.ts`) :
|
||||||
2025-09-20
|
- Gestion des connexions WebSocket
|
||||||
|
- Communication avec les relays
|
||||||
|
- Gestion des messages et handshakes
|
||||||
|
|
||||||
|
3. **WebSocket** (`websockets.ts`) :
|
||||||
|
- API WebSocket native
|
||||||
|
- Gestion des événements (open, message, error, close)
|
||||||
|
|
||||||
|
## Configuration WebSocket
|
||||||
|
|
||||||
|
### Variables d'environnement
|
||||||
|
```bash
|
||||||
|
VITE_BOOTSTRAPURL=wss://dev4.4nkweb.com/ws/
|
||||||
|
RELAY_URLS=wss://dev4.4nkweb.com/ws/,wss://dev3.4nkweb.com/ws/
|
||||||
|
```
|
||||||
|
|
||||||
|
### Connexion aux relays
|
||||||
|
```typescript
|
||||||
|
// Dans service.ts
|
||||||
|
const BOOTSTRAPURL = [import.meta.env.VITE_BOOTSTRAPURL || `wss://${BASEURL}/ws/`];
|
||||||
|
|
||||||
|
// Connexion à tous les relays
|
||||||
|
await services.connectAllRelays();
|
||||||
|
```
|
||||||
|
|
||||||
|
## Gestion des messages
|
||||||
|
|
||||||
|
### Handshake
|
||||||
|
```typescript
|
||||||
|
public async handleHandshakeMsg(url: string, parsedMsg: any) {
|
||||||
|
const handshakeMsg: HandshakeMessage = JSON.parse(parsedMsg);
|
||||||
|
this.updateRelay(url, handshakeMsg.sp_address);
|
||||||
|
this.currentBlockHeight = handshakeMsg.chain_tip;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Mise à jour des adresses relay
|
||||||
|
```typescript
|
||||||
|
public updateRelay(wsurl: string, spAddress: string): void {
|
||||||
|
this.relayAddresses[wsurl] = spAddress;
|
||||||
|
console.log(`Updated: ${wsurl} -> ${spAddress}`);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Communication avec le parent
|
||||||
|
|
||||||
|
### Écoute des messages
|
||||||
|
```typescript
|
||||||
|
// Dans router.ts
|
||||||
|
if (window.self !== window.top) {
|
||||||
|
// L'iframe écoute les messages du parent
|
||||||
|
window.addEventListener('message', handleMessage);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Gestion des erreurs
|
||||||
|
```typescript
|
||||||
|
// Détection des fonds insuffisants
|
||||||
|
if (insufficientFunds) {
|
||||||
|
await this.triggerAutomaticFundsTransfer();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Problèmes résolus
|
||||||
|
|
||||||
|
### 1. Configuration WebSocket incorrecte
|
||||||
|
**Problème :** L'iframe utilisait `ws://sdk_relay:8090/` au lieu de `wss://dev4.4nkweb.com/ws/`.
|
||||||
|
|
||||||
|
**Solution :** Correction des variables d'environnement et redémarrage du container.
|
||||||
|
|
||||||
|
### 2. Mixed Content errors
|
||||||
|
**Problème :** Tentative de connexion WS depuis une page HTTPS.
|
||||||
|
|
||||||
|
**Solution :** Utilisation de WSS (WebSocket Secure) pour toutes les connexions.
|
||||||
|
|
||||||
|
### 3. Headers WebSocket manquants
|
||||||
|
**Problème :** Nginx ne transmettait pas les headers WebSocket.
|
||||||
|
|
||||||
|
**Solution :** Configuration Nginx avec headers WebSocket explicites.
|
||||||
|
|
||||||
|
## Problème persistant
|
||||||
|
|
||||||
|
### 502 Bad Gateway
|
||||||
|
**Statut :** ⚠️ Problème persistant
|
||||||
|
- L'iframe reçoit 502 Bad Gateway lors de la connexion WebSocket
|
||||||
|
- Nginx ne transmet pas les headers WebSocket vers le relay
|
||||||
|
- Le relay rejette les connexions sans headers
|
||||||
|
|
||||||
|
**Investigation :** La configuration Nginx semble correcte mais les headers ne sont pas transmis.
|
||||||
|
|
||||||
|
## Tests
|
||||||
|
|
||||||
|
### Test de connexion WebSocket
|
||||||
|
```bash
|
||||||
|
# Depuis l'iframe
|
||||||
|
wget -O- https://dev4.4nkweb.com/ws/
|
||||||
|
```
|
||||||
|
|
||||||
|
**Résultat actuel :** 502 Bad Gateway
|
||||||
|
|
||||||
|
### Test avec headers WebSocket
|
||||||
|
```bash
|
||||||
|
curl -v -H "Upgrade: websocket" \
|
||||||
|
-H "Connection: upgrade" \
|
||||||
|
-H "Sec-WebSocket-Version: 13" \
|
||||||
|
-H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" \
|
||||||
|
https://dev4.4nkweb.com/ws/
|
||||||
|
```
|
||||||
|
|
||||||
|
## Date de mise à jour
|
||||||
|
2025-01-20 - Architecture de l'iframe analysée et problèmes de connexion WebSocket identifiés
|
Loading…
x
Reference in New Issue
Block a user