# @suaveplan/network-transport-webrtc - WebRTC transport plugin for mesh networking: RTCPeerConnection data-channel transport with injectable constructors ## Summary WebRTC transport plugin for mesh networking. ## Documentation tree - [data-channel](./src/data-channel/data-channel-manager.md) — _(no submodules)_ - [data-channel-manager](./src/data-channel/data-channel-manager.md) — _(no submodules)_ - [ice](./src/ice/ice-manager.md) — _(no submodules)_ - [ice-manager](./src/ice/ice-manager.md) — _(no submodules)_ - [mesh](./src/mesh/webrtc-mesh.md) — _(no submodules)_ - [webrtc-mesh](./src/mesh/webrtc-mesh.md) — _(no submodules)_ - [ping](./src/ping/ping-manager.md) — _(no submodules)_ - [ping-manager](./src/ping/ping-manager.md) — _(no submodules)_ - [plugin](./src/plugin/plugin.md) — _(no submodules)_ - [plugin](./src/plugin/plugin.md) — _(no submodules)_ - [signaling-client](./src/signaling/signaling-client.md) — Defines the structural contract for any signaling channel used by the WebRTC plugin to exchange offers, answers, and IC… - [websocket-signaling-client](./src/signaling/websocket-signaling-client.md) — Concrete `SignalingClient` implementation backed by a WebSocket. Handles the boring-but-load-bearing pieces of any sign… - [transport](./src/transport/transport.md) — _(no submodules)_ - [transport](./src/transport/transport.md) — _(no submodules)_ - [types](./src/types/types.md) — _(no submodules)_ - [types](./src/types/types.md) — _(no submodules)_ - [error-codes](./src/error-codes.md) — Defines the stable error-code registry for the `@suaveplan/network-transport-webrtc` package. All runtime failures with… - [data-channel-manager](./src/data-channel/data-channel-manager.md) — _(no submodules)_- [ice](./src/ice/ice-manager.md) — _(no submodules)_- [ice-manager](./src/ice/ice-manager.md) — _(no submodules)_- [mesh](./src/mesh/webrtc-mesh.md) — _(no submodules)_- [webrtc-mesh](./src/mesh/webrtc-mesh.md) — _(no submodules)_- [ping](./src/ping/ping-manager.md) — _(no submodules)_- [ping-manager](./src/ping/ping-manager.md) — _(no submodules)_- [plugin](./src/plugin/plugin.md) — _(no submodules)_- [plugin](./src/plugin/plugin.md) — _(no submodules)_- [signaling-client](./src/signaling/signaling-client.md) — Defines the structural contract for any signaling channel used by the WebRTC plugin to exchange offers, answers, and IC… - [websocket-signaling-client](./src/signaling/websocket-signaling-client.md) — Concrete `SignalingClient` implementation backed by a WebSocket. Handles the boring-but-load-bearing pieces of any sign… - [transport](./src/transport/transport.md) — _(no submodules)_- [transport](./src/transport/transport.md) — _(no submodules)_- [types](./src/types/types.md) — _(no submodules)_- [types](./src/types/types.md) — _(no submodules)_- [error-codes](./src/error-codes.md) — Defines the stable error-code registry for the `@suaveplan/network-transport-webrtc` package. All runtime failures with… - [data-channel-manager](./src/data-channel/data-channel-manager.md) — _(no submodules)_- [ice](./src/ice/ice-manager.md) — _(no submodules)_- [ice-manager](./src/ice/ice-manager.md) — _(no submodules)_- [mesh](./src/mesh/webrtc-mesh.md) — _(no submodules)_- [webrtc-mesh](./src/mesh/webrtc-mesh.md) — _(no submodules)_- [ping](./src/ping/ping-manager.md) — _(no submodules)_- [ping-manager](./src/ping/ping-manager.md) — _(no submodules)_- [plugin](./src/plugin/plugin.md) — _(no submodules)_- [plugin](./src/plugin/plugin.md) — _(no submodules)_- [signaling-client](./src/signaling/signaling-client.md) — Defines the structural contract for any signaling channel used by the WebRTC plugin to exchange offers, answers, and IC… - [websocket-signaling-client](./src/signaling/websocket-signaling-client.md) — Concrete `SignalingClient` implementation backed by a WebSocket. Handles the boring-but-load-bearing pieces of any sign… - [transport](./src/transport/transport.md) — _(no submodules)_- [transport](./src/transport/transport.md) — _(no submodules)_- [types](./src/types/types.md) — _(no submodules)_- [types](./src/types/types.md) — _(no submodules)_- [error-codes](./src/error-codes.md) — Defines the stable error-code registry for the `@suaveplan/network-transport-webrtc` package. All runtime failures with… - [data-channel-manager](./src/data-channel/data-channel-manager.md) — _(no submodules)_- [ice](./src/ice/ice-manager.md) — _(no submodules)_- [ice-manager](./src/ice/ice-manager.md) — _(no submodules)_- [mesh](./src/mesh/webrtc-mesh.md) — _(no submodules)_- [webrtc-mesh](./src/mesh/webrtc-mesh.md) — _(no submodules)_- [ping](./src/ping/ping-manager.md) — _(no submodules)_- [ping-manager](./src/ping/ping-manager.md) — _(no submodules)_- [plugin](./src/plugin/plugin.md) — _(no submodules)_- [plugin](./src/plugin/plugin.md) — _(no submodules)_- [signaling-client](./src/signaling/signaling-client.md) — Defines the structural contract for any signaling channel used by the WebRTC plugin to exchange offers, answers, and IC… - [websocket-signaling-client](./src/signaling/websocket-signaling-client.md) — Concrete `SignalingClient` implementation backed by a WebSocket. Handles the boring-but-load-bearing pieces of any sign… - [transport](./src/transport/transport.md) — _(no submodules)_- [transport](./src/transport/transport.md) — _(no submodules)_- [types](./src/types/types.md) — _(no submodules)_- [types](./src/types/types.md) — _(no submodules)_- [error-codes](./src/error-codes.md) — Defines the stable error-code registry for the `@suaveplan/network-transport-webrtc` package. All runtime failures with… - [data-channel-manager](./src/data-channel/data-channel-manager.md) — _(no submodules)_- [ice](./src/ice/ice-manager.md) — _(no submodules)_ - [ice-manager](./src/ice/ice-manager.md) — _(no submodules)_- [mesh](./src/mesh/webrtc-mesh.md) — _(no submodules)_ - [webrtc-mesh](./src/mesh/webrtc-mesh.md) — _(no submodules)_- [ping](./src/ping/ping-manager.md) — _(no submodules)_ - [ping-manager](./src/ping/ping-manager.md) — _(no submodules)_- [plugin](./src/plugin/plugin.md) — _(no submodules)_ - [plugin](./src/plugin/plugin.md) — _(no submodules)_- [signaling-client](./src/signaling/signaling-client.md) — Defines the structural contract for any signaling channel used by the WebRTC plugin to exchange offers, answers, and IC… - [websocket-signaling-client](./src/signaling/websocket-signaling-client.md) — Concrete `SignalingClient` implementation backed by a WebSocket. Handles the boring-but-load-bearing pieces of any sign… - [transport](./src/transport/transport.md) — _(no submodules)_ - [transport](./src/transport/transport.md) — _(no submodules)_- [types](./src/types/types.md) — _(no submodules)_ - [types](./src/types/types.md) — _(no submodules)_- [error-codes](./src/error-codes.md) — Defines the stable error-code registry for the `@suaveplan/network-transport-webrtc` package. All runtime failures with… ## Purpose Provides a WebRTC data-channel transport implementation for the `@suaveplan/network` mesh system. This plugin enables peer-to-peer messaging without requiring a central relay server for data. The transport implements the universal `Transport` interface and is fully mockable for Node.js testing. ## Features - **WebRTCTransport** — full `Transport` interface via `RTCPeerConnection` + `RTCDataChannel` - **Injectable factories** — mockable `PeerConnectionLike` for unit testing - **WebRTCPlugin** — `NetworkPlugin` integration with lifecycle management - **JSON serialization** — uses `@suaveplan/serialize` for envelope encoding - **Peer events** — automatic connected/disconnected notifications ## Usage ### Basic Example ```ts import { WebRTCPlugin } from "@suaveplan/network-transport-webrtc"; const plugin = new WebRTCPlugin(); node.use(plugin); await node.start(); await plugin.transport.connect("peer-1", "signal-address"); ``` ### Advanced Example ```ts import { WebRTCPlugin } from "@suaveplan/network-transport-webrtc"; const plugin = new WebRTCPlugin({ dataChannelLabel: "mesh", }); node.use(plugin); plugin.transport.onMessage((peerId, envelope) => { console.log("From", peerId, envelope); }); ``` ## API Reference See per-module documentation in `src/`: - `src/transport/` — `WebRTCTransport` - `src/plugin/` — `WebRTCPlugin` - `src/types/` — mockable interfaces and configuration types - `src/error-codes.ts` — `NetworkWebRTCError`, `NETWORK_WEBRTC_CODES` ## Implementation Notes The transport is designed for testability. In a browser environment, you provide a factory that creates real `RTCPeerConnection` instances. In Node.js tests, you provide mock implementations of `PeerConnectionLike` and `DataChannelLike`. This decouples the transport logic from the browser WebRTC stack, making the package suitable for universal use despite WebRTC being a browser API.