Arhitektūra
Kopējā darbplūsma
Noklusējums (lokālais tmux + tunelis):
Kods
Browser (phone)
|
| HTTPS
v
Cloudflare Quick Tunnel
|
| HTTP/WS
v
Local Termbridge server
|
| PTY
v
Tmux session
Tiešais smilškastes režīms (Daytona, bez tuneļa):
Kods
Browser (phone)
|
| HTTPS
v
Daytona preview link
|
| HTTP/WS
v
Termbridge server (sandbox)
|
| PTY
v
Tmux session (sandbox)
Ja ir iestatīts --no-tunnel, Termbridge izlaiž Cloudflare un izmanto jūsu norādīto publisko URL.
Komponenti
CLI process
- Palaiž HTTP serveri, kas apkalpo UI resursus.
- Palaiž WebSocket serveri termināļa ievadei un izvadei.
- Izveido vienu vai vairākas tmux sesijas (vai Daytona PTY).
- Izsniedz vienreizējus izpirkšanas tokenus.
- Palaiž un uzrauga tuneli, ja tas ir iespējots (pašlaik Cloudflare).
- Tiešajā smilškastes režīmā palaiž Termbridge smilškastē un gaida koplietošanas URL.
Termināļa aizmugursistēma
- tmux aizmugursistēma: izmanto
node-pty, lai izveidotu savienojumu ar tmux un saņemtu īstas taustiņu ievades un izvadi. - Daytona aizmugursistēma: izmanto Daytona PTY smilškastē.
- Pilnam krāsu atbalstam iestata
TERM=xterm-256colorunCOLORTERM=truecolor. - tmux gadījumā atspējo tmux statusa joslu, lai UI būtu pārskatāma.
Termināļu reģistrs
- Uzskaita pieejamās termināļa sesijas.
- Nodrošina sarakstu priekš UI un validē atlasītos termināļa ID.
Autentifikācija un sesija
- Vienreizējais tokens tiek izdrukāts kā URL un iekodēts QR kodā.
GET /__tb/s/:tokenizpērk tokenu un iestata sīkdatnes sesiju.- WebSocket savienojumiem vajadzīga derīga sesijas sīkdatne un CSRF tokens.
- CSRF tokens tiek iegūts, izmantojot
GET /__tb/api/csrf, un nodots WebSocket vaicājuma parametrā.
Starpniekservera režīms
Kad tiek nodots --proxy <port>:
- Visi termbridge maršruti atrodas zem prefiksa
/__tb/ - Pieprasījumi, kas nav
/__tb/, tiek pārsūtīti mērķa lietotnei - UI ar skatu pārslēgu parāda termināļa un priekšskatījuma skatus
- Priekšskatījuma skats ielādē iframe, kas norāda uz
/ - HMR WebSocket savienojumi tiek pārsūtīti mērķim
Drošība
- CSRF aizsardzība: WebSocket savienojuma izveidei vajadzīgs CSRF tokens, lai novērstu starpvietņu pārtveršanu.
- Ievades ierobežojumi: 64KB HTTP pamatdaļa, 1MB WebSocket ziņojums, 64KB termināļa ievade katrā ziņojumā.
- Pieprasījumu ātruma ierobežošana: katram IP tiek noteikti tokenu izpirkšanas un WebSocket savienojumu ierobežojumi.
API galapunkti
Visi maršruti atrodas zem prefiksa /__tb/, lai izvairītos no konfliktiem ar starpniekservera pārsūtītām lietotnēm:
GET /__tb/healthz- darbspējas pārbaudeGET /__tb/s/:token- tokena izpirkšana → sīkdatne → novirzīšanaGET /__tb/api/terminals- termināļu sarakstsGET /__tb/api/csrf- CSRF tokena iegūšana WebSocket savienojumamGET /__tb/api/config- konfigurācijas iegūšana (proxyPort, devProxyUrl)POST /__tb/api/terminals- jaunas tmux sesijas izveideGET /__tb/app/*- SPA rezerves maršrutsWS /__tb/ws/terminal/:terminalId?csrf=<token>- termināļa I/O straumēšana
Kad ir iespējots starpniekservera režīms:
GET /- novirza uz starpniekservera lietotni (vai/__tb/app, ja tā ir atspējota)* /*- novirza uz mērķa lietotni
WebSocket protokols
Klients -> serveris:
JSON
{ "type": "input", "data": "ls -la" }
{ "type": "resize", "cols": 120, "rows": 32 }
{ "type": "control", "key": "ctrl_c" }
Serveris -> klients:
JSON
{ "type": "output", "data": "..." }
{ "type": "status", "state": "connected" }
UI steks
- Vite + TanStack Router
- xterm.js + Fit papildinājums + WebGL renderētājs
- Mobilajām ierīcēm vispirms pielāgots izkārtojums ar fiksētu ievades joslu
- Automātiska atkārtota savienojuma izveide ar eksponenciālu aizturi (līdz 10 mēģinājumiem)
- Savienojuma statusa indikators