@xtr-dev/rondevu-server
v0.5.25
Published
DNS-like WebRTC signaling server with credential-based authentication and service discovery
Downloads
158
Readme
Rondevu Server
WebRTC signaling server with tags-based discovery
HTTP signaling server with stateless Ed25519 authentication, tag-based offer discovery, and JSON-RPC interface. Multiple storage backends supported.
Quick Start
In-memory (default, zero dependencies):
npm install && npm startSQLite (persistent):
STORAGE_TYPE=sqlite STORAGE_PATH=./rondevu.db npm startMySQL:
STORAGE_TYPE=mysql DATABASE_URL=mysql://user:pass@localhost:3306/rondevu npm startPostgreSQL:
STORAGE_TYPE=postgres DATABASE_URL=postgres://user:pass@localhost:5432/rondevu npm startDocker:
docker build -t rondevu . && docker run -p 3000:3000 rondevuCloudflare Workers:
npx wrangler deployStorage Backends
| Backend | Use Case | Persistence |
|---------|----------|-------------|
| memory | Zero-config, ephemeral workloads | No |
| sqlite | Single-instance VPS | Yes |
| mysql | Production, multi-instance | Yes |
| postgres | Production, multi-instance | Yes |
For MySQL/PostgreSQL, install optional dependencies:
npm install mysql2 # for MySQL
npm install pg # for PostgreSQLRPC Interface
All API calls go to POST /rpc with JSON-RPC format. Requests must be arrays.
Publish Offer (authenticated)
Headers: X-PublicKey, X-Timestamp, X-Nonce, X-Signature[{
"method": "publishOffer",
"params": { "tags": ["chat"], "offers": [{ "sdp": "..." }], "ttl": 300000 }
}]Discover Offers (unauthenticated)
[{ "method": "discover", "params": { "tags": ["chat"], "limit": 10 } }]Answer Offer (authenticated)
[{ "method": "answerOffer", "params": { "offerId": "abc...", "sdp": "..." } }]Other Methods (authenticated)
addIceCandidates- Add ICE candidatesgetIceCandidates- Get ICE candidatespoll- Poll for answers and ICE candidatesdeleteOffer- Delete an offer
Authentication
Stateless Ed25519: No registration required. Generate a keypair locally and sign requests.
Message: timestamp:nonce:method:canonicalJSON(params)
Headers: X-PublicKey, X-Timestamp, X-Nonce, X-Signature (base64 Ed25519)The server verifies signatures directly using the public key from the header - no identity table, no registration step. Your public key IS your identity.
Configuration
| Variable | Default | Description |
|----------|---------|-------------|
| PORT | 3000 | Server port |
| STORAGE_TYPE | memory | Storage backend: memory, sqlite, mysql, postgres |
| STORAGE_PATH | :memory: | SQLite path (only for sqlite backend) |
| DATABASE_URL | - | Connection string (for mysql/postgres) |
| DB_POOL_SIZE | 10 | Connection pool size (for mysql/postgres) |
| CORS_ORIGINS | * | Allowed origins |
| OFFER_DEFAULT_TTL | 60000 | Default offer TTL (ms) |
| OFFER_MAX_TTL | 86400000 | Max offer TTL (24h) |
Tag Validation
Tags: 1-64 chars, lowercase alphanumeric with dots/dashes.
Valid: chat, video-call, com.example.service
Links
- Client Library | Demo | API
License
MIT
