@lifelessrasel/devtunnel-cli
v1.0.1
Published
A specialized tunneling tool to expose local servers to the internet via DevTunnel.net
Maintainers
Readme
Tunnel Client (CLI)
The tunnel-client is a Node.js CLI tool that exposes your local server to the internet.
How it Works
- Connection: The CLI connects to the Tunnel Server via a WebSocket (
wss://tunnel.mohammadrasel.com). - Registration: It sends a
registerevent to claim a subdomain (e.g.,myapp). - Listening: It keeps the WebSocket open, waiting for requests.
- Forwarding:
- When the Tunnel Server receives a public HTTP request (e.g.,
https://myapp.tunnel.mohammadrasel.com), it serializes the request and sends it to the CLI over the WebSocket. - The CLI receives this message.
- The CLI uses
axiosto make the actual HTTP request to your local service (e.g.,http://localhost:3000). - The CLI captures the response (status, headers, body).
- The CLI sends the response back to the Tunnel Server over the WebSocket.
- When the Tunnel Server receives a public HTTP request (e.g.,
- Response: The Tunnel Server deserializes the response and sends it to the original public user.
Usage
# Start a tunnel forwarding to localhost:3000
dt start --port 3000 --subdomain myapp --server wss://tunnel.mohammadrasel.com
# Options
--port, -p Local port to expose (default: 3000)
--subdomain, -s Requested subdomain (default: random)
--server Tunnel server URL (default: ws://localhost:8000)Architecture Diagram
sequenceDiagram
participant PublicUser
participant TunnelServer
participant CLI
participant LocalApp
CLI->>TunnelServer: WebSocket Connect (Register 'myapp')
TunnelServer-->>CLI: Registered 'myapp.devtunnel.net'
PublicUser->>TunnelServer: HTTP GET https://myapp.devtunnel.net/api/users
TunnelServer->>CLI: WS Message (type: request, path: /api/users)
CLI->>LocalApp: HTTP GET http://localhost:3000/api/users
LocalApp-->>CLI: JSON Response { "users": [] }
CLI->>TunnelServer: WS Message (type: response, body: {...})
TunnelServer-->>PublicUser: HTTP 200 OK { "users": [] }