node-datachannel 0.27.0 → 0.29.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.
Files changed (104) hide show
  1. package/.eslintrc.json +25 -25
  2. package/.prettierignore +7 -0
  3. package/.prettierrc +1 -0
  4. package/API.md +34 -4
  5. package/BULDING.md +12 -2
  6. package/CMakeLists.txt +10 -4
  7. package/README.md +22 -18
  8. package/dist/cjs/index.cjs.map +1 -1
  9. package/dist/cjs/lib/datachannel-stream.cjs +13 -13
  10. package/dist/cjs/lib/datachannel-stream.cjs.map +1 -1
  11. package/dist/cjs/lib/index.cjs +4 -1
  12. package/dist/cjs/lib/index.cjs.map +1 -1
  13. package/dist/cjs/lib/websocket-server.cjs.map +1 -1
  14. package/dist/cjs/lib/websocket.cjs.map +1 -1
  15. package/dist/cjs/polyfill/Events.cjs +52 -3
  16. package/dist/cjs/polyfill/Events.cjs.map +1 -1
  17. package/dist/cjs/polyfill/Exception.cjs.map +1 -1
  18. package/dist/cjs/polyfill/RTCCertificate.cjs +5 -2
  19. package/dist/cjs/polyfill/RTCCertificate.cjs.map +1 -1
  20. package/dist/cjs/polyfill/RTCDataChannel.cjs +43 -22
  21. package/dist/cjs/polyfill/RTCDataChannel.cjs.map +1 -1
  22. package/dist/cjs/polyfill/RTCDtlsTransport.cjs +6 -5
  23. package/dist/cjs/polyfill/RTCDtlsTransport.cjs.map +1 -1
  24. package/dist/cjs/polyfill/RTCError.cjs +9 -2
  25. package/dist/cjs/polyfill/RTCError.cjs.map +1 -1
  26. package/dist/cjs/polyfill/RTCIceCandidate.cjs +13 -8
  27. package/dist/cjs/polyfill/RTCIceCandidate.cjs.map +1 -1
  28. package/dist/cjs/polyfill/RTCIceTransport.cjs +26 -16
  29. package/dist/cjs/polyfill/RTCIceTransport.cjs.map +1 -1
  30. package/dist/cjs/polyfill/RTCPeerConnection.cjs +80 -70
  31. package/dist/cjs/polyfill/RTCPeerConnection.cjs.map +1 -1
  32. package/dist/cjs/polyfill/RTCSctpTransport.cjs +9 -11
  33. package/dist/cjs/polyfill/RTCSctpTransport.cjs.map +1 -1
  34. package/dist/cjs/polyfill/RTCSessionDescription.cjs +10 -2
  35. package/dist/cjs/polyfill/RTCSessionDescription.cjs.map +1 -1
  36. package/dist/cjs/polyfill/index.cjs.map +1 -1
  37. package/dist/esm/index.mjs.map +1 -1
  38. package/dist/esm/lib/datachannel-stream.mjs.map +1 -1
  39. package/dist/esm/lib/index.mjs +4 -2
  40. package/dist/esm/lib/index.mjs.map +1 -1
  41. package/dist/esm/lib/websocket-server.mjs.map +1 -1
  42. package/dist/esm/lib/websocket.mjs.map +1 -1
  43. package/dist/esm/polyfill/Events.mjs +52 -4
  44. package/dist/esm/polyfill/Events.mjs.map +1 -1
  45. package/dist/esm/polyfill/Exception.mjs.map +1 -1
  46. package/dist/esm/polyfill/RTCCertificate.mjs +5 -2
  47. package/dist/esm/polyfill/RTCCertificate.mjs.map +1 -1
  48. package/dist/esm/polyfill/RTCDataChannel.mjs +43 -22
  49. package/dist/esm/polyfill/RTCDataChannel.mjs.map +1 -1
  50. package/dist/esm/polyfill/RTCDtlsTransport.mjs +6 -5
  51. package/dist/esm/polyfill/RTCDtlsTransport.mjs.map +1 -1
  52. package/dist/esm/polyfill/RTCError.mjs +9 -2
  53. package/dist/esm/polyfill/RTCError.mjs.map +1 -1
  54. package/dist/esm/polyfill/RTCIceCandidate.mjs +13 -8
  55. package/dist/esm/polyfill/RTCIceCandidate.mjs.map +1 -1
  56. package/dist/esm/polyfill/RTCIceTransport.mjs +26 -17
  57. package/dist/esm/polyfill/RTCIceTransport.mjs.map +1 -1
  58. package/dist/esm/polyfill/RTCPeerConnection.mjs +80 -70
  59. package/dist/esm/polyfill/RTCPeerConnection.mjs.map +1 -1
  60. package/dist/esm/polyfill/RTCSctpTransport.mjs +9 -11
  61. package/dist/esm/polyfill/RTCSctpTransport.mjs.map +1 -1
  62. package/dist/esm/polyfill/RTCSessionDescription.mjs +10 -2
  63. package/dist/esm/polyfill/RTCSessionDescription.mjs.map +1 -1
  64. package/dist/esm/polyfill/index.mjs.map +1 -1
  65. package/dist/types/lib/index.d.ts +14 -3
  66. package/dist/types/lib/types.d.ts +30 -7
  67. package/dist/types/polyfill/Events.d.ts +4 -1
  68. package/dist/types/polyfill/RTCCertificate.d.ts +1 -0
  69. package/dist/types/polyfill/RTCDataChannel.d.ts +6 -6
  70. package/dist/types/polyfill/RTCDtlsTransport.d.ts +5 -4
  71. package/dist/types/polyfill/RTCError.d.ts +1 -0
  72. package/dist/types/polyfill/RTCIceCandidate.d.ts +1 -1
  73. package/dist/types/polyfill/RTCIceTransport.d.ts +17 -8
  74. package/dist/types/polyfill/RTCPeerConnection.d.ts +22 -11
  75. package/dist/types/polyfill/RTCSctpTransport.d.ts +4 -3
  76. package/dist/types/polyfill/RTCSessionDescription.d.ts +1 -0
  77. package/jest.config.ts +8 -8
  78. package/package.json +6 -3
  79. package/rollup.config.mjs +1 -1
  80. package/src/cpp/data-channel-wrapper.cpp +11 -0
  81. package/src/cpp/ice-udp-mux-listener-wrapper.cpp +150 -0
  82. package/src/cpp/ice-udp-mux-listener-wrapper.h +43 -0
  83. package/src/cpp/main.cpp +2 -0
  84. package/src/cpp/peer-connection-wrapper.cpp +68 -2
  85. package/src/cpp/peer-connection-wrapper.h +1 -0
  86. package/src/index.ts +0 -1
  87. package/src/lib/datachannel-stream.ts +83 -84
  88. package/src/lib/index.ts +175 -139
  89. package/src/lib/types.ts +122 -71
  90. package/src/lib/websocket-server.ts +25 -25
  91. package/src/lib/websocket.ts +19 -19
  92. package/src/polyfill/Events.ts +71 -18
  93. package/src/polyfill/Exception.ts +24 -24
  94. package/src/polyfill/README.md +8 -8
  95. package/src/polyfill/RTCCertificate.ts +16 -12
  96. package/src/polyfill/RTCDataChannel.ts +216 -191
  97. package/src/polyfill/RTCDtlsTransport.ts +39 -39
  98. package/src/polyfill/RTCError.ts +63 -56
  99. package/src/polyfill/RTCIceCandidate.ts +120 -116
  100. package/src/polyfill/RTCIceTransport.ts +72 -64
  101. package/src/polyfill/RTCPeerConnection.ts +436 -420
  102. package/src/polyfill/RTCSctpTransport.ts +44 -47
  103. package/src/polyfill/RTCSessionDescription.ts +26 -17
  104. package/src/polyfill/index.ts +22 -22
package/src/lib/index.ts CHANGED
@@ -1,156 +1,192 @@
1
1
  import nodeDataChannel from './node-datachannel';
2
2
  import _DataChannelStream from './datachannel-stream';
3
3
  import { WebSocketServer } from './websocket-server';
4
- import { Channel, DataChannelInitConfig, DescriptionType, Direction, LogLevel, RtcConfig, RTCIceConnectionState, RTCIceGatheringState, RTCPeerConnectionState, RTCSignalingState, SctpSettings, SelectedCandidateInfo } from './types';
4
+ import {
5
+ Channel,
6
+ DataChannelInitConfig,
7
+ DescriptionType,
8
+ Direction,
9
+ LogLevel,
10
+ RtcConfig,
11
+ RTCIceConnectionState,
12
+ RTCIceGatheringState,
13
+ RTCPeerConnectionState,
14
+ RTCSignalingState,
15
+ SctpSettings,
16
+ SelectedCandidateInfo,
17
+ } from './types';
5
18
  import { WebSocket } from './websocket';
19
+ import type { CertificateFingerprint, IceUdpMuxRequest, LocalDescriptionInit } from './types';
6
20
 
7
- export function preload(): void { nodeDataChannel.preload(); }
8
- export function initLogger(level: LogLevel): void { nodeDataChannel.initLogger(level); }
9
- export function cleanup(): void { nodeDataChannel.cleanup(); }
10
- export function setSctpSettings(settings: SctpSettings): void { nodeDataChannel.setSctpSettings(settings); }
11
- export function getLibraryVersion(): string { return nodeDataChannel.getLibraryVersion(); }
21
+ export function preload(): void {
22
+ nodeDataChannel.preload();
23
+ }
24
+ export function initLogger(level: LogLevel): void {
25
+ nodeDataChannel.initLogger(level);
26
+ }
27
+ export function cleanup(): void {
28
+ nodeDataChannel.cleanup();
29
+ }
30
+ export function setSctpSettings(settings: SctpSettings): void {
31
+ nodeDataChannel.setSctpSettings(settings);
32
+ }
33
+ export function getLibraryVersion(): string {
34
+ return nodeDataChannel.getLibraryVersion();
35
+ }
12
36
 
13
37
  export interface Audio {
14
- addAudioCodec(payloadType: number, codec: string, profile?: string): void;
15
- addOpusCodec(payloadType: number, profile?: string): string;
16
- direction(): Direction;
17
- generateSdp(eol: string, addr: string, port: number): string;
18
- mid(): string;
19
- setDirection(dir: Direction): void;
20
- description(): string;
21
- removeFormat(fmt: string): void;
22
- addSSRC(ssrc: number, name?: string, msid?: string, trackID?: string): void;
23
- removeSSRC(ssrc: number): void;
24
- replaceSSRC(oldSsrc: number, ssrc: number, name?: string, msid?: string, trackID?: string): void;
25
- hasSSRC(ssrc: number): boolean;
26
- getSSRCs(): number[];
27
- getCNameForSsrc(ssrc: number): string;
28
- setBitrate(bitRate: number): void;
29
- getBitrate(): number;
30
- hasPayloadType(payloadType: number): boolean;
31
- addRTXCodec(payloadType: number, originalPayloadType: number, clockRate: number): void;
32
- addRTPMap(): void;
33
- parseSdpLine(line: string): void;
38
+ addAudioCodec(payloadType: number, codec: string, profile?: string): void;
39
+ addOpusCodec(payloadType: number, profile?: string): string;
40
+ direction(): Direction;
41
+ generateSdp(eol: string, addr: string, port: number): string;
42
+ mid(): string;
43
+ setDirection(dir: Direction): void;
44
+ description(): string;
45
+ removeFormat(fmt: string): void;
46
+ addSSRC(ssrc: number, name?: string, msid?: string, trackID?: string): void;
47
+ removeSSRC(ssrc: number): void;
48
+ replaceSSRC(oldSsrc: number, ssrc: number, name?: string, msid?: string, trackID?: string): void;
49
+ hasSSRC(ssrc: number): boolean;
50
+ getSSRCs(): number[];
51
+ getCNameForSsrc(ssrc: number): string;
52
+ setBitrate(bitRate: number): void;
53
+ getBitrate(): number;
54
+ hasPayloadType(payloadType: number): boolean;
55
+ addRTXCodec(payloadType: number, originalPayloadType: number, clockRate: number): void;
56
+ addRTPMap(): void;
57
+ parseSdpLine(line: string): void;
34
58
  }
35
59
  export const Audio: {
36
- new(mid: string, dir: Direction): Audio
37
- } = nodeDataChannel.Audio
38
-
60
+ new (mid: string, dir: Direction): Audio;
61
+ } = nodeDataChannel.Audio;
39
62
 
40
63
  export interface Video {
41
- addVideoCodec(payloadType: number, codec: string, profile?: string): void;
42
- addH264Codec(payloadType: number, profile?: string): void;
43
- addVP8Codec(payloadType: number): void;
44
- addVP9Codec(payloadType: number): void;
45
- direction(): Direction;
46
- generateSdp(eol: string, addr: string, port: number): string;
47
- mid(): string;
48
- setDirection(dir: Direction): void;
49
- description(): string;
50
- removeFormat(fmt: string): void;
51
- addSSRC(ssrc: number, name?: string, msid?: string, trackID?: string): void;
52
- removeSSRC(ssrc: number): void;
53
- replaceSSRC(oldSsrc: number, ssrc: number, name?: string, msid?: string, trackID?: string): void;
54
- hasSSRC(ssrc: number): boolean;
55
- getSSRCs(): number[];
56
- getCNameForSsrc(ssrc: number): string;
57
- setBitrate(bitRate: number): void;
58
- getBitrate(): number;
59
- hasPayloadType(payloadType: number): boolean;
60
- addRTXCodec(payloadType: number, originalPayloadType: number, clockRate: number): void;
61
- addRTPMap(): void;
62
- parseSdpLine(line: string): void;
64
+ addVideoCodec(payloadType: number, codec: string, profile?: string): void;
65
+ addH264Codec(payloadType: number, profile?: string): void;
66
+ addVP8Codec(payloadType: number): void;
67
+ addVP9Codec(payloadType: number): void;
68
+ direction(): Direction;
69
+ generateSdp(eol: string, addr: string, port: number): string;
70
+ mid(): string;
71
+ setDirection(dir: Direction): void;
72
+ description(): string;
73
+ removeFormat(fmt: string): void;
74
+ addSSRC(ssrc: number, name?: string, msid?: string, trackID?: string): void;
75
+ removeSSRC(ssrc: number): void;
76
+ replaceSSRC(oldSsrc: number, ssrc: number, name?: string, msid?: string, trackID?: string): void;
77
+ hasSSRC(ssrc: number): boolean;
78
+ getSSRCs(): number[];
79
+ getCNameForSsrc(ssrc: number): string;
80
+ setBitrate(bitRate: number): void;
81
+ getBitrate(): number;
82
+ hasPayloadType(payloadType: number): boolean;
83
+ addRTXCodec(payloadType: number, originalPayloadType: number, clockRate: number): void;
84
+ addRTPMap(): void;
85
+ parseSdpLine(line: string): void;
63
86
  }
64
87
  export const Video: {
65
- new(mid: string, dir: Direction): Video
66
- } = nodeDataChannel.Video
88
+ new (mid: string, dir: Direction): Video;
89
+ } = nodeDataChannel.Video;
67
90
 
68
91
  export interface Track {
69
- direction(): Direction;
70
- mid(): string;
71
- type(): string;
72
- close(): void;
73
- sendMessage(msg: string): boolean;
74
- sendMessageBinary(buffer: Buffer): boolean;
75
- isOpen(): boolean;
76
- isClosed(): boolean;
77
- bufferedAmount(): number;
78
- maxMessageSize(): number;
79
- requestBitrate(bitRate: number): boolean;
80
- setBufferedAmountLowThreshold(newSize: number): void;
81
- requestKeyframe(): boolean;
82
- setMediaHandler(handler: RtcpReceivingSession): void;
83
- onOpen(cb: () => void): void;
84
- onClosed(cb: () => void): void;
85
- onError(cb: (err: string) => void): void;
86
- onMessage(cb: (msg: Buffer) => void): void;
92
+ direction(): Direction;
93
+ mid(): string;
94
+ type(): string;
95
+ close(): void;
96
+ sendMessage(msg: string): boolean;
97
+ sendMessageBinary(buffer: Buffer): boolean;
98
+ isOpen(): boolean;
99
+ isClosed(): boolean;
100
+ bufferedAmount(): number;
101
+ maxMessageSize(): number;
102
+ requestBitrate(bitRate: number): boolean;
103
+ setBufferedAmountLowThreshold(newSize: number): void;
104
+ requestKeyframe(): boolean;
105
+ setMediaHandler(handler: RtcpReceivingSession): void;
106
+ onOpen(cb: () => void): void;
107
+ onClosed(cb: () => void): void;
108
+ onError(cb: (err: string) => void): void;
109
+ onMessage(cb: (msg: Buffer) => void): void;
87
110
  }
88
111
  export const Track: {
89
- new(): Track
90
- } = nodeDataChannel.Track
112
+ new (): Track;
113
+ } = nodeDataChannel.Track;
91
114
 
92
115
  export interface DataChannel extends Channel {
93
- getLabel(): string;
94
- getId(): number;
95
- getProtocol(): string;
116
+ getLabel(): string;
117
+ getId(): number;
118
+ getProtocol(): string;
96
119
 
97
- // Channel implementation
98
- close(): void;
99
- sendMessage(msg: string): boolean;
100
- sendMessageBinary(buffer: Buffer | Uint8Array): boolean;
101
- isOpen(): boolean;
102
- bufferedAmount(): number;
103
- maxMessageSize(): number;
104
- setBufferedAmountLowThreshold(newSize: number): void;
105
- onOpen(cb: () => void): void;
106
- onClosed(cb: () => void): void;
107
- onError(cb: (err: string) => void): void;
108
- onBufferedAmountLow(cb: () => void): void;
109
- onMessage(cb: (msg: string | Buffer | ArrayBuffer) => void): void;
120
+ // Channel implementation
121
+ close(): void;
122
+ sendMessage(msg: string): boolean;
123
+ sendMessageBinary(buffer: Buffer | Uint8Array): boolean;
124
+ isOpen(): boolean;
125
+ bufferedAmount(): number;
126
+ maxMessageSize(): number;
127
+ setBufferedAmountLowThreshold(newSize: number): void;
128
+ onOpen(cb: () => void): void;
129
+ onClosed(cb: () => void): void;
130
+ onError(cb: (err: string) => void): void;
131
+ onBufferedAmountLow(cb: () => void): void;
132
+ onMessage(cb: (msg: string | Buffer | ArrayBuffer) => void): void;
110
133
  }
111
134
  export const DataChannel: {
112
- // DataChannel implementation
113
- } = nodeDataChannel.DataChannel
135
+ // DataChannel implementation
136
+ } = nodeDataChannel.DataChannel;
114
137
 
115
138
  export interface PeerConnection {
116
- close(): void;
117
- setLocalDescription(type?: DescriptionType): void;
118
- setRemoteDescription(sdp: string, type: DescriptionType): void;
119
- localDescription(): { type: DescriptionType; sdp: string } | null;
120
- remoteDescription(): { type: DescriptionType; sdp: string } | null;
121
- addRemoteCandidate(candidate: string, mid: string): void;
122
- createDataChannel(label: string, config?: DataChannelInitConfig): DataChannel;
123
- addTrack(media: Video | Audio): Track;
124
- hasMedia(): boolean;
125
- state(): RTCPeerConnectionState;
126
- iceState(): RTCIceConnectionState;
127
- signalingState(): RTCSignalingState;
128
- gatheringState(): RTCIceGatheringState;
129
- onLocalDescription(cb: (sdp: string, type: DescriptionType) => void): void;
130
- onLocalCandidate(cb: (candidate: string, mid: string) => void): void;
131
- onStateChange(cb: (state: string) => void): void;
132
- onIceStateChange(cb: (state: string) => void): void;
133
- onSignalingStateChange(cb: (state: string) => void): void;
134
- onGatheringStateChange(cb: (state: string) => void): void;
135
- onDataChannel(cb: (dc: DataChannel) => void): void;
136
- onTrack(cb: (track: Track) => void): void;
137
- bytesSent(): number;
138
- bytesReceived(): number;
139
- rtt(): number;
140
- getSelectedCandidatePair(): { local: SelectedCandidateInfo; remote: SelectedCandidateInfo } | null;
141
- maxDataChannelId(): number;
142
- maxMessageSize(): number;
139
+ close(): void;
140
+ setLocalDescription(type?: DescriptionType, init?: LocalDescriptionInit): void;
141
+ setRemoteDescription(sdp: string, type: DescriptionType): void;
142
+ localDescription(): { type: DescriptionType; sdp: string } | null;
143
+ remoteDescription(): { type: DescriptionType; sdp: string } | null;
144
+ remoteFingerprint(): CertificateFingerprint;
145
+ addRemoteCandidate(candidate: string, mid: string): void;
146
+ createDataChannel(label: string, config?: DataChannelInitConfig): DataChannel;
147
+ addTrack(media: Video | Audio): Track;
148
+ hasMedia(): boolean;
149
+ state(): RTCPeerConnectionState;
150
+ iceState(): RTCIceConnectionState;
151
+ signalingState(): RTCSignalingState;
152
+ gatheringState(): RTCIceGatheringState;
153
+ onLocalDescription(cb: (sdp: string, type: DescriptionType) => void): void;
154
+ onLocalCandidate(cb: (candidate: string, mid: string) => void): void;
155
+ onStateChange(cb: (state: string) => void): void;
156
+ onIceStateChange(cb: (state: string) => void): void;
157
+ onSignalingStateChange(cb: (state: string) => void): void;
158
+ onGatheringStateChange(cb: (state: string) => void): void;
159
+ onDataChannel(cb: (dc: DataChannel) => void): void;
160
+ onTrack(cb: (track: Track) => void): void;
161
+ bytesSent(): number;
162
+ bytesReceived(): number;
163
+ rtt(): number;
164
+ getSelectedCandidatePair(): {
165
+ local: SelectedCandidateInfo;
166
+ remote: SelectedCandidateInfo;
167
+ } | null;
168
+ maxDataChannelId(): number;
169
+ maxMessageSize(): number;
143
170
  }
144
171
  export const PeerConnection: {
145
- new(peerName: string, config: RtcConfig): PeerConnection
146
- } = nodeDataChannel.PeerConnection
172
+ new (peerName: string, config: RtcConfig): PeerConnection;
173
+ } = nodeDataChannel.PeerConnection;
147
174
 
148
- export interface RtcpReceivingSession {
175
+ export interface IceUdpMuxListener {
176
+ address?: string;
177
+ port: number;
178
+ stop(): void;
179
+ onUnhandledStunRequest(cb: (req: IceUdpMuxRequest) => void): void;
149
180
  }
181
+ export const IceUdpMuxListener: {
182
+ new (port: number, address?: string): IceUdpMuxListener;
183
+ } = nodeDataChannel.IceUdpMuxListener;
184
+
185
+ export interface RtcpReceivingSession {}
150
186
 
151
187
  export const RtcpReceivingSession: {
152
- new(): RtcpReceivingSession
153
- } = nodeDataChannel.RtcpReceivingSession
188
+ new (): RtcpReceivingSession;
189
+ } = nodeDataChannel.RtcpReceivingSession;
154
190
 
155
191
  export { WebSocketServer } from './websocket-server';
156
192
  export { WebSocket } from './websocket';
@@ -158,23 +194,23 @@ export { WebSocket } from './websocket';
158
194
  export const DataChannelStream = _DataChannelStream;
159
195
 
160
196
  export default {
161
- initLogger,
162
- cleanup,
163
- preload,
164
- setSctpSettings,
165
- getLibraryVersion,
166
- RtcpReceivingSession,
167
- Track,
168
- Video,
169
- Audio,
170
- DataChannel,
171
- PeerConnection,
172
- WebSocket,
173
- WebSocketServer,
174
- DataChannelStream
197
+ initLogger,
198
+ cleanup,
199
+ preload,
200
+ setSctpSettings,
201
+ getLibraryVersion,
202
+ RtcpReceivingSession,
203
+ Track,
204
+ Video,
205
+ Audio,
206
+ DataChannel,
207
+ PeerConnection,
208
+ WebSocket,
209
+ WebSocketServer,
210
+ DataChannelStream,
211
+ IceUdpMuxListener,
175
212
  };
176
213
 
177
-
178
214
  // Types
179
215
  // https://github.com/murat-dogan/node-datachannel/issues/300
180
- export * from './types';
216
+ export * from './types';
package/src/lib/types.ts CHANGED
@@ -1,27 +1,27 @@
1
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;
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
14
  }
15
15
 
16
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;
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
25
  }
26
26
 
27
27
  // Enum in d.ts is tricky
@@ -29,83 +29,134 @@ export type LogLevel = 'Verbose' | 'Debug' | 'Info' | 'Warning' | 'Error' | 'Fat
29
29
 
30
30
  // SCTP Settings
31
31
  export interface SctpSettings {
32
- recvBufferSize?: number;
33
- sendBufferSize?: number;
34
- maxChunksOnQueue?: number;
35
- initialCongestionWindow?: number;
36
- congestionControlModule?: number;
37
- delayedSackTime?: number;
32
+ recvBufferSize?: number;
33
+ sendBufferSize?: number;
34
+ maxChunksOnQueue?: number;
35
+ initialCongestionWindow?: number;
36
+ congestionControlModule?: number;
37
+ delayedSackTime?: number;
38
38
  }
39
39
 
40
40
  // Proxy Server
41
41
  export type ProxyServerType = 'Socks5' | 'Http';
42
42
  export interface ProxyServer {
43
- type: ProxyServerType;
44
- ip: string;
45
- port: number;
46
- username?: string;
47
- password?: string;
43
+ type: ProxyServerType;
44
+ ip: string;
45
+ port: number;
46
+ username?: string;
47
+ password?: string;
48
48
  }
49
49
 
50
- export type RelayType = 'TurnUdp' | 'TurnTcp' | 'TurnTls'
50
+ export type RelayType = 'TurnUdp' | 'TurnTcp' | 'TurnTls';
51
51
 
52
52
  export interface IceServer {
53
- hostname: string;
54
- port: number;
55
- username?: string;
56
- password?: string;
57
- relayType?: RelayType;
53
+ hostname: string;
54
+ port: number;
55
+ username?: string;
56
+ password?: string;
57
+ relayType?: RelayType;
58
58
  }
59
59
 
60
60
  export type TransportPolicy = 'all' | 'relay';
61
61
 
62
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;
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;
76
80
  }
77
81
 
78
82
  // Lowercase to match the description type string from libdatachannel
79
- export type DescriptionType = 'unspec' | 'offer' | 'answer' | 'pranswer' | 'rollback'
83
+ export type DescriptionType = 'unspec' | 'offer' | 'answer' | 'pranswer' | 'rollback';
80
84
 
81
85
  export type RTCSdpType = 'answer' | 'offer' | 'pranswer' | 'rollback';
82
86
 
83
- export type RTCIceTransportState = "checking" | "closed" | "completed" | "connected" | "disconnected" | "failed" | "new";
84
- export type RTCPeerConnectionState = "closed" | "connected" | "connecting" | "disconnected" | "failed" | "new";
85
- export type RTCIceConnectionState = "checking" | "closed" | "completed" | "connected" | "disconnected" | "failed" | "new";
86
- export type RTCIceGathererState = "complete" | "gathering" | "new";
87
- export type RTCIceGatheringState = "complete" | "gathering" | "new";
88
- export type RTCSignalingState = "closed" | "have-local-offer" | "have-local-pranswer" | "have-remote-offer" | "have-remote-pranswer" | "stable";
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';
89
119
 
120
+ export interface LocalDescriptionInit {
121
+ iceUfrag?: string;
122
+ icePwd?: string;
123
+ }
90
124
 
91
125
  export interface DataChannelInitConfig {
92
- protocol?: string;
93
- negotiated?: boolean;
94
- id?: number;
95
- unordered?: boolean; // Reliability
96
- maxPacketLifeTime?: number; // Reliability
97
- maxRetransmits?: number; // Reliability
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';
98
143
  }
99
144
 
100
145
  export interface SelectedCandidateInfo {
101
- address: string;
102
- port: number;
103
- type: string;
104
- transportType: string;
105
- candidate: string;
106
- mid: string;
107
- priority: number;
146
+ address: string;
147
+ port: number;
148
+ type: string;
149
+ transportType: string;
150
+ candidate: string;
151
+ mid: string;
152
+ priority: number;
108
153
  }
109
154
 
110
155
  // Must be same as rtc enum class Direction
111
- export type Direction = 'SendOnly' | 'RecvOnly' | 'SendRecv' | 'Inactive' | 'Unknown'
156
+ export type Direction = 'SendOnly' | 'RecvOnly' | 'SendRecv' | 'Inactive' | 'Unknown';
157
+
158
+ export interface IceUdpMuxRequest {
159
+ ufrag: string;
160
+ host: string;
161
+ port: number;
162
+ }
@@ -4,34 +4,34 @@ import { WebSocketServerConfiguration } from './types';
4
4
  import { WebSocket } from './websocket';
5
5
 
6
6
  export class WebSocketServer extends EventEmitter {
7
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
- #server: any;
9
- #clients: WebSocket[] = [];
7
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
+ #server: any;
9
+ #clients: WebSocket[] = [];
10
10
 
11
- constructor(options: WebSocketServerConfiguration) {
12
- super();
13
- this.#server = new nodeDataChannel.WebSocketServer(options);
11
+ constructor(options: WebSocketServerConfiguration) {
12
+ super();
13
+ this.#server = new nodeDataChannel.WebSocketServer(options);
14
14
 
15
- this.#server.onClient((client) => {
16
- this.emit('client', client);
17
- this.#clients.push(client);
18
- });
19
- }
15
+ this.#server.onClient((client) => {
16
+ this.emit('client', client);
17
+ this.#clients.push(client);
18
+ });
19
+ }
20
20
 
21
- port(): number {
22
- return this.#server?.port() || 0;
23
- }
21
+ port(): number {
22
+ return this.#server?.port() || 0;
23
+ }
24
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
- }
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
33
 
34
- onClient(cb: (clientSocket: WebSocket) => void): void {
35
- if (this.#server) this.on('client', cb);
36
- }
34
+ onClient(cb: (clientSocket: WebSocket) => void): void {
35
+ if (this.#server) this.on('client', cb);
36
+ }
37
37
  }