first commit

This commit is contained in:
2026-05-29 08:20:56 +01:00
commit 949299f58d
6368 changed files with 527176 additions and 0 deletions

View File

@@ -0,0 +1,91 @@
# @suaveplan/network-transport-webrtc - WebRTC transport plugin for mesh networking: RTCPeerConnection data-channel transport with injectable constructors
## Summary
WebRTC transport plugin for mesh networking.
<!-- begin:auto-docs -->
## Documentation tree
- [data-channel](./src/data-channel/data-channel-manager.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [data-channel-manager](./src/data-channel/data-channel-manager.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [ice](./src/ice/ice-manager.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [ice-manager](./src/ice/ice-manager.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [mesh](./src/mesh/webrtc-mesh.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [webrtc-mesh](./src/mesh/webrtc-mesh.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [ping](./src/ping/ping-manager.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [ping-manager](./src/ping/ping-manager.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [plugin](./src/plugin/plugin.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [plugin](./src/plugin/plugin.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [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) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [transport](./src/transport/transport.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [types](./src/types/types.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [types](./src/types/types.md) — <!-- begin:auto-docs --> _(no submodules)_ <!-- end:auto-docs -->
- [error-codes](./src/error-codes.md) — Defines the stable error-code registry for the `@suaveplan/network-transport-webrtc` package. All runtime failures with…
<!-- end:auto-docs --> - [data-channel-manager](./src/data-channel/data-channel-manager.md) — <!-- begin:auto-docs --> _(no submodules)_- [ice](./src/ice/ice-manager.md) — <!-- begin:auto-docs --> _(no submodules)_- [ice-manager](./src/ice/ice-manager.md) — <!-- begin:auto-docs --> _(no submodules)_- [mesh](./src/mesh/webrtc-mesh.md) — <!-- begin:auto-docs --> _(no submodules)_- [webrtc-mesh](./src/mesh/webrtc-mesh.md) — <!-- begin:auto-docs --> _(no submodules)_- [ping](./src/ping/ping-manager.md) — <!-- begin:auto-docs --> _(no submodules)_- [ping-manager](./src/ping/ping-manager.md) — <!-- begin:auto-docs --> _(no submodules)_- [plugin](./src/plugin/plugin.md) — <!-- begin:auto-docs --> _(no submodules)_- [plugin](./src/plugin/plugin.md) — <!-- begin:auto-docs --> _(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) — <!-- begin:auto-docs --> _(no submodules)_- [transport](./src/transport/transport.md) — <!-- begin:auto-docs --> _(no submodules)_- [types](./src/types/types.md) — <!-- begin:auto-docs --> _(no submodules)_- [types](./src/types/types.md) — <!-- begin:auto-docs --> _(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) — <!-- begin:auto-docs --> _(no submodules)_- [ice](./src/ice/ice-manager.md) — <!-- begin:auto-docs --> _(no submodules)_- [ice-manager](./src/ice/ice-manager.md) — <!-- begin:auto-docs --> _(no submodules)_- [mesh](./src/mesh/webrtc-mesh.md) — <!-- begin:auto-docs --> _(no submodules)_- [webrtc-mesh](./src/mesh/webrtc-mesh.md) — <!-- begin:auto-docs --> _(no submodules)_- [ping](./src/ping/ping-manager.md) — <!-- begin:auto-docs --> _(no submodules)_- [ping-manager](./src/ping/ping-manager.md) — <!-- begin:auto-docs --> _(no submodules)_- [plugin](./src/plugin/plugin.md) — <!-- begin:auto-docs --> _(no submodules)_- [plugin](./src/plugin/plugin.md) — <!-- begin:auto-docs --> _(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) — <!-- begin:auto-docs --> _(no submodules)_- [transport](./src/transport/transport.md) — <!-- begin:auto-docs --> _(no submodules)_- [types](./src/types/types.md) — <!-- begin:auto-docs --> _(no submodules)_- [types](./src/types/types.md) — <!-- begin:auto-docs --> _(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) — <!-- begin:auto-docs --> _(no submodules)_- [ice](./src/ice/ice-manager.md) — <!-- begin:auto-docs --> _(no submodules)_- [ice-manager](./src/ice/ice-manager.md) — <!-- begin:auto-docs --> _(no submodules)_- [mesh](./src/mesh/webrtc-mesh.md) — <!-- begin:auto-docs --> _(no submodules)_- [webrtc-mesh](./src/mesh/webrtc-mesh.md) — <!-- begin:auto-docs --> _(no submodules)_- [ping](./src/ping/ping-manager.md) — <!-- begin:auto-docs --> _(no submodules)_- [ping-manager](./src/ping/ping-manager.md) — <!-- begin:auto-docs --> _(no submodules)_- [plugin](./src/plugin/plugin.md) — <!-- begin:auto-docs --> _(no submodules)_- [plugin](./src/plugin/plugin.md) — <!-- begin:auto-docs --> _(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) — <!-- begin:auto-docs --> _(no submodules)_- [transport](./src/transport/transport.md) — <!-- begin:auto-docs --> _(no submodules)_- [types](./src/types/types.md) — <!-- begin:auto-docs --> _(no submodules)_- [types](./src/types/types.md) — <!-- begin:auto-docs --> _(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) — <!-- begin:auto-docs --> _(no submodules)_- [ice](./src/ice/ice-manager.md) — <!-- begin:auto-docs --> _(no submodules)_ - [ice-manager](./src/ice/ice-manager.md) — <!-- begin:auto-docs --> _(no submodules)_- [mesh](./src/mesh/webrtc-mesh.md) — <!-- begin:auto-docs --> _(no submodules)_ - [webrtc-mesh](./src/mesh/webrtc-mesh.md) — <!-- begin:auto-docs --> _(no submodules)_- [ping](./src/ping/ping-manager.md) — <!-- begin:auto-docs --> _(no submodules)_ - [ping-manager](./src/ping/ping-manager.md) — <!-- begin:auto-docs --> _(no submodules)_- [plugin](./src/plugin/plugin.md) — <!-- begin:auto-docs --> _(no submodules)_ - [plugin](./src/plugin/plugin.md) — <!-- begin:auto-docs --> _(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) — <!-- begin:auto-docs --> _(no submodules)_ - [transport](./src/transport/transport.md) — <!-- begin:auto-docs --> _(no submodules)_- [types](./src/types/types.md) — <!-- begin:auto-docs --> _(no submodules)_ - [types](./src/types/types.md) — <!-- begin:auto-docs --> _(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.