Sécurité et fiabilité
Où tournent vos scripts, ce que vous nous confiez, et ce qui se passe quand quelque chose tombe.
Rawtoh est un service hébergé qui détient les clés de votre chaîne et exécute votre code. Cette page dit clairement comment ce code est isolé, où vivent vos identifiants, et ce qui casse (et ce qui ne casse pas) quand un maillon tombe.
Où tournent vos scripts
Les déclencheurs et les actions s’exécutent sur les serveurs de Rawtoh, dans un runtime JavaScript dédié. Chaque exécution reçoit son propre bac à sable isolé, configuré avec des limites strictes. Les scripts n’ont ni système de fichiers, ni réseau propre, ni accès aux autres organisations : tout ce qu’ils peuvent faire passe par les globales rawtoh (modules, stockage, logs).
| Limite | Valeur |
|---|---|
| Délai d’une condition de déclencheur | 5 secondes |
| Délai d’une action | 30 secondes |
| Mémoire par exécution | 8 Mo |
| Pile par exécution | 512 Ko |
Les délais sont appliqués à l’intérieur du runtime lui-même : un while (true) est arrêté comme n’importe quoi d’autre. Un script qui dépasse le délai ou plante est enregistré comme processus en erreur ; son bac à sable est jeté et un neuf prend sa place. Les autres automatisations, les vôtres comme celles des autres, continuent de tourner.
Aucun événement perdu
Chaque événement passe par une file persistante. Le runtime n’acquitte un message qu’une fois l’événement et les processus qu’il a lancés écrits en base : un plantage en cours d’exécution ne perd jamais un événement acquitté, la file le livre à nouveau. La livraison est au moins une fois et l’insertion de l’événement est idempotente, donc une relivraison ne crée pas de doublon. Les cooldowns (throttle et debounce) vivent dans la même file partagée, si bien que plusieurs workers se coordonnent sans qu’aucun ne soit un point de défaillance unique.
Ce que vous nous confiez
- Jetons Twitch et Discord: stockés sur le serveur du module, limités à votre organisation, et envoyés uniquement au fournisseur auquel ils appartiennent. Révocables à tout moment depuis Twitch ou Discord, ou en supprimant le compte dans le module.
- Mot de passe WebSocket d’OBS: stocké sur le serveur du module OBS, jamais dans le stockage du navigateur. Avec le module OBS local, il ne quitte jamais votre machine.
- Clés d’IA que vous apportez: stockées par organisation et utilisées uniquement pour appeler le fournisseur choisi. La clé de la plateforme n’est jamais exposée aux scripts.
- Paires de clés des modules: chaque instance de module s’authentifie avec une paire de clés Ed25519 ; les clés privées sont chiffrées au repos en AES-256-GCM, liées à la ligne à laquelle elles appartiennent.
Les scripts ne voient jamais rien de tout cela. Un script s’adresse à un module par son nom ; c’est le module qui détient l’identifiant et fait l’appel.
Ce qui se passe quand quelque chose tombe
- Rawtoh est indisponible. Les déclencheurs cessent de partir et le Tableau ne répond plus. Rien d’autre ne change : OBS continue de diffuser, votre chat continue de tourner, vos scripts et votre stockage sont intacts. Les événements que les modules ont réussi à livrer sont en file et traités à notre retour.
- L’onglet OBS est fermé, ou le PC s’est mis en veille. Les appels à OBS échouent avec une erreur explicite
OBS is not connected, visible dans l’Activité, et reprennent dès que l’onglet revient. Pour un vrai live, utilisez le module OBS local ci-dessous plutôt qu’un onglet. - OBS lui-même est fermé. Même erreur, et le module OBS local réessaie toutes les 5 secondes jusqu’à ce qu’OBS réponde.
- Votre script échoue. Le processus est enregistré avec l’erreur et les appels de module qui sont bien passés. Aucune autre automatisation n’est touchée.
OBS sans onglet de navigateur
Le module OBS local est un binaire unique qui tourne à côté d’OBS sur le PC de streaming. Il parle obs-websocket d’un côté et Rawtoh de l’autre, avec les mêmes événements et méthodes que le module OBS hébergé. Le navigateur est hors circuit : rien à garder ouvert, rien qu’une suspension d’onglet puisse interrompre. Il se reconnecte seul à OBS comme à Rawtoh.
# OBS → Outils → Paramètres du serveur WebSocket : activer, noter le mot de passe
# Rawtoh → Modules → Instances → créer une instance → copier le jeton d’enrôlement
module-local-obs --state-dir ~/.config/rawtoh-obs --obs-password '...' --enroll rth_e_...
# lancements suivants
module-local-obs --state-dir ~/.config/rawtoh-obs --obs-password '...'Mesuré en production, un appui sur le Tableau atteint OBS en environ 60 ms de bout en bout ; un événement atteint votre script en moins de 10 ms. C’est suffisant pour des changements de scène et des shoutouts. Pour des coupes à l’image près, gardez-les sur un mélangeur local et laissez Rawtoh le piloter.