node-datachannel 0.12.0 → 0.20.0-alpha.2

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 (219) 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/dist/cjs/index.cjs +11 -0
  6. package/dist/cjs/index.cjs.map +1 -0
  7. package/dist/cjs/lib/datachannel-stream.cjs +101 -0
  8. package/dist/cjs/lib/datachannel-stream.cjs.map +1 -0
  9. package/dist/cjs/lib/index.cjs +61 -0
  10. package/dist/cjs/lib/index.cjs.map +1 -0
  11. package/dist/cjs/lib/node-datachannel.cjs +14 -0
  12. package/dist/cjs/lib/node-datachannel.cjs.map +1 -0
  13. package/dist/cjs/lib/websocket-server.cjs +44 -0
  14. package/dist/cjs/lib/websocket-server.cjs.map +1 -0
  15. package/dist/cjs/lib/websocket.cjs +8 -0
  16. package/dist/cjs/lib/websocket.cjs.map +1 -0
  17. package/dist/cjs/polyfill/Events.cjs +37 -0
  18. package/dist/cjs/polyfill/Events.cjs.map +1 -0
  19. package/dist/cjs/polyfill/Exception.cjs +34 -0
  20. package/dist/cjs/polyfill/Exception.cjs.map +1 -0
  21. package/dist/cjs/polyfill/RTCCertificate.cjs +31 -0
  22. package/dist/cjs/polyfill/RTCCertificate.cjs.map +1 -0
  23. package/dist/cjs/polyfill/RTCDataChannel.cjs +179 -0
  24. package/dist/cjs/polyfill/RTCDataChannel.cjs.map +1 -0
  25. package/dist/cjs/polyfill/RTCDtlsTransport.cjs +52 -0
  26. package/dist/cjs/polyfill/RTCDtlsTransport.cjs.map +1 -0
  27. package/dist/cjs/polyfill/RTCError.cjs +76 -0
  28. package/dist/cjs/polyfill/RTCError.cjs.map +1 -0
  29. package/dist/cjs/polyfill/RTCIceCandidate.cjs +129 -0
  30. package/dist/cjs/polyfill/RTCIceCandidate.cjs.map +1 -0
  31. package/dist/cjs/polyfill/RTCIceTransport.cjs +84 -0
  32. package/dist/cjs/polyfill/RTCIceTransport.cjs.map +1 -0
  33. package/dist/cjs/polyfill/RTCPeerConnection.cjs +417 -0
  34. package/dist/cjs/polyfill/RTCPeerConnection.cjs.map +1 -0
  35. package/dist/cjs/polyfill/RTCSctpTransport.cjs +61 -0
  36. package/dist/cjs/polyfill/RTCSctpTransport.cjs.map +1 -0
  37. package/dist/cjs/polyfill/RTCSessionDescription.cjs +37 -0
  38. package/dist/cjs/polyfill/RTCSessionDescription.cjs.map +1 -0
  39. package/dist/cjs/polyfill/index.cjs +42 -0
  40. package/dist/cjs/polyfill/index.cjs.map +1 -0
  41. package/dist/esm/index.mjs +8 -0
  42. package/dist/esm/index.mjs.map +1 -0
  43. package/dist/esm/lib/datachannel-stream.mjs +78 -0
  44. package/dist/esm/lib/datachannel-stream.mjs.map +1 -0
  45. package/dist/esm/lib/index.mjs +44 -0
  46. package/dist/esm/lib/index.mjs.map +1 -0
  47. package/dist/esm/lib/node-datachannel.mjs +18 -0
  48. package/dist/esm/lib/node-datachannel.mjs.map +1 -0
  49. package/dist/esm/lib/websocket-server.mjs +42 -0
  50. package/dist/esm/lib/websocket-server.mjs.map +1 -0
  51. package/dist/esm/lib/websocket.mjs +6 -0
  52. package/dist/esm/lib/websocket.mjs.map +1 -0
  53. package/dist/esm/polyfill/Events.mjs +34 -0
  54. package/dist/esm/polyfill/Events.mjs.map +1 -0
  55. package/dist/esm/polyfill/Exception.mjs +28 -0
  56. package/dist/esm/polyfill/Exception.mjs.map +1 -0
  57. package/dist/esm/polyfill/RTCCertificate.mjs +27 -0
  58. package/dist/esm/polyfill/RTCCertificate.mjs.map +1 -0
  59. package/dist/esm/polyfill/RTCDataChannel.mjs +175 -0
  60. package/dist/esm/polyfill/RTCDataChannel.mjs.map +1 -0
  61. package/dist/esm/polyfill/RTCDtlsTransport.mjs +48 -0
  62. package/dist/esm/polyfill/RTCDtlsTransport.mjs.map +1 -0
  63. package/dist/esm/polyfill/RTCError.mjs +72 -0
  64. package/dist/esm/polyfill/RTCError.mjs.map +1 -0
  65. package/dist/esm/polyfill/RTCIceCandidate.mjs +125 -0
  66. package/dist/esm/polyfill/RTCIceCandidate.mjs.map +1 -0
  67. package/dist/esm/polyfill/RTCIceTransport.mjs +80 -0
  68. package/dist/esm/polyfill/RTCIceTransport.mjs.map +1 -0
  69. package/dist/esm/polyfill/RTCPeerConnection.mjs +413 -0
  70. package/dist/esm/polyfill/RTCPeerConnection.mjs.map +1 -0
  71. package/dist/esm/polyfill/RTCSctpTransport.mjs +57 -0
  72. package/dist/esm/polyfill/RTCSctpTransport.mjs.map +1 -0
  73. package/dist/esm/polyfill/RTCSessionDescription.mjs +33 -0
  74. package/dist/esm/polyfill/RTCSessionDescription.mjs.map +1 -0
  75. package/dist/esm/polyfill/index.mjs +27 -0
  76. package/dist/esm/polyfill/index.mjs.map +1 -0
  77. package/dist/types/lib/datachannel-stream.d.ts +24 -0
  78. package/dist/types/lib/index.d.ts +164 -0
  79. package/dist/types/lib/types.d.ts +106 -0
  80. package/dist/types/lib/websocket-server.d.ts +13 -0
  81. package/dist/types/lib/websocket.d.ts +25 -0
  82. package/dist/types/polyfill/Events.d.ts +15 -0
  83. package/dist/types/polyfill/RTCCertificate.d.ts +8 -0
  84. package/dist/types/polyfill/RTCDataChannel.d.ts +29 -0
  85. package/dist/types/polyfill/RTCDtlsTransport.d.ts +17 -0
  86. package/dist/types/polyfill/RTCError.d.ts +16 -0
  87. package/dist/types/polyfill/RTCIceCandidate.d.ts +21 -0
  88. package/dist/types/polyfill/RTCIceTransport.d.ts +24 -0
  89. package/dist/types/polyfill/RTCPeerConnection.d.ts +56 -0
  90. package/dist/types/polyfill/RTCSctpTransport.d.ts +17 -0
  91. package/dist/types/polyfill/RTCSessionDescription.d.ts +9 -0
  92. package/{polyfill → dist/types/polyfill}/index.d.ts +3 -14
  93. package/jest.config.ts +14 -0
  94. package/package.json +47 -43
  95. package/rollup.config.mjs +63 -0
  96. package/src/index.ts +10 -0
  97. package/{lib/datachannel-stream.js → src/lib/datachannel-stream.ts} +16 -11
  98. package/src/lib/index.ts +180 -0
  99. package/src/lib/node-datachannel.ts +13 -0
  100. package/src/lib/types.ts +126 -0
  101. package/{lib/websocket-server.js → src/lib/websocket-server.ts} +10 -8
  102. package/src/lib/websocket.ts +26 -0
  103. package/src/polyfill/Events.ts +33 -0
  104. package/src/polyfill/Exception.ts +37 -0
  105. package/src/polyfill/RTCCertificate.ts +17 -0
  106. package/{polyfill/RTCDataChannel.js → src/polyfill/RTCDataChannel.ts} +43 -40
  107. package/src/polyfill/RTCDtlsTransport.ts +47 -0
  108. package/src/polyfill/RTCError.ts +71 -0
  109. package/{polyfill/RTCIceCandidate.js → src/polyfill/RTCIceCandidate.ts} +35 -35
  110. package/{polyfill/RTCIceTransport.js → src/polyfill/RTCIceTransport.ts} +22 -20
  111. package/{polyfill/RTCPeerConnection.js → src/polyfill/RTCPeerConnection.ts} +128 -114
  112. package/{polyfill/RTCSctpTransport.js → src/polyfill/RTCSctpTransport.ts} +16 -14
  113. package/{polyfill/RTCSessionDescription.js → src/polyfill/RTCSessionDescription.ts} +7 -12
  114. package/{polyfill/index.js → src/polyfill/index.ts} +10 -10
  115. package/tsconfig.json +20 -13
  116. package/.eslintrc.cjs +0 -8
  117. package/.github/FUNDING.yml +0 -2
  118. package/.github/workflows/build-linux.yml +0 -109
  119. package/.github/workflows/build-mac-m1.yml +0 -38
  120. package/.github/workflows/build-mac-x64.yml +0 -40
  121. package/.github/workflows/build-win.yml +0 -74
  122. package/.github/workflows/lint.yml +0 -20
  123. package/.github/workflows/npm-publish-manual.yml +0 -23
  124. package/.prettierrc.cjs +0 -8
  125. package/build-containers/Dockerfile.alpine +0 -6
  126. package/build-containers/Dockerfile.debian +0 -7
  127. package/cmake/toolchain/ci.cmake +0 -23
  128. package/examples/client-server/README.md +0 -22
  129. package/examples/client-server/client-benchmark.js +0 -230
  130. package/examples/client-server/client-periodic.js +0 -189
  131. package/examples/client-server/client.js +0 -111
  132. package/examples/client-server/package-lock.json +0 -289
  133. package/examples/client-server/package.json +0 -16
  134. package/examples/client-server/signaling-server.js +0 -39
  135. package/examples/electron-demo/README.md +0 -58
  136. package/examples/electron-demo/forge.config.js +0 -49
  137. package/examples/electron-demo/package-lock.json +0 -15877
  138. package/examples/electron-demo/package.json +0 -44
  139. package/examples/electron-demo/src/index.css +0 -7
  140. package/examples/electron-demo/src/index.html +0 -29
  141. package/examples/electron-demo/src/main.js +0 -53
  142. package/examples/electron-demo/src/node-datachannel.js +0 -123
  143. package/examples/electron-demo/src/preload.js +0 -28
  144. package/examples/electron-demo/src/renderer.js +0 -58
  145. package/examples/electron-demo/webpack.main.config.js +0 -21
  146. package/examples/electron-demo/webpack.renderer.config.js +0 -13
  147. package/examples/electron-demo/webpack.rules.js +0 -35
  148. package/examples/media/README.md +0 -34
  149. package/examples/media/main.html +0 -45
  150. package/examples/media/media.js +0 -54
  151. package/examples/simple-peer-usage/main.js +0 -28
  152. package/examples/simple-peer-usage/package-lock.json +0 -317
  153. package/examples/simple-peer-usage/package.json +0 -16
  154. package/examples/websocket/websocket-client.js +0 -20
  155. package/examples/websocket/websocket-server.js +0 -22
  156. package/jest.config.cjs +0 -7
  157. package/lib/index.cjs +0 -194
  158. package/lib/index.d.cts +0 -300
  159. package/lib/index.d.ts +0 -300
  160. package/lib/index.js +0 -58
  161. package/lib/node-datachannel.js +0 -7
  162. package/polyfill/Events.d.ts +0 -9
  163. package/polyfill/Events.js +0 -29
  164. package/polyfill/Exception.js +0 -23
  165. package/polyfill/RTCCertificate.d.ts +0 -7
  166. package/polyfill/RTCCertificate.js +0 -17
  167. package/polyfill/RTCDataChannel.d.ts +0 -35
  168. package/polyfill/RTCDtlsTransport.d.ts +0 -10
  169. package/polyfill/RTCDtlsTransport.js +0 -47
  170. package/polyfill/RTCError.d.ts +0 -11
  171. package/polyfill/RTCError.js +0 -65
  172. package/polyfill/RTCIceCandidate.d.ts +0 -20
  173. package/polyfill/RTCIceTransport.d.ts +0 -18
  174. package/polyfill/RTCPeerConnection.d.ts +0 -62
  175. package/polyfill/RTCSctpTransport.d.ts +0 -10
  176. package/polyfill/RTCSessionDescription.d.ts +0 -8
  177. package/polyfill/index.cjs +0 -1333
  178. package/polyfill/index.d.cts +0 -37
  179. package/test/connectivity.js +0 -86
  180. package/test/jest-tests/basic.test.js +0 -37
  181. package/test/jest-tests/multiple-run.test.js +0 -73
  182. package/test/jest-tests/p2p.test.js +0 -99
  183. package/test/jest-tests/polyfill.test.js +0 -10
  184. package/test/jest-tests/streams.test.js +0 -48
  185. package/test/jest-tests/websocket.test.js +0 -69
  186. package/test/polyfill-connectivity.js +0 -89
  187. package/test/websockets.js +0 -50
  188. package/test/wpt-tests/README.md +0 -46
  189. package/test/wpt-tests/chrome-failed-tests.js +0 -42
  190. package/test/wpt-tests/index.js +0 -96
  191. package/test/wpt-tests/last-test-results.md +0 -301
  192. package/test/wpt-tests/package-lock.json +0 -1712
  193. package/test/wpt-tests/package.json +0 -19
  194. package/test/wpt-tests/wpt-test-list.js +0 -139
  195. package/test/wpt-tests/wpt.js +0 -131
  196. /package/src/{data-channel-wrapper.cpp → cpp/data-channel-wrapper.cpp} +0 -0
  197. /package/src/{data-channel-wrapper.h → cpp/data-channel-wrapper.h} +0 -0
  198. /package/src/{main.cpp → cpp/main.cpp} +0 -0
  199. /package/src/{media-audio-wrapper.cpp → cpp/media-audio-wrapper.cpp} +0 -0
  200. /package/src/{media-audio-wrapper.h → cpp/media-audio-wrapper.h} +0 -0
  201. /package/src/{media-direction.cpp → cpp/media-direction.cpp} +0 -0
  202. /package/src/{media-direction.h → cpp/media-direction.h} +0 -0
  203. /package/src/{media-rtcpreceivingsession-wrapper.cpp → cpp/media-rtcpreceivingsession-wrapper.cpp} +0 -0
  204. /package/src/{media-rtcpreceivingsession-wrapper.h → cpp/media-rtcpreceivingsession-wrapper.h} +0 -0
  205. /package/src/{media-track-wrapper.cpp → cpp/media-track-wrapper.cpp} +0 -0
  206. /package/src/{media-track-wrapper.h → cpp/media-track-wrapper.h} +0 -0
  207. /package/src/{media-video-wrapper.cpp → cpp/media-video-wrapper.cpp} +0 -0
  208. /package/src/{media-video-wrapper.h → cpp/media-video-wrapper.h} +0 -0
  209. /package/src/{peer-connection-wrapper.cpp → cpp/peer-connection-wrapper.cpp} +0 -0
  210. /package/src/{peer-connection-wrapper.h → cpp/peer-connection-wrapper.h} +0 -0
  211. /package/src/{rtc-wrapper.cpp → cpp/rtc-wrapper.cpp} +0 -0
  212. /package/src/{rtc-wrapper.h → cpp/rtc-wrapper.h} +0 -0
  213. /package/src/{thread-safe-callback.cpp → cpp/thread-safe-callback.cpp} +0 -0
  214. /package/src/{thread-safe-callback.h → cpp/thread-safe-callback.h} +0 -0
  215. /package/src/{web-socket-server-wrapper.cpp → cpp/web-socket-server-wrapper.cpp} +0 -0
  216. /package/src/{web-socket-server-wrapper.h → cpp/web-socket-server-wrapper.h} +0 -0
  217. /package/src/{web-socket-wrapper.cpp → cpp/web-socket-wrapper.cpp} +0 -0
  218. /package/src/{web-socket-wrapper.h → cpp/web-socket-wrapper.h} +0 -0
  219. /package/{polyfill → src/polyfill}/README.md +0 -0
@@ -1,189 +0,0 @@
1
- import readline from 'readline';
2
- import nodeDataChannel from '../../lib/index.js';
3
-
4
- // Init Logger
5
- nodeDataChannel.initLogger('Info');
6
-
7
- // PeerConnection Map
8
- const pcMap = {};
9
-
10
- // Local ID
11
- const id = randomId(4);
12
-
13
- // Message Size
14
- const MESSAGE_SIZE = 500;
15
-
16
- // Buffer Size
17
- const BUFFER_SIZE = MESSAGE_SIZE * 10;
18
-
19
- // Read Line Interface
20
- const rl = readline.createInterface({
21
- input: process.stdin,
22
- output: process.stdout,
23
- });
24
-
25
- // Signaling Server
26
- const WS_URL = process.env.WS_URL || 'ws://localhost:8000';
27
- const ws = new nodeDataChannel.WebSocket();
28
- ws.open(WS_URL + '/' + id);
29
-
30
- console.log(`The local ID is: ${id}`);
31
- console.log(`Waiting for signaling to be connected...`);
32
-
33
- ws.onOpen(() => {
34
- console.log('WebSocket connected, signaling ready');
35
- readUserInput();
36
- });
37
-
38
- ws.onError((err) => {
39
- console.log('WebSocket Error: ', err);
40
- });
41
-
42
- ws.onMessage((msgStr) => {
43
- let msg = JSON.parse(msgStr);
44
- switch (msg.type) {
45
- case 'offer':
46
- createPeerConnection(msg.id);
47
- pcMap[msg.id].setRemoteDescription(msg.description, msg.type);
48
- break;
49
- case 'answer':
50
- pcMap[msg.id].setRemoteDescription(msg.description, msg.type);
51
- break;
52
- case 'candidate':
53
- pcMap[msg.id].addRemoteCandidate(msg.candidate, msg.mid);
54
- break;
55
-
56
- default:
57
- break;
58
- }
59
- });
60
-
61
- function readUserInput() {
62
- rl.question('Enter a remote ID to send an offer: ', (peerId) => {
63
- if (peerId && peerId.length > 2) {
64
- rl.close();
65
- console.log('Offering to ', peerId);
66
- createPeerConnection(peerId);
67
-
68
- console.log('Creating DataChannel with label "test"');
69
- let dc = pcMap[peerId].createDataChannel('test');
70
-
71
- let msgToSend = randomId(MESSAGE_SIZE);
72
- let bytesSent = 0;
73
- let bytesReceived = 0;
74
-
75
- dc.onOpen(() => {
76
- setInterval(() => {
77
- if (dc.bufferedAmount() <= BUFFER_SIZE) {
78
- dc.sendMessage(msgToSend);
79
- bytesSent += msgToSend.length;
80
- }
81
- }, 2);
82
- });
83
-
84
- dc.onMessage((msg) => {
85
- bytesReceived += msg.length;
86
- });
87
-
88
- // Report
89
- let i = 0;
90
- setInterval(() => {
91
- console.log(
92
- `${i++}# Sent: ${byte2KB(bytesSent)} KB/s / Received: ${byte2KB(
93
- bytesReceived,
94
- )} KB/s / SendBufferAmount: ${dc.bufferedAmount()} / DataChannelOpen: ${dc.isOpen()}`,
95
- );
96
- bytesSent = 0;
97
- bytesReceived = 0;
98
- }, 1000);
99
-
100
- setInterval(() => {
101
- console.log(
102
- `Stats# Sent: ${byte2MB(pcMap[peerId].bytesSent())} MB / Received: ${byte2MB(
103
- pcMap[peerId].bytesReceived(),
104
- )} MB / rtt: ${pcMap[peerId].rtt()} ms`,
105
- );
106
- console.log(`Selected Candidates# ${JSON.stringify(pcMap[peerId].getSelectedCandidatePair())}`);
107
- console.log(``);
108
- }, 5 * 1000);
109
- }
110
- });
111
- }
112
-
113
- function createPeerConnection(peerId) {
114
- // Create PeerConnection
115
- let peerConnection = new nodeDataChannel.PeerConnection('pc', { iceServers: ['stun:stun.l.google.com:19302'] });
116
- peerConnection.onStateChange((state) => {
117
- console.log('State: ', state);
118
- });
119
- peerConnection.onGatheringStateChange((state) => {
120
- console.log('GatheringState: ', state);
121
- });
122
- peerConnection.onLocalDescription((description, type) => {
123
- ws.sendMessage(JSON.stringify({ id: peerId, type, description }));
124
- });
125
- peerConnection.onLocalCandidate((candidate, mid) => {
126
- ws.sendMessage(JSON.stringify({ id: peerId, type: 'candidate', candidate, mid }));
127
- });
128
- peerConnection.onDataChannel((dc) => {
129
- rl.close();
130
- console.log('DataChannel from ' + peerId + ' received with label "', dc.getLabel() + '"');
131
-
132
- let msgToSend = randomId(MESSAGE_SIZE);
133
- let bytesSent = 0;
134
- let bytesReceived = 0;
135
-
136
- setInterval(() => {
137
- if (dc.bufferedAmount() <= BUFFER_SIZE) {
138
- dc.sendMessage(msgToSend);
139
- bytesSent += msgToSend.length;
140
- }
141
- }, 2);
142
-
143
- dc.onMessage((msg) => {
144
- bytesReceived += msg.length;
145
- });
146
-
147
- // Report
148
- let i = 0;
149
- setInterval(() => {
150
- console.log(
151
- `${i++}# Sent: ${byte2KB(bytesSent)} KB/s / Received: ${byte2KB(
152
- bytesReceived,
153
- )} KB/s / SendBufferAmount: ${dc.bufferedAmount()} / DataChannelOpen: ${dc.isOpen()}`,
154
- );
155
- bytesSent = 0;
156
- bytesReceived = 0;
157
- }, 1000);
158
-
159
- setInterval(() => {
160
- console.log(
161
- `Stats# Sent: ${byte2MB(pcMap[peerId].bytesSent())} MB / Received: ${byte2MB(
162
- pcMap[peerId].bytesReceived(),
163
- )} MB / rtt: ${pcMap[peerId].rtt()} ms`,
164
- );
165
- console.log(`Selected Candidates# ${JSON.stringify(pcMap[peerId].getSelectedCandidatePair())}`);
166
- console.log(``);
167
- }, 5 * 1000);
168
- });
169
-
170
- pcMap[peerId] = peerConnection;
171
- }
172
-
173
- function randomId(length) {
174
- var result = '';
175
- var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
176
- var charactersLength = characters.length;
177
- for (var i = 0; i < length; i++) {
178
- result += characters.charAt(Math.floor(Math.random() * charactersLength));
179
- }
180
- return result;
181
- }
182
-
183
- function byte2KB(bytes) {
184
- return `${Math.round(bytes / 1024)}`;
185
- }
186
-
187
- function byte2MB(bytes) {
188
- return `${Math.round(bytes / (1024 * 1024))}`;
189
- }
@@ -1,111 +0,0 @@
1
- import readline from 'readline';
2
- import nodeDataChannel from '../../lib/index.js';
3
-
4
- // Init Logger
5
- nodeDataChannel.initLogger('Error');
6
-
7
- // PeerConnection Map
8
- const pcMap = {};
9
-
10
- // Local ID
11
- const id = randomId(4);
12
-
13
- // Signaling Server
14
- const WS_URL = process.env.WS_URL || 'ws://localhost:8000';
15
- const ws = new nodeDataChannel.WebSocket();
16
- ws.open(WS_URL + '/' + id);
17
-
18
- console.log(`The local ID is: ${id}`);
19
- console.log(`Waiting for signaling to be connected...`);
20
-
21
- ws.onOpen(() => {
22
- console.log('WebSocket connected, signaling ready');
23
- readUserInput();
24
- });
25
-
26
- ws.onError((err) => {
27
- console.log('WebSocket Error: ', err);
28
- });
29
-
30
- ws.onMessage((msgStr) => {
31
- let msg = JSON.parse(msgStr);
32
- switch (msg.type) {
33
- case 'offer':
34
- createPeerConnection(msg.id);
35
- pcMap[msg.id].setRemoteDescription(msg.description, msg.type);
36
- break;
37
- case 'answer':
38
- pcMap[msg.id].setRemoteDescription(msg.description, msg.type);
39
- break;
40
- case 'candidate':
41
- pcMap[msg.id].addRemoteCandidate(msg.candidate, msg.mid);
42
- break;
43
-
44
- default:
45
- break;
46
- }
47
- });
48
-
49
- function readUserInput() {
50
- // Read Line Interface
51
- const rl = readline.createInterface({
52
- input: process.stdin,
53
- output: process.stdout,
54
- });
55
-
56
- rl.question('Enter a remote ID to send an offer:\n', (peerId) => {
57
- if (peerId && peerId.length > 2) {
58
- console.log('Offering to ', peerId);
59
- createPeerConnection(peerId);
60
-
61
- console.log('Creating DataChannel with label "test"');
62
- let dc = pcMap[peerId].createDataChannel('test');
63
- dc.onOpen(() => {
64
- dc.sendMessage('Hello from ' + id);
65
- });
66
-
67
- dc.onMessage((msg) => {
68
- console.log('Message from ' + peerId + ' received:', msg);
69
- });
70
- }
71
-
72
- rl.close();
73
- readUserInput();
74
- });
75
- }
76
-
77
- function createPeerConnection(peerId) {
78
- // Create PeerConnection
79
- let peerConnection = new nodeDataChannel.PeerConnection('pc', { iceServers: ['stun:stun.l.google.com:19302'] });
80
- peerConnection.onStateChange((state) => {
81
- console.log('State: ', state);
82
- });
83
- peerConnection.onGatheringStateChange((state) => {
84
- console.log('GatheringState: ', state);
85
- });
86
- peerConnection.onLocalDescription((description, type) => {
87
- ws.sendMessage(JSON.stringify({ id: peerId, type, description }));
88
- });
89
- peerConnection.onLocalCandidate((candidate, mid) => {
90
- ws.sendMessage(JSON.stringify({ id: peerId, type: 'candidate', candidate, mid }));
91
- });
92
- peerConnection.onDataChannel((dc) => {
93
- console.log('DataChannel from ' + peerId + ' received with label "', dc.getLabel() + '"');
94
- dc.onMessage((msg) => {
95
- console.log('Message from ' + peerId + ' received:', msg);
96
- });
97
- dc.sendMessage('Hello From ' + id);
98
- });
99
-
100
- pcMap[peerId] = peerConnection;
101
- }
102
-
103
- function randomId(length) {
104
- var result = '';
105
- var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
106
- var charactersLength = characters.length;
107
- for (var i = 0; i < length; i++) {
108
- result += characters.charAt(Math.floor(Math.random() * charactersLength));
109
- }
110
- return result;
111
- }
@@ -1,289 +0,0 @@
1
- {
2
- "name": "client",
3
- "version": "1.0.0",
4
- "lockfileVersion": 2,
5
- "requires": true,
6
- "packages": {
7
- "": {
8
- "name": "client",
9
- "version": "1.0.0",
10
- "license": "ISC",
11
- "dependencies": {
12
- "yargs": "^16.2.0"
13
- }
14
- },
15
- "node_modules/ansi-regex": {
16
- "version": "5.0.1",
17
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
18
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
19
- "engines": {
20
- "node": ">=8"
21
- }
22
- },
23
- "node_modules/ansi-styles": {
24
- "version": "4.3.0",
25
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
26
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
27
- "dependencies": {
28
- "color-convert": "^2.0.1"
29
- },
30
- "engines": {
31
- "node": ">=8"
32
- },
33
- "funding": {
34
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
35
- }
36
- },
37
- "node_modules/cliui": {
38
- "version": "7.0.4",
39
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
40
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
41
- "dependencies": {
42
- "string-width": "^4.2.0",
43
- "strip-ansi": "^6.0.0",
44
- "wrap-ansi": "^7.0.0"
45
- }
46
- },
47
- "node_modules/color-convert": {
48
- "version": "2.0.1",
49
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
50
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
51
- "dependencies": {
52
- "color-name": "~1.1.4"
53
- },
54
- "engines": {
55
- "node": ">=7.0.0"
56
- }
57
- },
58
- "node_modules/color-name": {
59
- "version": "1.1.4",
60
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
61
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
62
- },
63
- "node_modules/emoji-regex": {
64
- "version": "8.0.0",
65
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
66
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
67
- },
68
- "node_modules/escalade": {
69
- "version": "3.1.1",
70
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
71
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
72
- "engines": {
73
- "node": ">=6"
74
- }
75
- },
76
- "node_modules/get-caller-file": {
77
- "version": "2.0.5",
78
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
79
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
80
- "engines": {
81
- "node": "6.* || 8.* || >= 10.*"
82
- }
83
- },
84
- "node_modules/is-fullwidth-code-point": {
85
- "version": "3.0.0",
86
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
87
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
88
- "engines": {
89
- "node": ">=8"
90
- }
91
- },
92
- "node_modules/require-directory": {
93
- "version": "2.1.1",
94
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
95
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
96
- "engines": {
97
- "node": ">=0.10.0"
98
- }
99
- },
100
- "node_modules/string-width": {
101
- "version": "4.2.3",
102
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
103
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
104
- "dependencies": {
105
- "emoji-regex": "^8.0.0",
106
- "is-fullwidth-code-point": "^3.0.0",
107
- "strip-ansi": "^6.0.1"
108
- },
109
- "engines": {
110
- "node": ">=8"
111
- }
112
- },
113
- "node_modules/strip-ansi": {
114
- "version": "6.0.1",
115
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
116
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
117
- "dependencies": {
118
- "ansi-regex": "^5.0.1"
119
- },
120
- "engines": {
121
- "node": ">=8"
122
- }
123
- },
124
- "node_modules/wrap-ansi": {
125
- "version": "7.0.0",
126
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
127
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
128
- "dependencies": {
129
- "ansi-styles": "^4.0.0",
130
- "string-width": "^4.1.0",
131
- "strip-ansi": "^6.0.0"
132
- },
133
- "engines": {
134
- "node": ">=10"
135
- },
136
- "funding": {
137
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
138
- }
139
- },
140
- "node_modules/y18n": {
141
- "version": "5.0.8",
142
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
143
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
144
- "engines": {
145
- "node": ">=10"
146
- }
147
- },
148
- "node_modules/yargs": {
149
- "version": "16.2.0",
150
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
151
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
152
- "dependencies": {
153
- "cliui": "^7.0.2",
154
- "escalade": "^3.1.1",
155
- "get-caller-file": "^2.0.5",
156
- "require-directory": "^2.1.1",
157
- "string-width": "^4.2.0",
158
- "y18n": "^5.0.5",
159
- "yargs-parser": "^20.2.2"
160
- },
161
- "engines": {
162
- "node": ">=10"
163
- }
164
- },
165
- "node_modules/yargs-parser": {
166
- "version": "20.2.9",
167
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
168
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
169
- "engines": {
170
- "node": ">=10"
171
- }
172
- }
173
- },
174
- "dependencies": {
175
- "ansi-regex": {
176
- "version": "5.0.1",
177
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
178
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
179
- },
180
- "ansi-styles": {
181
- "version": "4.3.0",
182
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
183
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
184
- "requires": {
185
- "color-convert": "^2.0.1"
186
- }
187
- },
188
- "cliui": {
189
- "version": "7.0.4",
190
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
191
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
192
- "requires": {
193
- "string-width": "^4.2.0",
194
- "strip-ansi": "^6.0.0",
195
- "wrap-ansi": "^7.0.0"
196
- }
197
- },
198
- "color-convert": {
199
- "version": "2.0.1",
200
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
201
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
202
- "requires": {
203
- "color-name": "~1.1.4"
204
- }
205
- },
206
- "color-name": {
207
- "version": "1.1.4",
208
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
209
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
210
- },
211
- "emoji-regex": {
212
- "version": "8.0.0",
213
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
214
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
215
- },
216
- "escalade": {
217
- "version": "3.1.1",
218
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
219
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
220
- },
221
- "get-caller-file": {
222
- "version": "2.0.5",
223
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
224
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
225
- },
226
- "is-fullwidth-code-point": {
227
- "version": "3.0.0",
228
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
229
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
230
- },
231
- "require-directory": {
232
- "version": "2.1.1",
233
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
234
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="
235
- },
236
- "string-width": {
237
- "version": "4.2.3",
238
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
239
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
240
- "requires": {
241
- "emoji-regex": "^8.0.0",
242
- "is-fullwidth-code-point": "^3.0.0",
243
- "strip-ansi": "^6.0.1"
244
- }
245
- },
246
- "strip-ansi": {
247
- "version": "6.0.1",
248
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
249
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
250
- "requires": {
251
- "ansi-regex": "^5.0.1"
252
- }
253
- },
254
- "wrap-ansi": {
255
- "version": "7.0.0",
256
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
257
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
258
- "requires": {
259
- "ansi-styles": "^4.0.0",
260
- "string-width": "^4.1.0",
261
- "strip-ansi": "^6.0.0"
262
- }
263
- },
264
- "y18n": {
265
- "version": "5.0.8",
266
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
267
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
268
- },
269
- "yargs": {
270
- "version": "16.2.0",
271
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
272
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
273
- "requires": {
274
- "cliui": "^7.0.2",
275
- "escalade": "^3.1.1",
276
- "get-caller-file": "^2.0.5",
277
- "require-directory": "^2.1.1",
278
- "string-width": "^4.2.0",
279
- "y18n": "^5.0.5",
280
- "yargs-parser": "^20.2.2"
281
- }
282
- },
283
- "yargs-parser": {
284
- "version": "20.2.9",
285
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
286
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="
287
- }
288
- }
289
- }
@@ -1,16 +0,0 @@
1
- {
2
- "name": "client",
3
- "version": "1.0.0",
4
- "description": "",
5
- "main": "client.js",
6
- "type": "module",
7
- "scripts": {
8
- "test": "echo \"Error: no test specified\" && exit 1"
9
- },
10
- "keywords": [],
11
- "author": "",
12
- "license": "ISC",
13
- "dependencies": {
14
- "yargs": "^16.2.0"
15
- }
16
- }
@@ -1,39 +0,0 @@
1
- import nodeDataChannel from '../../lib/index.js';
2
-
3
- // Init Logger
4
- nodeDataChannel.initLogger('Debug');
5
-
6
- const clients = {};
7
-
8
- const wsServer = new nodeDataChannel.WebSocketServer({ bindAddress: '127.0.0.1', port: 8000 });
9
-
10
- wsServer.onClient((ws) => {
11
- let id = '';
12
-
13
- ws.onOpen(() => {
14
- id = ws.path().replace('/', '');
15
- console.log(`New Connection from ${id}`);
16
- clients[id] = ws;
17
- });
18
-
19
- ws.onMessage((buffer) => {
20
- let msg = JSON.parse(buffer);
21
- let peerId = msg.id;
22
- let peerWs = clients[peerId];
23
-
24
- console.log(`Message from ${id} to ${peerId} : ${buffer}`);
25
- if (!peerWs) return console.error(`Can not find peer with ID ${peerId}`);
26
-
27
- msg.id = id;
28
- peerWs.sendMessage(JSON.stringify(msg));
29
- });
30
-
31
- ws.onClosed(() => {
32
- console.log(`${id} disconnected`);
33
- delete clients[id];
34
- });
35
-
36
- ws.onError((err) => {
37
- console.error(err);
38
- });
39
- });