node-datachannel 0.3.0 → 0.3.3

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 (54) hide show
  1. package/.github/workflows/build-linux.yml +1 -1
  2. package/.github/workflows/build-mac.yml +1 -1
  3. package/.github/workflows/build-win.yml +1 -1
  4. package/.github/workflows/lint.yml +19 -0
  5. package/CMakeLists.txt +3 -3
  6. package/README.md +2 -0
  7. package/examples/client-server/client-benchmark.js +43 -32
  8. package/examples/client-server/client-periodic.js +30 -14
  9. package/examples/client-server/client.js +6 -5
  10. package/examples/client-server/package-lock.json +183 -44
  11. package/examples/client-server/signaling-server.js +3 -5
  12. package/examples/media/media.js +9 -9
  13. package/lib/index.d.ts +102 -101
  14. package/node_modules/lru-cache/package.json +2 -4
  15. package/node_modules/minimist/package.json +0 -1
  16. package/node_modules/node-abi/node_modules/semver/README.md +3 -1
  17. package/node_modules/node-abi/node_modules/semver/bin/semver.js +19 -9
  18. package/node_modules/node-abi/node_modules/semver/classes/comparator.js +3 -2
  19. package/node_modules/node-abi/node_modules/semver/classes/index.js +1 -1
  20. package/node_modules/node-abi/node_modules/semver/classes/range.js +31 -22
  21. package/node_modules/node-abi/node_modules/semver/classes/semver.js +1 -1
  22. package/node_modules/node-abi/node_modules/semver/functions/cmp.js +8 -4
  23. package/node_modules/node-abi/node_modules/semver/functions/coerce.js +3 -2
  24. package/node_modules/node-abi/node_modules/semver/functions/inc.js +4 -1
  25. package/node_modules/node-abi/node_modules/semver/functions/parse.js +1 -1
  26. package/node_modules/node-abi/node_modules/semver/internal/constants.js +2 -2
  27. package/node_modules/node-abi/node_modules/semver/internal/identifiers.js +1 -1
  28. package/node_modules/node-abi/node_modules/semver/internal/parse-options.js +3 -3
  29. package/node_modules/node-abi/node_modules/semver/internal/re.js +3 -3
  30. package/node_modules/node-abi/node_modules/semver/package.json +51 -18
  31. package/node_modules/node-abi/node_modules/semver/ranges/min-version.js +2 -1
  32. package/node_modules/node-abi/node_modules/semver/ranges/outside.js +1 -1
  33. package/node_modules/node-abi/node_modules/semver/ranges/simplify.js +15 -12
  34. package/node_modules/node-abi/node_modules/semver/ranges/subset.js +53 -31
  35. package/node_modules/npmlog/node_modules/are-we-there-yet/package.json +10 -10
  36. package/node_modules/npmlog/package.json +1 -1
  37. package/node_modules/tar-stream/node_modules/bl/.travis.yml +4 -3
  38. package/node_modules/tar-stream/node_modules/bl/BufferList.js +1 -1
  39. package/node_modules/tar-stream/node_modules/bl/package.json +10 -10
  40. package/node_modules/tar-stream/node_modules/bl/test/test.js +20 -2
  41. package/node_modules/wide-align/LICENSE +0 -0
  42. package/node_modules/wide-align/README.md +0 -0
  43. package/node_modules/wide-align/align.js +0 -0
  44. package/node_modules/wide-align/package.json +14 -14
  45. package/package.json +2 -2
  46. package/src/data-channel-wrapper.cpp +69 -53
  47. package/src/data-channel-wrapper.h +0 -1
  48. package/src/media-track-wrapper.cpp +91 -52
  49. package/src/media-track-wrapper.h +0 -1
  50. package/src/peer-connection-wrapper.cpp +111 -71
  51. package/src/peer-connection-wrapper.h +0 -2
  52. package/test/connectivity.js +18 -17
  53. package/test/test.js +22 -30
  54. package/node_modules/node-abi/node_modules/semver/CHANGELOG.md +0 -111
@@ -2,7 +2,7 @@ name: Build - Linux
2
2
 
3
3
  on:
4
4
  workflow_dispatch:
5
- create:
5
+ push:
6
6
  tags:
7
7
  - v*
8
8
 
@@ -2,7 +2,7 @@ name: Build - Mac
2
2
 
3
3
  on:
4
4
  workflow_dispatch:
5
- create:
5
+ push:
6
6
  tags:
7
7
  - v*
8
8
 
@@ -2,7 +2,7 @@ name: Build - Win
2
2
 
3
3
  on:
4
4
  workflow_dispatch:
5
- create:
5
+ push:
6
6
  tags:
7
7
  - v*
8
8
 
@@ -0,0 +1,19 @@
1
+ name: Lint
2
+
3
+ on:
4
+ pull_request:
5
+ workflow_dispatch:
6
+
7
+ jobs:
8
+ build:
9
+
10
+ runs-on: ubuntu-latest
11
+
12
+ steps:
13
+ - uses: actions/checkout@v3
14
+ - name: Use Node.js
15
+ uses: actions/setup-node@v3
16
+ with:
17
+ node-version: '16.x'
18
+ - run: npm ci
19
+ - run: npm run lint
package/CMakeLists.txt CHANGED
@@ -1,11 +1,11 @@
1
1
  cmake_minimum_required(VERSION 3.15)
2
2
  cmake_policy(SET CMP0091 NEW)
3
- project(node_datachannel VERSION 0.2.4)
3
+ project(node_datachannel VERSION 0.3.2)
4
4
 
5
5
  # Workaround for https://github.com/murat-dogan/node-datachannel/issues/65
6
6
  if( NODE_RUNTIMEVERSION VERSION_GREATER_EQUAL "17.0.0")
7
7
  add_compile_definitions(OPENSSL_API_COMPAT=0x10100001L)
8
- add_compile_definitions(OPENSSL_CONFIGURED_API=0x30000000L)
8
+ add_compile_definitions(OPENSSL_CONFIGURED_API=0x30000000L)
9
9
  endif()
10
10
 
11
11
  include_directories(${CMAKE_JS_INC})
@@ -33,7 +33,7 @@ include(FetchContent)
33
33
  FetchContent_Declare(
34
34
  libdatachannel
35
35
  GIT_REPOSITORY https://github.com/paullouisageneau/libdatachannel.git
36
- GIT_TAG "v0.17.0"
36
+ GIT_TAG "v0.17.6"
37
37
  )
38
38
 
39
39
  option(NO_MEDIA "Disable media transport support in libdatachannel" OFF)
package/README.md CHANGED
@@ -104,9 +104,11 @@ export interface RtcConfig {
104
104
  iceServers: (string | IceServer)[];
105
105
  proxyServer?: ProxyServer;
106
106
  enableIceTcp?: boolean;
107
+ enableIceUdpMux?: boolean;
107
108
  portRangeBegin?: number;
108
109
  portRangeEnd?: number;
109
110
  maxMessageSize?: number;
111
+ mtu?: number;
110
112
  iceTransportPolicy?: TransportPolicy;
111
113
  }
112
114
 
@@ -1,8 +1,9 @@
1
- const yargs = require('yargs/yargs')
2
- const { hideBin } = require('yargs/helpers')
1
+ /* eslint-disable @typescript-eslint/no-var-requires */
2
+ const yargs = require('yargs/yargs');
3
+ const { hideBin } = require('yargs/helpers');
3
4
  const nodeDataChannel = require('../../lib/index');
4
5
  const WebSocket = require('ws');
5
- const readline = require("readline");
6
+ const readline = require('readline');
6
7
 
7
8
  // Init Logger
8
9
  nodeDataChannel.initLogger('Debug');
@@ -26,38 +27,36 @@ const argv = yargs(hideBin(process.argv))
26
27
  .option('disableSend', {
27
28
  type: 'boolean',
28
29
  description: 'Disable Send',
29
- default: false
30
+ default: false,
30
31
  })
31
32
  .option('wsUrl', {
32
33
  type: 'string',
33
34
  description: 'Web Socket URL',
34
- default: 'ws://localhost:8000'
35
+ default: 'ws://localhost:8000',
35
36
  })
36
37
  .option('dataChannelCount', {
37
38
  type: 'number',
38
39
  description: 'Data Channel Count To Create',
39
- default: 1
40
- })
41
- .argv;
40
+ default: 1,
41
+ }).argv;
42
42
 
43
43
  // Disable Send
44
- const disableSend = argv.disableSend
44
+ const disableSend = argv.disableSend;
45
45
  if (disableSend) console.log('Send Disabled!');
46
46
 
47
47
  // Signaling Server
48
48
  const wsUrl = process.env.WS_URL || argv.wsUrl;
49
- console.log(wsUrl)
49
+ console.log(wsUrl);
50
50
  const dataChannelCount = argv.dataChannelCount;
51
51
 
52
52
  // Read Line Interface
53
53
  const rl = readline.createInterface({
54
54
  input: process.stdin,
55
- output: process.stdout
55
+ output: process.stdout,
56
56
  });
57
57
 
58
-
59
58
  const ws = new WebSocket(wsUrl + '/' + id, {
60
- perMessageDeflate: false
59
+ perMessageDeflate: false,
61
60
  });
62
61
 
63
62
  console.log(`The local ID is: ${id}`);
@@ -104,7 +103,7 @@ function readUserInput() {
104
103
  let dcArrItem = {
105
104
  dc: null,
106
105
  bytesSent: 0,
107
- bytesReceived: 0
106
+ bytesReceived: 0,
108
107
  };
109
108
  console.log('Creating DataChannel with label "test-' + i + '"');
110
109
  dcArrItem.dc = pcMap[peerId].createDataChannel('test-' + i);
@@ -112,16 +111,16 @@ function readUserInput() {
112
111
  dcArrItem.dc.setBufferedAmountLowThreshold(BUFFER_SIZE);
113
112
  dcArrItem.dc.onOpen(() => {
114
113
  while (!disableSend && dcArrItem.dc.bufferedAmount() <= BUFFER_SIZE) {
115
- dcArrItem.dc.sendMessage(msgToSend)
116
- dcArrItem.bytesSent += msgToSend.length;;
117
- };
114
+ dcArrItem.dc.sendMessage(msgToSend);
115
+ dcArrItem.bytesSent += msgToSend.length;
116
+ }
118
117
  });
119
118
 
120
119
  dcArrItem.dc.onBufferedAmountLow(() => {
121
120
  while (!disableSend && dcArrItem.dc.bufferedAmount() <= BUFFER_SIZE) {
122
- dcArrItem.dc.sendMessage(msgToSend)
123
- dcArrItem.bytesSent += msgToSend.length;;
124
- };
121
+ dcArrItem.dc.sendMessage(msgToSend);
122
+ dcArrItem.bytesSent += msgToSend.length;
123
+ }
125
124
  });
126
125
 
127
126
  dcArrItem.dc.onMessage((msg) => {
@@ -131,23 +130,36 @@ function readUserInput() {
131
130
  dcArr.push(dcArrItem);
132
131
  }
133
132
 
134
-
135
133
  // Report
136
134
  let i = 0;
137
135
  setInterval(() => {
138
136
  let totalBytesSent = 0;
139
137
  let totalBytesReceived = 0;
140
138
  for (let j = 0; j < dcArr.length; j++) {
141
- console.log(`${j == 0 ? i + '#' : ''} DC-${j + 1} Sent: ${byte2KB(dcArr[j].bytesSent)} KB/s / Received: ${byte2KB(dcArr[j].bytesReceived)} KB/s / SendBufferAmount: ${dcArr[j].dc.bufferedAmount()} / DataChannelOpen: ${dcArr[j].dc.isOpen()}`);
139
+ console.log(
140
+ `${j == 0 ? i + '#' : ''} DC-${j + 1} Sent: ${byte2KB(
141
+ dcArr[j].bytesSent,
142
+ )} KB/s / Received: ${byte2KB(dcArr[j].bytesReceived)} KB/s / SendBufferAmount: ${dcArr[
143
+ j
144
+ ].dc.bufferedAmount()} / DataChannelOpen: ${dcArr[j].dc.isOpen()}`,
145
+ );
142
146
  totalBytesSent += dcArr[j].bytesSent;
143
147
  totalBytesReceived += dcArr[j].bytesReceived;
144
148
  dcArr[j].bytesSent = 0;
145
149
  dcArr[j].bytesReceived = 0;
146
150
  }
147
- console.log(`Total Sent: ${byte2KB(totalBytesSent)} KB/s / Total Received: ${byte2KB(totalBytesReceived)} KB/s`);
151
+ console.log(
152
+ `Total Sent: ${byte2KB(totalBytesSent)} KB/s / Total Received: ${byte2KB(
153
+ totalBytesReceived,
154
+ )} KB/s`,
155
+ );
148
156
 
149
157
  if (i % 5 == 0) {
150
- console.log(`Stats# Sent: ${byte2MB(pcMap[peerId].bytesSent())} MB / Received: ${byte2MB(pcMap[peerId].bytesReceived())} MB / rtt: ${pcMap[peerId].rtt()} ms`);
158
+ console.log(
159
+ `Stats# Sent: ${byte2MB(pcMap[peerId].bytesSent())} MB / Received: ${byte2MB(
160
+ pcMap[peerId].bytesReceived(),
161
+ )} MB / rtt: ${pcMap[peerId].rtt()} ms`,
162
+ );
151
163
  console.log(`Selected Candidates# ${JSON.stringify(pcMap[peerId].getSelectedCandidatePair())}`);
152
164
  console.log(``);
153
165
  }
@@ -179,16 +191,15 @@ function createPeerConnection(peerId) {
179
191
  let msgToSend = randomId(MESSAGE_SIZE);
180
192
 
181
193
  while (!disableSend && dc.bufferedAmount() <= BUFFER_SIZE) {
182
- dc.sendMessage(msgToSend)
183
- };
194
+ dc.sendMessage(msgToSend);
195
+ }
184
196
 
185
197
  dc.onBufferedAmountLow(() => {
186
198
  while (!disableSend && dc.bufferedAmount() <= BUFFER_SIZE) {
187
- dc.sendMessage(msgToSend)
188
- };
199
+ dc.sendMessage(msgToSend);
200
+ }
189
201
  });
190
202
 
191
-
192
203
  dc.onMessage((msg) => {
193
204
  // bytesReceived += msg.length;
194
205
  });
@@ -208,9 +219,9 @@ function randomId(length) {
208
219
  }
209
220
 
210
221
  function byte2KB(bytes) {
211
- return `${Math.round(bytes / 1000)}`
222
+ return `${Math.round(bytes / 1000)}`;
212
223
  }
213
224
 
214
225
  function byte2MB(bytes) {
215
- return `${Math.round(bytes / (1000 * 1000))}`
216
- }
226
+ return `${Math.round(bytes / (1000 * 1000))}`;
227
+ }
@@ -1,6 +1,7 @@
1
+ /* eslint-disable @typescript-eslint/no-var-requires */
1
2
  const nodeDataChannel = require('../../lib/index');
2
3
  const WebSocket = require('ws');
3
- const readline = require("readline");
4
+ const readline = require('readline');
4
5
 
5
6
  // Init Logger
6
7
  nodeDataChannel.initLogger('Debug');
@@ -20,13 +21,13 @@ const BUFFER_SIZE = MESSAGE_SIZE * 10;
20
21
  // Read Line Interface
21
22
  const rl = readline.createInterface({
22
23
  input: process.stdin,
23
- output: process.stdout
24
+ output: process.stdout,
24
25
  });
25
26
 
26
27
  // Signaling Server
27
- const WS_URL = process.env.WS_URL || "ws://localhost:8000"
28
+ const WS_URL = process.env.WS_URL || 'ws://localhost:8000';
28
29
  const ws = new WebSocket(WS_URL + '/' + id, {
29
- perMessageDeflate: false
30
+ perMessageDeflate: false,
30
31
  });
31
32
 
32
33
  console.log(`The local ID is: ${id}`);
@@ -77,7 +78,7 @@ function readUserInput() {
77
78
  dc.onOpen(() => {
78
79
  setInterval(() => {
79
80
  if (dc.bufferedAmount() <= BUFFER_SIZE) {
80
- dc.sendMessage(msgToSend)
81
+ dc.sendMessage(msgToSend);
81
82
  bytesSent += msgToSend.length;
82
83
  }
83
84
  }, 2);
@@ -90,13 +91,21 @@ function readUserInput() {
90
91
  // Report
91
92
  let i = 0;
92
93
  setInterval(() => {
93
- console.log(`${i++}# Sent: ${byte2KB(bytesSent)} KB/s / Received: ${byte2KB(bytesReceived)} KB/s / SendBufferAmount: ${dc.bufferedAmount()} / DataChannelOpen: ${dc.isOpen()}`);
94
+ console.log(
95
+ `${i++}# Sent: ${byte2KB(bytesSent)} KB/s / Received: ${byte2KB(
96
+ bytesReceived,
97
+ )} KB/s / SendBufferAmount: ${dc.bufferedAmount()} / DataChannelOpen: ${dc.isOpen()}`,
98
+ );
94
99
  bytesSent = 0;
95
100
  bytesReceived = 0;
96
101
  }, 1000);
97
102
 
98
103
  setInterval(() => {
99
- console.log(`Stats# Sent: ${byte2MB(pcMap[peerId].bytesSent())} MB / Received: ${byte2MB(pcMap[peerId].bytesReceived())} MB / rtt: ${pcMap[peerId].rtt()} ms`);
104
+ console.log(
105
+ `Stats# Sent: ${byte2MB(pcMap[peerId].bytesSent())} MB / Received: ${byte2MB(
106
+ pcMap[peerId].bytesReceived(),
107
+ )} MB / rtt: ${pcMap[peerId].rtt()} ms`,
108
+ );
100
109
  console.log(`Selected Candidates# ${JSON.stringify(pcMap[peerId].getSelectedCandidatePair())}`);
101
110
  console.log(``);
102
111
  }, 5 * 1000);
@@ -129,12 +138,11 @@ function createPeerConnection(peerId) {
129
138
 
130
139
  setInterval(() => {
131
140
  if (dc.bufferedAmount() <= BUFFER_SIZE) {
132
- dc.sendMessage(msgToSend)
141
+ dc.sendMessage(msgToSend);
133
142
  bytesSent += msgToSend.length;
134
143
  }
135
144
  }, 2);
136
145
 
137
-
138
146
  dc.onMessage((msg) => {
139
147
  bytesReceived += msg.length;
140
148
  });
@@ -142,13 +150,21 @@ function createPeerConnection(peerId) {
142
150
  // Report
143
151
  let i = 0;
144
152
  setInterval(() => {
145
- console.log(`${i++}# Sent: ${byte2KB(bytesSent)} KB/s / Received: ${byte2KB(bytesReceived)} KB/s / SendBufferAmount: ${dc.bufferedAmount()} / DataChannelOpen: ${dc.isOpen()}`);
153
+ console.log(
154
+ `${i++}# Sent: ${byte2KB(bytesSent)} KB/s / Received: ${byte2KB(
155
+ bytesReceived,
156
+ )} KB/s / SendBufferAmount: ${dc.bufferedAmount()} / DataChannelOpen: ${dc.isOpen()}`,
157
+ );
146
158
  bytesSent = 0;
147
159
  bytesReceived = 0;
148
160
  }, 1000);
149
161
 
150
162
  setInterval(() => {
151
- console.log(`Stats# Sent: ${byte2MB(pcMap[peerId].bytesSent())} MB / Received: ${byte2MB(pcMap[peerId].bytesReceived())} MB / rtt: ${pcMap[peerId].rtt()} ms`);
163
+ console.log(
164
+ `Stats# Sent: ${byte2MB(pcMap[peerId].bytesSent())} MB / Received: ${byte2MB(
165
+ pcMap[peerId].bytesReceived(),
166
+ )} MB / rtt: ${pcMap[peerId].rtt()} ms`,
167
+ );
152
168
  console.log(`Selected Candidates# ${JSON.stringify(pcMap[peerId].getSelectedCandidatePair())}`);
153
169
  console.log(``);
154
170
  }, 5 * 1000);
@@ -168,9 +184,9 @@ function randomId(length) {
168
184
  }
169
185
 
170
186
  function byte2KB(bytes) {
171
- return `${Math.round(bytes / 1024)}`
187
+ return `${Math.round(bytes / 1024)}`;
172
188
  }
173
189
 
174
190
  function byte2MB(bytes) {
175
- return `${Math.round(bytes / (1024 * 1024))}`
176
- }
191
+ return `${Math.round(bytes / (1024 * 1024))}`;
192
+ }
@@ -1,6 +1,7 @@
1
+ /* eslint-disable @typescript-eslint/no-var-requires */
1
2
  const nodeDataChannel = require('../../lib/index');
2
3
  const WebSocket = require('ws');
3
- const readline = require("readline");
4
+ const readline = require('readline');
4
5
 
5
6
  // Init Logger
6
7
  nodeDataChannel.initLogger('Error');
@@ -12,9 +13,9 @@ const pcMap = {};
12
13
  const id = randomId(4);
13
14
 
14
15
  // Signaling Server
15
- const WS_URL = process.env.WS_URL || "ws://localhost:8000"
16
+ const WS_URL = process.env.WS_URL || 'ws://localhost:8000';
16
17
  const ws = new WebSocket(WS_URL + '/' + id, {
17
- perMessageDeflate: false
18
+ perMessageDeflate: false,
18
19
  });
19
20
 
20
21
  console.log(`The local ID is: ${id}`);
@@ -52,7 +53,7 @@ function readUserInput() {
52
53
  // Read Line Interface
53
54
  const rl = readline.createInterface({
54
55
  input: process.stdin,
55
- output: process.stdout
56
+ output: process.stdout,
56
57
  });
57
58
 
58
59
  rl.question('Enter a remote ID to send an offer:\n', (peerId) => {
@@ -110,4 +111,4 @@ function randomId(length) {
110
111
  result += characters.charAt(Math.floor(Math.random() * charactersLength));
111
112
  }
112
113
  return result;
113
- }
114
+ }