Files
rondevu-client/README.md
Bas van den Aakster 2e4d0d6a54 Add Node.js support via WebRTC polyfill injection
- Added WebRTCPolyfill interface for injecting WebRTC implementations
- Added wrtc option to RondevuOptions and RondevuConnectionParams
- Updated Rondevu and RondevuConnection to use injected APIs
- Added helpful error message when RTCPeerConnection is not available
- Updated README with Node.js usage examples
- Version bumped to 0.3.0

Fixes: RTCPeerConnection not defined error in Node.js

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-12 22:07:01 +01:00

2.9 KiB

Rondevu

🎯 Simple WebRTC peer signaling and discovery

Meet peers by topic, by peer ID, or by connection ID.

Related repositories:


@xtr-dev/rondevu-client

npm version

TypeScript client library for Rondevu peer signaling and WebRTC connection management. Handles automatic signaling, ICE candidate exchange, and connection establishment.

Install

npm install @xtr-dev/rondevu-client

Usage

Browser

import { Rondevu } from '@xtr-dev/rondevu-client';

const rdv = new Rondevu({
  baseUrl: 'https://server.com',
  rtcConfig: {
    iceServers: [
      // your ICE servers here
      { urls: 'stun:stun.l.google.com:19302' },
      { urls: 'stun:stun1.l.google.com:19302' },
      {
        urls: 'turn:relay1.example.com:3480',
        username: 'example',
        credential: 'example'
      }
    ]
  }
});

// Connect by topic
const conn = await rdv.join('room');

// Or connect by ID
const conn = await rdv.connect('meeting-123');

// Use the connection
conn.on('connect', () => {
  const channel = conn.dataChannel('chat');
  channel.send('Hello!');
});

Node.js

In Node.js, you need to provide a WebRTC polyfill since WebRTC APIs are not natively available:

npm install @roamhq/wrtc
# or
npm install wrtc
import { Rondevu } from '@xtr-dev/rondevu-client';
import wrtc from '@roamhq/wrtc';
import fetch from 'node-fetch';

const rdv = new Rondevu({
  baseUrl: 'https://server.com',
  fetch: fetch as any,
  wrtc: {
    RTCPeerConnection: wrtc.RTCPeerConnection,
    RTCSessionDescription: wrtc.RTCSessionDescription,
    RTCIceCandidate: wrtc.RTCIceCandidate,
  },
  rtcConfig: {
    iceServers: [
      { urls: 'stun:stun.l.google.com:19302' }
    ]
  }
});

// Rest is the same as browser usage
const conn = await rdv.join('room');
conn.on('connect', () => {
  const channel = conn.dataChannel('chat');
  channel.send('Hello from Node.js!');
});

API

Main Methods:

  • rdv.join(topic) - Auto-connect to first peer in topic
  • rdv.join(topic, {filter}) - Connect to specific peer by ID
  • rdv.create(id, topic) - Create connection for others to join
  • rdv.connect(id) - Join connection by ID

Connection Events:

  • connect - Connection established
  • disconnect - Connection closed
  • datachannel - Remote peer created data channel
  • stream - Remote media stream received
  • error - Error occurred

Connection Methods:

  • conn.dataChannel(label) - Get or create data channel
  • conn.addStream(stream) - Add media stream
  • conn.getPeerConnection() - Get underlying RTCPeerConnection
  • conn.close() - Close connection

License

MIT