**peerix v0.1.0** *** # Peerix Peerix is a peer-to-peer media and data sharing JavaScript library. Peerix uses WebRTC for peer-to-peer communication and relies on a signaling mechanism to facilitate peer discovery and connection management. The library abstracts away the complexities of WebRTC and provides a minimalistic API for developers to create real-time applications with media streaming and data sharing capabilities. Read the full documentation and API reference on the official website: - 📚 [Documentation](https://peerix.dev/docs) - 📑 [API Reference](https://api.peerix.dev) - 💻 [Source Code](https://github.com/peerix-dev/peerix) - 👾 [Issues](https://github.com/peerix-dev/peerix/issues) - 💬 [Discussions](https://github.com/peerix-dev/peerix/discussions) ## How It Works Peerix is a front-end library that runs entirely in the browser, allowing for low-latency media streaming and data sharing between peers. It is designed to work in a decentralized manner, allowing peers to connect directly to each other without relying on a central server for media relay. However, it does require a signaling server for peers to discover each other and establish connections. You can use various built-in signaling drivers, or you can implement your own custom driver to fit your application's needs. Peerix is composed of several key components: - **Peers**: The core components that manage connections between peers, including: - **Lifecycle Events**: Track connection state changes and peer availability. - **Media Streams**: Handle audio and video streaming between peers. - **Data Channels**: Enable message exchange and data sharing between peers. - **Signaling Drivers**: Facilitate peer discovery and connection management through various signaling servers (such as NATS, BroadcastChannel, or custom implementations). - **STUN/TURN servers**: Enable NAT traversal and media relay in restrictive network environments. - **Add-ons**: Optional extensions and utilities for enhanced functionality. Together, these components work to abstract the complexities of WebRTC and provide a simple API for building real-time peer-to-peer applications. Peerix uses ICE (Interactive Connectivity Establishment) to establish peer-to-peer connections. Public STUN servers can be used for NAT traversal, but for better connectivity and performance—especially in restrictive network environments—you should use your own TURN server or a reputable third-party TURN service. Peerix is not an SFU (Selective Forwarding Unit) or MCU (Multipoint Control Unit), and it does not provide server-side media processing or routing capabilities. Instead, it focuses on enabling direct peer-to-peer communication between clients, allowing you to build applications that leverage the full potential of WebRTC without the need for a central media server. ## Quick Start Install the Peerix library via NPM: ```sh npm install peerix ``` Use the library in your JavaScript or TypeScript code to create peer-to-peer connections, exchange messages, and share media streams: ```js import { Peer, BroadcastChannelDriver } from 'peerix'; // create a signaling driver const driver = new BroadcastChannelDriver(); // create the Peer instance const peer = new Peer({ driver }); // listen for peer connection state changes peer.on('connection', (e) => { const { remote } = e; console.log( 'State changed for peer:', remote.id, 'with metadata:', remote.metadata, 'state:', remote.state ); }); // listen for peer errors peer.on('error', (e) => { const { error } = e; console.error('Peer error:', error); }); // join a room peer.join({ room: 'room-id', metadata: { /* optional metadata */ } }); // later, if you want to leave the room // peer.leave(); ``` > The room identifier can be any string, but it should be the same for all peers that want to connect with each other. Work with data channels to exchange messages with other peers: ```js // listen for open channel event peer.on('channel:open', (e) => { const { remote, channel } = e; console.log( 'Channel opened with peer:', remote.id, 'channel:', channel.label ); // send a message to the connected peer channel.send('Hello, peer!'); }); // listen for close channel event peer.on('channel:close', (e) => { const { remote, channel } = e; console.log( 'Channel closed with peer:', remote.id, 'channel:', channel.label ); }); // listen for incoming messages peer.on('channel:message', (e) => { const { remote, channel, data } = e; console.log( 'Received message from peer:', remote.id, 'channel:', channel.label, 'data:', data ); }); // open a data channel with a specific label peer.open({ label: 'chat' }); // send a message to each connected peer via a specific data channel peer.send('Hello, peers!', { label: 'chat' }); // later, if you want to close the data channel // peer.close({ label: 'chat' }); ``` > The channel label can be any string and should be unique for each data channel. Work with media streams to share audio and video with other peers: ```js // listen for a remote peer publishing a stream peer.on('stream:add', (e) => { const { remote, stream, label } = e; console.log( 'Peer:', remote.id, 'published a stream with label:', label, 'stream state:', stream.active ); }); // listen for a remote peer unpublishing a stream peer.on('stream:remove', (e) => { const { remote, stream, label } = e; console.log( 'Peer:', remote.id, 'unpublished a stream with label:', label, 'stream state:', stream.active ); }); // get a media stream from the user's camera and microphone const stream = await navigator.mediaDevices.getUserMedia( { video: true, audio: true } ); // start sharing the stream with the room peer.publish({ label: 'camera', stream }); // later, if you no longer want to share the stream, you can unpublish it // peer.unpublish({ label: 'camera' }); ``` > The stream label can be any string and should be unique for each media stream. In addition to stream-level events, you can also listen for track-level events to get more granular information about the media tracks being added or removed from the stream: ```js // listen for a remote peer adding a track to the stream peer.on('track:add', (e) => { const { remote, stream, track, label } = e; console.log( 'Peer:', remote.id, 'published a track:', track.id, 'in stream:', stream.id, 'with label:', label ); }); // listen for a remote peer removing a track from the stream peer.on('track:remove', (e) => { const { remote, stream, track, label } = e; console.log( 'Peer:', remote.id, 'unpublished a track:', track.id, 'from stream:', stream.id, 'with label:', label ); }); ``` You can republish a new stream with the same label to update the media being shared with other peers: ```js // get a new media stream from the user's camera without microphone const newStream = await navigator.mediaDevices.getUserMedia( { video: true, audio: false } ); // republish the new stream with the same label to update the media peer.publish({ label: 'camera', stream: newStream }); ``` In this case, the tracks from the old stream will be removed and replaced with the tracks from the new stream for all connected peers and new peers that join the room. On the remote peers, you will receive a `track:remove` event for the old tracks and a `track:add` event for the new tracks. This allows you to easily switch between different media sources or update the media being shared without having to manage individual tracks manually. > Peerix automatically resolves all collisions and race conditions that may occur when multiple peers publish streams or open data channels at the same time. Peerix emits various lifecycle events that allow you to track the state of peer connections, media streams, and data channels. You can listen for these events to manage your application's behavior based on the connection state and media availability. Lifecycle events include: - `connection[:new,:connecting,:connected,:disconnected,:failed,:closed]`: a peer's connection state changes. - `channel[:new,:open,:close,:message,:error]`: a data channel's state changes or it receives a message. - `stream[:add,:remove]`: a remote peer publishes or unpublishes a media stream. - `track[:add,:remove]`: a track is added or removed from a media stream by a remote peer. - `error`: an error occurs with a peer connection, media stream, data channel, or signaling. You can subscribe to either group or specific events using the `:event` suffix. ## Signaling Drivers Peerix supports multiple signaling drivers for peer discovery and negotiation purposes. You can choose the driver that best fits your application's needs: - `MemoryDriver`: A simple in-memory driver for testing and development. It allows several peer instances to discover each other within one browser page. - `BroadcastChannelDriver`: Uses the BroadcastChannel API for communication between tabs in the same browser. - `NatsDriver`: Uses [NATS](https://nats.io/) messaging system for communication between peers across different browsers and devices over the internet. It supports E2EE to protect the privacy of signaling messages and is recommended for production applications. If no driver is provided when creating a `Peer`, Peerix will use an in-memory `MemoryDriver` by default — useful for single-page development and quick tests. For multi-tab testing use `BroadcastChannelDriver`, and for distributed signaling use `NatsDriver` or your own custom driver in production scenarios. You can also implement your own custom signaling driver by extending the `Driver` class and implementing the required methods: ```js import { Driver } from 'peerix'; class MyDriver extends Driver { async subscribe(namespace, handler) { // implement subscription logic for the given namespace and handler } async unsubscribe(namespace, handler) { // implement unsubscription logic for the given namespace and handler } async dispatch(namespace, message) { // implement dispatch logic for the given namespace and message } } ``` This driver interface allows you to integrate Peerix with any signaling mechanism you prefer. > Consider using NATS for production applications. NATS is a high-performance messaging system that enables efficient signaling between peers from the browser. If you do not want to create your own signaling server, you can use the NATS driver with a public NATS server or set up your own NATS server for better performance and reliability. Using NATS allows you to use Peerix without any server-side code because all signaling is handled through NATS servers directly from the browser. ```js import { NatsDriver } from 'peerix'; import { connect } from 'https://esm.sh/nats.ws'; // connect to a NATS server (e.g. the public demo server) const nc = await connect({ servers: ['wss://demo.nats.io:8443'] }); // create a new driver instance and start it const driver = new NatsDriver({ nc, prefix: 'peerix' }); driver.start(); ``` You should install the `nats.ws` package to use the NATS Driver, as it provides a WebSocket client for connecting to NATS servers from the browser. Peerix uses several techniques to reduce the number of signaling messages required to establish and maintain peer connections. Each peer connection begins with a negotiated data channel for signaling after the initial connection is established, eliminating the need for a signaling server during the lifetime of the peer connection. Additionally, Peerix uses compression to minimize the size of signaling messages, further reducing the overhead and load on the signaling server. Peerix supports end-to-end encryption (E2EE) for signaling messages, ensuring the privacy of these messages by ensuring that only peers with the correct encryption key can read them. You can also enable namespace hashing before sending the data to the signaling server to prevent the server from knowing the actual namespace being used. ## ICE Servers ICE (Interactive Connectivity Establishment) is a framework used in WebRTC to find the best path to connect peers. It involves using STUN (Session Traversal Utilities for NAT) servers for NAT traversal and TURN (Traversal Using Relays around NAT) servers for relaying media when direct peer-to-peer connections are not possible. > Use TURN servers for better connectivity in restrictive network environments. Peerix allows you to specify ICE servers for better connectivity and performance, especially in restrictive network environments. Use `iceServers` option when creating the `Peer` instance to provide custom STUN and TURN servers: ```js // create the Peer instance with custom ICE servers const peer = new Peer({ // use signaling driver, such as NATS driver, // specify custom ICE servers for better connectivity iceServers: [ // public STUN server { urls: 'stun:stun.l.google.com:19302' }, // custom TURN server (replace with your own server) { urls: 'turn:turn.example.com:3478', username: 'user', credential: 'pass' }, ], }); ``` ## License ### Open Source License Peerix is a WebRTC peer-to-peer JavaScript/TypeScript library. Copyright (C) 2026 Peerix This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License, version 3, published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . ### Commercial License For proprietary applications or if you do not wish to comply with the GPL license, please contact the [Peerix Team](https://peerix.dev/contact) to discuss commercial licensing options. [**peerix v0.1.0**](../README.md) *** # Class: Addon Defined in: [src/addons/addon.ts:12](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/addons/addon.ts#L12) Base class for Peerix addons. Addons are modular extensions that can be attached to a Peer instance to provide additional functionality or integrate with external services. ## Constructors ### Constructor > **new Addon**(): `Addon` Defined in: [src/addons/addon.ts:18](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/addons/addon.ts#L18) Creates a new Addon instance. #### Returns `Addon` ## Methods ### attach() > **attach**(`peer`): `Promise`\<`void`\> Defined in: [src/addons/addon.ts:68](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/addons/addon.ts#L68) Attaches the addon to a Peer instance. This method is called when the addon is added to a peer using `peer.attach(addon)`. #### Parameters ##### peer [`Peer`](Peer.md) The Peer instance to attach to. #### Returns `Promise`\<`void`\> *** ### detach() > **detach**(`peer`): `Promise`\<`void`\> Defined in: [src/addons/addon.ts:78](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/addons/addon.ts#L78) Detaches the addon from a Peer instance. This method is called when the addon is removed from a peer using `peer.detach(addon)`. #### Parameters ##### peer [`Peer`](Peer.md) The Peer instance to detach from. #### Returns `Promise`\<`void`\> *** ### emit() > **emit**(`event`, ...`args`): `void` Defined in: [src/addons/addon.ts:58](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/addons/addon.ts#L58) Emits one or more events from the addon. #### Parameters ##### event `string` Event name or list of event names. ##### args ...`any`[] Arguments to pass to the event handlers. #### Returns `void` *** ### off() > **off**(`event`, `handler?`): `void` Defined in: [src/addons/addon.ts:48](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/addons/addon.ts#L48) Unsubscribes from one or more events emitted by the addon. #### Parameters ##### event `string` Event name or list of event names. ##### handler? (...`args`) => `void` Optional event handler to remove. If not provided, all handlers for the event(s) will be removed. #### Returns `void` *** ### on() > **on**(`event`, `handler`): `void` Defined in: [src/addons/addon.ts:28](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/addons/addon.ts#L28) Subscribes to one or more events emitted by the addon. #### Parameters ##### event `string` Event name or list of event names. ##### handler (...`args`) => `void` Event handler. #### Returns `void` *** ### once() > **once**(`event`, `handler`): `void` Defined in: [src/addons/addon.ts:38](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/addons/addon.ts#L38) Subscribes to one or more events emitted by the addon for a single invocation. #### Parameters ##### event `string` Event name or list of event names. ##### handler (...`args`) => `void` Event handler. #### Returns `void` [**peerix v0.1.0**](../README.md) *** # Class: BroadcastChannelDriver Defined in: [src/drivers/broadcast-channel.ts:15](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/broadcast-channel.ts#L15) BroadcastChannel-based signaling driver for intra-origin communication. This driver is useful for testing and debugging purposes, but is not suitable for production use due to its limitations (e.g. same-origin restriction). ## Example ```javascript const driver = new BroadcastChannelDriver('peerix'); ``` ## Extends - [`Driver`](Driver.md) ## Constructors ### Constructor > **new BroadcastChannelDriver**(`channelName`): `BroadcastChannelDriver` Defined in: [src/drivers/broadcast-channel.ts:24](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/broadcast-channel.ts#L24) Creates a new instance of the driver. #### Parameters ##### channelName `string` Optional BroadcastChannel name (defaults to 'peerix'). #### Returns `BroadcastChannelDriver` #### Overrides [`Driver`](Driver.md).[`constructor`](Driver.md#constructor) ## Accessors ### active #### Get Signature > **get** **active**(): `boolean` Defined in: [src/drivers/driver.ts:33](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L33) Indicates whether the driver is currently active. ##### Returns `boolean` #### Set Signature > **set** **active**(`value`): `void` Defined in: [src/drivers/driver.ts:38](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L38) Sets the active state of the driver and emits corresponding events. ##### Parameters ###### value `boolean` ##### Returns `void` #### Inherited from [`Driver`](Driver.md).[`active`](Driver.md#active) ## Methods ### dispatch() > **dispatch**(`namespace`, `message`): `Promise`\<`void`\> Defined in: [src/drivers/broadcast-channel.ts:59](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/broadcast-channel.ts#L59) Dispatches a signaling message to the specified namespace. #### Parameters ##### namespace `string`[] The namespace to dispatch the message to. ##### message `Uint8Array` The message to dispatch. #### Returns `Promise`\<`void`\> #### Overrides [`Driver`](Driver.md).[`dispatch`](Driver.md#dispatch) *** ### emit() > **emit**\<`K`\>(`event`, ...`args`): `void` Defined in: [src/drivers/driver.ts:78](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L78) Emits an internal event with optional data. #### Type Parameters ##### K `K` *extends* keyof [`DriverEvents`](../interfaces/DriverEvents.md) #### Parameters ##### event `K` The event name. ##### args ...[`DriverEvents`](../interfaces/DriverEvents.md)\[`K`\] The data to pass to event handlers. #### Returns `void` #### Inherited from [`Driver`](Driver.md).[`emit`](Driver.md#emit) *** ### off() > **off**\<`K`\>(`event`, `handler`): `void` Defined in: [src/drivers/driver.ts:68](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L68) Unregisters an event handler for the specified internal event. #### Type Parameters ##### K `K` *extends* keyof [`DriverEvents`](../interfaces/DriverEvents.md) #### Parameters ##### event `K` The event name. ##### handler (...`args`) => `void` The event handler function to remove. #### Returns `void` #### Inherited from [`Driver`](Driver.md).[`off`](Driver.md#off) *** ### on() > **on**\<`K`\>(`event`, `handler`): `void` Defined in: [src/drivers/driver.ts:58](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L58) Registers an event handler for the specified internal event. #### Type Parameters ##### K `K` *extends* keyof [`DriverEvents`](../interfaces/DriverEvents.md) #### Parameters ##### event `K` The event name. ##### handler (...`args`) => `void` The event handler function. #### Returns `void` #### Inherited from [`Driver`](Driver.md).[`on`](Driver.md#on) *** ### subscribe() > **subscribe**(`namespace`, `handler`): `Promise`\<`void`\> Defined in: [src/drivers/broadcast-channel.ts:38](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/broadcast-channel.ts#L38) Subscribes to signaling messages for the specified namespace. #### Parameters ##### namespace `string`[] The namespace to subscribe to. ##### handler (`message`) => `void` The handler function to call when a message is received. #### Returns `Promise`\<`void`\> #### Overrides [`Driver`](Driver.md).[`subscribe`](Driver.md#subscribe) *** ### unsubscribe() > **unsubscribe**(`namespace`, `handler`): `Promise`\<`void`\> Defined in: [src/drivers/broadcast-channel.ts:48](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/broadcast-channel.ts#L48) Unsubscribes from signaling messages for the specified namespace. #### Parameters ##### namespace `string`[] The namespace to unsubscribe from. ##### handler (`message`) => `void` The handler function to remove. #### Returns `Promise`\<`void`\> #### Overrides [`Driver`](Driver.md).[`unsubscribe`](Driver.md#unsubscribe) [**peerix v0.1.0**](../README.md) *** # Class: Driver Defined in: [src/drivers/driver.ts:28](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L28) Base class for signaling drivers. Drivers are responsible for sending and receiving signaling messages between peers. They should implement the subscribe, unsubscribe and dispatch methods to handle message routing based on namespaces. ## Example ```javascript class MyDriver extends Driver { async subscribe(namespace, handler) { // subscribe to messages for the given namespace and call handler on message } async unsubscribe(namespace, handler) { // unsubscribe from messages for the given namespace and handler } async dispatch(namespace, message) { // dispatch a message to the given namespace } } ``` ## Extended by - [`BroadcastChannelDriver`](BroadcastChannelDriver.md) - [`MemoryDriver`](MemoryDriver.md) - [`NatsDriver`](NatsDriver.md) ## Constructors ### Constructor > **new Driver**(): `Driver` Defined in: [src/drivers/driver.ts:48](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L48) Creates a new driver instance. #### Returns `Driver` ## Accessors ### active #### Get Signature > **get** **active**(): `boolean` Defined in: [src/drivers/driver.ts:33](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L33) Indicates whether the driver is currently active. ##### Returns `boolean` #### Set Signature > **set** **active**(`value`): `void` Defined in: [src/drivers/driver.ts:38](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L38) Sets the active state of the driver and emits corresponding events. ##### Parameters ###### value `boolean` ##### Returns `void` ## Methods ### dispatch() > **dispatch**(`namespace`, `message`): `Promise`\<`void`\> Defined in: [src/drivers/driver.ts:108](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L108) Dispatches a signaling message to the specified namespace. #### Parameters ##### namespace `string`[] The namespace to dispatch the message to. ##### message `Uint8Array` The message to dispatch. #### Returns `Promise`\<`void`\> *** ### emit() > **emit**\<`K`\>(`event`, ...`args`): `void` Defined in: [src/drivers/driver.ts:78](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L78) Emits an internal event with optional data. #### Type Parameters ##### K `K` *extends* keyof [`DriverEvents`](../interfaces/DriverEvents.md) #### Parameters ##### event `K` The event name. ##### args ...[`DriverEvents`](../interfaces/DriverEvents.md)\[`K`\] The data to pass to event handlers. #### Returns `void` *** ### off() > **off**\<`K`\>(`event`, `handler`): `void` Defined in: [src/drivers/driver.ts:68](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L68) Unregisters an event handler for the specified internal event. #### Type Parameters ##### K `K` *extends* keyof [`DriverEvents`](../interfaces/DriverEvents.md) #### Parameters ##### event `K` The event name. ##### handler (...`args`) => `void` The event handler function to remove. #### Returns `void` *** ### on() > **on**\<`K`\>(`event`, `handler`): `void` Defined in: [src/drivers/driver.ts:58](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L58) Registers an event handler for the specified internal event. #### Type Parameters ##### K `K` *extends* keyof [`DriverEvents`](../interfaces/DriverEvents.md) #### Parameters ##### event `K` The event name. ##### handler (...`args`) => `void` The event handler function. #### Returns `void` *** ### subscribe() > **subscribe**(`namespace`, `handler`): `Promise`\<`void`\> Defined in: [src/drivers/driver.ts:88](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L88) Subscribes to signaling messages for the specified namespace. #### Parameters ##### namespace `string`[] The namespace to subscribe to. ##### handler (`message`) => `void` The handler function to call when a message is received. #### Returns `Promise`\<`void`\> *** ### unsubscribe() > **unsubscribe**(`namespace`, `handler`): `Promise`\<`void`\> Defined in: [src/drivers/driver.ts:98](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L98) Unsubscribes from signaling messages for the specified namespace. #### Parameters ##### namespace `string`[] The namespace to unsubscribe from. ##### handler (`message`) => `void` The handler function to remove. #### Returns `Promise`\<`void`\> [**peerix v0.1.0**](../README.md) *** # Class: MemoryDriver Defined in: [src/drivers/memory.ts:15](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/memory.ts#L15) In-memory signaling driver for intra-process communication. This driver is useful for testing and debugging purposes, but is not suitable for production use due to its limitations (e.g. single-process scope). ## Example ```javascript const driver = new MemoryDriver(); ``` ## Extends - [`Driver`](Driver.md) ## Constructors ### Constructor > **new MemoryDriver**(`options?`): `MemoryDriver` Defined in: [src/drivers/memory.ts:25](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/memory.ts#L25) Creates a new instance of the driver. #### Parameters ##### options? Optional configuration for the driver. ###### delay? `number` Delay (in milliseconds) for message delivery to simulate network latency. The delay will be a random value between 75% and 125% of the specified delay. #### Returns `MemoryDriver` #### Overrides [`Driver`](Driver.md).[`constructor`](Driver.md#constructor) ## Accessors ### active #### Get Signature > **get** **active**(): `boolean` Defined in: [src/drivers/driver.ts:33](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L33) Indicates whether the driver is currently active. ##### Returns `boolean` #### Set Signature > **set** **active**(`value`): `void` Defined in: [src/drivers/driver.ts:38](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L38) Sets the active state of the driver and emits corresponding events. ##### Parameters ###### value `boolean` ##### Returns `void` #### Inherited from [`Driver`](Driver.md).[`active`](Driver.md#active) ## Methods ### dispatch() > **dispatch**(`namespace`, `message`): `Promise`\<`void`\> Defined in: [src/drivers/memory.ts:52](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/memory.ts#L52) Dispatches a signaling message to the specified namespace. #### Parameters ##### namespace `string`[] The namespace to dispatch the message to. ##### message `Uint8Array` The message to dispatch. #### Returns `Promise`\<`void`\> #### Overrides [`Driver`](Driver.md).[`dispatch`](Driver.md#dispatch) *** ### emit() > **emit**\<`K`\>(`event`, ...`args`): `void` Defined in: [src/drivers/driver.ts:78](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L78) Emits an internal event with optional data. #### Type Parameters ##### K `K` *extends* keyof [`DriverEvents`](../interfaces/DriverEvents.md) #### Parameters ##### event `K` The event name. ##### args ...[`DriverEvents`](../interfaces/DriverEvents.md)\[`K`\] The data to pass to event handlers. #### Returns `void` #### Inherited from [`Driver`](Driver.md).[`emit`](Driver.md#emit) *** ### off() > **off**\<`K`\>(`event`, `handler`): `void` Defined in: [src/drivers/driver.ts:68](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L68) Unregisters an event handler for the specified internal event. #### Type Parameters ##### K `K` *extends* keyof [`DriverEvents`](../interfaces/DriverEvents.md) #### Parameters ##### event `K` The event name. ##### handler (...`args`) => `void` The event handler function to remove. #### Returns `void` #### Inherited from [`Driver`](Driver.md).[`off`](Driver.md#off) *** ### on() > **on**\<`K`\>(`event`, `handler`): `void` Defined in: [src/drivers/driver.ts:58](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L58) Registers an event handler for the specified internal event. #### Type Parameters ##### K `K` *extends* keyof [`DriverEvents`](../interfaces/DriverEvents.md) #### Parameters ##### event `K` The event name. ##### handler (...`args`) => `void` The event handler function. #### Returns `void` #### Inherited from [`Driver`](Driver.md).[`on`](Driver.md#on) *** ### subscribe() > **subscribe**(`namespace`, `handler`): `Promise`\<`void`\> Defined in: [src/drivers/memory.ts:31](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/memory.ts#L31) Subscribes to signaling messages for the specified namespace. #### Parameters ##### namespace `string`[] The namespace to subscribe to. ##### handler (`message`) => `void` The handler function to call when a message is received. #### Returns `Promise`\<`void`\> #### Overrides [`Driver`](Driver.md).[`subscribe`](Driver.md#subscribe) *** ### unsubscribe() > **unsubscribe**(`namespace`, `handler`): `Promise`\<`void`\> Defined in: [src/drivers/memory.ts:41](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/memory.ts#L41) Unsubscribes from signaling messages for the specified namespace. #### Parameters ##### namespace `string`[] The namespace to unsubscribe from. ##### handler (`message`) => `void` The handler function to remove. #### Returns `Promise`\<`void`\> #### Overrides [`Driver`](Driver.md).[`unsubscribe`](Driver.md#unsubscribe) [**peerix v0.1.0**](../README.md) *** # Class: NatsDriver Defined in: [src/drivers/nats.ts:25](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/nats.ts#L25) NATS-based signaling driver for inter-process communication. This driver uses [NATS](https://nats.io/) as the underlying messaging system, allowing for distributed signaling across multiple browsers and devices. > This driver requires the `nats.ws` library for WebSocket-based NATS connections > directly in the browser. ## Example ```javascript import { connect } from 'https://esm.sh/nats.ws'; // connect to a NATS server (e.g. the public demo server) const nc = await connect({ servers: ['wss://demo.nats.io:8443'] }); // create a new driver instance and start it const driver = new NatsDriver({ nc, prefix: 'peerix' }); driver.start(); ``` ## Extends - [`Driver`](Driver.md) ## Constructors ### Constructor > **new NatsDriver**(`options`): `NatsDriver` Defined in: [src/drivers/nats.ts:38](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/nats.ts#L38) Creates a new instance of the driver. #### Parameters ##### options Configuration options for the driver. ###### nc `any` A NATS connection instance. ###### prefix? `string` An optional prefix for NATS subjects. #### Returns `NatsDriver` #### Overrides [`Driver`](Driver.md).[`constructor`](Driver.md#constructor) ## Accessors ### active #### Get Signature > **get** **active**(): `boolean` Defined in: [src/drivers/driver.ts:33](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L33) Indicates whether the driver is currently active. ##### Returns `boolean` #### Set Signature > **set** **active**(`value`): `void` Defined in: [src/drivers/driver.ts:38](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L38) Sets the active state of the driver and emits corresponding events. ##### Parameters ###### value `boolean` ##### Returns `void` #### Inherited from [`Driver`](Driver.md).[`active`](Driver.md#active) ## Methods ### dispatch() > **dispatch**(`namespace`, `message`): `Promise`\<`void`\> Defined in: [src/drivers/nats.ts:98](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/nats.ts#L98) Dispatches a signaling message to the specified namespace. #### Parameters ##### namespace `string`[] The namespace to dispatch the message to. ##### message `Uint8Array` The message to dispatch. #### Returns `Promise`\<`void`\> #### Overrides [`Driver`](Driver.md).[`dispatch`](Driver.md#dispatch) *** ### emit() > **emit**\<`K`\>(`event`, ...`args`): `void` Defined in: [src/drivers/driver.ts:78](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L78) Emits an internal event with optional data. #### Type Parameters ##### K `K` *extends* keyof [`DriverEvents`](../interfaces/DriverEvents.md) #### Parameters ##### event `K` The event name. ##### args ...[`DriverEvents`](../interfaces/DriverEvents.md)\[`K`\] The data to pass to event handlers. #### Returns `void` #### Inherited from [`Driver`](Driver.md).[`emit`](Driver.md#emit) *** ### off() > **off**\<`K`\>(`event`, `handler`): `void` Defined in: [src/drivers/driver.ts:68](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L68) Unregisters an event handler for the specified internal event. #### Type Parameters ##### K `K` *extends* keyof [`DriverEvents`](../interfaces/DriverEvents.md) #### Parameters ##### event `K` The event name. ##### handler (...`args`) => `void` The event handler function to remove. #### Returns `void` #### Inherited from [`Driver`](Driver.md).[`off`](Driver.md#off) *** ### on() > **on**\<`K`\>(`event`, `handler`): `void` Defined in: [src/drivers/driver.ts:58](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L58) Registers an event handler for the specified internal event. #### Type Parameters ##### K `K` *extends* keyof [`DriverEvents`](../interfaces/DriverEvents.md) #### Parameters ##### event `K` The event name. ##### handler (...`args`) => `void` The event handler function. #### Returns `void` #### Inherited from [`Driver`](Driver.md).[`on`](Driver.md#on) *** ### start() > **start**(): `Promise`\<`void`\> Defined in: [src/drivers/nats.ts:50](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/nats.ts#L50) Starts the driver and begins tracking NATS connection status. #### Returns `Promise`\<`void`\> *** ### stop() > **stop**(): `Promise`\<`void`\> Defined in: [src/drivers/nats.ts:60](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/nats.ts#L60) Stops the driver. #### Returns `Promise`\<`void`\> *** ### subscribe() > **subscribe**(`namespace`, `handler`): `Promise`\<`void`\> Defined in: [src/drivers/nats.ts:66](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/nats.ts#L66) Subscribes to signaling messages for the specified namespace. #### Parameters ##### namespace `string`[] The namespace to subscribe to. ##### handler (`message`) => `void` The handler function to call when a message is received. #### Returns `Promise`\<`void`\> #### Overrides [`Driver`](Driver.md).[`subscribe`](Driver.md#subscribe) *** ### unsubscribe() > **unsubscribe**(`namespace`, `handler`): `Promise`\<`void`\> Defined in: [src/drivers/nats.ts:83](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/nats.ts#L83) Unsubscribes from signaling messages for the specified namespace. #### Parameters ##### namespace `string`[] The namespace to unsubscribe from. ##### handler (`message`) => `void` The handler function to remove. #### Returns `Promise`\<`void`\> #### Overrides [`Driver`](Driver.md).[`unsubscribe`](Driver.md#unsubscribe) [**peerix v0.1.0**](../README.md) *** # Class: Peer Defined in: [src/peer.ts:53](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L53) Manages WebRTC peer connections, signaling, media streams, and data channels. ## Example ```javascript // create a new peer // using default in-memory signaling driver const peer = new Peer(); // listen for connection state changes peer.on('connection', (e) => { const { remote } = e; console.log(`Peer ${remote.id} connection state has changed:`, remote.state); }); // listen for open channel event peer.on('channel:open', (e) => { const { remote, channel } = e; // send a message to the connected peer channel.send('Hello, peer!'); }); // listen for incoming messages peer.on('channel:message', (e) => { const { remote, channel, data } = e; console.log(`Received message from ${remote.id} on channel ${channel.label}:`, data); }); // open a data channel peer.open({ label: 'default' }); // join a room peer.join({ room: 'room-id' }); ``` ## Constructors ### Constructor > **new Peer**(`options?`): `Peer` Defined in: [src/peer.ts:91](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L91) Creates a new Peer instance. #### Parameters ##### options? [`PeerOptions`](../interfaces/PeerOptions.md) Peer configuration options. #### Returns `Peer` #### Example ```javascript // create a new peer with default options const peer = new Peer(); ``` ## Properties ### active > **active**: `boolean` Defined in: [src/peer.ts:66](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L66) Indicates whether the peer is currently active (joined a room). *** ### addons > `readonly` **addons**: `Set`\<`any`\> Defined in: [src/peer.ts:63](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L63) Attachable extensions. *** ### channels > `readonly` **channels**: `Map`\<`string`, [`ChannelOptions`](../interfaces/ChannelOptions.md)\> Defined in: [src/peer.ts:61](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L61) Configured local data channels indexed by channel label. *** ### connections > `readonly` **connections**: `Map`\<`string`, [`RemotePeer`](RemotePeer.md)\> Defined in: [src/peer.ts:57](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L57) Active remote peers indexed by remote peer id. *** ### id > `readonly` **id**: `string` Defined in: [src/peer.ts:55](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L55) Unique identifier for the local peer. *** ### metadata? > `optional` **metadata?**: `any` Defined in: [src/peer.ts:70](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L70) Optional metadata announced to other peers in signaling messages. *** ### room > **room**: `string` Defined in: [src/peer.ts:68](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L68) Current room name. Empty until join() is called. *** ### streams > `readonly` **streams**: `Map`\<`string`, [`StreamOptions`](../interfaces/StreamOptions.md)\> Defined in: [src/peer.ts:59](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L59) Published local streams indexed by application-level stream label. ## Methods ### attach() > **attach**(`addon`): `Promise`\<`void`\> Defined in: [src/peer.ts:419](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L419) Attaches an addon/extension to the peer instance. #### Parameters ##### addon `any` Addon instance to attach. #### Returns `Promise`\<`void`\> *** ### close() > **close**(`options`): `Promise`\<`void`\> Defined in: [src/peer.ts:369](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L369) Closes a previously opened data channel with the given label and removes it from all remote peers. #### Parameters ##### options `string` \| \{ `label`: `string`; \} Channel label or object containing `label`. #### Returns `Promise`\<`void`\> #### Example ```javascript // close the channel with label 'chat' peer.close({ label: 'chat' }); ``` *** ### detach() > **detach**(`addon`): `Promise`\<`void`\> Defined in: [src/peer.ts:429](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L429) Detaches a previously attached addon/extension from the peer instance. #### Parameters ##### addon `any` Addon instance to detach. #### Returns `Promise`\<`void`\> *** ### emit() > **emit**\<`K`\>(`event`, ...`args`): `void` Defined in: [src/peer.ts:471](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L471) Emits one or more events. Usually you would not call this method directly. #### Type Parameters ##### K `K` *extends* keyof [`PeerEvents`](../interfaces/PeerEvents.md) #### Parameters ##### event `K` \| `K`[] Event name or list of event names. ##### args ...[`PeerEvents`](../interfaces/PeerEvents.md)\[`K`\] Event payload. #### Returns `void` *** ### join() > **join**(`options?`): `Promise`\<`void`\> Defined in: [src/peer.ts:154](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L154) Joins a room and starts listening for incoming connections. #### Parameters ##### options? `string` \| [`PeerJoinOptions`](../interfaces/PeerJoinOptions.md) Room name or join options. #### Returns `Promise`\<`void`\> #### Example ```javascript // join a room with ID 'room-id' and custom metadata peer.join({ room: 'room-id', metadata: { name: 'Alice' } }); ``` *** ### leave() > **leave**(): `Promise`\<`void`\> Defined in: [src/peer.ts:184](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L184) Leaves the current room and closes all active remote connections. #### Returns `Promise`\<`void`\> #### Example ```javascript // leave the current room peer.leave(); ``` *** ### off() > **off**\<`K`\>(`event`, `handler?`): `void` Defined in: [src/peer.ts:460](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L460) Removes a previously registered event listener. #### Type Parameters ##### K `K` *extends* keyof [`PeerEvents`](../interfaces/PeerEvents.md) #### Parameters ##### event `K` \| `K`[] Event name or list of event names. ##### handler? (...`args`) => `void` Event handler to remove. If omitted, all handlers for the given event(s) will be removed. #### Returns `void` *** ### on() > **on**\<`K`\>(`event`, `handler`): `void` Defined in: [src/peer.ts:440](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L440) Subscribes to one or more peer events. #### Type Parameters ##### K `K` *extends* keyof [`PeerEvents`](../interfaces/PeerEvents.md) #### Parameters ##### event `K` \| `K`[] Event name or list of event names. ##### handler (...`args`) => `void` Event handler. #### Returns `void` *** ### once() > **once**\<`K`\>(`event`, `handler`): `void` Defined in: [src/peer.ts:450](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L450) Subscribes to an event and auto-unsubscribes after first invocation. #### Type Parameters ##### K `K` *extends* keyof [`PeerEvents`](../interfaces/PeerEvents.md) #### Parameters ##### event `K` \| `K`[] Event name or list of event names. ##### handler (...`args`) => `void` Event handler. #### Returns `void` *** ### open() > **open**(`options`): `Promise`\<`void`\> Defined in: [src/peer.ts:343](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L343) Opens a data channel with the given label and options to all remote peers. If a channel with the same label already exists, it will be reused. You can open a channel with the same label on both local and remote peers or only on one side. In any case, only one channel will be created for each label. You can send data through the channel in both directions. #### Parameters ##### options `string` \| [`ChannelOptions`](../interfaces/ChannelOptions.md) Channel options or channel label. #### Returns `Promise`\<`void`\> #### Example ```javascript // open a channel with label 'chat' peer.open({ label: 'chat' }); ``` *** ### publish() > **publish**(`options`): `Promise`\<`void` \| `MediaStream`\> Defined in: [src/peer.ts:232](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L232) Publishes new or updates an existing media stream to all remote peers including new ones that join later. If you pass a MediaStream instance directly, it will be published under a label equal to the stream id. Otherwise, you can specify an explicit label in the options object. If a stream with the same label already exists, it will be updated and its tracks will be added/removed as needed to minimize renegotiations. If the stream is published with the `managed` option, its tracks will be automatically stopped when the stream is unpublished or replaced with a new stream. #### Parameters ##### options `MediaStream` \| [`StreamOptions`](../interfaces/StreamOptions.md) Stream descriptor or MediaStream instance. #### Returns `Promise`\<`void` \| `MediaStream`\> The published MediaStream instance if successful, or undefined. #### Example ```javascript // get a media stream from the user's camera and microphone const stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true }); // publish a media stream with an explicit label peer.publish({ label: 'camera', stream, managed: true }); ``` *** ### send() > **send**(`message`, `options?`): `void` Defined in: [src/peer.ts:400](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L400) Sends a message through data channels. If `options` is omitted, the message is sent to all open channels for every connected remote peer. If `options` is a string, it is treated as channel label. #### Parameters ##### message `any` Message payload to send. This may be a string, a Blob, an ArrayBuffer, a TypedArray or a DataView object. ##### options? `string` \| \{ `label?`: `string`; \} Optional channel label or object containing `label`. #### Returns `void` #### Example ```javascript // send a message to all channels peer.send('Hello, peers!'); // send a message to a specific channel peer.send('Hello, chat channel!', { label: 'chat' }); ``` *** ### unpublish() > **unpublish**(`options`): `Promise`\<`void` \| `MediaStream`\> Defined in: [src/peer.ts:295](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L295) Stops publishing a previously published media stream with the given label and removes it from all remote peers. If you pass a MediaStream instance directly, it will be unpublished based on its id as label. Otherwise, you can specify the label in the options object or pass it directly as a string. If the stream was published with the `managed` option, its tracks will be stopped automatically. #### Parameters ##### options `string` \| `MediaStream` \| \{ `label?`: `string`; \} A stream label, MediaStream instance, or an object containing a label. #### Returns `Promise`\<`void` \| `MediaStream`\> The unpublished MediaStream instance, or undefined. #### Example ```javascript // unpublish a media stream with an explicit label peer.unpublish({ label: 'camera' }); ``` [**peerix v0.1.0**](../README.md) *** # Class: PeerixError Defined in: [src/error.ts:19](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/error.ts#L19) Custom error class for Peerix-related errors. Extends the built-in Error class and adds a `code` property. ## Extends - `Error` ## Constructors ### Constructor > **new PeerixError**(`error`, `code?`): `PeerixError` Defined in: [src/error.ts:33](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/error.ts#L33) Creates a new PeerixError instance. #### Parameters ##### error `any` An object containing the error details: name, message. ##### code? [`ErrorCode`](../type-aliases/ErrorCode.md) An error code for categorizing the error. #### Returns `PeerixError` #### Overrides `Error.constructor` ## Properties ### code > `readonly` **code**: [`ErrorCode`](../type-aliases/ErrorCode.md) Defined in: [src/error.ts:25](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/error.ts#L25) An error code for categorizing the error. *** ### message > `readonly` **message**: `string` Defined in: [src/error.ts:23](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/error.ts#L23) The error message providing details about the error. #### Overrides `Error.message` *** ### name > `readonly` **name**: `string` Defined in: [src/error.ts:21](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/error.ts#L21) The name of the error, typically 'Error' or a specific error type. #### Overrides `Error.name` *** ### stack? > `optional` **stack?**: `string` Defined in: node\_modules/typescript/lib/lib.es5.d.ts:1076 #### Inherited from `Error.stack` [**peerix v0.1.0**](../README.md) *** # Class: RemotePeer Defined in: [src/remote.ts:15](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L15) Represents a remote peer connection. Do not create RemotePeer instances manually. ## Properties ### channels > `readonly` **channels**: `Map`\<`string`, `RTCDataChannel`\> Defined in: [src/remote.ts:27](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L27) Negotiated data channels keyed by channel label. *** ### connection > `readonly` **connection**: `RTCPeerConnection` Defined in: [src/remote.ts:23](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L23) Native WebRTC peer connection to the remote peer. *** ### id > `readonly` **id**: `string` Defined in: [src/remote.ts:17](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L17) Remote peer identifier. *** ### metadata? > `readonly` `optional` **metadata?**: `any` Defined in: [src/remote.ts:19](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L19) Metadata advertised by the remote peer. *** ### room > `readonly` **room**: `string` Defined in: [src/remote.ts:21](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L21) Room name the peer is associated with. *** ### state > **state**: [`PeerConnectionState`](../type-aliases/PeerConnectionState.md) Defined in: [src/remote.ts:30](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L30) Peer connection state, updated on connection state changes. *** ### streams > `readonly` **streams**: `Map`\<`string`, `MediaStream`\> Defined in: [src/remote.ts:25](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L25) Remote media streams keyed by stream label. ## Methods ### close() > **close**(`options`): `Promise`\<`void`\> Defined in: [src/remote.ts:437](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L437) Closes a previously opened data channel to the current remote peer. #### Parameters ##### options `string` \| \{ `label`: `string`; \} Channel label or object containing `label`. #### Returns `Promise`\<`void`\> *** ### dispose() > **dispose**(): `void` Defined in: [src/remote.ts:288](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L288) Closes and frees all connection resources. #### Returns `void` *** ### emit() > **emit**\<`K`\>(`event`, ...`args`): `void` Defined in: [src/remote.ts:281](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L281) Emits an event with optional payload to the registered event handlers. #### Type Parameters ##### K `K` *extends* keyof [`RemotePeerEvents`](../interfaces/RemotePeerEvents.md) #### Parameters ##### event `K` \| `K`[] Event type to emit. ##### args ...[`RemotePeerEvents`](../interfaces/RemotePeerEvents.md)\[`K`\] Optional arguments to pass to the event handlers. #### Returns `void` *** ### off() > **off**\<`K`\>(`event`, `handler`): `void` Defined in: [src/remote.ts:271](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L271) Unregisters an event handler for a specific event type emitted by the remote peer connection. #### Type Parameters ##### K `K` *extends* keyof [`RemotePeerEvents`](../interfaces/RemotePeerEvents.md) #### Parameters ##### event `K` \| `K`[] Event type to stop listening for. ##### handler (...`args`) => `void` Callback function to remove from the event listeners. #### Returns `void` *** ### on() > **on**\<`K`\>(`event`, `handler`): `void` Defined in: [src/remote.ts:261](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L261) Registers an event handler for a specific event type emitted by the remote peer connection. #### Type Parameters ##### K `K` *extends* keyof [`RemotePeerEvents`](../interfaces/RemotePeerEvents.md) #### Parameters ##### event `K` \| `K`[] Event type to listen for. ##### handler (...`args`) => `void` Callback function to handle the event. #### Returns `void` *** ### open() > **open**(`options`): `Promise`\<`void`\> Defined in: [src/remote.ts:420](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L420) Opens a data channel to the current remote peer. If a channel with the same label already exists, it will be reused. You can open a channel with the same label on both local and remote peers or only on one side. In any case, only one channel will be created for each label. You can send data through the channel in both directions. #### Parameters ##### options `string` \| [`ChannelOptions`](../interfaces/ChannelOptions.md) Channel options or channel label. #### Returns `Promise`\<`void`\> *** ### publish() > **publish**(`options`): `Promise`\<`void` \| `MediaStream`\> Defined in: [src/remote.ts:320](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L320) Publishes new or updates an existing media stream to the current remote peer. If you pass a MediaStream instance directly, it will be published under a label equal to the stream id. Otherwise, you can specify an explicit label in the options object. If a stream with the same label already exists, it will be updated and its tracks will be added/removed as needed to minimize renegotiations. If the stream is published with the `managed` option, its tracks will be automatically stopped when the stream is unpublished or replaced with a new stream. #### Parameters ##### options `MediaStream` \| [`StreamOptions`](../interfaces/StreamOptions.md) Stream descriptor or MediaStream instance. #### Returns `Promise`\<`void` \| `MediaStream`\> The published MediaStream instance if successful, or undefined. *** ### send() > **send**(`message`, `options?`): `void` Defined in: [src/remote.ts:459](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L459) Sends a message through data channels. If `options` is omitted, the message is sent to all open channels for every connected remote peer. If `options` is a string, it is treated as channel label. #### Parameters ##### message `any` Message payload to send. This may be a string, a Blob, an ArrayBuffer, a TypedArray or a DataView object. ##### options? `string` \| \{ `label?`: `string`; \} Optional channel label or object containing `label`. #### Returns `void` *** ### unpublish() > **unpublish**(`options`): `Promise`\<`void` \| `MediaStream`\> Defined in: [src/remote.ts:379](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L379) Stops publishing a previously published media stream to the current remote peer. If you pass a MediaStream instance directly, it will be unpublished based on its id as label. Otherwise, you can specify the label in the options object or pass it directly as a string. If the stream was published with the `managed` option, its tracks will be stopped automatically. #### Parameters ##### options `string` \| `MediaStream` \| \{ `label?`: `string`; \} A stream label, MediaStream instance, or an object containing a label. #### Returns `Promise`\<`void` \| `MediaStream`\> The unpublished MediaStream instance, or undefined. [**peerix v0.1.0**](../README.md) *** # Interface: ChannelOptions Defined in: [src/peer.ts:772](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L772) Options used to create negotiated RTCDataChannel instances. ## Properties ### label? > `optional` **label?**: `string` Defined in: [src/peer.ts:777](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L777) Channel label. If omitted, the `default` label will be used. *** ### maxPacketLifeTime? > `optional` **maxPacketLifeTime?**: `number` Defined in: [src/peer.ts:785](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L785) Maximum packet lifetime in milliseconds. *** ### maxRetransmits? > `optional` **maxRetransmits?**: `number` Defined in: [src/peer.ts:789](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L789) Maximum retransmission attempts. *** ### ordered? > `optional` **ordered?**: `boolean` Defined in: [src/peer.ts:781](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L781) Whether ordered delivery is required. *** ### protocol? > `optional` **protocol?**: `string` Defined in: [src/peer.ts:793](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L793) Optional subprotocol name. [**peerix v0.1.0**](../README.md) *** # Interface: DriverEvents Defined in: [src/drivers/driver.ts:118](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L118) Defines the internal events emitted by the [Driver](../classes/Driver.md) class. ## Indexable > \[`event`: `string`\]: `any`[] Allows for additional custom events. ## Properties ### active > **active**: \[\] Defined in: [src/drivers/driver.ts:120](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L120) Emitted when the driver becomes active. *** ### error > **error**: \[`Error`\] Defined in: [src/drivers/driver.ts:124](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L124) Emitted when an error occurs within the driver. *** ### inactive > **inactive**: \[\] Defined in: [src/drivers/driver.ts:122](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/drivers/driver.ts#L122) Emitted when the driver becomes inactive. [**peerix v0.1.0**](../README.md) *** # Interface: PeerChannelEvent Defined in: [src/peer.ts:904](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L904) Emitted when a data channel is created or received from a remote peer, when a data channel is opened or closed, when a message is received on a data channel, or when an error occurs. ## Properties ### channel > **channel**: `RTCDataChannel` Defined in: [src/peer.ts:912](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L912) Data channel associated with the event. *** ### data? > `optional` **data?**: `any` Defined in: [src/peer.ts:916](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L916) Received message data for message events. *** ### error? > `optional` **error?**: `Error` Defined in: [src/peer.ts:918](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L918) Error object containing details about the error for error events. *** ### id > **id**: `string` Defined in: [src/peer.ts:906](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L906) Local peer identifier. *** ### label > **label**: `string` Defined in: [src/peer.ts:914](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L914) Label of the data channel. *** ### name > **name**: `"channel:new"` \| `"channel:open"` \| `"channel:close"` \| `"channel:message"` \| `"channel:error"` Defined in: [src/peer.ts:908](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L908) Name of the event. *** ### remote > **remote**: [`RemotePeer`](../classes/RemotePeer.md) Defined in: [src/peer.ts:910](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L910) Remote peer object containing connection details. [**peerix v0.1.0**](../README.md) *** # Interface: PeerConnectionEvent Defined in: [src/peer.ts:886](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L886) Event emitted on peer connection state changes. ## Properties ### id > **id**: `string` Defined in: [src/peer.ts:888](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L888) Local peer identifier. *** ### name > **name**: `"connection:new"` \| `"connection:connecting"` \| `"connection:connected"` \| `"connection:disconnected"` \| `"connection:failed"` \| `"connection:closed"` Defined in: [src/peer.ts:890](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L890) Name of the event. *** ### remote > **remote**: [`RemotePeer`](../classes/RemotePeer.md) Defined in: [src/peer.ts:892](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L892) Remote peer object containing connection details. *** ### state > **state**: [`PeerConnectionState`](../type-aliases/PeerConnectionState.md) Defined in: [src/peer.ts:894](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L894) New connection state. [**peerix v0.1.0**](../README.md) *** # Interface: PeerErrorEvent Defined in: [src/peer.ts:964](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L964) Event emitted when an error occurs in any background operations. ## Properties ### error > **error**: [`PeerixError`](../classes/PeerixError.md) Defined in: [src/peer.ts:970](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L970) Error object containing details about the error. *** ### id > **id**: `string` Defined in: [src/peer.ts:966](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L966) Local peer identifier. *** ### name > **name**: `"error"` Defined in: [src/peer.ts:968](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L968) Name of the event. [**peerix v0.1.0**](../README.md) *** # Interface: PeerEvents Defined in: [src/peer.ts:978](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L978) Events emitted by [Peer](../classes/Peer.md) instances. ## Properties ### channel > **channel**: \[[`PeerChannelEvent`](PeerChannelEvent.md)\] Defined in: [src/peer.ts:1008](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L1008) Emitted when channel events occur. *** ### channel:close > **channel:close**: \[[`PeerChannelEvent`](PeerChannelEvent.md)\] Defined in: [src/peer.ts:1014](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L1014) Emitted when a data channel is closed. *** ### channel:error > **channel:error**: \[[`PeerChannelEvent`](PeerChannelEvent.md)\] Defined in: [src/peer.ts:1018](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L1018) Emitted when an error occurs with a remote peer connection or channel. *** ### channel:message > **channel:message**: \[[`PeerChannelEvent`](PeerChannelEvent.md)\] Defined in: [src/peer.ts:1016](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L1016) Emitted when a message is received on a data channel. *** ### channel:new > **channel:new**: \[[`PeerChannelEvent`](PeerChannelEvent.md)\] Defined in: [src/peer.ts:1010](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L1010) Channel created or received from a remote peer. *** ### channel:open > **channel:open**: \[[`PeerChannelEvent`](PeerChannelEvent.md)\] Defined in: [src/peer.ts:1012](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L1012) Emitted when a data channel is opened. *** ### connection > **connection**: \[[`PeerConnectionEvent`](PeerConnectionEvent.md)\] Defined in: [src/peer.ts:980](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L980) Emitted when a remote peer connection state changes. *** ### connection:closed > **connection:closed**: \[[`PeerConnectionEvent`](PeerConnectionEvent.md)\] Defined in: [src/peer.ts:992](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L992) Emitted when a remote peer connection is closed. *** ### connection:connected > **connection:connected**: \[[`PeerConnectionEvent`](PeerConnectionEvent.md)\] Defined in: [src/peer.ts:986](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L986) Emitted when a remote peer connection is successfully connected. *** ### connection:connecting > **connection:connecting**: \[[`PeerConnectionEvent`](PeerConnectionEvent.md)\] Defined in: [src/peer.ts:984](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L984) Emitted when a remote peer connection is connecting. *** ### connection:disconnected > **connection:disconnected**: \[[`PeerConnectionEvent`](PeerConnectionEvent.md)\] Defined in: [src/peer.ts:988](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L988) Emitted when a remote peer connection is disconnected. *** ### connection:failed > **connection:failed**: \[[`PeerConnectionEvent`](PeerConnectionEvent.md)\] Defined in: [src/peer.ts:990](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L990) Emitted when a remote peer connection fails. *** ### connection:new > **connection:new**: \[[`PeerConnectionEvent`](PeerConnectionEvent.md)\] Defined in: [src/peer.ts:982](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L982) Emitted when a new remote peer connection is established. *** ### error > **error**: \[[`PeerErrorEvent`](PeerErrorEvent.md)\] Defined in: [src/peer.ts:994](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L994) Emitted when an error occurs in any background operations. *** ### stream > **stream**: \[[`PeerStreamEvent`](PeerStreamEvent.md)\] Defined in: [src/peer.ts:996](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L996) Emitted when stream events occur. *** ### stream:add > **stream:add**: \[[`PeerStreamEvent`](PeerStreamEvent.md)\] Defined in: [src/peer.ts:998](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L998) Emitted when a remote peer publishes a media stream. *** ### stream:remove > **stream:remove**: \[[`PeerStreamEvent`](PeerStreamEvent.md)\] Defined in: [src/peer.ts:1000](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L1000) Emitted when a remote peer unpublishes a media stream. *** ### track > **track**: \[[`PeerTrackEvent`](PeerTrackEvent.md)\] Defined in: [src/peer.ts:1002](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L1002) Emitted when track events occur. *** ### track:add > **track:add**: \[[`PeerTrackEvent`](PeerTrackEvent.md)\] Defined in: [src/peer.ts:1004](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L1004) Emitted when a remote peer adds a media track to a published stream. *** ### track:remove > **track:remove**: \[[`PeerTrackEvent`](PeerTrackEvent.md)\] Defined in: [src/peer.ts:1006](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L1006) Emitted when a remote peer removes a media track from a published stream. [**peerix v0.1.0**](../README.md) *** # Interface: PeerJoinOptions Defined in: [src/peer.ts:860](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L860) Options for joining a room by calling [Peer.join](../classes/Peer.md#join). ## Properties ### metadata? > `optional` **metadata?**: `any` Defined in: [src/peer.ts:869](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L869) Optional metadata to advertise to the remote peer. *** ### room? > `optional` **room?**: `string` Defined in: [src/peer.ts:865](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L865) Room name to join. If omitted, the peer will join a room with the `default` name. *** ### verify? > `optional` **verify?**: (`options`) => `boolean` \| `Promise`\<`boolean`\> Defined in: [src/peer.ts:878](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L878) Optional callback to accept or reject incoming peer connections. #### Parameters ##### options Options describing the incoming peer connection. ###### id `string` Remote peer identifier. ###### metadata? `any` Remote peer metadata. #### Returns `boolean` \| `Promise`\<`boolean`\> A boolean or promise indicating whether the incoming connection should be accepted. [**peerix v0.1.0**](../README.md) *** # Interface: PeerOptions Defined in: [src/peer.ts:801](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L801) Configuration options for creating a [Peer](../classes/Peer.md) instance. ## Properties ### connectionTimeout? > `optional` **connectionTimeout?**: `number` Defined in: [src/peer.ts:837](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L837) Connection timeout in seconds. By default, it is set to 15 seconds. Use 0 to disable the timeout. *** ### driver? > `optional` **driver?**: [`Driver`](../classes/Driver.md) Defined in: [src/peer.ts:811](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L811) Signaling driver instance for message exchange between peers. If omitted, a default in-memory driver is used, which is suitable for testing purposes only. *** ### iceServers? > `optional` **iceServers?**: [`IceServer`](../type-aliases/IceServer.md)[] Defined in: [src/peer.ts:826](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L826) An array of objects, each describing one server which may be used by the ICE agent; these are typically STUN and/or TURN servers. If this isn't specified, the connection attempt will be made with no STUN or TURN server available, which limits the connection to local peers. #### Example ```javascript iceServers: [{ urls: 'stun:stun.l.google.com:19302' }] ``` *** ### iceTransportPolicy? > `optional` **iceTransportPolicy?**: [`IceTransportPolicy`](../type-aliases/IceTransportPolicy.md) Defined in: [src/peer.ts:832](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L832) ICE policy used by created RTCPeerConnection instances. If set to 'relay', only relay candidates will be used, otherwise all candidates will be considered. *** ### id? > `optional` **id?**: `string` Defined in: [src/peer.ts:805](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L805) Unique peer identifier. A random UUID is generated when omitted. *** ### signalingCompression? > `optional` **signalingCompression?**: `boolean` Defined in: [src/peer.ts:842](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L842) Compress signaling messages to reduce bandwidth usage by about 30%. Enabled by default. *** ### signalingEncryptionKey? > `optional` **signalingEncryptionKey?**: `string` Defined in: [src/peer.ts:852](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L852) Encrypt signaling messages with AES-GCM using the provided encryption key. Disabled by default. *** ### signalingHashing? > `optional` **signalingHashing?**: `boolean` Defined in: [src/peer.ts:847](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L847) Hash namespaces in signaling messages for privacy. Disabled by default. [**peerix v0.1.0**](../README.md) *** # Interface: PeerStreamEvent Defined in: [src/peer.ts:926](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L926) Emitted when a remote peer publishes or unpublishes a media stream. ## Properties ### id > **id**: `string` Defined in: [src/peer.ts:928](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L928) Local peer identifier. *** ### label > **label**: `string` Defined in: [src/peer.ts:936](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L936) Label of the media stream. *** ### name > **name**: `"stream:add"` \| `"stream:remove"` Defined in: [src/peer.ts:930](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L930) Name of the event. *** ### remote > **remote**: [`RemotePeer`](../classes/RemotePeer.md) Defined in: [src/peer.ts:932](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L932) Remote peer object containing connection details. *** ### stream > **stream**: `MediaStream` Defined in: [src/peer.ts:934](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L934) Media stream associated with the event. [**peerix v0.1.0**](../README.md) *** # Interface: PeerTrackEvent Defined in: [src/peer.ts:944](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L944) Emitted when a remote peer adds or removes a media track to a published stream. ## Properties ### id > **id**: `string` Defined in: [src/peer.ts:946](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L946) Local peer identifier. *** ### label > **label**: `string` Defined in: [src/peer.ts:956](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L956) Label of the media stream. *** ### name > **name**: `"track:add"` \| `"track:remove"` Defined in: [src/peer.ts:948](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L948) Name of the event. *** ### remote > **remote**: [`RemotePeer`](../classes/RemotePeer.md) Defined in: [src/peer.ts:950](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L950) Remote peer object containing connection details. *** ### stream > **stream**: `MediaStream` Defined in: [src/peer.ts:952](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L952) Media stream associated with the event. *** ### track > **track**: `MediaStreamTrack` Defined in: [src/peer.ts:954](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L954) Media track associated with the event. [**peerix v0.1.0**](../README.md) *** # Interface: RemotePeerChannelEvent Defined in: [src/remote.ts:952](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L952) Channel event data. ## Properties ### channel > **channel**: `RTCDataChannel` Defined in: [src/remote.ts:958](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L958) Data channel associated with the event. *** ### data? > `optional` **data?**: `any` Defined in: [src/remote.ts:962](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L962) Data associated with the message event. *** ### error? > `optional` **error?**: `Error` Defined in: [src/remote.ts:964](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L964) Error associated with the error event. *** ### id > **id**: `string` Defined in: [src/remote.ts:954](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L954) Unique identifier for the remote peer. *** ### label > **label**: `string` Defined in: [src/remote.ts:960](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L960) Label of the data channel. *** ### name > **name**: `"channel:new"` \| `"channel:open"` \| `"channel:close"` \| `"channel:message"` \| `"channel:error"` Defined in: [src/remote.ts:956](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L956) Name of the event. [**peerix v0.1.0**](../README.md) *** # Interface: RemotePeerConnectionEvent Defined in: [src/remote.ts:938](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L938) Event emitted on peer connection state changes. ## Properties ### id > **id**: `string` Defined in: [src/remote.ts:940](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L940) Unique identifier for the remote peer. *** ### name > **name**: `"connection:new"` \| `"connection:connecting"` \| `"connection:connected"` \| `"connection:disconnected"` \| `"connection:failed"` \| `"connection:closed"` Defined in: [src/remote.ts:942](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L942) Name of the event. *** ### state > **state**: [`PeerConnectionState`](../type-aliases/PeerConnectionState.md) Defined in: [src/remote.ts:944](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L944) New connection state. [**peerix v0.1.0**](../README.md) *** # Interface: RemotePeerErrorEvent Defined in: [src/remote.ts:1006](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1006) Error event data. ## Properties ### error > **error**: [`PeerixError`](../classes/PeerixError.md) Defined in: [src/remote.ts:1012](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1012) Error associated with the event. *** ### id > **id**: `string` Defined in: [src/remote.ts:1008](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1008) Unique identifier for the remote peer. *** ### name > **name**: `"error"` Defined in: [src/remote.ts:1010](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1010) Name of the event. [**peerix v0.1.0**](../README.md) *** # Interface: RemotePeerEvents Defined in: [src/remote.ts:1020](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1020) Events emitted by [RemotePeer](../classes/RemotePeer.md) instances. ## Properties ### channel > **channel**: \[[`RemotePeerChannelEvent`](RemotePeerChannelEvent.md)\] Defined in: [src/remote.ts:1042](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1042) General data channel event. *** ### channel:close > **channel:close**: \[[`RemotePeerChannelEvent`](RemotePeerChannelEvent.md)\] Defined in: [src/remote.ts:1048](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1048) Data channel closed. *** ### channel:error > **channel:error**: \[[`RemotePeerChannelEvent`](RemotePeerChannelEvent.md)\] Defined in: [src/remote.ts:1052](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1052) Data channel error. *** ### channel:message > **channel:message**: \[[`RemotePeerChannelEvent`](RemotePeerChannelEvent.md)\] Defined in: [src/remote.ts:1050](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1050) Data channel message received. *** ### channel:new > **channel:new**: \[[`RemotePeerChannelEvent`](RemotePeerChannelEvent.md)\] Defined in: [src/remote.ts:1044](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1044) New data channel created. *** ### channel:open > **channel:open**: \[[`RemotePeerChannelEvent`](RemotePeerChannelEvent.md)\] Defined in: [src/remote.ts:1046](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1046) Data channel opened. *** ### connection > **connection**: \[[`RemotePeerConnectionEvent`](RemotePeerConnectionEvent.md)\] Defined in: [src/remote.ts:1028](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1028) General connection event. *** ### connection:closed > **connection:closed**: \[[`RemotePeerConnectionEvent`](RemotePeerConnectionEvent.md)\] Defined in: [src/remote.ts:1040](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1040) Connection closed. *** ### connection:connected > **connection:connected**: \[[`RemotePeerConnectionEvent`](RemotePeerConnectionEvent.md)\] Defined in: [src/remote.ts:1034](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1034) Connection is fully connected. *** ### connection:connecting > **connection:connecting**: \[[`RemotePeerConnectionEvent`](RemotePeerConnectionEvent.md)\] Defined in: [src/remote.ts:1032](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1032) Connection is connecting. *** ### connection:disconnected > **connection:disconnected**: \[[`RemotePeerConnectionEvent`](RemotePeerConnectionEvent.md)\] Defined in: [src/remote.ts:1036](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1036) Connection disconnected. *** ### connection:failed > **connection:failed**: \[[`RemotePeerConnectionEvent`](RemotePeerConnectionEvent.md)\] Defined in: [src/remote.ts:1038](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1038) Connection failed to establish. *** ### connection:new > **connection:new**: \[[`RemotePeerConnectionEvent`](RemotePeerConnectionEvent.md)\] Defined in: [src/remote.ts:1030](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1030) New connection established. *** ### error > **error**: \[[`RemotePeerErrorEvent`](RemotePeerErrorEvent.md)\] Defined in: [src/remote.ts:1066](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1066) Error event. *** ### stream > **stream**: \[[`RemotePeerStreamEvent`](RemotePeerStreamEvent.md)\] Defined in: [src/remote.ts:1054](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1054) General media stream event. *** ### stream:add > **stream:add**: \[[`RemotePeerStreamEvent`](RemotePeerStreamEvent.md)\] Defined in: [src/remote.ts:1056](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1056) Media stream added. *** ### stream:remove > **stream:remove**: \[[`RemotePeerStreamEvent`](RemotePeerStreamEvent.md)\] Defined in: [src/remote.ts:1058](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1058) Media stream removed. *** ### track > **track**: \[[`RemotePeerTrackEvent`](RemotePeerTrackEvent.md)\] Defined in: [src/remote.ts:1060](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1060) General media track event. *** ### track:add > **track:add**: \[[`RemotePeerTrackEvent`](RemotePeerTrackEvent.md)\] Defined in: [src/remote.ts:1062](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1062) Media track added. *** ### track:remove > **track:remove**: \[[`RemotePeerTrackEvent`](RemotePeerTrackEvent.md)\] Defined in: [src/remote.ts:1064](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L1064) Media track removed. [**peerix v0.1.0**](../README.md) *** # Interface: RemotePeerStreamEvent Defined in: [src/remote.ts:972](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L972) Stream event data. ## Properties ### id > **id**: `string` Defined in: [src/remote.ts:974](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L974) Unique identifier for the remote peer. *** ### label > **label**: `string` Defined in: [src/remote.ts:980](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L980) Label of the media stream. *** ### name > **name**: `"stream:add"` \| `"stream:remove"` Defined in: [src/remote.ts:976](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L976) Name of the event. *** ### stream > **stream**: `MediaStream` Defined in: [src/remote.ts:978](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L978) Media stream associated with the event. [**peerix v0.1.0**](../README.md) *** # Interface: RemotePeerTrackEvent Defined in: [src/remote.ts:988](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L988) Track event data. ## Properties ### id > **id**: `string` Defined in: [src/remote.ts:990](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L990) Unique identifier for the remote peer. *** ### label > **label**: `string` Defined in: [src/remote.ts:998](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L998) Label of the media stream. *** ### name > **name**: `"track:add"` \| `"track:remove"` Defined in: [src/remote.ts:992](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L992) Name of the event. *** ### stream > **stream**: `MediaStream` Defined in: [src/remote.ts:996](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L996) Media stream associated with the event. *** ### track > **track**: `MediaStreamTrack` Defined in: [src/remote.ts:994](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/remote.ts#L994) Media track associated with the event. [**peerix v0.1.0**](../README.md) *** # Interface: StreamOptions Defined in: [src/peer.ts:728](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L728) Local stream publication options. ## Properties ### audioParameters? > `optional` **audioParameters?**: `object` Defined in: [src/peer.ts:746](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L746) Preferred audio encoding parameters to apply to the stream's audio tracks, such as bitrate or priority. #### maxBitrate? > `optional` **maxBitrate?**: `number` Preferred maximum bitrate in bits per second to encode the audio tracks. #### priority? > `optional` **priority?**: `RTCPriorityType` Preferred priority for encoding the audio tracks. *** ### label? > `optional` **label?**: `string` Defined in: [src/peer.ts:733](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L733) Stream label. If omitted, the `default` label will be used. *** ### managed? > `optional` **managed?**: `boolean` Defined in: [src/peer.ts:742](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L742) Whether the peer should manage the lifecycle of the stream's tracks. If true, tracks will be stopped when the stream is unpublished or replaced. *** ### stream > **stream**: `MediaStream` Defined in: [src/peer.ts:737](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L737) Media stream to publish. *** ### videoParameters? > `optional` **videoParameters?**: `object` Defined in: [src/peer.ts:755](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L755) Preferred video encoding parameters to apply to the stream's video tracks, such as bitrate, frame rate, or priority. #### maxBitrate? > `optional` **maxBitrate?**: `number` Preferred maximum bitrate in bits per second to encode the video tracks. #### maxFramerate? > `optional` **maxFramerate?**: `number` Preferred maximum frame rate to encode the video tracks. #### priority? > `optional` **priority?**: `RTCPriorityType` Preferred priority for encoding the video tracks. #### scaleResolutionDownBy? > `optional` **scaleResolutionDownBy?**: `number` Preferred scale factor to downscale the video resolution. [**peerix v0.1.0**](../README.md) *** # Type Alias: ErrorCode > **ErrorCode** = `"UNKNOWN_ERROR"` \| `"PEER_SIGNALING_ERROR"` \| `"PEER_NEGOTIATION_ERROR"` \| `"PEER_ICECANDIDATE_ERROR"` \| `"PEER_MEDIASTREAM_ERROR"` \| `"PEER_DATACHANNEL_ERROR"` Defined in: [src/error.ts:6](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/error.ts#L6) Error codes for categorizing Peerix-related errors. [**peerix v0.1.0**](../README.md) *** # Type Alias: IceServer > **IceServer** = `object` Defined in: [src/peer.ts:700](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L700) ICE server configuration for peer connections. ## Properties ### credential? > `optional` **credential?**: `string` Defined in: [src/peer.ts:706](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L706) Optional credential for authentication *** ### urls > **urls**: `string` \| `string`[] Defined in: [src/peer.ts:702](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L702) ICE server URL(s) *** ### username? > `optional` **username?**: `string` Defined in: [src/peer.ts:704](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L704) Optional username for authentication [**peerix v0.1.0**](../README.md) *** # Type Alias: IceTransportPolicy > **IceTransportPolicy** = `"all"` \| `"relay"` Defined in: [src/peer.ts:714](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L714) ICE transport policy for peer connections. [**peerix v0.1.0**](../README.md) *** # Type Alias: PeerConnectionState > **PeerConnectionState** = `"new"` \| `"connecting"` \| `"connected"` \| `"disconnected"` \| `"failed"` \| `"closed"` Defined in: [src/peer.ts:721](https://github.com/peerix-dev/peerix/blob/a41c77e735d39675293a50525745ee29353414b6/src/peer.ts#L721) Peer connection state.