node-datachannel 0.4.2 → 0.5.0-dev

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 (409) hide show
  1. package/.github/workflows/build-linux.yml +29 -29
  2. package/.github/workflows/build-mac-m1.yml +5 -5
  3. package/.github/workflows/build-mac-x64.yml +5 -5
  4. package/.github/workflows/build-win.yml +11 -8
  5. package/.github/workflows/lint.yml +1 -1
  6. package/.github/workflows/npm-publish-manual.yml +1 -1
  7. package/{.prettierrc.js → .prettierrc.cjs} +1 -0
  8. package/BULDING.md +7 -3
  9. package/CMakeLists.txt +12 -22
  10. package/README.md +38 -33
  11. package/cmake/toolchain/arm64.cmake +1 -1
  12. package/examples/build/Dockerfile +30 -0
  13. package/examples/build/README.md +24 -0
  14. package/examples/client-server/README.md +22 -0
  15. package/examples/client-server/client-benchmark.js +11 -6
  16. package/examples/client-server/client-periodic.js +5 -6
  17. package/examples/client-server/client.js +4 -5
  18. package/examples/client-server/package-lock.json +311 -260
  19. package/examples/client-server/package.json +15 -14
  20. package/examples/client-server/signaling-server.js +1 -2
  21. package/examples/electron-demo/README.md +58 -0
  22. package/examples/electron-demo/forge.config.js +49 -0
  23. package/examples/electron-demo/package-lock.json +16287 -0
  24. package/examples/electron-demo/package.json +43 -0
  25. package/examples/electron-demo/src/index.css +7 -0
  26. package/examples/electron-demo/src/index.html +29 -0
  27. package/examples/electron-demo/src/main.js +53 -0
  28. package/examples/electron-demo/src/node-datachannel.js +123 -0
  29. package/examples/electron-demo/src/preload.js +28 -0
  30. package/examples/electron-demo/src/renderer.js +58 -0
  31. package/examples/electron-demo/webpack.main.config.js +11 -0
  32. package/examples/electron-demo/webpack.renderer.config.js +13 -0
  33. package/examples/electron-demo/webpack.rules.js +35 -0
  34. package/examples/media/README.md +3 -3
  35. package/examples/media/media.js +3 -4
  36. package/examples/simple-peer-usage/main.js +28 -0
  37. package/examples/simple-peer-usage/package-lock.json +317 -0
  38. package/examples/simple-peer-usage/package.json +16 -0
  39. package/lib/datachannel-stream.js +3 -4
  40. package/lib/index.d.ts +8 -4
  41. package/lib/index.js +6 -3
  42. package/node_modules/base64-js/package.json +19 -50
  43. package/node_modules/buffer/package.json +20 -54
  44. package/node_modules/chownr/package.json +16 -53
  45. package/node_modules/decompress-response/package.json +54 -89
  46. package/node_modules/deep-extend/package.json +32 -65
  47. package/node_modules/detect-libc/README.md +4 -1
  48. package/node_modules/detect-libc/index.d.ts +3 -0
  49. package/node_modules/detect-libc/lib/detect-libc.js +105 -4
  50. package/node_modules/detect-libc/lib/filesystem.js +41 -0
  51. package/node_modules/detect-libc/lib/process.js +3 -0
  52. package/node_modules/detect-libc/package.json +25 -60
  53. package/node_modules/end-of-stream/package.json +17 -49
  54. package/node_modules/expand-template/package.json +17 -51
  55. package/node_modules/fs-constants/package.json +11 -42
  56. package/node_modules/github-from-package/package.json +28 -60
  57. package/node_modules/ieee754/package.json +19 -54
  58. package/node_modules/inherits/package.json +12 -61
  59. package/node_modules/ini/package.json +19 -55
  60. package/node_modules/mimic-response/package.json +40 -75
  61. package/node_modules/minimist/.eslintrc +29 -0
  62. package/node_modules/minimist/.github/FUNDING.yml +12 -0
  63. package/node_modules/minimist/.nycrc +14 -0
  64. package/node_modules/minimist/CHANGELOG.md +298 -0
  65. package/node_modules/minimist/{readme.markdown → README.md} +34 -11
  66. package/node_modules/minimist/example/parse.js +2 -0
  67. package/node_modules/minimist/index.js +256 -242
  68. package/node_modules/minimist/package.json +73 -77
  69. package/node_modules/minimist/test/all_bool.js +26 -24
  70. package/node_modules/minimist/test/bool.js +146 -147
  71. package/node_modules/minimist/test/dash.js +33 -21
  72. package/node_modules/minimist/test/default_bool.js +26 -24
  73. package/node_modules/minimist/test/dotted.js +13 -11
  74. package/node_modules/minimist/test/kv_short.js +26 -10
  75. package/node_modules/minimist/test/long.js +28 -26
  76. package/node_modules/minimist/test/num.js +30 -28
  77. package/node_modules/minimist/test/parse.js +169 -157
  78. package/node_modules/minimist/test/parse_modified.js +7 -5
  79. package/node_modules/minimist/test/proto.js +41 -37
  80. package/node_modules/minimist/test/short.js +57 -55
  81. package/node_modules/minimist/test/stop_early.js +10 -8
  82. package/node_modules/minimist/test/unknown.js +83 -81
  83. package/node_modules/minimist/test/whitespace.js +6 -4
  84. package/node_modules/mkdirp-classic/package.json +11 -43
  85. package/node_modules/napi-build-utils/package.json +26 -57
  86. package/node_modules/node-abi/README.md +5 -3
  87. package/node_modules/node-abi/abi_registry.json +98 -8
  88. package/node_modules/node-abi/package.json +26 -57
  89. package/node_modules/once/package.json +14 -55
  90. package/node_modules/prebuild-install/CHANGELOG.md +18 -0
  91. package/node_modules/prebuild-install/README.md +6 -2
  92. package/node_modules/prebuild-install/log.js +26 -18
  93. package/node_modules/prebuild-install/package.json +36 -98
  94. package/node_modules/prebuild-install/rc.js +5 -1
  95. package/node_modules/prebuild-install/util.js +1 -1
  96. package/node_modules/pump/package.json +10 -49
  97. package/node_modules/rc/node_modules/strip-json-comments/package.json +42 -0
  98. package/node_modules/rc/package.json +18 -59
  99. package/node_modules/safe-buffer/index.js +3 -0
  100. package/node_modules/safe-buffer/package.json +20 -39
  101. package/node_modules/{node-abi/node_modules/semver → semver}/README.md +70 -1
  102. package/node_modules/{node-abi/node_modules/semver → semver}/bin/semver.js +16 -2
  103. package/node_modules/{node-abi/node_modules/semver → semver}/classes/comparator.js +39 -34
  104. package/node_modules/{node-abi/node_modules/semver → semver}/classes/range.js +48 -28
  105. package/node_modules/{node-abi/node_modules/semver → semver}/classes/semver.js +32 -17
  106. package/node_modules/{node-abi/node_modules/semver → semver}/functions/coerce.js +1 -1
  107. package/node_modules/semver/functions/diff.js +65 -0
  108. package/node_modules/{node-abi/node_modules/semver → semver}/functions/inc.js +3 -2
  109. package/node_modules/semver/functions/parse.js +16 -0
  110. package/node_modules/semver/index.js +89 -0
  111. package/node_modules/{node-abi/node_modules/semver → semver}/internal/constants.js +20 -2
  112. package/node_modules/semver/internal/parse-options.js +15 -0
  113. package/node_modules/{node-abi/node_modules/semver → semver}/internal/re.js +34 -4
  114. package/node_modules/semver/node_modules/lru-cache/package.json +34 -0
  115. package/node_modules/semver/node_modules/yallist/package.json +29 -0
  116. package/node_modules/semver/package.json +87 -0
  117. package/node_modules/{node-abi/node_modules/semver → semver}/ranges/intersects.js +1 -1
  118. package/node_modules/{node-abi/node_modules/semver → semver}/ranges/subset.js +6 -3
  119. package/node_modules/simple-concat/package.json +17 -45
  120. package/node_modules/simple-get/package.json +17 -45
  121. package/node_modules/{tar-stream → tar-fs}/node_modules/bl/package.json +20 -51
  122. package/node_modules/{tar-stream → tar-fs}/node_modules/readable-stream/README.md +1 -1
  123. package/node_modules/{tar-stream → tar-fs}/node_modules/readable-stream/lib/_stream_duplex.js +12 -25
  124. package/node_modules/{tar-stream → tar-fs}/node_modules/readable-stream/lib/_stream_passthrough.js +2 -4
  125. package/node_modules/{tar-stream → tar-fs}/node_modules/readable-stream/lib/_stream_readable.js +176 -273
  126. package/node_modules/{tar-stream → tar-fs}/node_modules/readable-stream/lib/_stream_transform.js +26 -37
  127. package/node_modules/{tar-stream → tar-fs}/node_modules/readable-stream/lib/_stream_writable.js +118 -174
  128. package/node_modules/{tar-stream → tar-fs}/node_modules/readable-stream/lib/internal/streams/async_iterator.js +10 -37
  129. package/node_modules/{tar-stream → tar-fs}/node_modules/readable-stream/lib/internal/streams/buffer_list.js +20 -47
  130. package/node_modules/{tar-stream → tar-fs}/node_modules/readable-stream/lib/internal/streams/destroy.js +8 -17
  131. package/node_modules/{tar-stream → tar-fs}/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +1 -19
  132. package/node_modules/{tar-stream → tar-fs}/node_modules/readable-stream/lib/internal/streams/from.js +12 -24
  133. package/node_modules/{tar-stream → tar-fs}/node_modules/readable-stream/lib/internal/streams/pipeline.js +5 -16
  134. package/node_modules/{tar-stream → tar-fs}/node_modules/readable-stream/lib/internal/streams/state.js +2 -7
  135. package/node_modules/{tar-stream → tar-fs}/node_modules/readable-stream/package.json +27 -60
  136. package/node_modules/tar-fs/node_modules/string_decoder/package.json +34 -0
  137. package/node_modules/{tar-stream → tar-fs/node_modules/tar-stream}/extract.js +1 -1
  138. package/node_modules/{tar-stream → tar-fs/node_modules/tar-stream}/headers.js +4 -2
  139. package/node_modules/{tar-stream → tar-fs/node_modules/tar-stream}/package.json +22 -59
  140. package/node_modules/tar-fs/package.json +21 -51
  141. package/node_modules/tunnel-agent/package.json +12 -49
  142. package/node_modules/util-deprecate/package.json +14 -49
  143. package/node_modules/wrappy/package.json +16 -49
  144. package/package.json +85 -68
  145. package/polyfill/Events.d.ts +9 -0
  146. package/polyfill/Events.js +27 -0
  147. package/polyfill/README.md +41 -0
  148. package/polyfill/RTCCertificate.d.ts +7 -0
  149. package/polyfill/RTCCertificate.js +17 -0
  150. package/polyfill/RTCDataChannel.d.ts +35 -0
  151. package/polyfill/RTCDataChannel.js +175 -0
  152. package/polyfill/RTCDtlsTransport.d.ts +10 -0
  153. package/polyfill/RTCDtlsTransport.js +29 -0
  154. package/polyfill/RTCIceCandidate.d.ts +20 -0
  155. package/polyfill/RTCIceCandidate.js +126 -0
  156. package/polyfill/RTCIceTransport.d.ts +18 -0
  157. package/polyfill/RTCIceTransport.js +55 -0
  158. package/polyfill/RTCPeerConnection.d.ts +50 -0
  159. package/polyfill/RTCPeerConnection.js +348 -0
  160. package/polyfill/RTCSctpTransport.d.ts +10 -0
  161. package/polyfill/RTCSctpTransport.js +34 -0
  162. package/polyfill/RTCSessionDescription.d.ts +7 -0
  163. package/polyfill/RTCSessionDescription.js +37 -0
  164. package/polyfill/index.d.ts +14 -0
  165. package/polyfill/index.js +14 -0
  166. package/src/data-channel-wrapper.cpp +47 -6
  167. package/src/main.cpp +5 -5
  168. package/src/peer-connection-wrapper.cpp +145 -9
  169. package/src/peer-connection-wrapper.h +4 -0
  170. package/src/rtc-wrapper.cpp +14 -9
  171. package/src/thread-safe-callback.cpp +4 -10
  172. package/src/thread-safe-callback.h +3 -12
  173. package/test/connectivity.js +9 -4
  174. package/test/polyfill-connectivity.js +89 -0
  175. package/test/test.js +3 -3
  176. package/test/wpt.js +50 -0
  177. package/.github/workflows/build-linux-arm64-test.yml +0 -36
  178. package/examples/README.md +0 -21
  179. package/node_modules/ansi-regex/index.js +0 -4
  180. package/node_modules/ansi-regex/package.json +0 -111
  181. package/node_modules/ansi-regex/readme.md +0 -39
  182. package/node_modules/aproba/LICENSE +0 -14
  183. package/node_modules/aproba/README.md +0 -94
  184. package/node_modules/aproba/index.js +0 -105
  185. package/node_modules/aproba/package.json +0 -65
  186. package/node_modules/code-point-at/index.js +0 -32
  187. package/node_modules/code-point-at/license +0 -21
  188. package/node_modules/code-point-at/package.json +0 -73
  189. package/node_modules/code-point-at/readme.md +0 -32
  190. package/node_modules/console-control-strings/LICENSE +0 -13
  191. package/node_modules/console-control-strings/README.md +0 -145
  192. package/node_modules/console-control-strings/README.md~ +0 -140
  193. package/node_modules/console-control-strings/index.js +0 -125
  194. package/node_modules/console-control-strings/package.json +0 -64
  195. package/node_modules/core-util-is/LICENSE +0 -19
  196. package/node_modules/core-util-is/README.md +0 -3
  197. package/node_modules/core-util-is/float.patch +0 -604
  198. package/node_modules/core-util-is/lib/util.js +0 -107
  199. package/node_modules/core-util-is/package.json +0 -70
  200. package/node_modules/core-util-is/test.js +0 -68
  201. package/node_modules/delegates/.npmignore +0 -1
  202. package/node_modules/delegates/History.md +0 -22
  203. package/node_modules/delegates/License +0 -20
  204. package/node_modules/delegates/Makefile +0 -8
  205. package/node_modules/delegates/Readme.md +0 -94
  206. package/node_modules/delegates/index.js +0 -121
  207. package/node_modules/delegates/package.json +0 -53
  208. package/node_modules/delegates/test/index.js +0 -94
  209. package/node_modules/has-unicode/LICENSE +0 -14
  210. package/node_modules/has-unicode/README.md +0 -43
  211. package/node_modules/has-unicode/index.js +0 -16
  212. package/node_modules/has-unicode/package.json +0 -62
  213. package/node_modules/is-fullwidth-code-point/index.js +0 -46
  214. package/node_modules/is-fullwidth-code-point/license +0 -21
  215. package/node_modules/is-fullwidth-code-point/package.json +0 -80
  216. package/node_modules/is-fullwidth-code-point/readme.md +0 -39
  217. package/node_modules/isarray/.npmignore +0 -1
  218. package/node_modules/isarray/.travis.yml +0 -4
  219. package/node_modules/isarray/Makefile +0 -6
  220. package/node_modules/isarray/README.md +0 -60
  221. package/node_modules/isarray/component.json +0 -19
  222. package/node_modules/isarray/index.js +0 -5
  223. package/node_modules/isarray/package.json +0 -77
  224. package/node_modules/isarray/test.js +0 -20
  225. package/node_modules/lru-cache/node_modules/yallist/package.json +0 -65
  226. package/node_modules/lru-cache/package.json +0 -73
  227. package/node_modules/minimist/.travis.yml +0 -8
  228. package/node_modules/node-abi/.circleci/config.yml +0 -63
  229. package/node_modules/node-abi/.github/workflows/update-abi.yml +0 -41
  230. package/node_modules/node-abi/.releaserc.json +0 -9
  231. package/node_modules/node-abi/CODE_OF_CONDUCT.md +0 -73
  232. package/node_modules/node-abi/CONTRIBUTING.md +0 -53
  233. package/node_modules/node-abi/node_modules/semver/functions/diff.js +0 -23
  234. package/node_modules/node-abi/node_modules/semver/functions/parse.js +0 -33
  235. package/node_modules/node-abi/node_modules/semver/index.js +0 -48
  236. package/node_modules/node-abi/node_modules/semver/internal/parse-options.js +0 -11
  237. package/node_modules/node-abi/node_modules/semver/package.json +0 -109
  238. package/node_modules/node-abi/scripts/update-abi-registry.js +0 -119
  239. package/node_modules/node-abi/test/index.js +0 -166
  240. package/node_modules/npmlog/CHANGELOG.md +0 -49
  241. package/node_modules/npmlog/LICENSE +0 -15
  242. package/node_modules/npmlog/README.md +0 -216
  243. package/node_modules/npmlog/log.js +0 -309
  244. package/node_modules/npmlog/node_modules/are-we-there-yet/CHANGES.md +0 -37
  245. package/node_modules/npmlog/node_modules/are-we-there-yet/LICENSE +0 -5
  246. package/node_modules/npmlog/node_modules/are-we-there-yet/README.md +0 -195
  247. package/node_modules/npmlog/node_modules/are-we-there-yet/index.js +0 -4
  248. package/node_modules/npmlog/node_modules/are-we-there-yet/package.json +0 -66
  249. package/node_modules/npmlog/node_modules/are-we-there-yet/tracker-base.js +0 -11
  250. package/node_modules/npmlog/node_modules/are-we-there-yet/tracker-group.js +0 -107
  251. package/node_modules/npmlog/node_modules/are-we-there-yet/tracker-stream.js +0 -36
  252. package/node_modules/npmlog/node_modules/are-we-there-yet/tracker.js +0 -30
  253. package/node_modules/npmlog/node_modules/gauge/CHANGELOG.md +0 -160
  254. package/node_modules/npmlog/node_modules/gauge/LICENSE +0 -13
  255. package/node_modules/npmlog/node_modules/gauge/README.md +0 -399
  256. package/node_modules/npmlog/node_modules/gauge/base-theme.js +0 -14
  257. package/node_modules/npmlog/node_modules/gauge/error.js +0 -24
  258. package/node_modules/npmlog/node_modules/gauge/has-color.js +0 -12
  259. package/node_modules/npmlog/node_modules/gauge/index.js +0 -233
  260. package/node_modules/npmlog/node_modules/gauge/package.json +0 -94
  261. package/node_modules/npmlog/node_modules/gauge/plumbing.js +0 -48
  262. package/node_modules/npmlog/node_modules/gauge/process.js +0 -3
  263. package/node_modules/npmlog/node_modules/gauge/progress-bar.js +0 -35
  264. package/node_modules/npmlog/node_modules/gauge/render-template.js +0 -181
  265. package/node_modules/npmlog/node_modules/gauge/set-immediate.js +0 -7
  266. package/node_modules/npmlog/node_modules/gauge/set-interval.js +0 -3
  267. package/node_modules/npmlog/node_modules/gauge/spin.js +0 -5
  268. package/node_modules/npmlog/node_modules/gauge/template-item.js +0 -73
  269. package/node_modules/npmlog/node_modules/gauge/theme-set.js +0 -115
  270. package/node_modules/npmlog/node_modules/gauge/themes.js +0 -54
  271. package/node_modules/npmlog/node_modules/gauge/wide-truncate.js +0 -25
  272. package/node_modules/npmlog/package.json +0 -78
  273. package/node_modules/number-is-nan/index.js +0 -4
  274. package/node_modules/number-is-nan/license +0 -21
  275. package/node_modules/number-is-nan/package.json +0 -70
  276. package/node_modules/number-is-nan/readme.md +0 -28
  277. package/node_modules/object-assign/index.js +0 -90
  278. package/node_modules/object-assign/license +0 -21
  279. package/node_modules/object-assign/package.json +0 -77
  280. package/node_modules/object-assign/readme.md +0 -61
  281. package/node_modules/process-nextick-args/index.js +0 -45
  282. package/node_modules/process-nextick-args/license.md +0 -19
  283. package/node_modules/process-nextick-args/package.json +0 -53
  284. package/node_modules/process-nextick-args/readme.md +0 -18
  285. package/node_modules/readable-stream/.travis.yml +0 -34
  286. package/node_modules/readable-stream/README.md +0 -58
  287. package/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +0 -60
  288. package/node_modules/readable-stream/duplex-browser.js +0 -1
  289. package/node_modules/readable-stream/duplex.js +0 -1
  290. package/node_modules/readable-stream/lib/_stream_duplex.js +0 -131
  291. package/node_modules/readable-stream/lib/_stream_passthrough.js +0 -47
  292. package/node_modules/readable-stream/lib/_stream_readable.js +0 -1019
  293. package/node_modules/readable-stream/lib/_stream_transform.js +0 -214
  294. package/node_modules/readable-stream/lib/_stream_writable.js +0 -687
  295. package/node_modules/readable-stream/lib/internal/streams/BufferList.js +0 -79
  296. package/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -74
  297. package/node_modules/readable-stream/package.json +0 -87
  298. package/node_modules/readable-stream/passthrough.js +0 -1
  299. package/node_modules/readable-stream/readable-browser.js +0 -7
  300. package/node_modules/readable-stream/readable.js +0 -19
  301. package/node_modules/readable-stream/transform.js +0 -1
  302. package/node_modules/readable-stream/writable-browser.js +0 -1
  303. package/node_modules/readable-stream/writable.js +0 -8
  304. package/node_modules/set-blocking/CHANGELOG.md +0 -26
  305. package/node_modules/set-blocking/LICENSE.txt +0 -14
  306. package/node_modules/set-blocking/README.md +0 -31
  307. package/node_modules/set-blocking/index.js +0 -7
  308. package/node_modules/set-blocking/package.json +0 -73
  309. package/node_modules/signal-exit/CHANGELOG.md +0 -35
  310. package/node_modules/signal-exit/LICENSE.txt +0 -16
  311. package/node_modules/signal-exit/README.md +0 -39
  312. package/node_modules/signal-exit/index.js +0 -163
  313. package/node_modules/signal-exit/package.json +0 -71
  314. package/node_modules/signal-exit/signals.js +0 -53
  315. package/node_modules/string-width/index.js +0 -37
  316. package/node_modules/string-width/license +0 -21
  317. package/node_modules/string-width/package.json +0 -95
  318. package/node_modules/string-width/readme.md +0 -42
  319. package/node_modules/string_decoder/.travis.yml +0 -50
  320. package/node_modules/string_decoder/package.json +0 -64
  321. package/node_modules/strip-ansi/index.js +0 -6
  322. package/node_modules/strip-ansi/license +0 -21
  323. package/node_modules/strip-ansi/package.json +0 -107
  324. package/node_modules/strip-ansi/readme.md +0 -33
  325. package/node_modules/strip-json-comments/license +0 -21
  326. package/node_modules/strip-json-comments/package.json +0 -77
  327. package/node_modules/tar-stream/node_modules/readable-stream/CONTRIBUTING.md +0 -38
  328. package/node_modules/tar-stream/node_modules/readable-stream/GOVERNANCE.md +0 -136
  329. package/node_modules/tar-stream/node_modules/readable-stream/LICENSE +0 -47
  330. package/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
  331. package/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
  332. package/node_modules/wide-align/LICENSE +0 -14
  333. package/node_modules/wide-align/README.md +0 -47
  334. package/node_modules/wide-align/align.js +0 -65
  335. package/node_modules/wide-align/package.json +0 -69
  336. /package/{.eslintrc.js → .eslintrc.cjs} +0 -0
  337. /package/node_modules/{strip-json-comments → rc/node_modules/strip-json-comments}/index.js +0 -0
  338. /package/node_modules/{ansi-regex → rc/node_modules/strip-json-comments}/license +0 -0
  339. /package/node_modules/{strip-json-comments → rc/node_modules/strip-json-comments}/readme.md +0 -0
  340. /package/node_modules/{lru-cache → semver}/LICENSE +0 -0
  341. /package/node_modules/{node-abi/node_modules/semver → semver}/classes/index.js +0 -0
  342. /package/node_modules/{node-abi/node_modules/semver → semver}/functions/clean.js +0 -0
  343. /package/node_modules/{node-abi/node_modules/semver → semver}/functions/cmp.js +0 -0
  344. /package/node_modules/{node-abi/node_modules/semver → semver}/functions/compare-build.js +0 -0
  345. /package/node_modules/{node-abi/node_modules/semver → semver}/functions/compare-loose.js +0 -0
  346. /package/node_modules/{node-abi/node_modules/semver → semver}/functions/compare.js +0 -0
  347. /package/node_modules/{node-abi/node_modules/semver → semver}/functions/eq.js +0 -0
  348. /package/node_modules/{node-abi/node_modules/semver → semver}/functions/gt.js +0 -0
  349. /package/node_modules/{node-abi/node_modules/semver → semver}/functions/gte.js +0 -0
  350. /package/node_modules/{node-abi/node_modules/semver → semver}/functions/lt.js +0 -0
  351. /package/node_modules/{node-abi/node_modules/semver → semver}/functions/lte.js +0 -0
  352. /package/node_modules/{node-abi/node_modules/semver → semver}/functions/major.js +0 -0
  353. /package/node_modules/{node-abi/node_modules/semver → semver}/functions/minor.js +0 -0
  354. /package/node_modules/{node-abi/node_modules/semver → semver}/functions/neq.js +0 -0
  355. /package/node_modules/{node-abi/node_modules/semver → semver}/functions/patch.js +0 -0
  356. /package/node_modules/{node-abi/node_modules/semver → semver}/functions/prerelease.js +0 -0
  357. /package/node_modules/{node-abi/node_modules/semver → semver}/functions/rcompare.js +0 -0
  358. /package/node_modules/{node-abi/node_modules/semver → semver}/functions/rsort.js +0 -0
  359. /package/node_modules/{node-abi/node_modules/semver → semver}/functions/satisfies.js +0 -0
  360. /package/node_modules/{node-abi/node_modules/semver → semver}/functions/sort.js +0 -0
  361. /package/node_modules/{node-abi/node_modules/semver → semver}/functions/valid.js +0 -0
  362. /package/node_modules/{node-abi/node_modules/semver → semver}/internal/debug.js +0 -0
  363. /package/node_modules/{node-abi/node_modules/semver → semver}/internal/identifiers.js +0 -0
  364. /package/node_modules/{lru-cache/node_modules/yallist → semver/node_modules/lru-cache}/LICENSE +0 -0
  365. /package/node_modules/{lru-cache → semver/node_modules/lru-cache}/README.md +0 -0
  366. /package/node_modules/{lru-cache → semver/node_modules/lru-cache}/index.js +0 -0
  367. /package/node_modules/{node-abi/node_modules/semver → semver/node_modules/yallist}/LICENSE +0 -0
  368. /package/node_modules/{lru-cache → semver}/node_modules/yallist/README.md +0 -0
  369. /package/node_modules/{lru-cache → semver}/node_modules/yallist/iterator.js +0 -0
  370. /package/node_modules/{lru-cache → semver}/node_modules/yallist/yallist.js +0 -0
  371. /package/node_modules/{node-abi/node_modules/semver → semver}/preload.js +0 -0
  372. /package/node_modules/{node-abi/node_modules/semver → semver}/range.bnf +0 -0
  373. /package/node_modules/{node-abi/node_modules/semver → semver}/ranges/gtr.js +0 -0
  374. /package/node_modules/{node-abi/node_modules/semver → semver}/ranges/ltr.js +0 -0
  375. /package/node_modules/{node-abi/node_modules/semver → semver}/ranges/max-satisfying.js +0 -0
  376. /package/node_modules/{node-abi/node_modules/semver → semver}/ranges/min-satisfying.js +0 -0
  377. /package/node_modules/{node-abi/node_modules/semver → semver}/ranges/min-version.js +0 -0
  378. /package/node_modules/{node-abi/node_modules/semver → semver}/ranges/outside.js +0 -0
  379. /package/node_modules/{node-abi/node_modules/semver → semver}/ranges/simplify.js +0 -0
  380. /package/node_modules/{node-abi/node_modules/semver → semver}/ranges/to-comparators.js +0 -0
  381. /package/node_modules/{node-abi/node_modules/semver → semver}/ranges/valid.js +0 -0
  382. /package/node_modules/{tar-stream → tar-fs}/node_modules/bl/.travis.yml +0 -0
  383. /package/node_modules/{tar-stream → tar-fs}/node_modules/bl/BufferList.js +0 -0
  384. /package/node_modules/{tar-stream → tar-fs}/node_modules/bl/LICENSE.md +0 -0
  385. /package/node_modules/{tar-stream → tar-fs}/node_modules/bl/README.md +0 -0
  386. /package/node_modules/{tar-stream → tar-fs}/node_modules/bl/bl.js +0 -0
  387. /package/node_modules/{tar-stream → tar-fs}/node_modules/bl/test/convert.js +0 -0
  388. /package/node_modules/{tar-stream → tar-fs}/node_modules/bl/test/indexOf.js +0 -0
  389. /package/node_modules/{tar-stream → tar-fs}/node_modules/bl/test/isBufferList.js +0 -0
  390. /package/node_modules/{tar-stream → tar-fs}/node_modules/bl/test/test.js +0 -0
  391. /package/node_modules/{readable-stream → tar-fs/node_modules/readable-stream}/CONTRIBUTING.md +0 -0
  392. /package/node_modules/{readable-stream → tar-fs/node_modules/readable-stream}/GOVERNANCE.md +0 -0
  393. /package/node_modules/{readable-stream → tar-fs/node_modules/readable-stream}/LICENSE +0 -0
  394. /package/node_modules/{tar-stream → tar-fs}/node_modules/readable-stream/errors-browser.js +0 -0
  395. /package/node_modules/{tar-stream → tar-fs}/node_modules/readable-stream/errors.js +0 -0
  396. /package/node_modules/{tar-stream → tar-fs}/node_modules/readable-stream/experimentalWarning.js +0 -0
  397. /package/node_modules/{tar-stream → tar-fs}/node_modules/readable-stream/lib/internal/streams/from-browser.js +0 -0
  398. /package/node_modules/{readable-stream → tar-fs/node_modules/readable-stream}/lib/internal/streams/stream-browser.js +0 -0
  399. /package/node_modules/{readable-stream → tar-fs/node_modules/readable-stream}/lib/internal/streams/stream.js +0 -0
  400. /package/node_modules/{tar-stream → tar-fs}/node_modules/readable-stream/readable-browser.js +0 -0
  401. /package/node_modules/{tar-stream → tar-fs}/node_modules/readable-stream/readable.js +0 -0
  402. /package/node_modules/{string_decoder → tar-fs/node_modules/string_decoder}/LICENSE +0 -0
  403. /package/node_modules/{string_decoder → tar-fs/node_modules/string_decoder}/README.md +0 -0
  404. /package/node_modules/{string_decoder → tar-fs/node_modules/string_decoder}/lib/string_decoder.js +0 -0
  405. /package/node_modules/{tar-stream → tar-fs/node_modules/tar-stream}/LICENSE +0 -0
  406. /package/node_modules/{tar-stream → tar-fs/node_modules/tar-stream}/README.md +0 -0
  407. /package/node_modules/{tar-stream → tar-fs/node_modules/tar-stream}/index.js +0 -0
  408. /package/node_modules/{tar-stream → tar-fs/node_modules/tar-stream}/pack.js +0 -0
  409. /package/node_modules/{tar-stream → tar-fs/node_modules/tar-stream}/sandbox.js +0 -0
@@ -0,0 +1,126 @@
1
+ // https://developer.mozilla.org/docs/Web/API/RTCIceCandidate
2
+ //
3
+ // Example: candidate:123456 1 UDP 123456 192.168.1.1 12345 typ host raddr=10.0.0.1 rport=54321 generation 0
4
+
5
+ import DOMException from 'node-domexception';
6
+
7
+ export default class _RTCIceCandidate {
8
+ #address;
9
+ #candidate;
10
+ #component;
11
+ #foundation;
12
+ #port;
13
+ #priority;
14
+ #protocol;
15
+ #relatedAddress;
16
+ #relatedPort;
17
+ #sdpMLineIndex;
18
+ #sdpMid;
19
+ #tcpType;
20
+ #type;
21
+ #usernameFragment;
22
+ #ip;
23
+
24
+ constructor({ candidate, sdpMLineIndex, sdpMid, usernameFragment }) {
25
+ if (candidate == null) {
26
+ throw new DOMException('candidate must be specified');
27
+ }
28
+
29
+ this.#candidate = candidate;
30
+ this.#sdpMLineIndex = sdpMLineIndex || null;
31
+ this.#sdpMid = sdpMid || null;
32
+ this.#usernameFragment = usernameFragment || null;
33
+
34
+ if (candidate) {
35
+ const fields = candidate.split(' ');
36
+ this.#foundation = fields[0];
37
+ this.#component = fields[1];
38
+ this.#protocol = fields[2];
39
+ this.#priority = parseInt(fields[3], 10);
40
+ this.#ip = fields[4];
41
+ this.#port = parseInt(fields[5], 10);
42
+ this.#type = fields[7];
43
+ if (fields[6] === 'typ') {
44
+ this.#tcpType = null;
45
+ } else if (fields[6] === 'tcp') {
46
+ this.#tcpType = fields[7];
47
+ this.#type = fields[8];
48
+ }
49
+
50
+ // Parse the candidate string to extract relatedPort and relatedAddress
51
+ for (let i = 9; i < fields.length; i++) {
52
+ const field = fields[i];
53
+ if (field.startsWith('raddr')) {
54
+ this.#relatedAddress = field.split('=')[1];
55
+ } else if (field.startsWith('rport')) {
56
+ this.#relatedPort = parseInt(field.split('=')[1], 10);
57
+ }
58
+ }
59
+ }
60
+ }
61
+
62
+ get address() {
63
+ return this.#address || null;
64
+ }
65
+
66
+ get candidate() {
67
+ return this.#candidate || '';
68
+ }
69
+
70
+ get component() {
71
+ return this.#component;
72
+ }
73
+
74
+ get foundation() {
75
+ return this.#foundation || null;
76
+ }
77
+
78
+ get port() {
79
+ return this.#port || null;
80
+ }
81
+
82
+ get priority() {
83
+ return this.#priority || null;
84
+ }
85
+
86
+ get protocol() {
87
+ return this.#protocol || null;
88
+ }
89
+
90
+ get relatedAddress() {
91
+ return this.#relatedAddress;
92
+ }
93
+
94
+ get relatedPort() {
95
+ return this.#relatedPort || null;
96
+ }
97
+
98
+ get sdpMLineIndex() {
99
+ return this.#sdpMLineIndex;
100
+ }
101
+
102
+ get sdpMid() {
103
+ return this.#sdpMid;
104
+ }
105
+
106
+ get tcpType() {
107
+ return this.#tcpType;
108
+ }
109
+
110
+ get type() {
111
+ return this.#type || null;
112
+ }
113
+
114
+ get usernameFragment() {
115
+ return this.#usernameFragment;
116
+ }
117
+
118
+ toJSON() {
119
+ return {
120
+ candidate: this.#candidate,
121
+ sdpMLineIndex: this.#sdpMLineIndex,
122
+ sdpMid: this.#sdpMid,
123
+ usernameFragment: this.#usernameFragment,
124
+ };
125
+ }
126
+ }
@@ -0,0 +1,18 @@
1
+ /// <reference lib="dom" />
2
+
3
+ export default class _RTCIceTransport extends EventTarget implements RTCIceTransport {
4
+ readonly component: RTCIceComponent;
5
+ readonly gatheringState: RTCIceGatheringState;
6
+ readonly role: string; // RTCIceRole;
7
+ readonly state: RTCIceTransportState;
8
+
9
+ getLocalCandidates(): RTCIceCandidate[];
10
+ getLocalParameters(): any; // RTCIceParameters;
11
+ getRemoteCandidates(): RTCIceCandidate[];
12
+ getRemoteParameters(): any; // RTCIceParameters;
13
+ getSelectedCandidatePair(): RTCIceCandidatePair | null;
14
+
15
+ ongatheringstatechange: ((this: RTCIceTransport, ev: Event) => any) | null;
16
+ onselectedcandidatepairchange: ((this: RTCIceTransport, ev: Event) => any) | null;
17
+ onstatechange: ((this: RTCIceTransport, ev: Event) => any) | null;
18
+ }
@@ -0,0 +1,55 @@
1
+ export default class _RTCIceTransport extends EventTarget {
2
+ #component = null;
3
+ #gatheringState = null;
4
+ #role = null;
5
+ #state = null;
6
+
7
+ ongatheringstatechange = createEmptyFunction();
8
+ onselectedcandidatepairchange = createEmptyFunction();
9
+ onstatechange = createEmptyFunction();
10
+
11
+ constructor() {
12
+ super();
13
+ }
14
+
15
+ get component() {
16
+ return this.#component;
17
+ }
18
+
19
+ get gatheringState() {
20
+ return this.#gatheringState;
21
+ }
22
+
23
+ get role() {
24
+ return this.#role;
25
+ }
26
+
27
+ get state() {
28
+ return this.#state;
29
+ }
30
+ getLocalCandidates() {
31
+ /** */
32
+ }
33
+
34
+ getLocalParameters() {
35
+ /** */
36
+ }
37
+
38
+ getRemoteCandidates() {
39
+ /** */
40
+ }
41
+
42
+ getRemoteParameters() {
43
+ /** */
44
+ }
45
+
46
+ getSelectedCandidatePair() {
47
+ /** */
48
+ }
49
+ }
50
+
51
+ function createEmptyFunction() {
52
+ return () => {
53
+ /** */
54
+ };
55
+ }
@@ -0,0 +1,50 @@
1
+ /// <reference lib="dom" />
2
+
3
+ export default class _RTCPeerConnection extends EventTarget implements RTCPeerConnection {
4
+ constructor(config?: RTCConfiguration);
5
+
6
+ // events
7
+ onconnectionstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;
8
+ ondatachannel: ((this: RTCPeerConnection, ev: RTCDataChannelEvent) => any) | null;
9
+ onicecandidate: ((this: RTCPeerConnection, ev: RTCPeerConnectionIceEvent) => any) | null;
10
+ onicecandidateerror: ((this: RTCPeerConnection, ev: Event) => any) | null;
11
+ oniceconnectionstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;
12
+ onicegatheringstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;
13
+ onnegotiationneeded: ((this: RTCPeerConnection, ev: Event) => any) | null;
14
+ onsignalingstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;
15
+ ontrack: ((this: RTCPeerConnection, ev: RTCTrackEvent) => any) | null;
16
+
17
+ // props
18
+ readonly canTrickleIceCandidates: boolean | null;
19
+ readonly connectionState: RTCPeerConnectionState;
20
+ readonly iceConnectionState: RTCIceConnectionState;
21
+ readonly iceGatheringState: RTCIceGatheringState;
22
+ readonly currentLocalDescription: RTCSessionDescription | null;
23
+ readonly currentRemoteDescription: RTCSessionDescription | null;
24
+ readonly localDescription: RTCSessionDescription | null;
25
+ readonly pendingLocalDescription: RTCSessionDescription | null;
26
+ readonly pendingRemoteDescription: RTCSessionDescription | null;
27
+ readonly remoteDescription: RTCSessionDescription | null;
28
+ readonly sctp: RTCSctpTransport | null;
29
+ readonly signalingState: RTCSignalingState;
30
+
31
+ // methods
32
+ generateCertificate(keygenAlgorithm: AlgorithmIdentifier): Promise<RTCCertificate>;
33
+ addIceCandidate(candidate?: RTCIceCandidateInit | RTCIceCandidate): Promise<void>;
34
+ addTrack(track: MediaStreamTrack, ...streams: MediaStream[]): RTCRtpSender;
35
+ addTransceiver(trackOrKind: MediaStreamTrack | string, init?: RTCRtpTransceiverInit): RTCRtpTransceiver;
36
+ close(): void;
37
+ createAnswer(options?: RTCAnswerOptions): Promise<RTCSessionDescriptionInit>;
38
+ createDataChannel(label: string, dataChannelDict?: RTCDataChannelInit): RTCDataChannel;
39
+ createOffer(options?: RTCOfferOptions): Promise<RTCSessionDescriptionInit>;
40
+ getConfiguration(): RTCConfiguration;
41
+ getReceivers(): RTCRtpReceiver[];
42
+ getSenders(): RTCRtpSender[];
43
+ getStats(selector?: MediaStreamTrack | null): Promise<RTCStatsReport>;
44
+ getTransceivers(): RTCRtpTransceiver[];
45
+ removeTrack(sender: RTCRtpSender): void;
46
+ restartIce(): Promise<void>;
47
+ setConfiguration(configuration: RTCConfiguration): void;
48
+ setLocalDescription(description: RTCSessionDescriptionInit): Promise<void>;
49
+ setRemoteDescription(description: RTCSessionDescriptionInit): Promise<void>;
50
+ }
@@ -0,0 +1,348 @@
1
+ import NodeDataChannel from '../lib/index.js';
2
+ import RTCSessionDescription from './RTCSessionDescription.js';
3
+ import RTCDataChannel from './RTCDataChannel.js';
4
+ import RTCIceCandidate from './RTCIceCandidate.js';
5
+ import { RTCDataChannelEvent, RTCPeerConnectionIceEvent } from './Events.js';
6
+ import DOMException from 'node-domexception';
7
+
8
+ export default class _RTCPeerConnection extends EventTarget {
9
+ #peerConnection;
10
+ #localOffer;
11
+ #localAnswer;
12
+ #dataChannels;
13
+ #config;
14
+ #canTrickleIceCandidates;
15
+ #sctp;
16
+
17
+ onconnectionstatechange;
18
+ ondatachannel;
19
+ onicecandidate;
20
+ onicecandidateerror;
21
+ oniceconnectionstatechange;
22
+ onicegatheringstatechange;
23
+ onnegotiationneeded;
24
+ onsignalingstatechange;
25
+ ontrack;
26
+
27
+ constructor(init = {}) {
28
+ super();
29
+
30
+ this.#config = init;
31
+ this.#localOffer = createDeferredPromise();
32
+ this.#localAnswer = createDeferredPromise();
33
+ this.#dataChannels = new Set();
34
+ this.#canTrickleIceCandidates = null;
35
+ this.#sctp = null;
36
+
37
+ const iceServers = init ? init.iceServers : [];
38
+
39
+ this.#peerConnection = new NodeDataChannel.PeerConnection(
40
+ init && init.peerIdentity ? init.peerIdentity : `peer-${getRandomString(7)}`,
41
+ {
42
+ iceServers: iceServers
43
+ .map((server) => {
44
+ const urls = Array.isArray(server.urls) ? server.urls : [server.urls];
45
+
46
+ return urls.map((url) => {
47
+ if (server.username && server.credential) {
48
+ const [protocol, rest] = url.split(/:(.*)/);
49
+ return `${protocol}:${server.username}:${server.credential}@${rest}`;
50
+ }
51
+ return url;
52
+ });
53
+ })
54
+ .flat(),
55
+ iceTransportPolicy: init ? init.iceTransportPolicy : undefined,
56
+ },
57
+ );
58
+
59
+ // forward peerConnection events
60
+ this.#peerConnection.onStateChange(() => {
61
+ this.dispatchEvent(new Event('connectionstatechange'));
62
+ });
63
+
64
+ this.#peerConnection.onIceStateChange(() => {
65
+ this.dispatchEvent(new Event('iceconnectionstatechange'));
66
+ });
67
+
68
+ this.#peerConnection.onSignalingStateChange(() => {
69
+ this.dispatchEvent(new Event('signalingstatechange'));
70
+ });
71
+
72
+ this.#peerConnection.onGatheringStateChange(() => {
73
+ this.dispatchEvent(new Event('icegatheringstatechange'));
74
+ });
75
+
76
+ this.#peerConnection.onDataChannel((channel) => {
77
+ const dataChannel = new RTCDataChannel(channel);
78
+ this.#dataChannels.add(dataChannel);
79
+ this.dispatchEvent(new RTCDataChannelEvent(dataChannel));
80
+ });
81
+
82
+ this.#peerConnection.onLocalDescription((sdp, type) => {
83
+ if (type === 'offer') {
84
+ this.#localOffer.resolve({ sdp, type });
85
+ }
86
+
87
+ if (type === 'answer') {
88
+ this.#localAnswer.resolve({ sdp, type });
89
+ }
90
+ });
91
+
92
+ this.#peerConnection.onLocalCandidate((candidate, sdpMid) => {
93
+ if (sdpMid === 'unspec') {
94
+ this.#localAnswer.reject(new Error(`Invalid description type ${sdpMid}`));
95
+ return;
96
+ }
97
+
98
+ this.dispatchEvent(new RTCPeerConnectionIceEvent(new RTCIceCandidate({ candidate, sdpMid })));
99
+ });
100
+
101
+ // forward events to properties
102
+ this.addEventListener('connectionstatechange', (e) => {
103
+ if (this.onconnectionstatechange) this.onconnectionstatechange(e);
104
+ });
105
+ this.addEventListener('signalingstatechange', (e) => {
106
+ if (this.onsignalingstatechange) this.onsignalingstatechange(e);
107
+ });
108
+ this.addEventListener('iceconnectionstatechange', (e) => {
109
+ if (this.oniceconnectionstatechange) this.oniceconnectionstatechange(e);
110
+ });
111
+ this.addEventListener('icegatheringstatechange', (e) => {
112
+ if (this.onicegatheringstatechange) this.onicegatheringstatechange(e);
113
+ });
114
+ this.addEventListener('datachannel', (e) => {
115
+ if (this.ondatachannel) this.ondatachannel(e);
116
+ });
117
+ this.addEventListener('icecandidate', (e) => {
118
+ if (this.onicecandidate) this.onicecandidate(e);
119
+ });
120
+ }
121
+
122
+ get canTrickleIceCandidates() {
123
+ return this.#canTrickleIceCandidates;
124
+ }
125
+
126
+ get connectionState() {
127
+ return this.#peerConnection.state();
128
+ }
129
+
130
+ get iceConnectionState() {
131
+ return this.#peerConnection.iceState();
132
+ }
133
+
134
+ get iceGatheringState() {
135
+ return this.#peerConnection.gatheringState();
136
+ }
137
+
138
+ get currentLocalDescription() {
139
+ return new RTCSessionDescription(this.#peerConnection.localDescription());
140
+ }
141
+
142
+ get currentRemoteDescription() {
143
+ return new RTCSessionDescription(this.#peerConnection.remoteDescription());
144
+ }
145
+
146
+ get localDescription() {
147
+ return new RTCSessionDescription(this.#peerConnection.localDescription());
148
+ }
149
+
150
+ get pendingLocalDescription() {
151
+ return new RTCSessionDescription(this.#peerConnection.localDescription());
152
+ }
153
+
154
+ get pendingRemoteDescription() {
155
+ return new RTCSessionDescription(this.#peerConnection.remoteDescription());
156
+ }
157
+
158
+ get remoteDescription() {
159
+ return new RTCSessionDescription(this.#peerConnection.remoteDescription());
160
+ }
161
+
162
+ get sctp() {
163
+ return this.#sctp;
164
+ }
165
+
166
+ get signalingState() {
167
+ return this.#peerConnection.signalingState();
168
+ }
169
+
170
+ static generateCertificate(keygenAlgorithm) {
171
+ throw new DOMException('Not implemented');
172
+ }
173
+
174
+ async addIceCandidate(candidate) {
175
+ if (candidate == null || candidate.candidate == null) {
176
+ throw new DOMException('Candidate invalid');
177
+ }
178
+
179
+ this.#peerConnection.addRemoteCandidate(candidate.candidate, candidate.sdpMid || '0');
180
+ }
181
+
182
+ addTrack(track, ...streams) {
183
+ throw new DOMException('Not implemented');
184
+ }
185
+
186
+ addTransceiver(trackOrKind, init) {
187
+ throw new DOMException('Not implemented');
188
+ }
189
+
190
+ close() {
191
+ // close all channels before shutting down
192
+ this.#dataChannels.forEach((channel) => {
193
+ channel.close();
194
+ });
195
+
196
+ this.#peerConnection.close();
197
+ }
198
+
199
+ createAnswer() {
200
+ return this.#localAnswer;
201
+ }
202
+
203
+ createDataChannel(label, opts = {}) {
204
+ const channel = this.#peerConnection.createDataChannel(label, opts);
205
+ const dataChannel = new RTCDataChannel(channel, opts);
206
+
207
+ // ensure we can close all channels when shutting down
208
+ this.#dataChannels.add(dataChannel);
209
+ dataChannel.addEventListener('close', () => {
210
+ this.#dataChannels.delete(dataChannel);
211
+ });
212
+
213
+ return dataChannel;
214
+ }
215
+
216
+ createOffer() {
217
+ return this.#localOffer;
218
+ }
219
+
220
+ getConfiguration() {
221
+ return this.#config;
222
+ }
223
+
224
+ getReceivers() {
225
+ throw new DOMException('Not implemented');
226
+ }
227
+
228
+ getSenders() {
229
+ throw new DOMException('Not implemented');
230
+ }
231
+
232
+ getStats() {
233
+ return new Promise((resolve) => {
234
+ let report = new Map();
235
+ let cp = this.#peerConnection.getSelectedCandidatePair();
236
+ let bytesSent = this.#peerConnection.bytesSent();
237
+ let bytesReceived = this.#peerConnection.bytesReceived();
238
+ let rtt = this.#peerConnection.rtt();
239
+
240
+ let localIdRs = getRandomString(8);
241
+ let localId = 'RTCIceCandidate_' + localIdRs;
242
+ report.set(localId, {
243
+ id: localId,
244
+ type: 'localcandidate',
245
+ timestamp: Date.now(),
246
+ candidateType: cp.local.type,
247
+ ip: cp.local.address,
248
+ port: cp.local.port,
249
+ });
250
+
251
+ let remoteIdRs = getRandomString(8);
252
+ let remoteId = 'RTCIceCandidate_' + remoteIdRs;
253
+ report.set(remoteId, {
254
+ id: remoteId,
255
+ type: 'remotecandidate',
256
+ timestamp: Date.now(),
257
+ candidateType: cp.remote.type,
258
+ ip: cp.remote.address,
259
+ port: cp.remote.port,
260
+ });
261
+
262
+ let candidateId = 'RTCIceCandidatePair_' + localIdRs + '_' + remoteIdRs;
263
+ report.set(candidateId, {
264
+ id: candidateId,
265
+ type: 'candidate-pair',
266
+ timestamp: Date.now(),
267
+ localCandidateId: localId,
268
+ remoteCandidateId: remoteId,
269
+ state: 'succeeded',
270
+ nominated: true,
271
+ writable: true,
272
+ bytesSent: bytesSent,
273
+ bytesReceived: bytesReceived,
274
+ totalRoundTripTime: rtt,
275
+ currentRoundTripTime: rtt,
276
+ });
277
+
278
+ let transportId = 'RTCTransport_0_1';
279
+ report.set(transportId, {
280
+ id: transportId,
281
+ timestamp: Date.now(),
282
+ type: 'transport',
283
+ bytesSent: bytesSent,
284
+ bytesReceived: bytesReceived,
285
+ dtlsState: 'connected',
286
+ selectedCandidatePairId: candidateId,
287
+ selectedCandidatePairChanges: 1,
288
+ });
289
+
290
+ return resolve(report);
291
+ });
292
+ }
293
+
294
+ getTransceivers() {
295
+ return []; // throw new DOMException('Not implemented');
296
+ }
297
+
298
+ removeTrack() {
299
+ throw new DOMException('Not implemented');
300
+ }
301
+
302
+ restartIce() {
303
+ throw new DOMException('Not implemented');
304
+ }
305
+
306
+ setConfiguration(config) {
307
+ this.#config = config;
308
+ }
309
+
310
+ async setLocalDescription(description) {
311
+ if (description == null || description.type == null) {
312
+ throw new DOMException('Local description type must be set');
313
+ }
314
+
315
+ if (description.type !== 'offer') {
316
+ // any other type causes libdatachannel to throw
317
+ return;
318
+ }
319
+ this.#peerConnection.setLocalDescription(description.type);
320
+ }
321
+
322
+ async setRemoteDescription(description) {
323
+ if (description.sdp == null) {
324
+ throw new DOMException('Remote SDP must be set');
325
+ }
326
+
327
+ this.#peerConnection.setRemoteDescription(description.sdp, description.type);
328
+ }
329
+ }
330
+
331
+ function createDeferredPromise() {
332
+ let resolve, reject;
333
+
334
+ let promise = new Promise(function (_resolve, _reject) {
335
+ resolve = _resolve;
336
+ reject = _reject;
337
+ });
338
+
339
+ promise.resolve = resolve;
340
+ promise.reject = reject;
341
+ return promise;
342
+ }
343
+
344
+ function getRandomString(length) {
345
+ return Math.random()
346
+ .toString(36)
347
+ .substring(2, 2 + length);
348
+ }
@@ -0,0 +1,10 @@
1
+ /// <reference lib="dom" />
2
+
3
+ export default class _RTCSctpTransport extends EventTarget implements RTCSctpTransport {
4
+ readonly maxChannels: number | null;
5
+ readonly maxMessageSize: number;
6
+ readonly transport: RTCDtlsTransport;
7
+ readonly state: RTCSctpTransportState;
8
+
9
+ onstatechange: ((this: RTCSctpTransport, ev: Event) => any) | null;
10
+ }
@@ -0,0 +1,34 @@
1
+ export default class _RTCSctpTransport extends EventTarget {
2
+ #maxChannels = null;
3
+ #maxMessageSize = null;
4
+ #state = null;
5
+ #transport = null;
6
+
7
+ onstatechange = createEmptyFunction();
8
+
9
+ constructor(init = {}) {
10
+ super();
11
+ }
12
+
13
+ get maxChannels() {
14
+ return this.#maxChannels;
15
+ }
16
+
17
+ get maxMessageSize() {
18
+ return this.#maxMessageSize;
19
+ }
20
+
21
+ get state() {
22
+ return this.#state;
23
+ }
24
+
25
+ get transport() {
26
+ return this.#transport;
27
+ }
28
+ }
29
+
30
+ function createEmptyFunction() {
31
+ return () => {
32
+ /** */
33
+ };
34
+ }
@@ -0,0 +1,7 @@
1
+ /// <reference lib="dom" />
2
+
3
+ export default class _RTCSessionDescription implements RTCSessionDescription {
4
+ readonly sdp: string;
5
+ readonly type: RTCSdpType;
6
+ toJSON(): any;
7
+ }
@@ -0,0 +1,37 @@
1
+ // https://developer.mozilla.org/docs/Web/API/RTCSessionDescription
2
+ //
3
+ // Example usage
4
+ // const init = {
5
+ // type: 'offer',
6
+ // sdp: 'v=0\r\no=- 1234567890 1234567890 IN IP4 192.168.1.1\r\ns=-\r\nt=0 0\r\na=ice-ufrag:abcd\r\na=ice-pwd:efgh\r\n'
7
+ // };
8
+
9
+ export default class _RTCSessionDescription {
10
+ #type;
11
+ #sdp;
12
+
13
+ constructor(init = {}) {
14
+ // Allow Empty Constructor
15
+ // if (!init || !init.type || !init.sdp) {
16
+ // throw new DOMException('Type and sdp properties are required.');
17
+ // }
18
+
19
+ this.#type = init ? init.type : null;
20
+ this.#sdp = init ? init.sdp : null;
21
+ }
22
+
23
+ get type() {
24
+ return this.#type;
25
+ }
26
+
27
+ get sdp() {
28
+ return this.#sdp;
29
+ }
30
+
31
+ toJSON() {
32
+ return {
33
+ sdp: this.#sdp,
34
+ type: this.#type,
35
+ };
36
+ }
37
+ }