Liigu sisu juurde

Arhitektuur

Üldine töövoog

Vaikimisi (kohalik tmux + tunnel):

Kood
Browser (phone)
  |
  | HTTPS
  v
Cloudflare Quick Tunnel
  |
  | HTTP/WS
  v
Local Termbridge server
  |
  | PTY
  v
Tmux session

Otsene liivakastirežiim (Daytona, tunnelita):

Kood
Browser (phone)
  |
  | HTTPS
  v
Daytona preview link
  |
  | HTTP/WS
  v
Termbridge server (sandbox)
  |
  | PTY
  v
Tmux session (sandbox)

Kui määratud on --no-tunnel, jätab Termbridge vahele Cloudflare ja kasutab teie antud avalikku URL.

Komponendid

CLI protsess

  • Käivitab HTTP-serveri, mis teenindab UI-varasid.
  • Käivitab terminali sisend-/väljundtoimingu jaoks WebSocket-serveri.
  • Loob ühe või mitu tmux-seanssi (või Daytona pseudoterminali).
  • Väljastab ühekordsed lunastustokenid.
  • Käivitab ja jälgib tunneli tööd, kui see on lubatud (praegu Cloudflare).
  • Otseses liivakastirežiimis käivitab Termbridge liivakastis ja ootab jagamis-URL-i.

Terminali taustaprogramm

  • tmux taustaprogramm: kasutab node-pty-i, et ühenduda tmux-ga ja edastada päris klahvivajutusi ning väljundit.
  • Daytona taustaprogramm: kasutab liivakastis Daytona pseudoterminale.
  • Täieliku värvitoe jaoks määrab TERM=xterm-256color ja COLORTERM=truecolor.
  • tmux puhul keelab puhta UI hoidmiseks olekuriba tmux.

Terminalide register

  • Jälgib saadaolevaid terminaliseansse.
  • Annab loendi UI-ile ja valideerib valitud terminalide ID-d.

Autentimine ja seanss

  • Ühekordne token prinditakse kujul URL ja kodeeritakse kujule QR.
  • GET /__tb/s/:token lunastab tokeni ja määrab küpsisega seansi.
  • WebSocket-ühenduse jaoks on vaja kehtivat seansiküpsist ja CSRF-tokenit.
  • CSRF-token hangitakse GET /__tb/api/csrf kaudu ja edastatakse WebSocketi päringuparameetris.

Puhverserveri režiim

Kui edastatakse --proxy <port>:

  • Kõik termbridge'i marsruudid asuvad eesliite /__tb/ all
  • Mitte-/__tb/ päringud edastatakse sihtrakendusele puhverserveri kaudu
  • UI avaldab vahetaja Views kaudu Terminali ja eelvaate vaated
  • Eelvaate vaade laadib iframe'i, mis osutab aadressile /
  • HMR-i WebSocket-ühendused suunatakse edasi sihtmärgile

Turvalisus

  • CSRF-kaitse: WebSocketi ühenduse loomine nõuab CSRF-tokenit, et vältida saitidevahelist kaaperdamist.
  • Sisendi piirangud: 64KB HTTP keha, 1MB WebSocketi sõnumi kohta, 64KB terminalisisendi kohta sõnumis.
  • Kiiruse piiramine: tokeni lunastamisel ja WebSocket-ühendustel on piirangud IP kohta.

API lõpp-punktid

Kõik marsruudid asuvad eesliite /__tb/ all, et vältida konflikte puhverserveri kaudu edastatavate rakendustega:

  • GET /__tb/healthz – seisukorra kontroll
  • GET /__tb/s/:token – tokeni lunastamine → küpsis → ümbersuunamine
  • GET /__tb/api/terminals – terminalide loendi pärimine
  • GET /__tb/api/csrf – WebSocketi CSRF-tokeni pärimine
  • GET /__tb/api/config – seadistuse pärimine (proxyPort, devProxyUrl)
  • POST /__tb/api/terminals – uue tmux-seansi loomine
  • GET /__tb/app/* – SPA varutee
  • WS /__tb/ws/terminal/:terminalId?csrf=<token> – terminali sisend-/väljundi voogedastus

Kui puhverserveri režiim on lubatud:

  • GET / – suunab puhverserveri kaudu edastatud rakendusse (või aadressile /__tb/app, kui see on keelatud)
  • * /* – edastatakse sihtrakendusele puhverserveri kaudu

WebSocketi protokoll

Klient → server:

JSON
{ "type": "input", "data": "ls -la" }
{ "type": "resize", "cols": 120, "rows": 32 }
{ "type": "control", "key": "ctrl_c" }

Server → klient:

JSON
{ "type": "output", "data": "..." }
{ "type": "status", "state": "connected" }

UI tehnoloogiakomplekt

  • Vite + TanStack Router
  • xterm.js + Fit-lisand + WebGL-renderdaja
  • Mobiilseadmetele esmajärjekorras kujundus fikseeritud sisendriba abil
  • Automaatne taasühendamine kasvava viitega (kuni 10 katset)
  • Ühenduse oleku näidik