@toolkit-p2p/transport
v0.2.0
Published
Hybrid transport layer for toolkit-p2p (WebRTC + WebSocket)
Downloads
5
Maintainers
Readme
@toolkit-p2p/transport
Hybrid transport layer for toolkit-p2p mesh networking.
Features
- WebRTC DataChannels - Direct peer-to-peer connections
- WebSocket Signaling - Room-based offer/answer exchange
- Connection Management - Automatic reconnection and health monitoring
- Multiplexing - Multiple peer connections per mesh
- Flow Control - Backpressure and congestion management
Architecture
┌─────────────┐ Signaling ┌─────────────┐
│ Peer A │ ←──────────────→ │ Peer B │
│ │ │ │
│ Transport │ │ Transport │
│ Manager │ │ Manager │
└─────────────┘ └─────────────┘
│ │
│ WebRTC DataChannel │
└──────────────────────────────────┘
(direct P2P)Usage
Create a Transport Manager
import { createTransport } from '@toolkit-p2p/transport';
import { loadOrCreateIdentity } from '@toolkit-p2p/identity';
const identity = await loadOrCreateIdentity();
const transport = createTransport({
identity,
signalingUrl: 'ws://localhost:3000',
roomCode: 'ABC123',
});
// Listen for messages
transport.onMessage((peerId, data) => {
console.log(`Message from ${peerId}:`, data);
});
// Send messages
await transport.send(targetPeerId, new Uint8Array([1, 2, 3]));Connection Events
transport.onPeerJoined((peerId) => {
console.log(`Peer joined: ${peerId}`);
});
transport.onPeerLeft((peerId) => {
console.log(`Peer left: ${peerId}`);
});
transport.onConnectionStateChange((state) => {
console.log(`Connection state: ${state}`);
});API
createTransport(opts: TransportOpts): Transport
Creates a new transport manager.
Options:
identity: Identity- Local peer identity from@toolkit-p2p/identitysignalingUrl: string- WebSocket signaling server URLroomCode: string- Room code for peer discoveryiceServers?: RTCIceServer[]- Optional STUN/TURN servers
Transport
Methods:
send(peerId: string, data: Uint8Array): Promise<void>- Send data to peerbroadcast(data: Uint8Array): Promise<void>- Send to all peersdisconnect(): Promise<void>- Close all connections
Events:
onMessage(cb: (peerId: string, data: Uint8Array) => void)- Receive messagesonPeerJoined(cb: (peerId: string) => void)- Peer connectedonPeerLeft(cb: (peerId: string) => void)- Peer disconnectedonConnectionStateChange(cb: (state: ConnectionState) => void)- Connection state updates
License
MIT
