@lng2004/node-datachannel 0.32.0-20260202 → 0.32.3-20260813

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.
Files changed (56) hide show
  1. package/CMakeLists.txt +4 -2
  2. package/README.md +12 -0
  3. package/binding-options.js +7 -0
  4. package/cmake/toolchain/ci.cmake +23 -0
  5. package/dist/cjs/lib/index.cjs +4 -2
  6. package/dist/cjs/lib/index.cjs.map +1 -1
  7. package/dist/cjs/lib/node-datachannel.cjs +4 -1
  8. package/dist/cjs/lib/node-datachannel.cjs.map +1 -1
  9. package/dist/esm/lib/index.mjs +4 -2
  10. package/dist/esm/lib/index.mjs.map +1 -1
  11. package/dist/esm/lib/node-datachannel.mjs +4 -1
  12. package/dist/esm/lib/node-datachannel.mjs.map +1 -1
  13. package/dist/types/lib/index.d.ts +17 -3
  14. package/dist/types/lib/types.d.ts +1 -0
  15. package/package.json +12 -5
  16. package/src/cpp/ice-udp-mux-listener-wrapper.cpp +1 -0
  17. package/src/cpp/main.cpp +4 -0
  18. package/src/cpp/media-mediahandler-helper.cpp +6 -0
  19. package/src/cpp/media-pacinghandler-wrapper.cpp +18 -0
  20. package/src/cpp/media-pacinghandler-wrapper.h +1 -0
  21. package/src/cpp/media-vp8rtppacketizer-wrapper.cpp +110 -0
  22. package/src/cpp/media-vp8rtppacketizer-wrapper.h +30 -0
  23. package/src/cpp/media-vp9rtppacketizer-wrapper.cpp +110 -0
  24. package/src/cpp/media-vp9rtppacketizer-wrapper.h +30 -0
  25. package/.clang-format +0 -17
  26. package/.editorconfig +0 -12
  27. package/.eslintignore +0 -8
  28. package/.eslintrc.json +0 -27
  29. package/.gitmodules +0 -3
  30. package/.prettierignore +0 -7
  31. package/.prettierrc +0 -13
  32. package/API.md +0 -247
  33. package/BULDING.md +0 -33
  34. package/jest.config.ts +0 -14
  35. package/rollup.config.mjs +0 -72
  36. package/src/index.ts +0 -9
  37. package/src/lib/datachannel-stream.ts +0 -100
  38. package/src/lib/index.ts +0 -290
  39. package/src/lib/node-datachannel.ts +0 -3
  40. package/src/lib/types.ts +0 -168
  41. package/src/lib/websocket-server.ts +0 -37
  42. package/src/lib/websocket.ts +0 -26
  43. package/src/polyfill/Events.ts +0 -82
  44. package/src/polyfill/Exception.ts +0 -37
  45. package/src/polyfill/README.md +0 -41
  46. package/src/polyfill/RTCCertificate.ts +0 -21
  47. package/src/polyfill/RTCDataChannel.ts +0 -225
  48. package/src/polyfill/RTCDtlsTransport.ts +0 -46
  49. package/src/polyfill/RTCError.ts +0 -78
  50. package/src/polyfill/RTCIceCandidate.ts +0 -128
  51. package/src/polyfill/RTCIceTransport.ts +0 -90
  52. package/src/polyfill/RTCPeerConnection.ts +0 -527
  53. package/src/polyfill/RTCSctpTransport.ts +0 -51
  54. package/src/polyfill/RTCSessionDescription.ts +0 -41
  55. package/src/polyfill/index.ts +0 -38
  56. package/tsconfig.json +0 -21
@@ -1,100 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import * as stream from 'stream';
3
-
4
- /**
5
- * Turns a node-datachannel DataChannel into a real Node.js stream, complete with buffering,
6
- * backpressure (up to a point - if the buffer fills up, messages are dropped), and
7
- * support for piping data elsewhere.
8
- *
9
- * Read & written data may be either UTF-8 strings or Buffers - this difference exists at
10
- * the protocol level, and is preserved here throughout.
11
- */
12
- export default class DataChannelStream extends stream.Duplex {
13
- private _rawChannel: any;
14
- private _readActive: boolean;
15
-
16
- constructor(rawChannel: any, streamOptions?: Omit<stream.DuplexOptions, 'objectMode'>) {
17
- super({
18
- allowHalfOpen: false, // Default to autoclose on end().
19
- ...streamOptions,
20
- objectMode: true, // Preserve the string/buffer distinction (WebRTC treats them differently)
21
- });
22
-
23
- this._rawChannel = rawChannel;
24
- this._readActive = true;
25
-
26
- rawChannel.onMessage((msg: any) => {
27
- if (!this._readActive) return; // If the buffer is full, drop messages.
28
-
29
- // If the push is rejected, we pause reading until the next call to _read().
30
- this._readActive = this.push(msg);
31
- });
32
-
33
- // When the DataChannel closes, the readable & writable ends close
34
- rawChannel.onClosed(() => {
35
- this.push(null);
36
- this.destroy();
37
- });
38
-
39
- rawChannel.onError((errMsg: string) => {
40
- this.destroy(new Error(`DataChannel error: ${errMsg}`));
41
- });
42
-
43
- // Buffer all writes until the DataChannel opens
44
- if (!rawChannel.isOpen()) {
45
- this.cork();
46
- rawChannel.onOpen(() => this.uncork());
47
- }
48
- }
49
-
50
- _read(): void {
51
- // Stop dropping messages, if the buffer filling up meant we were doing so before.
52
- this._readActive = true;
53
- }
54
-
55
- _write(chunk, _encoding, callback): void {
56
- let sentOk;
57
-
58
- try {
59
- if (Buffer.isBuffer(chunk)) {
60
- sentOk = this._rawChannel.sendMessageBinary(chunk);
61
- } else if (typeof chunk === 'string') {
62
- sentOk = this._rawChannel.sendMessage(chunk);
63
- } else {
64
- const typeName = chunk.constructor.name || typeof chunk;
65
- throw new Error(`Cannot write ${typeName} to DataChannel stream`);
66
- }
67
- } catch (err) {
68
- return callback(err);
69
- }
70
-
71
- if (sentOk) {
72
- callback(null);
73
- } else {
74
- callback(new Error('Failed to write to DataChannel'));
75
- }
76
- }
77
-
78
- _final(callback): void {
79
- if (!this.allowHalfOpen) this.destroy();
80
- callback(null);
81
- }
82
-
83
- _destroy(maybeErr, callback): void {
84
- // When the stream is destroyed, we close the DataChannel.
85
- this._rawChannel.close();
86
- callback(maybeErr);
87
- }
88
-
89
- get label(): string {
90
- return this._rawChannel.getLabel();
91
- }
92
-
93
- get id(): number {
94
- return this._rawChannel.getId();
95
- }
96
-
97
- get protocol(): string {
98
- return this._rawChannel.getProtocol();
99
- }
100
- }
package/src/lib/index.ts DELETED
@@ -1,290 +0,0 @@
1
- import nodeDataChannel from './node-datachannel';
2
- import _DataChannelStream from './datachannel-stream';
3
- import { WebSocketServer } from './websocket-server';
4
- import {
5
- Channel,
6
- DataChannelInitConfig,
7
- DescriptionType,
8
- Direction,
9
- LogLevel,
10
- NalUnitSeparator,
11
- ObuPacketization,
12
- RtcConfig,
13
- RTCIceConnectionState,
14
- RTCIceGatheringState,
15
- RTCPeerConnectionState,
16
- RTCSignalingState,
17
- SctpSettings,
18
- SelectedCandidateInfo,
19
- } from './types';
20
- import { WebSocket } from './websocket';
21
- import type { CertificateFingerprint, IceUdpMuxRequest, LocalDescriptionInit } from './types';
22
-
23
- export function preload(): void {
24
- nodeDataChannel.preload();
25
- }
26
- export function initLogger(level: LogLevel): void {
27
- nodeDataChannel.initLogger(level);
28
- }
29
- export function cleanup(): void {
30
- nodeDataChannel.cleanup();
31
- }
32
- export function setSctpSettings(settings: SctpSettings): void {
33
- nodeDataChannel.setSctpSettings(settings);
34
- }
35
- export function getLibraryVersion(): string {
36
- return nodeDataChannel.getLibraryVersion();
37
- }
38
-
39
- export interface Audio {
40
- addAudioCodec(payloadType: number, codec: string, profile?: string): void;
41
- addOpusCodec(payloadType: number, profile?: string): string;
42
- direction(): Direction;
43
- generateSdp(eol: string, addr: string, port: number): string;
44
- mid(): string;
45
- setDirection(dir: Direction): void;
46
- description(): string;
47
- removeFormat(fmt: string): void;
48
- addSSRC(ssrc: number, name?: string, msid?: string, trackID?: string): void;
49
- removeSSRC(ssrc: number): void;
50
- replaceSSRC(oldSsrc: number, ssrc: number, name?: string, msid?: string, trackID?: string): void;
51
- hasSSRC(ssrc: number): boolean;
52
- getSSRCs(): number[];
53
- getCNameForSsrc(ssrc: number): string;
54
- setBitrate(bitRate: number): void;
55
- getBitrate(): number;
56
- hasPayloadType(payloadType: number): boolean;
57
- addRTXCodec(payloadType: number, originalPayloadType: number, clockRate: number): void;
58
- addRTPMap(): void;
59
- parseSdpLine(line: string): void;
60
- }
61
- export const Audio: {
62
- new (mid: string, dir: Direction): Audio;
63
- } = nodeDataChannel.Audio;
64
-
65
- export interface Video {
66
- addVideoCodec(payloadType: number, codec: string, profile?: string): void;
67
- addH264Codec(payloadType: number, profile?: string): void;
68
- addH265Codec(payloadType: number): void;
69
- addVP8Codec(payloadType: number): void;
70
- addVP9Codec(payloadType: number): void;
71
- addAV1Codec(payloadType: number): void;
72
- direction(): Direction;
73
- generateSdp(eol: string, addr: string, port: number): string;
74
- mid(): string;
75
- setDirection(dir: Direction): void;
76
- description(): string;
77
- removeFormat(fmt: string): void;
78
- addSSRC(ssrc: number, name?: string, msid?: string, trackID?: string): void;
79
- removeSSRC(ssrc: number): void;
80
- replaceSSRC(oldSsrc: number, ssrc: number, name?: string, msid?: string, trackID?: string): void;
81
- hasSSRC(ssrc: number): boolean;
82
- getSSRCs(): number[];
83
- getCNameForSsrc(ssrc: number): string;
84
- setBitrate(bitRate: number): void;
85
- getBitrate(): number;
86
- hasPayloadType(payloadType: number): boolean;
87
- addRTXCodec(payloadType: number, originalPayloadType: number, clockRate: number): void;
88
- addRTPMap(): void;
89
- parseSdpLine(line: string): void;
90
- }
91
- export const Video: {
92
- new (mid: string, dir: Direction): Video;
93
- } = nodeDataChannel.Video;
94
-
95
- export interface Track {
96
- direction(): Direction;
97
- mid(): string;
98
- type(): string;
99
- close(): void;
100
- sendMessage(msg: string): boolean;
101
- sendMessageBinary(buffer: Buffer): boolean;
102
- isOpen(): boolean;
103
- isClosed(): boolean;
104
- bufferedAmount(): number;
105
- maxMessageSize(): number;
106
- requestBitrate(bitRate: number): boolean;
107
- setBufferedAmountLowThreshold(newSize: number): void;
108
- requestKeyframe(): boolean;
109
- setMediaHandler(handler: MediaHandler): void;
110
- onOpen(cb: () => void): void;
111
- onClosed(cb: () => void): void;
112
- onError(cb: (err: string) => void): void;
113
- onMessage(cb: (msg: Buffer) => void): void;
114
- }
115
- export const Track: {
116
- new (): Track;
117
- } = nodeDataChannel.Track;
118
-
119
- export interface DataChannel extends Channel {
120
- getLabel(): string;
121
- getId(): number;
122
- getProtocol(): string;
123
-
124
- // Channel implementation
125
- close(): void;
126
- sendMessage(msg: string): boolean;
127
- sendMessageBinary(buffer: Buffer | Uint8Array): boolean;
128
- isOpen(): boolean;
129
- bufferedAmount(): number;
130
- maxMessageSize(): number;
131
- setBufferedAmountLowThreshold(newSize: number): void;
132
- onOpen(cb: () => void): void;
133
- onClosed(cb: () => void): void;
134
- onError(cb: (err: string) => void): void;
135
- onBufferedAmountLow(cb: () => void): void;
136
- onMessage(cb: (msg: string | Buffer | ArrayBuffer) => void): void;
137
- }
138
- export const DataChannel: {
139
- // DataChannel implementation
140
- } = nodeDataChannel.DataChannel;
141
-
142
- export interface PeerConnection {
143
- close(): void;
144
- setLocalDescription(type?: DescriptionType, init?: LocalDescriptionInit): void;
145
- setRemoteDescription(sdp: string, type: DescriptionType): void;
146
- localDescription(): { type: DescriptionType; sdp: string } | null;
147
- remoteDescription(): { type: DescriptionType; sdp: string } | null;
148
- remoteFingerprint(): CertificateFingerprint;
149
- addRemoteCandidate(candidate: string, mid: string): void;
150
- createDataChannel(label: string, config?: DataChannelInitConfig): DataChannel;
151
- addTrack(media: Video | Audio): Track;
152
- hasMedia(): boolean;
153
- state(): RTCPeerConnectionState;
154
- iceState(): RTCIceConnectionState;
155
- signalingState(): RTCSignalingState;
156
- gatheringState(): RTCIceGatheringState;
157
- onLocalDescription(cb: (sdp: string, type: DescriptionType) => void): void;
158
- onLocalCandidate(cb: (candidate: string, mid: string) => void): void;
159
- onStateChange(cb: (state: string) => void): void;
160
- onIceStateChange(cb: (state: string) => void): void;
161
- onSignalingStateChange(cb: (state: string) => void): void;
162
- onGatheringStateChange(cb: (state: string) => void): void;
163
- onDataChannel(cb: (dc: DataChannel) => void): void;
164
- onTrack(cb: (track: Track) => void): void;
165
- bytesSent(): number;
166
- bytesReceived(): number;
167
- rtt(): number;
168
- getSelectedCandidatePair(): {
169
- local: SelectedCandidateInfo;
170
- remote: SelectedCandidateInfo;
171
- } | null;
172
- maxDataChannelId(): number;
173
- maxMessageSize(): number;
174
- }
175
- export const PeerConnection: {
176
- new (peerName: string, config: RtcConfig): PeerConnection;
177
- } = nodeDataChannel.PeerConnection;
178
-
179
- export interface IceUdpMuxListener {
180
- address?: string;
181
- port: number;
182
- stop(): void;
183
- onUnhandledStunRequest(cb: (req: IceUdpMuxRequest) => void): void;
184
- }
185
- export const IceUdpMuxListener: {
186
- new (port: number, address?: string): IceUdpMuxListener;
187
- } = nodeDataChannel.IceUdpMuxListener;
188
-
189
- export interface RtpPacketizationConfig {
190
- playoutDelayId: number,
191
- playoutDelayMin: number,
192
- playoutDelayMax: number,
193
- timestamp: number,
194
- get clockRate(): number
195
- }
196
-
197
- export const RtpPacketizationConfig: {
198
- new(ssrc: number, cname: string, payloadType: number, clockRate: number, videoOrientationId?: number): RtpPacketizationConfig
199
- } = nodeDataChannel.RtpPacketizationConfig
200
-
201
- export interface MediaHandler {
202
- addToChain(handler: MediaHandler): void
203
- }
204
-
205
- export interface PacingHandler extends MediaHandler {}
206
-
207
- export const PacingHandler: {
208
- new (bitsPerSecond: number, sendInterval: number): PacingHandler;
209
- } = nodeDataChannel.PacingHandler;
210
-
211
- export interface RtcpReceivingSession extends MediaHandler {}
212
-
213
- export const RtcpReceivingSession: {
214
- new (): RtcpReceivingSession;
215
- } = nodeDataChannel.RtcpReceivingSession;
216
-
217
- export interface RtcpNackResponder extends MediaHandler {}
218
-
219
- export const RtcpNackResponder: {
220
- new (maxSize?: number): RtcpNackResponder
221
- } = nodeDataChannel.RtcpNackResponder;
222
-
223
- export interface RtcpSrReporter extends MediaHandler {
224
- get rtpConfig(): RtpPacketizationConfig
225
- }
226
-
227
- export const RtcpSrReporter: {
228
- new (rtpConfig: RtpPacketizationConfig): RtcpSrReporter
229
- } = nodeDataChannel.RtcpSrReporter;
230
-
231
- export interface RtpPacketizer extends MediaHandler {
232
- get rtpConfig(): RtpPacketizationConfig
233
- }
234
-
235
- export const RtpPacketizer: {
236
- new (rtpConfig: RtpPacketizationConfig): RtpPacketizer
237
- } = nodeDataChannel.RtpPacketizer;
238
-
239
- export interface H264RtpPacketizer extends RtpPacketizer {}
240
-
241
- export const H264RtpPacketizer: {
242
- new (separator: NalUnitSeparator, rtpConfig: RtpPacketizationConfig, maxFragmentSize?: number): H264RtpPacketizer
243
- } = nodeDataChannel.H264RtpPacketizer
244
-
245
- export interface H265RtpPacketizer extends RtpPacketizer {}
246
-
247
- export const H265RtpPacketizer: {
248
- new (separator: NalUnitSeparator, rtpConfig: RtpPacketizationConfig, maxFragmentSize?: number): H265RtpPacketizer
249
- } = nodeDataChannel.H265RtpPacketizer
250
-
251
- export interface AV1RtpPacketizer extends RtpPacketizer {}
252
-
253
- export const AV1RtpPacketizer: {
254
- new (packetization: ObuPacketization, rtpConfig: RtpPacketizationConfig, maxFragmentSize?: number): AV1RtpPacketizer
255
- } = nodeDataChannel.AV1RtpPacketizer
256
-
257
- export { WebSocketServer } from './websocket-server';
258
- export { WebSocket } from './websocket';
259
-
260
- export const DataChannelStream = _DataChannelStream;
261
-
262
- export default {
263
- initLogger,
264
- cleanup,
265
- preload,
266
- setSctpSettings,
267
- getLibraryVersion,
268
- PacingHandler,
269
- RtcpReceivingSession,
270
- RtcpNackResponder,
271
- RtcpSrReporter,
272
- RtpPacketizationConfig,
273
- RtpPacketizer,
274
- H264RtpPacketizer,
275
- H265RtpPacketizer,
276
- AV1RtpPacketizer,
277
- Track,
278
- Video,
279
- Audio,
280
- DataChannel,
281
- PeerConnection,
282
- WebSocket,
283
- WebSocketServer,
284
- DataChannelStream,
285
- IceUdpMuxListener,
286
- };
287
-
288
- // Types
289
- // https://github.com/murat-dogan/node-datachannel/issues/300
290
- export * from './types';
@@ -1,3 +0,0 @@
1
- // @ts-expect-error no types
2
- import nodeDataChannel = require('../../build/Release/node_datachannel.node');
3
- export default nodeDataChannel;
package/src/lib/types.ts DELETED
@@ -1,168 +0,0 @@
1
- export interface Channel {
2
- close(): void;
3
- sendMessage(msg: string): boolean;
4
- sendMessageBinary(buffer: Uint8Array): boolean;
5
- isOpen(): boolean;
6
- bufferedAmount(): number;
7
- maxMessageSize(): number;
8
- setBufferedAmountLowThreshold(newSize: number): void;
9
- onOpen(cb: () => void): void;
10
- onClosed(cb: () => void): void;
11
- onError(cb: (err: string) => void): void;
12
- onBufferedAmountLow(cb: () => void): void;
13
- onMessage(cb: (msg: string | Buffer | ArrayBuffer) => void): void;
14
- }
15
-
16
- export interface WebSocketServerConfiguration {
17
- port?: number; // default 8080
18
- enableTls?: boolean; // default = false;
19
- certificatePemFile?: string;
20
- keyPemFile?: string;
21
- keyPemPass?: string;
22
- bindAddress?: string;
23
- connectionTimeout?: number; // milliseconds
24
- maxMessageSize?: number;
25
- }
26
-
27
- // Enum in d.ts is tricky
28
- export type LogLevel = 'Verbose' | 'Debug' | 'Info' | 'Warning' | 'Error' | 'Fatal';
29
-
30
- // SCTP Settings
31
- export interface SctpSettings {
32
- recvBufferSize?: number;
33
- sendBufferSize?: number;
34
- maxChunksOnQueue?: number;
35
- initialCongestionWindow?: number;
36
- congestionControlModule?: number;
37
- delayedSackTime?: number;
38
- }
39
-
40
- // Proxy Server
41
- export type ProxyServerType = 'Socks5' | 'Http';
42
- export interface ProxyServer {
43
- type: ProxyServerType;
44
- ip: string;
45
- port: number;
46
- username?: string;
47
- password?: string;
48
- }
49
-
50
- export type RelayType = 'TurnUdp' | 'TurnTcp' | 'TurnTls';
51
-
52
- export interface IceServer {
53
- hostname: string;
54
- port: number;
55
- username?: string;
56
- password?: string;
57
- relayType?: RelayType;
58
- }
59
-
60
- export type TransportPolicy = 'all' | 'relay';
61
-
62
- export interface RtcConfig {
63
- iceServers: (string | IceServer)[];
64
- proxyServer?: ProxyServer;
65
- bindAddress?: string;
66
- enableIceTcp?: boolean;
67
- enableIceUdpMux?: boolean;
68
- disableAutoNegotiation?: boolean;
69
- forceMediaTransport?: boolean;
70
- portRangeBegin?: number;
71
- portRangeEnd?: number;
72
- maxMessageSize?: number;
73
- mtu?: number;
74
- iceTransportPolicy?: TransportPolicy;
75
- disableFingerprintVerification?: boolean;
76
- disableAutoGathering?: boolean;
77
- certificatePemFile?: string;
78
- keyPemFile?: string;
79
- keyPemPass?: string;
80
- }
81
-
82
- // Lowercase to match the description type string from libdatachannel
83
- export type DescriptionType = 'unspec' | 'offer' | 'answer' | 'pranswer' | 'rollback';
84
-
85
- export type RTCSdpType = 'answer' | 'offer' | 'pranswer' | 'rollback';
86
-
87
- export type RTCIceTransportState =
88
- | 'checking'
89
- | 'closed'
90
- | 'completed'
91
- | 'connected'
92
- | 'disconnected'
93
- | 'failed'
94
- | 'new';
95
- export type RTCPeerConnectionState =
96
- | 'closed'
97
- | 'connected'
98
- | 'connecting'
99
- | 'disconnected'
100
- | 'failed'
101
- | 'new';
102
- export type RTCIceConnectionState =
103
- | 'checking'
104
- | 'closed'
105
- | 'completed'
106
- | 'connected'
107
- | 'disconnected'
108
- | 'failed'
109
- | 'new';
110
- export type RTCIceGathererState = 'complete' | 'gathering' | 'new';
111
- export type RTCIceGatheringState = 'complete' | 'gathering' | 'new';
112
- export type RTCSignalingState =
113
- | 'closed'
114
- | 'have-local-offer'
115
- | 'have-local-pranswer'
116
- | 'have-remote-offer'
117
- | 'have-remote-pranswer'
118
- | 'stable';
119
-
120
- export interface LocalDescriptionInit {
121
- iceUfrag?: string;
122
- icePwd?: string;
123
- }
124
-
125
- export interface DataChannelInitConfig {
126
- protocol?: string;
127
- negotiated?: boolean;
128
- id?: number;
129
- unordered?: boolean; // Reliability
130
- maxPacketLifeTime?: number; // Reliability
131
- maxRetransmits?: number; // Reliability
132
- }
133
-
134
- export interface CertificateFingerprint {
135
- /**
136
- * @see https://developer.mozilla.org/en-US/docs/Web/API/RTCCertificate/getFingerprints#value
137
- */
138
- value: string;
139
- /**
140
- * @see https://developer.mozilla.org/en-US/docs/Web/API/RTCCertificate/getFingerprints#algorithm
141
- */
142
- algorithm: 'sha-1' | 'sha-224' | 'sha-256' | 'sha-384' | 'sha-512' | 'md5' | 'md2';
143
- }
144
-
145
- export interface SelectedCandidateInfo {
146
- address: string;
147
- port: number;
148
- type: string;
149
- transportType: string;
150
- candidate: string;
151
- mid: string;
152
- priority: number;
153
- }
154
-
155
- // Must be same as rtc enum class Direction
156
- export type Direction = 'SendOnly' | 'RecvOnly' | 'SendRecv' | 'Inactive' | 'Unknown';
157
-
158
- export interface IceUdpMuxRequest {
159
- ufrag: string;
160
- host: string;
161
- port: number;
162
- }
163
-
164
- // Same as rtc::NalUnit::Separator
165
- export type NalUnitSeparator = 'Length' | 'ShortStartSequence' | 'LongStartSequence' | 'StartSequence';
166
-
167
- // Same as rtc::AV1RtpPacketizer::Packetization
168
- export type ObuPacketization = 'Obu' | 'TemporalUnit';
@@ -1,37 +0,0 @@
1
- import { EventEmitter } from 'events';
2
- import nodeDataChannel from './node-datachannel';
3
- import { WebSocketServerConfiguration } from './types';
4
- import { WebSocket } from './websocket';
5
-
6
- export class WebSocketServer extends EventEmitter {
7
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
- #server: any;
9
- #clients: WebSocket[] = [];
10
-
11
- constructor(options: WebSocketServerConfiguration) {
12
- super();
13
- this.#server = new nodeDataChannel.WebSocketServer(options);
14
-
15
- this.#server.onClient((client) => {
16
- this.emit('client', client);
17
- this.#clients.push(client);
18
- });
19
- }
20
-
21
- port(): number {
22
- return this.#server?.port() || 0;
23
- }
24
-
25
- stop(): void {
26
- this.#clients.forEach((client) => {
27
- client?.close();
28
- });
29
- this.#server?.stop();
30
- this.#server = null;
31
- this.removeAllListeners();
32
- }
33
-
34
- onClient(cb: (clientSocket: WebSocket) => void): void {
35
- if (this.#server) this.on('client', cb);
36
- }
37
- }
@@ -1,26 +0,0 @@
1
- import nodeDataChannel from './node-datachannel';
2
- import { Channel, WebSocketServerConfiguration } from './types';
3
-
4
- export interface WebSocket extends Channel {
5
- open(url: string): void;
6
- forceClose(): void;
7
- remoteAddress(): string | undefined;
8
- path(): string | undefined;
9
-
10
- // Channel implementation
11
- close(): void;
12
- sendMessage(msg: string): boolean;
13
- sendMessageBinary(buffer: Uint8Array): boolean;
14
- isOpen(): boolean;
15
- bufferedAmount(): number;
16
- maxMessageSize(): number;
17
- setBufferedAmountLowThreshold(newSize: number): void;
18
- onOpen(cb: () => void): void;
19
- onClosed(cb: () => void): void;
20
- onError(cb: (err: string) => void): void;
21
- onBufferedAmountLow(cb: () => void): void;
22
- onMessage(cb: (msg: string | Buffer) => void): void;
23
- }
24
- export const WebSocket: {
25
- new (config?: WebSocketServerConfiguration): WebSocket;
26
- } = nodeDataChannel.WebSocket;
@@ -1,82 +0,0 @@
1
- import RTCDataChannel from './RTCDataChannel';
2
- import RTCError from './RTCError';
3
-
4
- export class RTCPeerConnectionIceEvent
5
- extends Event
6
- implements globalThis.RTCPeerConnectionIceEvent
7
- {
8
- #candidate: globalThis.RTCIceCandidate;
9
-
10
- constructor(candidate: globalThis.RTCIceCandidate) {
11
- super('icecandidate');
12
-
13
- this.#candidate = candidate;
14
- }
15
-
16
- get candidate(): globalThis.RTCIceCandidate {
17
- return this.#candidate;
18
- }
19
-
20
- get url(): string {
21
- return '';
22
- }
23
- }
24
-
25
- export class RTCDataChannelEvent extends Event implements globalThis.RTCDataChannelEvent {
26
- #channel: RTCDataChannel;
27
-
28
- constructor(type: string = 'datachannel', eventInitDict: globalThis.RTCDataChannelEventInit) {
29
- super(type);
30
-
31
- if (arguments.length === 0)
32
- throw new TypeError(
33
- `Failed to construct 'RTCDataChannelEvent': 2 arguments required, but only ${arguments.length} present.`,
34
- );
35
- if (typeof eventInitDict !== 'object')
36
- throw new TypeError(
37
- "Failed to construct 'RTCDataChannelEvent': The provided value is not of type 'RTCDataChannelEventInit'.",
38
- );
39
- if (!eventInitDict.channel)
40
- throw new TypeError(
41
- "Failed to construct 'RTCDataChannelEvent': Failed to read the 'channel' property from 'RTCDataChannelEventInit': Required member is undefined.",
42
- );
43
- if (eventInitDict.channel.constructor !== RTCDataChannel)
44
- throw new TypeError(
45
- "Failed to construct 'RTCDataChannelEvent': Failed to read the 'channel' property from 'RTCDataChannelEventInit': Failed to convert value to 'RTCDataChannel'.",
46
- );
47
-
48
- this.#channel = eventInitDict?.channel;
49
- }
50
-
51
- get channel(): RTCDataChannel {
52
- return this.#channel;
53
- }
54
- }
55
-
56
- export class RTCErrorEvent extends Event implements globalThis.RTCErrorEvent {
57
- #error: RTCError;
58
- constructor(type: string, init: globalThis.RTCErrorEventInit) {
59
- if (arguments.length < 2)
60
- throw new TypeError(
61
- `Failed to construct 'RTCErrorEvent': 2 arguments required, but only ${arguments.length} present.`,
62
- );
63
- if (typeof init !== 'object')
64
- throw new TypeError(
65
- "Failed to construct 'RTCErrorEvent': The provided value is not of type 'RTCErrorEventInit'.",
66
- );
67
- if (!init.error)
68
- throw new TypeError(
69
- "Failed to construct 'RTCErrorEvent': Failed to read the 'error' property from 'RTCErrorEventInit': Required member is undefined.",
70
- );
71
- if (init.error.constructor !== RTCError)
72
- throw new TypeError(
73
- "Failed to construct 'RTCErrorEvent': Failed to read the 'error' property from 'RTCErrorEventInit': Failed to convert value to 'RTCError'.",
74
- );
75
- super(type || 'error');
76
- this.#error = init.error;
77
- }
78
-
79
- get error(): RTCError {
80
- return this.#error;
81
- }
82
- }