Appearance
Détails des Échanges du Bridge
Ce document spécifie les messages postMessage échangés entre l'application SvelteKit (Iframe) et l'application hôte TV.
Format des Messages
Tous les messages suivent une structure JSON standardisée.
Requête (Request)
Envoyée par l'initiateur (généralement l'App vers l'Hôte, ou l'Hôte vers l'App pour le Ping).
json
{
"type": "TV_API_REQUEST",
"requestId": "string (identifiant unique)",
"action": "string (action à exécuter)",
"params": "object (paramètres optionnels)"
}Réponse (Response)
Renvoyée par le destinataire après traitement.
json
{
"type": "TV_API_RESPONSE",
"requestId": "string (doit correspondre au requestId de la requête)",
"ok": "boolean (true si succès, false si erreur)",
"payload": "any (données de retour ou message d'erreur)"
}🚀 Requêtes de l'App vers l'Hôte
Ces requêtes sont initiées par la classe UnifiedPlatformBridge (src/lib/classes/platforms/platformBridge.ts).
1. Identification du Device
| Action | Description | Paramètres | Retour (payload) |
|---|---|---|---|
GET_IDENTIFIER | Récupère l'UID ou l'adresse MAC unique. | Aucun | string ou { identifier: string } |
GET_MAC | Récupère l'adresse MAC. | Aucun | string ou { mac: string } |
GET_MANUFACTURER | Récupère le nom du fabricant (LG, Samsung...). | Aucun | string ou { manufacturer: string } |
GET_MODEL | Récupère le modèle exact du téléviseur. | Aucun | string ou { model: string } |
GET_SYSTEM_INFO | Récupère les infos OS du host. | Aucun | { os?: string, osVersion?: string } |
GET_STORAGE_INFO | Récupère la capacité disque du host. | Aucun | { diskFree?: number, diskTotal?: number } |
2. Contrôle d'Applications
| Action | Description | Paramètres | Retour (payload) |
|---|---|---|---|
LAUNCH_APP | Lance une application externe par son ID. dataUri peut contenir un deep link, par exemple vpn://import?... pour le provisioning VPN. | { appId: string, dataUri?: string } | void |
CAN_LAUNCH_APP | Vérifie dynamiquement si une application peut être lancée. | { appId: string, dataUri?: string } | { canLaunch: boolean, reasonCode?: string } |
LAUNCH_TV | Retourne à l'interface TV native. | { packageName?: string } | void |
OPEN_SYSTEM_SETTINGS | Ouvre les paramètres système génériques. | Aucun | { opened: boolean } ou boolean |
OPEN_MANUFACTURER_SETTINGS | Ouvre les paramètres constructeur (agnostique du host). | { target?: 'default' | 'professional' | 'vendor-specific', vendor?: string, section?: string } | { opened: boolean } ou boolean |
GET_HOST_CAPABILITIES | Retourne les capacités actionnelles et matérielles du host. | Aucun | { bridgeVersion, host, capabilities } |
GET_NETWORK_INFO | Retourne les informations réseau de l'hôte. | Aucun | { wifi, ethernet, vpn, collectedAt } |
OPEN_SETTINGS (legacy) | Ancienne action conservée temporairement en fallback. | { brandSettings?: boolean } | boolean |
3. Maintenance & Système
| Action | Description | Paramètres | Retour (payload) |
|---|---|---|---|
PURGE_DATA | Demande la purge du cache et des données. | Aucun | void |
REBOOT | Demande le redémarrage du device. | Aucun | void |
INSTALL_APP | Demande l'installation d'une application. | { url: string } | void |
4. Gestion du Hotspot (Phase 2)
| Action | Description | Paramètres | Retour (payload) |
|---|---|---|---|
HOTSPOT_GET | Récupère l'état actuel du point d'accès Wi-Fi. | Aucun | { enabled: boolean, ssid?: string, password?: string } |
HOTSPOT_SET | Met à jour l'état ou les credentials du hotspot. | { subAction?: 'start'|'stop', ... } | void |
💓 Requêtes de l'Hôte vers l'App
Principalement utilisé pour le maintien de la connexion (Heartbeat).
1. Ping / Health Check
| Action | Description | Paramètres | Réponse de l'App |
|---|---|---|---|
PING | Vérifie si l'iframe est toujours réactive. | Aucun | { pong: true, timestamp: number, iframeStatus: 'operational' } |
📢 Notifications (App vers Hôte)
Messages asynchrones envoyés pour informer l'hôte d'un changement d'état, sans attendre de réponse directe.
| Action | Description | Paramètres |
|---|---|---|
NOTIFY_KEY | Informe l'hôte qu'une touche télécommande a été capturée par l'iframe. | { keyCode: number, key: string } |
🛡️ Sécurité et Timeouts
- Origine : Actuellement, le bridge accepte les messages de toutes les origines (
'*'), mais il est recommandé pour l'hôte de filtrer par domaine si possible. - Timeout : L'application SvelteKit attend une réponse pendant 5 secondes. Au-delà, elle considère la requête en échec et bascule sur ses stratégies de repli (fallbacks) natives (Capacitor).
- Validation : Le
requestIdest essentiel pour réconcilier les réponses asynchrones avec les promesses en attente.