Arkkitehtuuri
Yleiskuva toiminnasta
Oletus (paikallinen tmux + tunneli):
Koodi
Browser (phone)
|
| HTTPS
v
Cloudflare Quick Tunnel
|
| HTTP/WS
v
Local Termbridge server
|
| PTY
v
Tmux session
Suora hiekkalaatikkotila (Daytona, ei tunnelia):
Koodi
Browser (phone)
|
| HTTPS
v
Daytona preview link
|
| HTTP/WS
v
Termbridge server (sandbox)
|
| PTY
v
Tmux session (sandbox)
Kun --no-tunnel on asetettu, Termbridge ohittaa kohteen Cloudflare ja käyttää antamaasi julkista URL-osoitetta.
Komponentit
CLI-prosessi
- Käynnistää HTTP-palvelimen, joka tarjoaa UI-resurssit.
- Käynnistää WebSocket-palvelimen päätteen syötettä ja tulostetta varten.
- Luo yhden tai useamman tmux-istunnon (tai Daytona-pseudopäätteen).
- Luo kertakäyttöiset lunastustunnukset.
- Käynnistää tunnelin, jos se on käytössä, ja valvoo sitä (tällä hetkellä Cloudflare).
- Suorassa hiekkalaatikkotilassa käynnistää Termbridge-ohjelman hiekkalaatikossa ja odottaa jaon URL-osoitetta.
Päätteen taustajärjestelmä
- tmux-taustajärjestelmä: Käyttää
node-pty:tä yhteyden muodostamiseen kohteeseen tmux oikeita näppäinpainalluksia ja tulostetta varten. - Daytona-taustajärjestelmä: Käyttää Daytona-pseudopäätteitä hiekkalaatikossa.
- Asettaa
TERM=xterm-256colorjaCOLORTERM=truecolortäydellistä väritukea varten. - Kohteessa tmux poistaa tmux-tilapalkin käytöstä, jotta UI pysyy siistinä.
Pääterekisteri
- Seuraa käytettävissä olevia pääteistuntoja.
- Tarjoaa listan kohteelle UI ja vahvistaa valitut pääte-ID:t.
Todennus ja istunto
- Kertakäyttöinen tunnus tulostetaan muodossa URL ja koodataan QR-koodiin.
GET /__tb/s/:tokenlunastaa tunnuksen ja asettaa istuntoevästeen.- WebSocket-yhteydet edellyttävät kelvollista istuntoevästettä ja CSRF-tunnusta.
- CSRF-tunnus haetaan kohteesta
GET /__tb/api/csrfja välitetään WebSocket-kyselyparametrina.
Välityspalvelintila
Kun --proxy <port> annetaan:
- Kaikki termbridge-reitit ovat etuliitteen
/__tb/alla - Pyynnöt, jotka eivät koske kohdetta
/__tb/, välitetään kohdesovellukselle - UI tuo Terminal- ja Preview-näkymät esiin Views-valitsimessa
- Preview-näkymä lataa iframe-kehyksen, joka osoittaa kohteeseen
/ - HMR:n WebSocket-yhteydet välitetään eteenpäin kohteelle
Tietoturva
- CSRF-suojaus: WebSocket-yhteyden päivitys edellyttää CSRF-tunnusta, joka estää sivustojen välisen kaappauksen.
- Syöterajat: 64KB HTTP-runko, 1MB WebSocket-viesti, 64KB päätteen syöte viestiä kohti.
- Nopeusrajoitukset: IP-kohtaiset rajat tunnusten lunastukselle ja WebSocket-yhteyksille.
API-päätepisteet
Kaikki reitit ovat etuliitteen /__tb/ alla, jotta välitettäviin sovelluksiin ei synny ristiriitoja:
GET /__tb/healthz– tilatarkistusGET /__tb/s/:token– tunnuksen lunastus → eväste → uudelleenohjausGET /__tb/api/terminals– päätelistaGET /__tb/api/csrf– hae CSRF-tunnus WebSocketia vartenGET /__tb/api/config– hae asetukset (proxyPort, devProxyUrl)POST /__tb/api/terminals– luo uusi tmux-istuntoGET /__tb/app/*– SPA-varareittiWS /__tb/ws/terminal/:terminalId?csrf=<token>– päätteen syötteen ja tulosteen suoratoisto
Kun välityspalvelintila on käytössä:
GET /– uudelleenohjaa välitettyyn sovellukseen (tai kohteeseen/__tb/app, jos pois käytöstä)* /*– välitetään kohdesovellukselle
WebSocket-protokolla
Asiakas → palvelin:
JSON
{ "type": "input", "data": "ls -la" }
{ "type": "resize", "cols": 120, "rows": 32 }
{ "type": "control", "key": "ctrl_c" }
Palvelin → asiakas:
JSON
{ "type": "output", "data": "..." }
{ "type": "status", "state": "connected" }
UI-pino
- Vite + TanStack Router
- xterm.js + Fit-lisäosa + WebGL-renderöijä
- Mobiililähtöinen asettelu, jossa on kiinteä syöttöpalkki
- Automaattinen uudelleenyhdistäminen eksponentiaalisella viiveellä (enintään 10 yritystä)
- Yhteyden tilan ilmaisin