node-datachannel 0.12.0 → 0.20.0-alpha.1

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 (132) hide show
  1. package/.eslintignore +5 -1
  2. package/.eslintrc.json +27 -0
  3. package/.prettierrc +12 -0
  4. package/CMakeLists.txt +13 -13
  5. package/jest.config.ts +14 -0
  6. package/package.json +46 -43
  7. package/rollup.config.mjs +63 -0
  8. package/src/index.ts +10 -0
  9. package/{lib/datachannel-stream.js → src/lib/datachannel-stream.ts} +16 -11
  10. package/src/lib/index.ts +180 -0
  11. package/src/lib/node-datachannel.ts +13 -0
  12. package/src/lib/types.ts +126 -0
  13. package/{lib/websocket-server.js → src/lib/websocket-server.ts} +10 -8
  14. package/src/lib/websocket.ts +26 -0
  15. package/src/polyfill/Events.ts +33 -0
  16. package/src/polyfill/Exception.ts +37 -0
  17. package/src/polyfill/RTCCertificate.ts +17 -0
  18. package/{polyfill/RTCDataChannel.js → src/polyfill/RTCDataChannel.ts} +43 -40
  19. package/src/polyfill/RTCDtlsTransport.ts +47 -0
  20. package/src/polyfill/RTCError.ts +71 -0
  21. package/{polyfill/RTCIceCandidate.js → src/polyfill/RTCIceCandidate.ts} +35 -35
  22. package/{polyfill/RTCIceTransport.js → src/polyfill/RTCIceTransport.ts} +22 -20
  23. package/{polyfill/RTCPeerConnection.js → src/polyfill/RTCPeerConnection.ts} +128 -114
  24. package/{polyfill/RTCSctpTransport.js → src/polyfill/RTCSctpTransport.ts} +16 -14
  25. package/{polyfill/RTCSessionDescription.js → src/polyfill/RTCSessionDescription.ts} +7 -12
  26. package/{polyfill/index.js → src/polyfill/index.ts} +10 -10
  27. package/tsconfig.json +20 -13
  28. package/.eslintrc.cjs +0 -8
  29. package/.github/FUNDING.yml +0 -2
  30. package/.github/workflows/build-linux.yml +0 -109
  31. package/.github/workflows/build-mac-m1.yml +0 -38
  32. package/.github/workflows/build-mac-x64.yml +0 -40
  33. package/.github/workflows/build-win.yml +0 -74
  34. package/.github/workflows/lint.yml +0 -20
  35. package/.github/workflows/npm-publish-manual.yml +0 -23
  36. package/.prettierrc.cjs +0 -8
  37. package/build-containers/Dockerfile.alpine +0 -6
  38. package/build-containers/Dockerfile.debian +0 -7
  39. package/cmake/toolchain/ci.cmake +0 -23
  40. package/examples/client-server/README.md +0 -22
  41. package/examples/client-server/client-benchmark.js +0 -230
  42. package/examples/client-server/client-periodic.js +0 -189
  43. package/examples/client-server/client.js +0 -111
  44. package/examples/client-server/package-lock.json +0 -289
  45. package/examples/client-server/package.json +0 -16
  46. package/examples/client-server/signaling-server.js +0 -39
  47. package/examples/electron-demo/README.md +0 -58
  48. package/examples/electron-demo/forge.config.js +0 -49
  49. package/examples/electron-demo/package-lock.json +0 -15877
  50. package/examples/electron-demo/package.json +0 -44
  51. package/examples/electron-demo/src/index.css +0 -7
  52. package/examples/electron-demo/src/index.html +0 -29
  53. package/examples/electron-demo/src/main.js +0 -53
  54. package/examples/electron-demo/src/node-datachannel.js +0 -123
  55. package/examples/electron-demo/src/preload.js +0 -28
  56. package/examples/electron-demo/src/renderer.js +0 -58
  57. package/examples/electron-demo/webpack.main.config.js +0 -21
  58. package/examples/electron-demo/webpack.renderer.config.js +0 -13
  59. package/examples/electron-demo/webpack.rules.js +0 -35
  60. package/examples/media/README.md +0 -34
  61. package/examples/media/main.html +0 -45
  62. package/examples/media/media.js +0 -54
  63. package/examples/simple-peer-usage/main.js +0 -28
  64. package/examples/simple-peer-usage/package-lock.json +0 -317
  65. package/examples/simple-peer-usage/package.json +0 -16
  66. package/examples/websocket/websocket-client.js +0 -20
  67. package/examples/websocket/websocket-server.js +0 -22
  68. package/jest.config.cjs +0 -7
  69. package/lib/index.cjs +0 -194
  70. package/lib/index.d.cts +0 -300
  71. package/lib/index.d.ts +0 -300
  72. package/lib/index.js +0 -58
  73. package/lib/node-datachannel.js +0 -7
  74. package/polyfill/Events.d.ts +0 -9
  75. package/polyfill/Events.js +0 -29
  76. package/polyfill/Exception.js +0 -23
  77. package/polyfill/RTCCertificate.d.ts +0 -7
  78. package/polyfill/RTCCertificate.js +0 -17
  79. package/polyfill/RTCDataChannel.d.ts +0 -35
  80. package/polyfill/RTCDtlsTransport.d.ts +0 -10
  81. package/polyfill/RTCDtlsTransport.js +0 -47
  82. package/polyfill/RTCError.d.ts +0 -11
  83. package/polyfill/RTCError.js +0 -65
  84. package/polyfill/RTCIceCandidate.d.ts +0 -20
  85. package/polyfill/RTCIceTransport.d.ts +0 -18
  86. package/polyfill/RTCPeerConnection.d.ts +0 -62
  87. package/polyfill/RTCSctpTransport.d.ts +0 -10
  88. package/polyfill/RTCSessionDescription.d.ts +0 -8
  89. package/polyfill/index.cjs +0 -1333
  90. package/polyfill/index.d.cts +0 -37
  91. package/polyfill/index.d.ts +0 -37
  92. package/test/connectivity.js +0 -86
  93. package/test/jest-tests/basic.test.js +0 -37
  94. package/test/jest-tests/multiple-run.test.js +0 -73
  95. package/test/jest-tests/p2p.test.js +0 -99
  96. package/test/jest-tests/polyfill.test.js +0 -10
  97. package/test/jest-tests/streams.test.js +0 -48
  98. package/test/jest-tests/websocket.test.js +0 -69
  99. package/test/polyfill-connectivity.js +0 -89
  100. package/test/websockets.js +0 -50
  101. package/test/wpt-tests/README.md +0 -46
  102. package/test/wpt-tests/chrome-failed-tests.js +0 -42
  103. package/test/wpt-tests/index.js +0 -96
  104. package/test/wpt-tests/last-test-results.md +0 -301
  105. package/test/wpt-tests/package-lock.json +0 -1712
  106. package/test/wpt-tests/package.json +0 -19
  107. package/test/wpt-tests/wpt-test-list.js +0 -139
  108. package/test/wpt-tests/wpt.js +0 -131
  109. /package/src/{data-channel-wrapper.cpp → cpp/data-channel-wrapper.cpp} +0 -0
  110. /package/src/{data-channel-wrapper.h → cpp/data-channel-wrapper.h} +0 -0
  111. /package/src/{main.cpp → cpp/main.cpp} +0 -0
  112. /package/src/{media-audio-wrapper.cpp → cpp/media-audio-wrapper.cpp} +0 -0
  113. /package/src/{media-audio-wrapper.h → cpp/media-audio-wrapper.h} +0 -0
  114. /package/src/{media-direction.cpp → cpp/media-direction.cpp} +0 -0
  115. /package/src/{media-direction.h → cpp/media-direction.h} +0 -0
  116. /package/src/{media-rtcpreceivingsession-wrapper.cpp → cpp/media-rtcpreceivingsession-wrapper.cpp} +0 -0
  117. /package/src/{media-rtcpreceivingsession-wrapper.h → cpp/media-rtcpreceivingsession-wrapper.h} +0 -0
  118. /package/src/{media-track-wrapper.cpp → cpp/media-track-wrapper.cpp} +0 -0
  119. /package/src/{media-track-wrapper.h → cpp/media-track-wrapper.h} +0 -0
  120. /package/src/{media-video-wrapper.cpp → cpp/media-video-wrapper.cpp} +0 -0
  121. /package/src/{media-video-wrapper.h → cpp/media-video-wrapper.h} +0 -0
  122. /package/src/{peer-connection-wrapper.cpp → cpp/peer-connection-wrapper.cpp} +0 -0
  123. /package/src/{peer-connection-wrapper.h → cpp/peer-connection-wrapper.h} +0 -0
  124. /package/src/{rtc-wrapper.cpp → cpp/rtc-wrapper.cpp} +0 -0
  125. /package/src/{rtc-wrapper.h → cpp/rtc-wrapper.h} +0 -0
  126. /package/src/{thread-safe-callback.cpp → cpp/thread-safe-callback.cpp} +0 -0
  127. /package/src/{thread-safe-callback.h → cpp/thread-safe-callback.h} +0 -0
  128. /package/src/{web-socket-server-wrapper.cpp → cpp/web-socket-server-wrapper.cpp} +0 -0
  129. /package/src/{web-socket-server-wrapper.h → cpp/web-socket-server-wrapper.h} +0 -0
  130. /package/src/{web-socket-wrapper.cpp → cpp/web-socket-wrapper.cpp} +0 -0
  131. /package/src/{web-socket-wrapper.h → cpp/web-socket-wrapper.h} +0 -0
  132. /package/{polyfill → src/polyfill}/README.md +0 -0
package/lib/index.d.cts DELETED
@@ -1,300 +0,0 @@
1
- import * as stream from 'stream';
2
-
3
- export as namespace NodeDataChannel;
4
-
5
- // Enum in d.ts is tricky
6
- export type LogLevel = 'Verbose' | 'Debug' | 'Info' | 'Warning' | 'Error' | 'Fatal';
7
-
8
- // SCTP Settings
9
- export interface SctpSettings {
10
- recvBufferSize?: number;
11
- sendBufferSize?: number;
12
- maxChunksOnQueue?: number;
13
- initialCongestionWindow?: number;
14
- congestionControlModule?: number;
15
- delayedSackTime?: number;
16
- }
17
-
18
- // Functions
19
- export function preload(): void;
20
- export function initLogger(level: LogLevel, callback?: (level: LogLevel, message: string) => void): void;
21
- export function cleanup(): void;
22
- export function setSctpSettings(settings: SctpSettings): void;
23
-
24
- // Proxy Server
25
- export type ProxyServerType = 'Socks5' | 'Http';
26
- export interface ProxyServer {
27
- type: ProxyServerType;
28
- ip: string;
29
- port: number;
30
- username?: string;
31
- password?: string;
32
- }
33
-
34
- export const enum RelayType {
35
- TurnUdp = 'TurnUdp',
36
- TurnTcp = 'TurnTcp',
37
- TurnTls = 'TurnTls',
38
- }
39
-
40
- export interface IceServer {
41
- hostname: string;
42
- port: number;
43
- username?: string;
44
- password?: string;
45
- relayType?: RelayType;
46
- }
47
-
48
- export type TransportPolicy = 'all' | 'relay';
49
-
50
- export interface RtcConfig {
51
- iceServers: (string | IceServer)[];
52
- proxyServer?: ProxyServer;
53
- bindAddress?: string;
54
- enableIceTcp?: boolean;
55
- enableIceUdpMux?: boolean;
56
- disableAutoNegotiation?: boolean;
57
- forceMediaTransport?: boolean;
58
- portRangeBegin?: number;
59
- portRangeEnd?: number;
60
- maxMessageSize?: number;
61
- mtu?: number;
62
- iceTransportPolicy?: TransportPolicy;
63
- }
64
-
65
- // Lowercase to match the description type string from libdatachannel
66
- export enum DescriptionType {
67
- Unspec = 'unspec',
68
- Offer = 'offer',
69
- Answer = 'answer',
70
- Pranswer = 'pranswer',
71
- Rollback = 'rollback',
72
- }
73
-
74
- export interface DataChannelInitConfig {
75
- protocol?: string;
76
- negotiated?: boolean;
77
- id?: number;
78
- unordered?: boolean; // Reliability
79
- maxPacketLifeTime?: number; // Reliability
80
- maxRetransmits?: number; // Reliability
81
- }
82
-
83
- export interface SelectedCandidateInfo {
84
- address: string;
85
- port: number;
86
- type: string;
87
- transportType: string;
88
- candidate: string;
89
- mid: string;
90
- priority: number;
91
- }
92
-
93
- // Must be same as rtc enum class Direction
94
- export const enum Direction {
95
- SendOnly = 'SendOnly',
96
- RecvOnly = 'RecvOnly',
97
- SendRecv = 'SendRecv',
98
- Inactive = 'Inactive',
99
- Unknown = 'Unknown',
100
- }
101
-
102
- export class RtcpReceivingSession {
103
- //
104
- }
105
-
106
- export class Audio {
107
- constructor(mid: string, dir: Direction);
108
- addAudioCodec(payloadType: number, codec: string, profile?: string): void;
109
- addOpusCodec(payloadType: number, profile?: string): string;
110
-
111
- direction(): Direction;
112
- generateSdp(eol: string, addr: string, port: number): string;
113
- mid(): string;
114
- setDirection(dir: Direction): void;
115
- description(): string;
116
- removeFormat(fmt: string): void;
117
- addSSRC(ssrc: number, name?: string, msid?: string, trackID?: string): void;
118
- removeSSRC(ssrc: number): void;
119
- replaceSSRC(oldSsrc: number, ssrc: number, name?: string, msid?: string, trackID?: string): void;
120
- hasSSRC(ssrc: number): boolean;
121
- getSSRCs(): number[];
122
- getCNameForSsrc(ssrc: number): string;
123
- setBitrate(bitRate: number): void;
124
- getBitrate(): number;
125
- hasPayloadType(payloadType: number): boolean;
126
- addRTXCodec(payloadType: number, originalPayloadType: number, clockRate: number): void;
127
- addRTPMap(): void;
128
- parseSdpLine(line: string): void;
129
- }
130
-
131
- export class Video {
132
- constructor(mid: string, dir: Direction);
133
- addVideoCodec(payloadType: number, codec: string, profile?: string): void;
134
- addH264Codec(payloadType: number, profile?: string): void;
135
- addVP8Codec(payloadType: number): void;
136
- addVP9Codec(payloadType: number): void;
137
-
138
- direction(): Direction;
139
- generateSdp(eol: string, addr: string, port: number): string;
140
- mid(): string;
141
- setDirection(dir: Direction): void;
142
- description(): string;
143
- removeFormat(fmt: string): void;
144
- addSSRC(ssrc: number, name?: string, msid?: string, trackID?: string): void;
145
- removeSSRC(ssrc: number): void;
146
- replaceSSRC(oldSsrc: number, ssrc: number, name?: string, msid?: string, trackID?: string): void;
147
- hasSSRC(ssrc: number): boolean;
148
- getSSRCs(): number[];
149
- getCNameForSsrc(ssrc: number): string;
150
- setBitrate(bitRate: number): void;
151
- getBitrate(): number;
152
- hasPayloadType(payloadType: number): boolean;
153
- addRTXCodec(payloadType: number, originalPayloadType: number, clockRate: number): void;
154
- addRTPMap(): void;
155
- parseSdpLine(line: string): void;
156
- }
157
-
158
- export class Track {
159
- direction(): Direction;
160
- mid(): string;
161
- type(): string;
162
- close(): void;
163
- sendMessage(msg: string): boolean;
164
- sendMessageBinary(buffer: Buffer): boolean;
165
- isOpen(): boolean;
166
- isClosed(): boolean;
167
- bufferedAmount(): number;
168
- maxMessageSize(): number;
169
- requestBitrate(bitRate: number): boolean;
170
- setBufferedAmountLowThreshold(newSize: number): void;
171
- requestKeyframe(): boolean;
172
- setMediaHandler(handler: RtcpReceivingSession): void;
173
- onOpen(cb: () => void): void;
174
- onClosed(cb: () => void): void;
175
- onError(cb: (err: string) => void): void;
176
- onMessage(cb: (msg: Buffer) => void): void;
177
- }
178
-
179
- export interface Channel {
180
- close(): void;
181
- sendMessage(msg: string): boolean;
182
- sendMessageBinary(buffer: Uint8Array): boolean;
183
- isOpen(): boolean;
184
- bufferedAmount(): number;
185
- maxMessageSize(): number;
186
- setBufferedAmountLowThreshold(newSize: number): void;
187
- onOpen(cb: () => void): void;
188
- onClosed(cb: () => void): void;
189
- onError(cb: (err: string) => void): void;
190
- onBufferedAmountLow(cb: () => void): void;
191
- onMessage(cb: (msg: string | Buffer) => void): void;
192
- }
193
- export class DataChannel implements Channel {
194
- getLabel(): string;
195
- getId(): number;
196
- getProtocol(): string;
197
-
198
- // Channel implementation
199
- close(): void;
200
- sendMessage(msg: string): boolean;
201
- sendMessageBinary(buffer: Uint8Array): boolean;
202
- isOpen(): boolean;
203
- bufferedAmount(): number;
204
- maxMessageSize(): number;
205
- setBufferedAmountLowThreshold(newSize: number): void;
206
- onOpen(cb: () => void): void;
207
- onClosed(cb: () => void): void;
208
- onError(cb: (err: string) => void): void;
209
- onBufferedAmountLow(cb: () => void): void;
210
- onMessage(cb: (msg: string | Buffer) => void): void;
211
- }
212
-
213
- export interface WebSocketConfiguration {
214
- disableTlsVerification?: boolean; // default = false, if true, don't verify the TLS certificate
215
- proxyServer?: ProxyServer; // only non-authenticated http supported for now
216
- protocols?: string[];
217
- connectionTimeout?: number; // miliseconds, zero to disable
218
- pingInterval?: number; // millisecondrs, zero to disable
219
- maxOutstandingPings?: number;
220
- caCertificatePemFile?: string;
221
- certificatePemFile?: string;
222
- keyPemFile?: string;
223
- keyPemPass?: string;
224
- maxMessageSize: number;
225
- }
226
- export class WebSocket implements Channel {
227
- constructor(config?: WebSocketConfiguration);
228
- open(url: string): void;
229
- forceClose(): void;
230
- remoteAddress(): string | undefined;
231
- path(): string | undefined;
232
-
233
- // Channel implementation
234
- close(): void;
235
- sendMessage(msg: string): boolean;
236
- sendMessageBinary(buffer: Uint8Array): boolean;
237
- isOpen(): boolean;
238
- bufferedAmount(): number;
239
- maxMessageSize(): number;
240
- setBufferedAmountLowThreshold(newSize: number): void;
241
- onOpen(cb: () => void): void;
242
- onClosed(cb: () => void): void;
243
- onError(cb: (err: string) => void): void;
244
- onBufferedAmountLow(cb: () => void): void;
245
- onMessage(cb: (msg: string | Buffer) => void): void;
246
- }
247
-
248
- export interface WebSocketServerConfiguration {
249
- port?: number; // default 8080
250
- enableTls?: boolean; // default = false;
251
- certificatePemFile?: string;
252
- keyPemFile?: string;
253
- keyPemPass?: string;
254
- bindAddress?: string;
255
- connectionTimeout?: number; // milliseconds
256
- maxMessageSize?: number;
257
- }
258
-
259
- export class WebSocketServer {
260
- constructor(config?: WebSocketServerConfiguration);
261
- port(): number;
262
- stop(): void;
263
- onClient(cb: (ws: WebSocket) => void): void;
264
- }
265
-
266
- export class PeerConnection {
267
- constructor(peerName: string, config: RtcConfig);
268
- close(): void;
269
- setLocalDescription(type?: DescriptionType): void;
270
- setRemoteDescription(sdp: string, type: DescriptionType): void;
271
- localDescription(): { type: string; sdp: string } | null;
272
- remoteDescription(): { type: string; sdp: string } | null;
273
- addRemoteCandidate(candidate: string, mid: string): void;
274
- createDataChannel(label: string, config?: DataChannelInitConfig): DataChannel;
275
- addTrack(media: Video | Audio): Track;
276
- hasMedia(): boolean;
277
- state(): RTCPeerConnectionState;
278
- iceState(): RTCIceConnectionState;
279
- signalingState(): RTCSignalingState;
280
- gatheringState(): RTCIceGatheringState;
281
- onLocalDescription(cb: (sdp: string, type: DescriptionType) => void): void;
282
- onLocalCandidate(cb: (candidate: string, mid: string) => void): void;
283
- onStateChange(cb: (state: string) => void): void;
284
- onIceStateChange(cb: (state: string) => void): void;
285
- onSignalingStateChange(cb: (state: string) => void): void;
286
- onGatheringStateChange(cb: (state: string) => void): void;
287
- onDataChannel(cb: (dc: DataChannel) => void): void;
288
- onTrack(cb: (track: Track) => void): void;
289
- bytesSent(): number;
290
- bytesReceived(): number;
291
- rtt(): number;
292
- getSelectedCandidatePair(): { local: SelectedCandidateInfo; remote: SelectedCandidateInfo } | null;
293
- maxDataChannelId(): number;
294
- maxMessageSize(): number;
295
- }
296
-
297
- export class DataChannelStream extends stream.Duplex {
298
- constructor(rawChannel: DataChannel, options?: Omit<stream.DuplexOptions, 'objectMode'>);
299
- get label(): string;
300
- }
package/lib/index.d.ts DELETED
@@ -1,300 +0,0 @@
1
- import * as stream from 'stream';
2
-
3
- export as namespace NodeDataChannel;
4
-
5
- // Enum in d.ts is tricky
6
- export type LogLevel = 'Verbose' | 'Debug' | 'Info' | 'Warning' | 'Error' | 'Fatal';
7
-
8
- // SCTP Settings
9
- export interface SctpSettings {
10
- recvBufferSize?: number;
11
- sendBufferSize?: number;
12
- maxChunksOnQueue?: number;
13
- initialCongestionWindow?: number;
14
- congestionControlModule?: number;
15
- delayedSackTime?: number;
16
- }
17
-
18
- // Functions
19
- export function preload(): void;
20
- export function initLogger(level: LogLevel, callback?: (level: LogLevel, message: string) => void): void;
21
- export function cleanup(): void;
22
- export function setSctpSettings(settings: SctpSettings): void;
23
-
24
- // Proxy Server
25
- export type ProxyServerType = 'Socks5' | 'Http';
26
- export interface ProxyServer {
27
- type: ProxyServerType;
28
- ip: string;
29
- port: number;
30
- username?: string;
31
- password?: string;
32
- }
33
-
34
- export const enum RelayType {
35
- TurnUdp = 'TurnUdp',
36
- TurnTcp = 'TurnTcp',
37
- TurnTls = 'TurnTls',
38
- }
39
-
40
- export interface IceServer {
41
- hostname: string;
42
- port: number;
43
- username?: string;
44
- password?: string;
45
- relayType?: RelayType;
46
- }
47
-
48
- export type TransportPolicy = 'all' | 'relay';
49
-
50
- export interface RtcConfig {
51
- iceServers: (string | IceServer)[];
52
- proxyServer?: ProxyServer;
53
- bindAddress?: string;
54
- enableIceTcp?: boolean;
55
- enableIceUdpMux?: boolean;
56
- disableAutoNegotiation?: boolean;
57
- forceMediaTransport?: boolean;
58
- portRangeBegin?: number;
59
- portRangeEnd?: number;
60
- maxMessageSize?: number;
61
- mtu?: number;
62
- iceTransportPolicy?: TransportPolicy;
63
- }
64
-
65
- // Lowercase to match the description type string from libdatachannel
66
- export enum DescriptionType {
67
- Unspec = 'unspec',
68
- Offer = 'offer',
69
- Answer = 'answer',
70
- Pranswer = 'pranswer',
71
- Rollback = 'rollback',
72
- }
73
-
74
- export interface DataChannelInitConfig {
75
- protocol?: string;
76
- negotiated?: boolean;
77
- id?: number;
78
- unordered?: boolean; // Reliability
79
- maxPacketLifeTime?: number; // Reliability
80
- maxRetransmits?: number; // Reliability
81
- }
82
-
83
- export interface SelectedCandidateInfo {
84
- address: string;
85
- port: number;
86
- type: string;
87
- transportType: string;
88
- candidate: string;
89
- mid: string;
90
- priority: number;
91
- }
92
-
93
- // Must be same as rtc enum class Direction
94
- export const enum Direction {
95
- SendOnly = 'SendOnly',
96
- RecvOnly = 'RecvOnly',
97
- SendRecv = 'SendRecv',
98
- Inactive = 'Inactive',
99
- Unknown = 'Unknown',
100
- }
101
-
102
- export class RtcpReceivingSession {
103
- //
104
- }
105
-
106
- export class Audio {
107
- constructor(mid: string, dir: Direction);
108
- addAudioCodec(payloadType: number, codec: string, profile?: string): void;
109
- addOpusCodec(payloadType: number, profile?: string): string;
110
-
111
- direction(): Direction;
112
- generateSdp(eol: string, addr: string, port: number): string;
113
- mid(): string;
114
- setDirection(dir: Direction): void;
115
- description(): string;
116
- removeFormat(fmt: string): void;
117
- addSSRC(ssrc: number, name?: string, msid?: string, trackID?: string): void;
118
- removeSSRC(ssrc: number): void;
119
- replaceSSRC(oldSsrc: number, ssrc: number, name?: string, msid?: string, trackID?: string): void;
120
- hasSSRC(ssrc: number): boolean;
121
- getSSRCs(): number[];
122
- getCNameForSsrc(ssrc: number): string;
123
- setBitrate(bitRate: number): void;
124
- getBitrate(): number;
125
- hasPayloadType(payloadType: number): boolean;
126
- addRTXCodec(payloadType: number, originalPayloadType: number, clockRate: number): void;
127
- addRTPMap(): void;
128
- parseSdpLine(line: string): void;
129
- }
130
-
131
- export class Video {
132
- constructor(mid: string, dir: Direction);
133
- addVideoCodec(payloadType: number, codec: string, profile?: string): void;
134
- addH264Codec(payloadType: number, profile?: string): void;
135
- addVP8Codec(payloadType: number): void;
136
- addVP9Codec(payloadType: number): void;
137
-
138
- direction(): Direction;
139
- generateSdp(eol: string, addr: string, port: number): string;
140
- mid(): string;
141
- setDirection(dir: Direction): void;
142
- description(): string;
143
- removeFormat(fmt: string): void;
144
- addSSRC(ssrc: number, name?: string, msid?: string, trackID?: string): void;
145
- removeSSRC(ssrc: number): void;
146
- replaceSSRC(oldSsrc: number, ssrc: number, name?: string, msid?: string, trackID?: string): void;
147
- hasSSRC(ssrc: number): boolean;
148
- getSSRCs(): number[];
149
- getCNameForSsrc(ssrc: number): string;
150
- setBitrate(bitRate: number): void;
151
- getBitrate(): number;
152
- hasPayloadType(payloadType: number): boolean;
153
- addRTXCodec(payloadType: number, originalPayloadType: number, clockRate: number): void;
154
- addRTPMap(): void;
155
- parseSdpLine(line: string): void;
156
- }
157
-
158
- export class Track {
159
- direction(): Direction;
160
- mid(): string;
161
- type(): string;
162
- close(): void;
163
- sendMessage(msg: string): boolean;
164
- sendMessageBinary(buffer: Buffer): boolean;
165
- isOpen(): boolean;
166
- isClosed(): boolean;
167
- bufferedAmount(): number;
168
- maxMessageSize(): number;
169
- requestBitrate(bitRate: number): boolean;
170
- setBufferedAmountLowThreshold(newSize: number): void;
171
- requestKeyframe(): boolean;
172
- setMediaHandler(handler: RtcpReceivingSession): void;
173
- onOpen(cb: () => void): void;
174
- onClosed(cb: () => void): void;
175
- onError(cb: (err: string) => void): void;
176
- onMessage(cb: (msg: Buffer) => void): void;
177
- }
178
-
179
- export interface Channel {
180
- close(): void;
181
- sendMessage(msg: string): boolean;
182
- sendMessageBinary(buffer: Uint8Array): boolean;
183
- isOpen(): boolean;
184
- bufferedAmount(): number;
185
- maxMessageSize(): number;
186
- setBufferedAmountLowThreshold(newSize: number): void;
187
- onOpen(cb: () => void): void;
188
- onClosed(cb: () => void): void;
189
- onError(cb: (err: string) => void): void;
190
- onBufferedAmountLow(cb: () => void): void;
191
- onMessage(cb: (msg: string | Buffer) => void): void;
192
- }
193
- export class DataChannel implements Channel {
194
- getLabel(): string;
195
- getId(): number;
196
- getProtocol(): string;
197
-
198
- // Channel implementation
199
- close(): void;
200
- sendMessage(msg: string): boolean;
201
- sendMessageBinary(buffer: Uint8Array): boolean;
202
- isOpen(): boolean;
203
- bufferedAmount(): number;
204
- maxMessageSize(): number;
205
- setBufferedAmountLowThreshold(newSize: number): void;
206
- onOpen(cb: () => void): void;
207
- onClosed(cb: () => void): void;
208
- onError(cb: (err: string) => void): void;
209
- onBufferedAmountLow(cb: () => void): void;
210
- onMessage(cb: (msg: string | Buffer) => void): void;
211
- }
212
-
213
- export interface WebSocketConfiguration {
214
- disableTlsVerification?: boolean; // default = false, if true, don't verify the TLS certificate
215
- proxyServer?: ProxyServer; // only non-authenticated http supported for now
216
- protocols?: string[];
217
- connectionTimeout?: number; // miliseconds, zero to disable
218
- pingInterval?: number; // millisecondrs, zero to disable
219
- maxOutstandingPings?: number;
220
- caCertificatePemFile?: string;
221
- certificatePemFile?: string;
222
- keyPemFile?: string;
223
- keyPemPass?: string;
224
- maxMessageSize: number;
225
- }
226
- export class WebSocket implements Channel {
227
- constructor(config?: WebSocketConfiguration);
228
- open(url: string): void;
229
- forceClose(): void;
230
- remoteAddress(): string | undefined;
231
- path(): string | undefined;
232
-
233
- // Channel implementation
234
- close(): void;
235
- sendMessage(msg: string): boolean;
236
- sendMessageBinary(buffer: Uint8Array): boolean;
237
- isOpen(): boolean;
238
- bufferedAmount(): number;
239
- maxMessageSize(): number;
240
- setBufferedAmountLowThreshold(newSize: number): void;
241
- onOpen(cb: () => void): void;
242
- onClosed(cb: () => void): void;
243
- onError(cb: (err: string) => void): void;
244
- onBufferedAmountLow(cb: () => void): void;
245
- onMessage(cb: (msg: string | Buffer) => void): void;
246
- }
247
-
248
- export interface WebSocketServerConfiguration {
249
- port?: number; // default 8080
250
- enableTls?: boolean; // default = false;
251
- certificatePemFile?: string;
252
- keyPemFile?: string;
253
- keyPemPass?: string;
254
- bindAddress?: string;
255
- connectionTimeout?: number; // milliseconds
256
- maxMessageSize?: number;
257
- }
258
-
259
- export class WebSocketServer {
260
- constructor(config?: WebSocketServerConfiguration);
261
- port(): number;
262
- stop(): void;
263
- onClient(cb: (ws: WebSocket) => void): void;
264
- }
265
-
266
- export class PeerConnection {
267
- constructor(peerName: string, config: RtcConfig);
268
- close(): void;
269
- setLocalDescription(type?: DescriptionType): void;
270
- setRemoteDescription(sdp: string, type: DescriptionType): void;
271
- localDescription(): { type: string; sdp: string } | null;
272
- remoteDescription(): { type: string; sdp: string } | null;
273
- addRemoteCandidate(candidate: string, mid: string): void;
274
- createDataChannel(label: string, config?: DataChannelInitConfig): DataChannel;
275
- addTrack(media: Video | Audio): Track;
276
- hasMedia(): boolean;
277
- state(): RTCPeerConnectionState;
278
- iceState(): RTCIceConnectionState;
279
- signalingState(): RTCSignalingState;
280
- gatheringState(): RTCIceGatheringState;
281
- onLocalDescription(cb: (sdp: string, type: DescriptionType) => void): void;
282
- onLocalCandidate(cb: (candidate: string, mid: string) => void): void;
283
- onStateChange(cb: (state: string) => void): void;
284
- onIceStateChange(cb: (state: string) => void): void;
285
- onSignalingStateChange(cb: (state: string) => void): void;
286
- onGatheringStateChange(cb: (state: string) => void): void;
287
- onDataChannel(cb: (dc: DataChannel) => void): void;
288
- onTrack(cb: (track: Track) => void): void;
289
- bytesSent(): number;
290
- bytesReceived(): number;
291
- rtt(): number;
292
- getSelectedCandidatePair(): { local: SelectedCandidateInfo; remote: SelectedCandidateInfo } | null;
293
- maxDataChannelId(): number;
294
- maxMessageSize(): number;
295
- }
296
-
297
- export class DataChannelStream extends stream.Duplex {
298
- constructor(rawChannel: DataChannel, options?: Omit<stream.DuplexOptions, 'objectMode'>);
299
- get label(): string;
300
- }
package/lib/index.js DELETED
@@ -1,58 +0,0 @@
1
- import nodeDataChannel from './node-datachannel.js';
2
- import DataChannelStream from './datachannel-stream.js';
3
- import WebSocketServer from './websocket-server.js';
4
-
5
- const {
6
- initLogger,
7
- cleanup,
8
- preload,
9
- setSctpSettings,
10
- RtcpReceivingSession,
11
- Track,
12
- Video,
13
- Audio,
14
- DataChannel,
15
- PeerConnection,
16
- WebSocket,
17
- } = nodeDataChannel;
18
-
19
- export const DescriptionType = {
20
- Unspec: 'unspec',
21
- Offer: 'offer',
22
- Answer: 'answer',
23
- Pranswer: 'pranswer',
24
- Rollback: 'rollback',
25
- };
26
-
27
- export {
28
- initLogger,
29
- cleanup,
30
- preload,
31
- setSctpSettings,
32
- RtcpReceivingSession,
33
- Track,
34
- Video,
35
- Audio,
36
- DataChannel,
37
- PeerConnection,
38
- WebSocket,
39
- WebSocketServer,
40
- // Extra exports
41
- DataChannelStream,
42
- };
43
-
44
- export default {
45
- initLogger,
46
- cleanup,
47
- preload,
48
- setSctpSettings,
49
- RtcpReceivingSession,
50
- Track,
51
- Video,
52
- Audio,
53
- DataChannel,
54
- PeerConnection,
55
- WebSocket,
56
- WebSocketServer,
57
- DataChannelStream,
58
- };
@@ -1,7 +0,0 @@
1
- // createRequire is native in node version >= 12
2
- import { createRequire } from 'module';
3
- const require = createRequire(import.meta.url);
4
-
5
- const nodeDataChannel = require('../build/Release/node_datachannel.node');
6
-
7
- export default nodeDataChannel;
@@ -1,9 +0,0 @@
1
- /// <reference lib="dom" />
2
-
3
- export class RTCPeerConnectionIceEvent extends Event {
4
- readonly candidate: RTCIceCandidate | null;
5
- }
6
-
7
- export class RTCDataChannelEvent extends Event {
8
- readonly channel: RTCDataChannel | null;
9
- }
@@ -1,29 +0,0 @@
1
- export class RTCPeerConnectionIceEvent extends Event {
2
- #candidate;
3
-
4
- constructor(candidate) {
5
- super('icecandidate');
6
-
7
- this.#candidate = candidate;
8
- }
9
-
10
- get candidate() {
11
- return this.#candidate;
12
- }
13
- }
14
-
15
- export class RTCDataChannelEvent extends Event {
16
- #channel;
17
-
18
- constructor(type, eventInitDict) {
19
- super(type);
20
-
21
- if (type && !eventInitDict.channel) throw new TypeError('channel member is required');
22
-
23
- this.#channel = eventInitDict?.channel;
24
- }
25
-
26
- get channel() {
27
- return this.#channel;
28
- }
29
- }