Architektúra
Magas szintű folyamat
Alapértelmezett mód (helyi tmux + alagút):
Kód
Browser (phone)
|
| HTTPS
v
Cloudflare Quick Tunnel
|
| HTTP/WS
v
Local Termbridge server
|
| PTY
v
Tmux session
Közvetlen sandbox mód (Daytona, alagút nélkül):
Kód
Browser (phone)
|
| HTTPS
v
Daytona preview link
|
| HTTP/WS
v
Termbridge server (sandbox)
|
| PTY
v
Tmux session (sandbox)
Ha be van állítva a --no-tunnel, a Termbridge kihagyja a Cloudflare-t, és a megadott nyilvános URL-t használja.
Komponensek
CLI folyamat
- Elindítja a HTTP szervert, amely kiszolgálja a UI eszközöket.
- Elindítja a terminál I/O-hoz szükséges WebSocket-szervert.
- Létrehoz egy vagy több tmux munkamenetet (vagy Daytona PTY-t).
- Egyszer felhasználható beváltási tokeneket bocsát ki.
- Engedélyezés esetén elindítja és felügyeli az alagutat (jelenleg: Cloudflare).
- Közvetlen sandbox módban elindítja a Termbridge-t a sandboxban, majd megvárja a megosztási URL-t.
Terminálháttér
- tmux háttér: A
node-ptyhasználatával csatlakozik a tmux-hoz, hogy a valódi billentyűleütéseket és kimenetet kezelje. - Daytona háttér: Sandboxon belüli Daytona PTY-ket használ.
- Beállítja a
TERM=xterm-256colorés aCOLORTERM=truecolorértékét a teljes színtámogatáshoz. - tmux esetén letiltja a tmux állapotsorát, hogy a UI tiszta maradjon.
Terminál-nyilvántartás
- Nyomon követi az elérhető terminál-munkameneteket.
- Listát biztosít a UI számára, és ellenőrzi a kiválasztott terminálazonosítókat.
Hitelesítés és munkamenet
- Az egyszer használatos token URL formájában jelenik meg, és QR kóddá van kódolva.
- A
GET /__tb/s/:tokenbeváltja a tokent, és cookie-alapú munkamenetet állít be. - A WebSocket-kapcsolatokhoz érvényes munkamenet-cookie és CSRF-token szükséges.
- A CSRF-token lekérése a
GET /__tb/api/csrfhasználatával történik, és WebSocket-lekérdezési paraméterként kerül továbbításra.
Proxy mód
A --proxy <port> megadásakor:
- Minden termbridge-útvonal a
/__tb/előtag alatt érhető el - A nem
/__tb/kérések a célalkalmazáshoz kerülnek továbbításra - A UI a Terminal/Preview nézeteket jeleníti meg a Nézetváltóban
- A Preview nézet a
/címre mutató iframe-et tölt be - A HMR-hez tartozó WebSocket-kapcsolatok továbbítódnak a célhoz
Biztonság
- CSRF-védelem: A WebSocket-frissítésekhez CSRF-token szükséges a webhelyek közötti eltérítés megakadályozásához.
- Bemeneti korlátok: 64KB-os HTTP törzs, 1MB-os WebSocket-üzenet, üzenetenként 64KB terminálbemenet.
- Sebességkorlátozás: Tokenbeváltási és WebSocket-kapcsolati korlátok IP szerint.
API végpontok
Az összes útvonal a /__tb/ előtag alatt érhető el, hogy ne ütközzön a proxyn továbbított alkalmazásokkal:
GET /__tb/healthz– állapotellenőrzésGET /__tb/s/:token– token beváltása → cookie → átirányításGET /__tb/api/terminals– terminálok listázásaGET /__tb/api/csrf– CSRF-token lekérése WebSockethezGET /__tb/api/config– konfiguráció lekérése (proxyPort, devProxyUrl)POST /__tb/api/terminals– új tmux munkamenet létrehozásaGET /__tb/app/*– SPA tartalékútvonalWS /__tb/ws/terminal/:terminalId?csrf=<token>– terminál I/O-adatfolyam
Proxy mód engedélyezésekor:
GET /– átirányítás a proxyn elérhető alkalmazáshoz (vagy/__tb/app-hez, ha le van tiltva)* /*– továbbítás a célalkalmazáshoz
WebSocket-protokoll
Kliens -> szerver:
JSON
{ "type": "input", "data": "ls -la" }
{ "type": "resize", "cols": 120, "rows": 32 }
{ "type": "control", "key": "ctrl_c" }
Szerver -> kliens:
JSON
{ "type": "output", "data": "..." }
{ "type": "status", "state": "connected" }
UI-verem
- Vite + TanStack Router
- xterm.js + Fit-kiegészítő + WebGL-megjelenítő
- Elsősorban mobilra szabott elrendezés rögzített beviteli sávval
- Automatikus újracsatlakozás exponenciális várakozással (legfeljebb 10 próbálkozás)
- Kapcsolatállapot-jelző