@gooey-tech/webrtc-client 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,125 @@
1
+ # @gooey-tech/webrtc-client
2
+
3
+ TypeScript WebRTC client with observable connection state, built on [simple-peer](https://github.com/feross/simple-peer) and [socket.io-client](https://socket.io/docs/v4/client-api/).
4
+
5
+ Designed to pair with [gooey-tech/signaling-server](https://github.com/gooey-tech/signaling-server).
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ npm install @gooey-tech/webrtc-client
11
+ ```
12
+
13
+ ## Quick Start
14
+
15
+ ```typescript
16
+ import { WebRTCClient, ConnectionState } from '@gooey-tech/webrtc-client';
17
+
18
+ const client = new WebRTCClient({
19
+ signalingUrl: 'https://your-signaling-server.com',
20
+ });
21
+
22
+ client.on('connectionStateChange', (state) => {
23
+ console.log('Connection state:', state);
24
+ });
25
+
26
+ client.on('data', (data) => {
27
+ console.log('Received:', data);
28
+ });
29
+
30
+ // Connect to signaling server
31
+ client.connect();
32
+
33
+ // Initiate a peer connection (you need the target's socket ID)
34
+ client.connectToPeer('target-socket-id');
35
+
36
+ // Send data once connected
37
+ client.on('peerStateChange', (state) => {
38
+ if (state === 'connected') {
39
+ client.send('hello from the other side');
40
+ }
41
+ });
42
+ ```
43
+
44
+ ## Connection States
45
+
46
+ The client exposes two independent state axes and one derived composite:
47
+
48
+ ### `ConnectionState` (derived enum)
49
+
50
+ | Value | Meaning |
51
+ |---|---|
52
+ | `IDLE` | Not connected to anything |
53
+ | `SIGNALING_CONNECTING` | Socket connecting to signaling server |
54
+ | `SIGNALING_CONNECTED` | Socket connected, no peer yet |
55
+ | `PEER_CONNECTING` | WebRTC signaling in progress |
56
+ | `PEER_CONNECTED` | Peer data channel open |
57
+ | `DISCONNECTED` | Was connected, closed cleanly |
58
+ | `FAILED` | Signaling or peer error |
59
+
60
+ ### `signalingState`
61
+
62
+ `disconnected` | `connecting` | `connected` | `error`
63
+
64
+ ### `peerState`
65
+
66
+ `idle` | `connecting` | `connected` | `destroyed` | `error`
67
+
68
+ ## API
69
+
70
+ ### `new WebRTCClient(config)`
71
+
72
+ ```typescript
73
+ interface WebRTCClientConfig {
74
+ signalingUrl: string;
75
+ peerOptions?: SimplePeer.Options; // ICE servers, streams, etc.
76
+ autoAccept?: boolean; // default: true
77
+ }
78
+ ```
79
+
80
+ When `autoAccept` is `true` (default), incoming peer signals automatically create an answerer. Set to `false` to handle incoming connections manually via the `incomingPeer` event and `acceptPeer()`.
81
+
82
+ ### Methods
83
+
84
+ | Method | Description |
85
+ |---|---|
86
+ | `connect()` | Connect to the signaling server |
87
+ | `connectToPeer(socketId)` | Initiate a peer connection to a target socket ID |
88
+ | `acceptPeer(peerId)` | Manually accept an incoming peer (when `autoAccept: false`) |
89
+ | `send(data)` | Send string or binary data over the data channel |
90
+ | `addStream(stream)` | Add a `MediaStream` to the peer connection |
91
+ | `removeStream(stream)` | Remove a `MediaStream` from the peer connection |
92
+ | `disconnectPeer()` | Destroy the peer but stay connected to signaling |
93
+ | `disconnect()` | Full teardown (peer + signaling) |
94
+ | `destroy()` | `disconnect()` + remove all event listeners |
95
+
96
+ ### Events
97
+
98
+ | Event | Payload | Description |
99
+ |---|---|---|
100
+ | `stateChange` | `WebRTCState` | Fired on any state mutation |
101
+ | `connectionStateChange` | `ConnectionState` | Derived composite state changed |
102
+ | `signalingStateChange` | `SignalingState` | Signaling axis changed |
103
+ | `peerStateChange` | `PeerState` | Peer axis changed |
104
+ | `data` | `Uint8Array \| string` | Data received from peer |
105
+ | `stream` | `MediaStream` | Remote media stream received |
106
+ | `incomingPeer` | `string` (peerId) | Incoming peer when `autoAccept: false` |
107
+ | `error` | `Error` | Signaling or peer error |
108
+ | `close` | — | Peer connection closed |
109
+
110
+ ### Properties
111
+
112
+ | Property | Type | Description |
113
+ |---|---|---|
114
+ | `state` | `Readonly<WebRTCState>` | Frozen snapshot of full state |
115
+ | `socketId` | `string \| null` | Local socket ID |
116
+ | `connectionState` | `ConnectionState` | Current derived state |
117
+ | `isConnected` | `boolean` | `true` when peer is connected |
118
+
119
+ ## Signaling Server
120
+
121
+ This client is built for [gooey-tech/signaling-server](https://github.com/gooey-tech/signaling-server) — a minimal Socket.io relay that forwards `signal` events between peers by socket ID. No rooms, no lobby, just direct relay.
122
+
123
+ ## License
124
+
125
+ MIT
@@ -0,0 +1,74 @@
1
+ import SimplePeer from 'simple-peer';
2
+ export type SignalingState = 'disconnected' | 'connecting' | 'connected' | 'error';
3
+ export type PeerState = 'idle' | 'connecting' | 'connected' | 'destroyed' | 'error';
4
+ export declare enum ConnectionState {
5
+ IDLE = "idle",
6
+ SIGNALING_CONNECTING = "signaling:connecting",
7
+ SIGNALING_CONNECTED = "signaling:connected",
8
+ PEER_CONNECTING = "peer:connecting",
9
+ PEER_CONNECTED = "peer:connected",
10
+ DISCONNECTED = "disconnected",
11
+ FAILED = "failed"
12
+ }
13
+ export interface WebRTCState {
14
+ connectionState: ConnectionState;
15
+ signalingState: SignalingState;
16
+ peerState: PeerState;
17
+ socketId: string | null;
18
+ peerId: string | null;
19
+ error: Error | null;
20
+ }
21
+ export interface WebRTCClientConfig {
22
+ signalingUrl: string;
23
+ peerOptions?: SimplePeer.Options;
24
+ /** When true (default), automatically create an answerer peer on incoming signal. */
25
+ autoAccept?: boolean;
26
+ }
27
+ export interface WebRTCClientEvents {
28
+ stateChange: (state: Readonly<WebRTCState>) => void;
29
+ connectionStateChange: (state: ConnectionState) => void;
30
+ signalingStateChange: (state: SignalingState) => void;
31
+ peerStateChange: (state: PeerState) => void;
32
+ data: (data: Uint8Array | string) => void;
33
+ stream: (stream: MediaStream) => void;
34
+ incomingPeer: (peerId: string) => void;
35
+ error: (error: Error) => void;
36
+ close: () => void;
37
+ }
38
+ type EventKey = keyof WebRTCClientEvents;
39
+ declare interface TypedEmitter {
40
+ on<K extends EventKey>(event: K, listener: WebRTCClientEvents[K]): this;
41
+ once<K extends EventKey>(event: K, listener: WebRTCClientEvents[K]): this;
42
+ off<K extends EventKey>(event: K, listener: WebRTCClientEvents[K]): this;
43
+ emit<K extends EventKey>(event: K, ...args: Parameters<WebRTCClientEvents[K]>): boolean;
44
+ removeAllListeners(event?: EventKey): this;
45
+ }
46
+ declare const WebRTCClient_base: new () => TypedEmitter;
47
+ declare class WebRTCClient extends WebRTCClient_base {
48
+ private readonly config;
49
+ private _state;
50
+ private socket;
51
+ private peer;
52
+ private pendingSignal;
53
+ constructor(config: WebRTCClientConfig);
54
+ get state(): Readonly<WebRTCState>;
55
+ get socketId(): string | null;
56
+ get connectionState(): ConnectionState;
57
+ get isConnected(): boolean;
58
+ connect(): void;
59
+ connectToPeer(targetSocketId: string): void;
60
+ acceptPeer(peerId: string): void;
61
+ send(data: string | Uint8Array): void;
62
+ addStream(stream: MediaStream): void;
63
+ removeStream(stream: MediaStream): void;
64
+ disconnectPeer(): void;
65
+ disconnect(): void;
66
+ destroy(): void;
67
+ private createPeer;
68
+ private handleIncomingSignal;
69
+ private destroyPeer;
70
+ private deriveConnectionState;
71
+ private setState;
72
+ }
73
+ export { WebRTCClient };
74
+ //# sourceMappingURL=WebRTCClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebRTCClient.d.ts","sourceRoot":"","sources":["../src/WebRTCClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.WebRTCClient = exports.ConnectionState = void 0;
7
+ const events_1 = require("events");
8
+ const socket_io_client_1 = require("socket.io-client");
9
+ const simple_peer_1 = __importDefault(require("simple-peer"));
10
+ var ConnectionState;
11
+ (function (ConnectionState) {
12
+ ConnectionState["IDLE"] = "idle";
13
+ ConnectionState["SIGNALING_CONNECTING"] = "signaling:connecting";
14
+ ConnectionState["SIGNALING_CONNECTED"] = "signaling:connected";
15
+ ConnectionState["PEER_CONNECTING"] = "peer:connecting";
16
+ ConnectionState["PEER_CONNECTED"] = "peer:connected";
17
+ ConnectionState["DISCONNECTED"] = "disconnected";
18
+ ConnectionState["FAILED"] = "failed";
19
+ })(ConnectionState || (exports.ConnectionState = ConnectionState = {}));
20
+ // ---------------------------------------------------------------------------
21
+ // WebRTCClient
22
+ // ---------------------------------------------------------------------------
23
+ class WebRTCClient extends events_1.EventEmitter {
24
+ constructor(config) {
25
+ super();
26
+ this.socket = null;
27
+ this.peer = null;
28
+ this.pendingSignal = null;
29
+ this.config = { autoAccept: true, ...config };
30
+ this._state = {
31
+ connectionState: ConnectionState.IDLE,
32
+ signalingState: 'disconnected',
33
+ peerState: 'idle',
34
+ socketId: null,
35
+ peerId: null,
36
+ error: null,
37
+ };
38
+ }
39
+ // ---- Getters ------------------------------------------------------------
40
+ get state() {
41
+ return Object.freeze({ ...this._state });
42
+ }
43
+ get socketId() {
44
+ return this._state.socketId;
45
+ }
46
+ get connectionState() {
47
+ return this._state.connectionState;
48
+ }
49
+ get isConnected() {
50
+ return this._state.peerState === 'connected';
51
+ }
52
+ // ---- Public methods -----------------------------------------------------
53
+ connect() {
54
+ if (this.socket)
55
+ return;
56
+ this.setState({ signalingState: 'connecting', error: null });
57
+ this.socket = (0, socket_io_client_1.io)(this.config.signalingUrl, {
58
+ transports: ['websocket'],
59
+ });
60
+ this.socket.on('connect', () => {
61
+ this.setState({
62
+ signalingState: 'connected',
63
+ socketId: this.socket.id ?? null,
64
+ });
65
+ });
66
+ this.socket.on('disconnect', () => {
67
+ this.destroyPeer();
68
+ this.setState({ signalingState: 'disconnected', socketId: null });
69
+ });
70
+ this.socket.on('connect_error', (err) => {
71
+ this.setState({ signalingState: 'error', error: err });
72
+ this.emit('error', err);
73
+ });
74
+ this.socket.on('signal', (data) => {
75
+ this.handleIncomingSignal(data);
76
+ });
77
+ }
78
+ connectToPeer(targetSocketId) {
79
+ if (this._state.signalingState !== 'connected') {
80
+ throw new Error(`Cannot connect to peer: signaling is "${this._state.signalingState}"`);
81
+ }
82
+ if (this._state.peerState !== 'idle') {
83
+ throw new Error(`Cannot connect to peer: peer state is "${this._state.peerState}"`);
84
+ }
85
+ this.setState({ peerId: targetSocketId });
86
+ this.createPeer(true);
87
+ }
88
+ acceptPeer(peerId) {
89
+ if (this._state.peerState !== 'idle') {
90
+ throw new Error(`Cannot accept peer: peer state is "${this._state.peerState}"`);
91
+ }
92
+ this.setState({ peerId });
93
+ this.createPeer(false);
94
+ if (this.pendingSignal) {
95
+ this.peer.signal(this.pendingSignal);
96
+ this.pendingSignal = null;
97
+ }
98
+ }
99
+ send(data) {
100
+ if (!this.peer || this._state.peerState !== 'connected') {
101
+ throw new Error('Cannot send: peer is not connected');
102
+ }
103
+ this.peer.send(data);
104
+ }
105
+ addStream(stream) {
106
+ if (!this.peer)
107
+ throw new Error('Cannot add stream: no active peer');
108
+ this.peer.addStream(stream);
109
+ }
110
+ removeStream(stream) {
111
+ if (!this.peer)
112
+ throw new Error('Cannot remove stream: no active peer');
113
+ this.peer.removeStream(stream);
114
+ }
115
+ disconnectPeer() {
116
+ this.destroyPeer();
117
+ this.setState({ peerState: 'idle', peerId: null, error: null });
118
+ }
119
+ disconnect() {
120
+ this.destroyPeer();
121
+ if (this.socket) {
122
+ this.socket.removeAllListeners();
123
+ this.socket.disconnect();
124
+ this.socket = null;
125
+ }
126
+ this.setState({
127
+ signalingState: 'disconnected',
128
+ peerState: 'idle',
129
+ socketId: null,
130
+ peerId: null,
131
+ error: null,
132
+ });
133
+ }
134
+ destroy() {
135
+ this.disconnect();
136
+ this.removeAllListeners();
137
+ }
138
+ // ---- Private methods ----------------------------------------------------
139
+ createPeer(initiator) {
140
+ const { peerOptions } = this.config;
141
+ this.peer = new simple_peer_1.default({
142
+ initiator,
143
+ trickle: true,
144
+ ...peerOptions,
145
+ });
146
+ this.setState({ peerState: 'connecting' });
147
+ this.peer.on('signal', (signal) => {
148
+ this.socket?.emit('signal', {
149
+ to: this._state.peerId,
150
+ signal,
151
+ });
152
+ });
153
+ this.peer.on('connect', () => {
154
+ this.setState({ peerState: 'connected' });
155
+ });
156
+ this.peer.on('data', (data) => {
157
+ this.emit('data', data);
158
+ });
159
+ this.peer.on('stream', (stream) => {
160
+ this.emit('stream', stream);
161
+ });
162
+ this.peer.on('close', () => {
163
+ this.destroyPeer();
164
+ this.setState({ peerState: 'idle', peerId: null });
165
+ this.emit('close');
166
+ });
167
+ this.peer.on('error', (err) => {
168
+ this.setState({ peerState: 'error', error: err });
169
+ this.emit('error', err);
170
+ });
171
+ }
172
+ handleIncomingSignal(data) {
173
+ const { from, signal } = data;
174
+ if (this.peer && this._state.peerId === from) {
175
+ this.peer.signal(signal);
176
+ return;
177
+ }
178
+ if (!this.peer) {
179
+ if (this.config.autoAccept) {
180
+ this.setState({ peerId: from });
181
+ this.createPeer(false);
182
+ this.peer.signal(signal);
183
+ }
184
+ else {
185
+ this.pendingSignal = signal;
186
+ this.emit('incomingPeer', from);
187
+ }
188
+ }
189
+ }
190
+ destroyPeer() {
191
+ if (this.peer) {
192
+ this.peer.removeAllListeners();
193
+ this.peer.destroy();
194
+ this.peer = null;
195
+ }
196
+ this.pendingSignal = null;
197
+ }
198
+ deriveConnectionState() {
199
+ const { signalingState, peerState } = this._state;
200
+ if (signalingState === 'error' || peerState === 'error')
201
+ return ConnectionState.FAILED;
202
+ if (peerState === 'connected')
203
+ return ConnectionState.PEER_CONNECTED;
204
+ if (peerState === 'connecting')
205
+ return ConnectionState.PEER_CONNECTING;
206
+ if (peerState === 'destroyed')
207
+ return ConnectionState.DISCONNECTED;
208
+ if (signalingState === 'connected')
209
+ return ConnectionState.SIGNALING_CONNECTED;
210
+ if (signalingState === 'connecting')
211
+ return ConnectionState.SIGNALING_CONNECTING;
212
+ return ConnectionState.IDLE;
213
+ }
214
+ setState(partial) {
215
+ const prevSignaling = this._state.signalingState;
216
+ const prevPeer = this._state.peerState;
217
+ const prevConnection = this._state.connectionState;
218
+ Object.assign(this._state, partial);
219
+ this._state.connectionState = this.deriveConnectionState();
220
+ this.emit('stateChange', this.state);
221
+ if (this._state.connectionState !== prevConnection) {
222
+ this.emit('connectionStateChange', this._state.connectionState);
223
+ }
224
+ if (this._state.signalingState !== prevSignaling) {
225
+ this.emit('signalingStateChange', this._state.signalingState);
226
+ }
227
+ if (this._state.peerState !== prevPeer) {
228
+ this.emit('peerStateChange', this._state.peerState);
229
+ }
230
+ }
231
+ }
232
+ exports.WebRTCClient = WebRTCClient;
233
+ //# sourceMappingURL=WebRTCClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebRTCClient.js","sourceRoot":"","sources":["../src/WebRTCClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { WebRTCClient, ConnectionState, type SignalingState, type PeerState, type WebRTCState, type WebRTCClientConfig, type WebRTCClientEvents, } from './WebRTCClient';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConnectionState = exports.WebRTCClient = void 0;
4
+ var WebRTCClient_1 = require("./WebRTCClient");
5
+ Object.defineProperty(exports, "WebRTCClient", { enumerable: true, get: function () { return WebRTCClient_1.WebRTCClient; } });
6
+ Object.defineProperty(exports, "ConnectionState", { enumerable: true, get: function () { return WebRTCClient_1.ConnectionState; } });
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,+CAQwB;AAPtB,4GAAA,YAAY,OAAA;AACZ,+GAAA,eAAe,OAAA"}
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "@gooey-tech/webrtc-client",
3
+ "version": "1.0.0",
4
+ "description": "WebRTC client for gooey-tech signaling server",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "files": ["dist"],
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "dev": "tsc --watch",
12
+ "type-check": "tsc --noEmit",
13
+ "clean": "rm -rf dist",
14
+ "prebuild": "npm run clean",
15
+ "prepublishOnly": "npm run build",
16
+ "prepack": "npm run build"
17
+ },
18
+ "keywords": ["webrtc", "simple-peer", "socket.io", "signaling"],
19
+ "license": "MIT",
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "https://github.com/gooey-tech/webrtc-client.git"
23
+ },
24
+ "dependencies": {
25
+ "simple-peer": "^9.11.1",
26
+ "socket.io-client": "^4.7.2"
27
+ },
28
+ "devDependencies": {
29
+ "@types/simple-peer": "^9.11.8",
30
+ "typescript": "^5.3.3"
31
+ },
32
+ "engines": {
33
+ "node": ">=18.0.0"
34
+ }
35
+ }