rxprotoplex-peers
v0.1.3
Published
A reactive peer-to-peer management library built on RxJS and Protoplex for efficient signaling, matchmaking, and multiplexing.
Downloads
848
Maintainers
Readme
rxprotoplex-peers
A robust library for managing WebSocket and WebRTC signaling, socket multiplexing, and peer-to-peer communication. Designed with a reactive architecture leveraging RxJS and Protoplex, rxprotoplex-peers
simplifies complex networking scenarios.
Alpha !!!
Testing and implementation of ping-pong (or user-supplied) mechanisms for connection health are still in the works.
Additionally, a dependency has been flagged for potential SSRF vulnerabilities due to the ip
package. However, this library does not utilize the problematic feature, and this is not a concern for most use cases.
Table of Contents
- Installation
- Usage
- License
Installation
Install this library using your preferred package manager:
npm install rxprotoplex-peers
Usage
WebSocket Network Interfaces
addWebSocketNetworkInterface
Adds a WebSocket network interface for communication.
const nicId = addWebSocketNetworkInterface(url, config);
Parameters:
url
(string): The WebSocket server URL.config
(object): Configuration options for the network interface.
Returns:
string
: The ID of the created network interface.
closeInterface
Closes a WebSocket network interface and all associated sockets.
closeInterface(interfaceId, error);
Parameters:
interfaceId
(string | object): The interface ID or object to close.error
(Error, optional): Error to propagate during closure.
selectInterfaceByIp$
Observable that emits the interface matching the specified IP.
selectInterfaceByIp$(ip).subscribe(iface => console.log(iface));
Parameters:
ip
(string): The IP address to search for.
Returns:
Observable<object>
: Emits the matching interface.
networkInterfaceConnected$
Emits when a network interface is connected and verified.
networkInterfaceConnected$(id).subscribe(iface => console.log('Connected:', iface));
Parameters:
id
(string): The ID of the network interface.
Returns:
Observable<object>
: Emits the connected and verified interface.
WebRTC Signaling
webrtcSignalingRelay
Manages WebRTC signaling and ICE candidate relaying.
const signaling = webrtcSignalingRelay(peerManager, socket);
Parameters:
peerManager
(object): Manages peer connections.socket
(object): Associated socket instance.
Returns:
object
: WebRTC signaling methods as RPC.
Socket Management
connect
Establishes a connection between two interfaces.
connect(localIp, remoteIp);
Parameters:
localIp
(string): Local interface IP.remoteIp
(string): Remote interface IP.
listenOnSocket$
Listens on a specific channel for incoming connections.
listenOnSocket$(ip, channel).subscribe(socket => console.log(socket));
Parameters:
ip
(string): IP address to listen on.channel
(string): Communication channel.
Returns:
Observable<object>
: Emits incoming socket connections.
connectStream$
Connects to a remote socket over a specific channel.
connectStream$(remoteIp, channel).subscribe(stream => stream.write('Hello'));
Parameters:
remoteIp
(string): Remote socket IP.channel
(string): Communication channel.
Returns:
Observable<object>
: Emits the connected stream.
closeSocket
Closes a specific socket.
closeSocket(socketId, error);
Parameters:
socketId
(string | object): Socket ID or object.error
(Error, optional): Error to propagate during closure.
closeSocketsOfNetworkInterface
Closes all sockets associated with a specific network interface.
closeSocketsOfNetworkInterface(interfaceId, error);
Parameters:
interfaceId
(string): Network interface ID.error
(Error, optional): Error to propagate during closure.
WebSocket Utilities
webSocketServer
Sets up a WebSocket server for managing connections.
webSocketServer(wss);
Parameters:
wss
(WebSocketServer): WebSocket server instance.
getWebSocketURL
Generates a WebSocket URL for a server.
const url = getWebSocketURL(wss);
Parameters:
wss
(WebSocketServer): WebSocket server instance.
Returns:
string
: WebSocket URL.
Helper Methods
idOf
Retrieves the ID of an entity.
const id = idOf(entity);
Parameters:
entity
(object): Entity object.
Returns:
string
: Entity ID.
receiveIce
Processes and applies an ICE candidate.
receiveIce(socketIp, candidate);
Parameters:
socketIp
(string): Sending socket IP.candidate
(object): ICE candidate data.
License
This library is licensed under the MIT License.