@lakutata/webrtc 0.0.0-stage → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1094) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +509 -2
  3. package/README.zh-CN.md +399 -0
  4. package/THIRD_PARTY_NOTICES.md +652 -0
  5. package/dist/cjs/client/SignalingConnection.d.ts +81 -0
  6. package/dist/cjs/client/SignalingConnection.js +67 -0
  7. package/dist/cjs/cluster/Cluster.d.ts +503 -0
  8. package/dist/cjs/cluster/Cluster.js +546 -0
  9. package/dist/cjs/cluster/ClusterFrames.d.ts +24 -0
  10. package/dist/cjs/cluster/ClusterFrames.js +90 -0
  11. package/dist/cjs/cluster/ClusterTURN.d.ts +63 -0
  12. package/dist/cjs/cluster/ClusterTURN.js +78 -0
  13. package/dist/cjs/cluster/Rendezvous.d.ts +8 -0
  14. package/dist/cjs/cluster/Rendezvous.js +23 -0
  15. package/dist/cjs/cluster/transports/ClusterTransport.d.ts +34 -0
  16. package/dist/cjs/cluster/transports/ClusterTransport.js +2 -0
  17. package/dist/cjs/cluster/transports/LoadClient.d.ts +6 -0
  18. package/dist/cjs/cluster/transports/LoadClient.js +80 -0
  19. package/dist/cjs/cluster/transports/MemoryClusterTransport.d.ts +13 -0
  20. package/dist/cjs/cluster/transports/MemoryClusterTransport.js +47 -0
  21. package/dist/cjs/cluster/transports/NATSClusterTransport.d.ts +23 -0
  22. package/dist/cjs/cluster/transports/NATSClusterTransport.js +70 -0
  23. package/dist/cjs/cluster/transports/RedisClusterTransport.d.ts +23 -0
  24. package/dist/cjs/cluster/transports/RedisClusterTransport.js +77 -0
  25. package/dist/cjs/exceptions/ClusterRequestException.d.ts +11 -0
  26. package/dist/cjs/exceptions/ClusterRequestException.js +18 -0
  27. package/dist/cjs/exceptions/ClusterTimeoutException.d.ts +10 -0
  28. package/dist/cjs/exceptions/ClusterTimeoutException.js +17 -0
  29. package/dist/cjs/exceptions/ClusterTransportNotFoundException.d.ts +11 -0
  30. package/dist/cjs/exceptions/ClusterTransportNotFoundException.js +18 -0
  31. package/dist/cjs/exceptions/SignalingClientRequiredException.d.ts +12 -0
  32. package/dist/cjs/exceptions/SignalingClientRequiredException.js +19 -0
  33. package/dist/cjs/exceptions/SignalingConnectionException.d.ts +12 -0
  34. package/dist/cjs/exceptions/SignalingConnectionException.js +19 -0
  35. package/dist/cjs/exceptions/SignalingDeniedException.d.ts +11 -0
  36. package/dist/cjs/exceptions/SignalingDeniedException.js +18 -0
  37. package/dist/cjs/exceptions/SignalingLimitException.d.ts +11 -0
  38. package/dist/cjs/exceptions/SignalingLimitException.js +18 -0
  39. package/dist/cjs/exceptions/SignalingNotAMemberException.d.ts +11 -0
  40. package/dist/cjs/exceptions/SignalingNotAMemberException.js +18 -0
  41. package/dist/cjs/exceptions/WHEPDeniedException.d.ts +15 -0
  42. package/dist/cjs/exceptions/WHEPDeniedException.js +22 -0
  43. package/dist/cjs/exceptions/WHEPLimitException.d.ts +15 -0
  44. package/dist/cjs/exceptions/WHEPLimitException.js +22 -0
  45. package/dist/cjs/exceptions/WHEPMediaTypeException.d.ts +15 -0
  46. package/dist/cjs/exceptions/WHEPMediaTypeException.js +22 -0
  47. package/dist/cjs/exceptions/WHEPOfferException.d.ts +16 -0
  48. package/dist/cjs/exceptions/WHEPOfferException.js +23 -0
  49. package/dist/cjs/exceptions/WHEPSessionNotFoundException.d.ts +15 -0
  50. package/dist/cjs/exceptions/WHEPSessionNotFoundException.js +22 -0
  51. package/dist/cjs/exceptions/WHIPDeniedException.d.ts +15 -0
  52. package/dist/cjs/exceptions/WHIPDeniedException.js +22 -0
  53. package/dist/cjs/exceptions/WHIPLimitException.d.ts +15 -0
  54. package/dist/cjs/exceptions/WHIPLimitException.js +22 -0
  55. package/dist/cjs/exceptions/WHIPMediaTypeException.d.ts +15 -0
  56. package/dist/cjs/exceptions/WHIPMediaTypeException.js +22 -0
  57. package/dist/cjs/exceptions/WHIPOfferException.d.ts +16 -0
  58. package/dist/cjs/exceptions/WHIPOfferException.js +23 -0
  59. package/dist/cjs/exceptions/WHIPSessionNotFoundException.d.ts +15 -0
  60. package/dist/cjs/exceptions/WHIPSessionNotFoundException.js +22 -0
  61. package/dist/cjs/exports/Client.d.ts +11 -0
  62. package/dist/cjs/exports/Client.js +29 -0
  63. package/dist/cjs/exports/WebRTC.d.ts +48 -0
  64. package/dist/cjs/exports/WebRTC.js +72 -0
  65. package/dist/cjs/lib/common/binary.d.ts +51 -0
  66. package/dist/cjs/lib/common/binary.js +264 -0
  67. package/dist/cjs/lib/common/binaryData.d.ts +116 -0
  68. package/dist/cjs/lib/common/binaryData.js +400 -0
  69. package/dist/cjs/lib/common/crc.d.ts +4 -0
  70. package/dist/cjs/lib/common/crc.js +122 -0
  71. package/dist/cjs/lib/common/deque.d.ts +36 -0
  72. package/dist/cjs/lib/common/deque.js +89 -0
  73. package/dist/cjs/lib/common/event.d.ts +48 -0
  74. package/dist/cjs/lib/common/event.js +207 -0
  75. package/dist/cjs/lib/common/index.d.ts +11 -0
  76. package/dist/cjs/lib/common/index.js +50 -0
  77. package/dist/cjs/lib/common/log.d.ts +47 -0
  78. package/dist/cjs/lib/common/log.js +62 -0
  79. package/dist/cjs/lib/common/network.d.ts +10 -0
  80. package/dist/cjs/lib/common/network.js +60 -0
  81. package/dist/cjs/lib/common/number.d.ts +13 -0
  82. package/dist/cjs/lib/common/number.js +43 -0
  83. package/dist/cjs/lib/common/promise.d.ts +21 -0
  84. package/dist/cjs/lib/common/promise.js +70 -0
  85. package/dist/cjs/lib/common/transport.d.ts +104 -0
  86. package/dist/cjs/lib/common/transport.js +441 -0
  87. package/dist/cjs/lib/common/type.d.ts +3 -0
  88. package/dist/cjs/lib/common/type.js +2 -0
  89. package/dist/cjs/lib/dtls/cipher/const.d.ts +42 -0
  90. package/dist/cjs/lib/dtls/cipher/const.js +33 -0
  91. package/dist/cjs/lib/dtls/cipher/create.d.ts +21 -0
  92. package/dist/cjs/lib/dtls/cipher/create.js +105 -0
  93. package/dist/cjs/lib/dtls/cipher/ec.d.ts +28 -0
  94. package/dist/cjs/lib/dtls/cipher/ec.js +44 -0
  95. package/dist/cjs/lib/dtls/cipher/key-exchange.d.ts +43 -0
  96. package/dist/cjs/lib/dtls/cipher/key-exchange.js +113 -0
  97. package/dist/cjs/lib/dtls/cipher/namedCurve.d.ts +7 -0
  98. package/dist/cjs/lib/dtls/cipher/namedCurve.js +27 -0
  99. package/dist/cjs/lib/dtls/cipher/prf.d.ts +17 -0
  100. package/dist/cjs/lib/dtls/cipher/prf.js +92 -0
  101. package/dist/cjs/lib/dtls/cipher/suites/abstract.d.ts +40 -0
  102. package/dist/cjs/lib/dtls/cipher/suites/abstract.js +41 -0
  103. package/dist/cjs/lib/dtls/cipher/suites/aead.d.ts +28 -0
  104. package/dist/cjs/lib/dtls/cipher/suites/aead.js +132 -0
  105. package/dist/cjs/lib/dtls/cipher/suites/null.d.ts +24 -0
  106. package/dist/cjs/lib/dtls/cipher/suites/null.js +41 -0
  107. package/dist/cjs/lib/dtls/cipher/utils.d.ts +18 -0
  108. package/dist/cjs/lib/dtls/cipher/utils.js +70 -0
  109. package/dist/cjs/lib/dtls/cipher/x509.d.ts +33 -0
  110. package/dist/cjs/lib/dtls/cipher/x509.js +100 -0
  111. package/dist/cjs/lib/dtls/client.d.ts +7 -0
  112. package/dist/cjs/lib/dtls/client.js +76 -0
  113. package/dist/cjs/lib/dtls/context/cipher.d.ts +42 -0
  114. package/dist/cjs/lib/dtls/context/cipher.js +87 -0
  115. package/dist/cjs/lib/dtls/context/dtls.d.ts +38 -0
  116. package/dist/cjs/lib/dtls/context/dtls.js +49 -0
  117. package/dist/cjs/lib/dtls/context/srtp.d.ts +5 -0
  118. package/dist/cjs/lib/dtls/context/srtp.js +12 -0
  119. package/dist/cjs/lib/dtls/context/transport.d.ts +8 -0
  120. package/dist/cjs/lib/dtls/context/transport.js +17 -0
  121. package/dist/cjs/lib/dtls/flight/client/flight1.d.ts +10 -0
  122. package/dist/cjs/lib/dtls/flight/client/flight1.js +26 -0
  123. package/dist/cjs/lib/dtls/flight/client/flight3.d.ts +8 -0
  124. package/dist/cjs/lib/dtls/flight/client/flight3.js +25 -0
  125. package/dist/cjs/lib/dtls/flight/client/flight5.d.ts +18 -0
  126. package/dist/cjs/lib/dtls/flight/client/flight5.js +206 -0
  127. package/dist/cjs/lib/dtls/flight/flight.d.ts +18 -0
  128. package/dist/cjs/lib/dtls/flight/flight.js +68 -0
  129. package/dist/cjs/lib/dtls/flight/server/flight2.d.ts +6 -0
  130. package/dist/cjs/lib/dtls/flight/server/flight2.js +126 -0
  131. package/dist/cjs/lib/dtls/flight/server/flight4.d.ts +17 -0
  132. package/dist/cjs/lib/dtls/flight/server/flight4.js +87 -0
  133. package/dist/cjs/lib/dtls/flight/server/flight6.d.ts +13 -0
  134. package/dist/cjs/lib/dtls/flight/server/flight6.js +111 -0
  135. package/dist/cjs/lib/dtls/handshake/binary.d.ts +16 -0
  136. package/dist/cjs/lib/dtls/handshake/binary.js +20 -0
  137. package/dist/cjs/lib/dtls/handshake/const.d.ts +13 -0
  138. package/dist/cjs/lib/dtls/handshake/const.js +17 -0
  139. package/dist/cjs/lib/dtls/handshake/extensions/ellipticCurves.d.ts +17 -0
  140. package/dist/cjs/lib/dtls/handshake/extensions/ellipticCurves.js +40 -0
  141. package/dist/cjs/lib/dtls/handshake/extensions/extendedMasterSecret.d.ts +3 -0
  142. package/dist/cjs/lib/dtls/handshake/extensions/extendedMasterSecret.js +7 -0
  143. package/dist/cjs/lib/dtls/handshake/extensions/renegotiationIndication.d.ts +18 -0
  144. package/dist/cjs/lib/dtls/handshake/extensions/renegotiationIndication.js +34 -0
  145. package/dist/cjs/lib/dtls/handshake/extensions/signature.d.ts +26 -0
  146. package/dist/cjs/lib/dtls/handshake/extensions/signature.js +39 -0
  147. package/dist/cjs/lib/dtls/handshake/extensions/useSrtp.d.ts +19 -0
  148. package/dist/cjs/lib/dtls/handshake/extensions/useSrtp.js +65 -0
  149. package/dist/cjs/lib/dtls/handshake/message/alert.d.ts +12 -0
  150. package/dist/cjs/lib/dtls/handshake/message/alert.js +24 -0
  151. package/dist/cjs/lib/dtls/handshake/message/certificate.d.ts +17 -0
  152. package/dist/cjs/lib/dtls/handshake/message/certificate.js +35 -0
  153. package/dist/cjs/lib/dtls/handshake/message/changeCipherSpec.d.ts +11 -0
  154. package/dist/cjs/lib/dtls/handshake/message/changeCipherSpec.js +24 -0
  155. package/dist/cjs/lib/dtls/handshake/message/client/certificateVerify.d.ts +20 -0
  156. package/dist/cjs/lib/dtls/handshake/message/client/certificateVerify.js +35 -0
  157. package/dist/cjs/lib/dtls/handshake/message/client/hello.d.ts +50 -0
  158. package/dist/cjs/lib/dtls/handshake/message/client/hello.js +48 -0
  159. package/dist/cjs/lib/dtls/handshake/message/client/keyExchange.d.ts +17 -0
  160. package/dist/cjs/lib/dtls/handshake/message/client/keyExchange.js +33 -0
  161. package/dist/cjs/lib/dtls/handshake/message/finished.d.ts +13 -0
  162. package/dist/cjs/lib/dtls/handshake/message/finished.js +26 -0
  163. package/dist/cjs/lib/dtls/handshake/message/server/certificateRequest.d.ts +31 -0
  164. package/dist/cjs/lib/dtls/handshake/message/server/certificateRequest.js +38 -0
  165. package/dist/cjs/lib/dtls/handshake/message/server/hello.d.ts +33 -0
  166. package/dist/cjs/lib/dtls/handshake/message/server/hello.js +57 -0
  167. package/dist/cjs/lib/dtls/handshake/message/server/helloDone.d.ts +12 -0
  168. package/dist/cjs/lib/dtls/handshake/message/server/helloDone.js +30 -0
  169. package/dist/cjs/lib/dtls/handshake/message/server/helloVerifyRequest.d.ts +32 -0
  170. package/dist/cjs/lib/dtls/handshake/message/server/helloVerifyRequest.js +42 -0
  171. package/dist/cjs/lib/dtls/handshake/message/server/keyExchange.d.ts +32 -0
  172. package/dist/cjs/lib/dtls/handshake/message/server/keyExchange.js +49 -0
  173. package/dist/cjs/lib/dtls/handshake/random.d.ts +13 -0
  174. package/dist/cjs/lib/dtls/handshake/random.js +29 -0
  175. package/dist/cjs/lib/dtls/helper.d.ts +4 -0
  176. package/dist/cjs/lib/dtls/helper.js +30 -0
  177. package/dist/cjs/lib/dtls/imports/common.d.ts +1 -0
  178. package/dist/cjs/lib/dtls/imports/common.js +17 -0
  179. package/dist/cjs/lib/dtls/imports/rtp.d.ts +1 -0
  180. package/dist/cjs/lib/dtls/imports/rtp.js +17 -0
  181. package/dist/cjs/lib/dtls/index.d.ts +7 -0
  182. package/dist/cjs/lib/dtls/index.js +117 -0
  183. package/dist/cjs/lib/dtls/record/antiReplayWindow.d.ts +27 -0
  184. package/dist/cjs/lib/dtls/record/antiReplayWindow.js +102 -0
  185. package/dist/cjs/lib/dtls/record/builder.d.ts +9 -0
  186. package/dist/cjs/lib/dtls/record/builder.js +27 -0
  187. package/dist/cjs/lib/dtls/record/const.d.ts +33 -0
  188. package/dist/cjs/lib/dtls/record/const.js +38 -0
  189. package/dist/cjs/lib/dtls/record/message/fragment.d.ts +26 -0
  190. package/dist/cjs/lib/dtls/record/message/fragment.js +96 -0
  191. package/dist/cjs/lib/dtls/record/message/header.d.ts +38 -0
  192. package/dist/cjs/lib/dtls/record/message/header.js +34 -0
  193. package/dist/cjs/lib/dtls/record/message/plaintext.d.ts +14 -0
  194. package/dist/cjs/lib/dtls/record/message/plaintext.js +63 -0
  195. package/dist/cjs/lib/dtls/record/receive.d.ts +9 -0
  196. package/dist/cjs/lib/dtls/record/receive.js +91 -0
  197. package/dist/cjs/lib/dtls/server.d.ts +6 -0
  198. package/dist/cjs/lib/dtls/server.js +78 -0
  199. package/dist/cjs/lib/dtls/socket.d.ts +52 -0
  200. package/dist/cjs/lib/dtls/socket.js +188 -0
  201. package/dist/cjs/lib/dtls/typings/domain.d.ts +20 -0
  202. package/dist/cjs/lib/dtls/typings/domain.js +2 -0
  203. package/dist/cjs/lib/dtls/util/binary.d.ts +2 -0
  204. package/dist/cjs/lib/dtls/util/binary.js +8 -0
  205. package/dist/cjs/lib/ice/candidate.d.ts +35 -0
  206. package/dist/cjs/lib/ice/candidate.js +198 -0
  207. package/dist/cjs/lib/ice/dns/lookup.d.ts +16 -0
  208. package/dist/cjs/lib/ice/dns/lookup.js +133 -0
  209. package/dist/cjs/lib/ice/dns/mdns.d.ts +38 -0
  210. package/dist/cjs/lib/ice/dns/mdns.js +145 -0
  211. package/dist/cjs/lib/ice/exceptions.d.ts +24 -0
  212. package/dist/cjs/lib/ice/exceptions.js +41 -0
  213. package/dist/cjs/lib/ice/helper.d.ts +17 -0
  214. package/dist/cjs/lib/ice/helper.js +74 -0
  215. package/dist/cjs/lib/ice/ice.d.ts +182 -0
  216. package/dist/cjs/lib/ice/ice.js +1584 -0
  217. package/dist/cjs/lib/ice/iceBase.d.ts +214 -0
  218. package/dist/cjs/lib/ice/iceBase.js +182 -0
  219. package/dist/cjs/lib/ice/imports/common.d.ts +1 -0
  220. package/dist/cjs/lib/ice/imports/common.js +17 -0
  221. package/dist/cjs/lib/ice/index.d.ts +12 -0
  222. package/dist/cjs/lib/ice/index.js +30 -0
  223. package/dist/cjs/lib/ice/internal/selectAddresses.d.ts +9 -0
  224. package/dist/cjs/lib/ice/internal/selectAddresses.js +39 -0
  225. package/dist/cjs/lib/ice/stun/attributes.d.ts +1 -0
  226. package/dist/cjs/lib/ice/stun/attributes.js +17 -0
  227. package/dist/cjs/lib/ice/stun/const.d.ts +8 -0
  228. package/dist/cjs/lib/ice/stun/const.js +25 -0
  229. package/dist/cjs/lib/ice/stun/message.d.ts +1 -0
  230. package/dist/cjs/lib/ice/stun/message.js +17 -0
  231. package/dist/cjs/lib/ice/stun/protocol.d.ts +30 -0
  232. package/dist/cjs/lib/ice/stun/protocol.js +125 -0
  233. package/dist/cjs/lib/ice/stun/tcpFrame.d.ts +5 -0
  234. package/dist/cjs/lib/ice/stun/tcpFrame.js +25 -0
  235. package/dist/cjs/lib/ice/stun/tcpProtocol.d.ts +57 -0
  236. package/dist/cjs/lib/ice/stun/tcpProtocol.js +323 -0
  237. package/dist/cjs/lib/ice/stun/transaction.d.ts +75 -0
  238. package/dist/cjs/lib/ice/stun/transaction.js +239 -0
  239. package/dist/cjs/lib/ice/turn/frame.d.ts +1 -0
  240. package/dist/cjs/lib/ice/turn/frame.js +17 -0
  241. package/dist/cjs/lib/ice/turn/protocol.d.ts +170 -0
  242. package/dist/cjs/lib/ice/turn/protocol.js +638 -0
  243. package/dist/cjs/lib/ice/types/model.d.ts +56 -0
  244. package/dist/cjs/lib/ice/types/model.js +2 -0
  245. package/dist/cjs/lib/ice/utils.d.ts +13 -0
  246. package/dist/cjs/lib/ice/utils.js +84 -0
  247. package/dist/cjs/lib/peer/const.d.ts +36 -0
  248. package/dist/cjs/lib/peer/const.js +53 -0
  249. package/dist/cjs/lib/peer/dataChannel.d.ts +69 -0
  250. package/dist/cjs/lib/peer/dataChannel.js +133 -0
  251. package/dist/cjs/lib/peer/errors.d.ts +11 -0
  252. package/dist/cjs/lib/peer/errors.js +23 -0
  253. package/dist/cjs/lib/peer/helper.d.ts +20 -0
  254. package/dist/cjs/lib/peer/helper.js +84 -0
  255. package/dist/cjs/lib/peer/imports/common.d.ts +1 -0
  256. package/dist/cjs/lib/peer/imports/common.js +17 -0
  257. package/dist/cjs/lib/peer/imports/dtls.d.ts +1 -0
  258. package/dist/cjs/lib/peer/imports/dtls.js +17 -0
  259. package/dist/cjs/lib/peer/imports/ice.d.ts +1 -0
  260. package/dist/cjs/lib/peer/imports/ice.js +17 -0
  261. package/dist/cjs/lib/peer/imports/rtp.d.ts +1 -0
  262. package/dist/cjs/lib/peer/imports/rtp.js +17 -0
  263. package/dist/cjs/lib/peer/index.d.ts +14 -0
  264. package/dist/cjs/lib/peer/index.js +30 -0
  265. package/dist/cjs/lib/peer/media/codec.d.ts +15 -0
  266. package/dist/cjs/lib/peer/media/codec.js +80 -0
  267. package/dist/cjs/lib/peer/media/codecCompatibility.d.ts +23 -0
  268. package/dist/cjs/lib/peer/media/codecCompatibility.js +137 -0
  269. package/dist/cjs/lib/peer/media/extension/rtcpFeedback.d.ts +6 -0
  270. package/dist/cjs/lib/peer/media/extension/rtcpFeedback.js +13 -0
  271. package/dist/cjs/lib/peer/media/extension/rtpExtension.d.ts +9 -0
  272. package/dist/cjs/lib/peer/media/extension/rtpExtension.js +52 -0
  273. package/dist/cjs/lib/peer/media/index.d.ts +12 -0
  274. package/dist/cjs/lib/peer/media/index.js +28 -0
  275. package/dist/cjs/lib/peer/media/parameters.d.ts +65 -0
  276. package/dist/cjs/lib/peer/media/parameters.js +60 -0
  277. package/dist/cjs/lib/peer/media/receiver/nack.d.ts +23 -0
  278. package/dist/cjs/lib/peer/media/receiver/nack.js +104 -0
  279. package/dist/cjs/lib/peer/media/receiver/receiverTwcc.d.ts +47 -0
  280. package/dist/cjs/lib/peer/media/receiver/receiverTwcc.js +179 -0
  281. package/dist/cjs/lib/peer/media/receiver/statistics.d.ts +22 -0
  282. package/dist/cjs/lib/peer/media/receiver/statistics.js +71 -0
  283. package/dist/cjs/lib/peer/media/router.d.ts +25 -0
  284. package/dist/cjs/lib/peer/media/router.js +166 -0
  285. package/dist/cjs/lib/peer/media/rtpReceiver.d.ts +90 -0
  286. package/dist/cjs/lib/peer/media/rtpReceiver.js +407 -0
  287. package/dist/cjs/lib/peer/media/rtpSender.d.ts +209 -0
  288. package/dist/cjs/lib/peer/media/rtpSender.js +826 -0
  289. package/dist/cjs/lib/peer/media/rtpTransceiver.d.ts +117 -0
  290. package/dist/cjs/lib/peer/media/rtpTransceiver.js +245 -0
  291. package/dist/cjs/lib/peer/media/sender/cumulativeResult.d.ts +19 -0
  292. package/dist/cjs/lib/peer/media/sender/cumulativeResult.js +61 -0
  293. package/dist/cjs/lib/peer/media/sender/senderBWE.d.ts +32 -0
  294. package/dist/cjs/lib/peer/media/sender/senderBWE.js +99 -0
  295. package/dist/cjs/lib/peer/media/stats.d.ts +293 -0
  296. package/dist/cjs/lib/peer/media/stats.js +90 -0
  297. package/dist/cjs/lib/peer/media/track.d.ts +67 -0
  298. package/dist/cjs/lib/peer/media/track.js +216 -0
  299. package/dist/cjs/lib/peer/peerConnection.d.ts +458 -0
  300. package/dist/cjs/lib/peer/peerConnection.js +1591 -0
  301. package/dist/cjs/lib/peer/sctpManager.d.ts +28 -0
  302. package/dist/cjs/lib/peer/sctpManager.js +138 -0
  303. package/dist/cjs/lib/peer/sdp.d.ts +97 -0
  304. package/dist/cjs/lib/peer/sdp.js +628 -0
  305. package/dist/cjs/lib/peer/sdpManager.d.ts +116 -0
  306. package/dist/cjs/lib/peer/sdpManager.js +573 -0
  307. package/dist/cjs/lib/peer/secureTransportManager.d.ts +96 -0
  308. package/dist/cjs/lib/peer/secureTransportManager.js +472 -0
  309. package/dist/cjs/lib/peer/transceiverManager.d.ts +151 -0
  310. package/dist/cjs/lib/peer/transceiverManager.js +767 -0
  311. package/dist/cjs/lib/peer/transport/dtls.d.ts +95 -0
  312. package/dist/cjs/lib/peer/transport/dtls.js +571 -0
  313. package/dist/cjs/lib/peer/transport/ice.d.ts +143 -0
  314. package/dist/cjs/lib/peer/transport/ice.js +436 -0
  315. package/dist/cjs/lib/peer/transport/sctp.d.ts +56 -0
  316. package/dist/cjs/lib/peer/transport/sctp.js +387 -0
  317. package/dist/cjs/lib/peer/types/domain.d.ts +5 -0
  318. package/dist/cjs/lib/peer/types/domain.js +19 -0
  319. package/dist/cjs/lib/peer/types/util.d.ts +2 -0
  320. package/dist/cjs/lib/peer/types/util.js +2 -0
  321. package/dist/cjs/lib/peer/utils.d.ts +73 -0
  322. package/dist/cjs/lib/peer/utils.js +306 -0
  323. package/dist/cjs/lib/rtp/codec/av1.d.ts +56 -0
  324. package/dist/cjs/lib/rtp/codec/av1.js +209 -0
  325. package/dist/cjs/lib/rtp/codec/base.d.ts +8 -0
  326. package/dist/cjs/lib/rtp/codec/base.js +15 -0
  327. package/dist/cjs/lib/rtp/codec/h264.d.ts +32 -0
  328. package/dist/cjs/lib/rtp/codec/h264.js +122 -0
  329. package/dist/cjs/lib/rtp/codec/index.d.ts +16 -0
  330. package/dist/cjs/lib/rtp/codec/index.js +84 -0
  331. package/dist/cjs/lib/rtp/codec/leb128.d.ts +5 -0
  332. package/dist/cjs/lib/rtp/codec/leb128.js +23 -0
  333. package/dist/cjs/lib/rtp/codec/opus.d.ts +9 -0
  334. package/dist/cjs/lib/rtp/codec/opus.js +25 -0
  335. package/dist/cjs/lib/rtp/codec/vp8.d.ts +27 -0
  336. package/dist/cjs/lib/rtp/codec/vp8.js +109 -0
  337. package/dist/cjs/lib/rtp/codec/vp9.d.ts +46 -0
  338. package/dist/cjs/lib/rtp/codec/vp9.js +161 -0
  339. package/dist/cjs/lib/rtp/const.d.ts +1 -0
  340. package/dist/cjs/lib/rtp/const.js +4 -0
  341. package/dist/cjs/lib/rtp/helper.d.ts +8 -0
  342. package/dist/cjs/lib/rtp/helper.js +36 -0
  343. package/dist/cjs/lib/rtp/imports/common.d.ts +1 -0
  344. package/dist/cjs/lib/rtp/imports/common.js +17 -0
  345. package/dist/cjs/lib/rtp/index.d.ts +25 -0
  346. package/dist/cjs/lib/rtp/index.js +41 -0
  347. package/dist/cjs/lib/rtp/rtcp/header.d.ts +13 -0
  348. package/dist/cjs/lib/rtp/rtcp/header.js +50 -0
  349. package/dist/cjs/lib/rtp/rtcp/psfb/fullIntraRequest.d.ts +16 -0
  350. package/dist/cjs/lib/rtp/rtcp/psfb/fullIntraRequest.js +34 -0
  351. package/dist/cjs/lib/rtp/rtcp/psfb/index.d.ts +14 -0
  352. package/dist/cjs/lib/rtp/rtcp/psfb/index.js +39 -0
  353. package/dist/cjs/lib/rtp/rtcp/psfb/pictureLossIndication.d.ts +10 -0
  354. package/dist/cjs/lib/rtp/rtcp/psfb/pictureLossIndication.js +20 -0
  355. package/dist/cjs/lib/rtp/rtcp/psfb/remb.d.ts +16 -0
  356. package/dist/cjs/lib/rtp/rtcp/psfb/remb.js +53 -0
  357. package/dist/cjs/lib/rtp/rtcp/rr.d.ts +32 -0
  358. package/dist/cjs/lib/rtp/rtcp/rr.js +73 -0
  359. package/dist/cjs/lib/rtp/rtcp/rtcp.d.ts +10 -0
  360. package/dist/cjs/lib/rtp/rtcp/rtcp.js +58 -0
  361. package/dist/cjs/lib/rtp/rtcp/rtpfb/const.d.ts +1 -0
  362. package/dist/cjs/lib/rtp/rtcp/rtpfb/const.js +4 -0
  363. package/dist/cjs/lib/rtp/rtcp/rtpfb/index.d.ts +14 -0
  364. package/dist/cjs/lib/rtp/rtcp/rtpfb/index.js +35 -0
  365. package/dist/cjs/lib/rtp/rtcp/rtpfb/nack.d.ts +17 -0
  366. package/dist/cjs/lib/rtp/rtcp/rtpfb/nack.js +77 -0
  367. package/dist/cjs/lib/rtp/rtcp/rtpfb/twcc.d.ts +71 -0
  368. package/dist/cjs/lib/rtp/rtcp/rtpfb/twcc.js +352 -0
  369. package/dist/cjs/lib/rtp/rtcp/sdes.d.ts +26 -0
  370. package/dist/cjs/lib/rtp/rtcp/sdes.js +97 -0
  371. package/dist/cjs/lib/rtp/rtcp/sr.d.ts +41 -0
  372. package/dist/cjs/lib/rtp/rtcp/sr.js +110 -0
  373. package/dist/cjs/lib/rtp/rtp/headerExtension.d.ts +72 -0
  374. package/dist/cjs/lib/rtp/rtp/headerExtension.js +117 -0
  375. package/dist/cjs/lib/rtp/rtp/red/encoder.d.ts +13 -0
  376. package/dist/cjs/lib/rtp/rtp/red/encoder.js +44 -0
  377. package/dist/cjs/lib/rtp/rtp/red/handler.d.ts +6 -0
  378. package/dist/cjs/lib/rtp/rtp/red/handler.js +59 -0
  379. package/dist/cjs/lib/rtp/rtp/red/packet.d.ts +26 -0
  380. package/dist/cjs/lib/rtp/rtp/red/packet.js +112 -0
  381. package/dist/cjs/lib/rtp/rtp/rtp.d.ts +44 -0
  382. package/dist/cjs/lib/rtp/rtp/rtp.js +271 -0
  383. package/dist/cjs/lib/rtp/rtp/rtx.d.ts +3 -0
  384. package/dist/cjs/lib/rtp/rtp/rtx.js +29 -0
  385. package/dist/cjs/lib/rtp/srtp/cipher/ctr.d.ts +16 -0
  386. package/dist/cjs/lib/rtp/srtp/cipher/ctr.js +107 -0
  387. package/dist/cjs/lib/rtp/srtp/cipher/gcm.d.ts +17 -0
  388. package/dist/cjs/lib/rtp/srtp/cipher/gcm.js +145 -0
  389. package/dist/cjs/lib/rtp/srtp/cipher/index.d.ts +13 -0
  390. package/dist/cjs/lib/rtp/srtp/cipher/index.js +24 -0
  391. package/dist/cjs/lib/rtp/srtp/const.d.ts +6 -0
  392. package/dist/cjs/lib/rtp/srtp/const.js +26 -0
  393. package/dist/cjs/lib/rtp/srtp/context/context.d.ts +45 -0
  394. package/dist/cjs/lib/rtp/srtp/context/context.js +180 -0
  395. package/dist/cjs/lib/rtp/srtp/context/srtcp.d.ts +8 -0
  396. package/dist/cjs/lib/rtp/srtp/context/srtcp.js +25 -0
  397. package/dist/cjs/lib/rtp/srtp/context/srtp.d.ts +9 -0
  398. package/dist/cjs/lib/rtp/srtp/context/srtp.js +41 -0
  399. package/dist/cjs/lib/rtp/srtp/error.d.ts +3 -0
  400. package/dist/cjs/lib/rtp/srtp/error.js +10 -0
  401. package/dist/cjs/lib/rtp/srtp/packet.d.ts +5 -0
  402. package/dist/cjs/lib/rtp/srtp/packet.js +47 -0
  403. package/dist/cjs/lib/rtp/srtp/session.d.ts +19 -0
  404. package/dist/cjs/lib/rtp/srtp/session.js +13 -0
  405. package/dist/cjs/lib/rtp/srtp/srtcp.d.ts +8 -0
  406. package/dist/cjs/lib/rtp/srtp/srtcp.js +21 -0
  407. package/dist/cjs/lib/rtp/srtp/srtp.d.ts +9 -0
  408. package/dist/cjs/lib/rtp/srtp/srtp.js +20 -0
  409. package/dist/cjs/lib/rtp/transport.d.ts +15 -0
  410. package/dist/cjs/lib/rtp/transport.js +23 -0
  411. package/dist/cjs/lib/rtp/util.d.ts +11 -0
  412. package/dist/cjs/lib/rtp/util.js +28 -0
  413. package/dist/cjs/lib/sctp/chunk.d.ts +164 -0
  414. package/dist/cjs/lib/sctp/chunk.js +542 -0
  415. package/dist/cjs/lib/sctp/const.d.ts +17 -0
  416. package/dist/cjs/lib/sctp/const.js +22 -0
  417. package/dist/cjs/lib/sctp/helper.d.ts +5 -0
  418. package/dist/cjs/lib/sctp/helper.js +14 -0
  419. package/dist/cjs/lib/sctp/imports/common.d.ts +1 -0
  420. package/dist/cjs/lib/sctp/imports/common.js +17 -0
  421. package/dist/cjs/lib/sctp/index.d.ts +6 -0
  422. package/dist/cjs/lib/sctp/index.js +20 -0
  423. package/dist/cjs/lib/sctp/param.d.ts +40 -0
  424. package/dist/cjs/lib/sctp/param.js +132 -0
  425. package/dist/cjs/lib/sctp/sctp.d.ts +210 -0
  426. package/dist/cjs/lib/sctp/sctp.js +1467 -0
  427. package/dist/cjs/lib/sctp/transport.d.ts +15 -0
  428. package/dist/cjs/lib/sctp/transport.js +28 -0
  429. package/dist/cjs/lib/turn/index.d.ts +9 -0
  430. package/dist/cjs/lib/turn/index.js +25 -0
  431. package/dist/cjs/lib/turn/node/server.d.ts +21 -0
  432. package/dist/cjs/lib/turn/node/server.js +94 -0
  433. package/dist/cjs/lib/turn/node/turnServer.d.ts +91 -0
  434. package/dist/cjs/lib/turn/node/turnServer.js +565 -0
  435. package/dist/cjs/lib/turn/protocol.d.ts +47 -0
  436. package/dist/cjs/lib/turn/protocol.js +116 -0
  437. package/dist/cjs/lib/turn/stun/attributes.d.ts +37 -0
  438. package/dist/cjs/lib/turn/stun/attributes.js +208 -0
  439. package/dist/cjs/lib/turn/stun/const.d.ts +28 -0
  440. package/dist/cjs/lib/turn/stun/const.js +87 -0
  441. package/dist/cjs/lib/turn/stun/ip.d.ts +12 -0
  442. package/dist/cjs/lib/turn/stun/ip.js +87 -0
  443. package/dist/cjs/lib/turn/stun/message.d.ts +37 -0
  444. package/dist/cjs/lib/turn/stun/message.js +180 -0
  445. package/dist/cjs/lib/turn/turn/auth.d.ts +1 -0
  446. package/dist/cjs/lib/turn/turn/auth.js +9 -0
  447. package/dist/cjs/lib/turn/turn/frame.d.ts +13 -0
  448. package/dist/cjs/lib/turn/turn/frame.js +68 -0
  449. package/dist/cjs/lib/turn/turn/protocol.d.ts +147 -0
  450. package/dist/cjs/lib/turn/turn/protocol.js +785 -0
  451. package/dist/cjs/package.json +1 -0
  452. package/dist/cjs/peer/Endpoints.d.ts +75 -0
  453. package/dist/cjs/peer/Endpoints.js +154 -0
  454. package/dist/cjs/peer/EngineConfig.d.ts +20 -0
  455. package/dist/cjs/peer/EngineConfig.js +36 -0
  456. package/dist/cjs/peer/EngineConnection.d.ts +22 -0
  457. package/dist/cjs/peer/EngineConnection.js +27 -0
  458. package/dist/cjs/peer/Events.d.ts +55 -0
  459. package/dist/cjs/peer/Events.js +85 -0
  460. package/dist/cjs/peer/MediaCodecs.d.ts +27 -0
  461. package/dist/cjs/peer/MediaCodecs.js +53 -0
  462. package/dist/cjs/peer/MediaTrack.d.ts +212 -0
  463. package/dist/cjs/peer/MediaTrack.js +313 -0
  464. package/dist/cjs/peer/PeerChannel.d.ts +248 -0
  465. package/dist/cjs/peer/PeerChannel.js +319 -0
  466. package/dist/cjs/peer/PeerConnection.d.ts +603 -0
  467. package/dist/cjs/peer/PeerConnection.js +697 -0
  468. package/dist/cjs/peer/PeerThreadChannel.d.ts +112 -0
  469. package/dist/cjs/peer/PeerThreadChannel.js +273 -0
  470. package/dist/cjs/peer/PeerThreadProtocol.d.ts +325 -0
  471. package/dist/cjs/peer/PeerThreadProtocol.js +2 -0
  472. package/dist/cjs/peer/PeerThreads.d.ts +114 -0
  473. package/dist/cjs/peer/PeerThreads.js +268 -0
  474. package/dist/cjs/peer/PeerWorker.d.ts +6 -0
  475. package/dist/cjs/peer/PeerWorker.js +461 -0
  476. package/dist/cjs/peer/PeerWorkerCode.d.ts +5 -0
  477. package/dist/cjs/peer/PeerWorkerCode.js +4 -0
  478. package/dist/cjs/peer/RemoteConnection.d.ts +314 -0
  479. package/dist/cjs/peer/RemoteConnection.js +913 -0
  480. package/dist/cjs/peer/RtpPacket.d.ts +112 -0
  481. package/dist/cjs/peer/RtpPacket.js +92 -0
  482. package/dist/cjs/peer/RtpTransceiver.d.ts +167 -0
  483. package/dist/cjs/peer/RtpTransceiver.js +235 -0
  484. package/dist/cjs/peer/SignalingClient.d.ts +236 -0
  485. package/dist/cjs/peer/SignalingClient.js +285 -0
  486. package/dist/cjs/protocol/SignalingProtocol.d.ts +266 -0
  487. package/dist/cjs/protocol/SignalingProtocol.js +65 -0
  488. package/dist/cjs/service/WebRTCServiceEntrypoint.d.ts +158 -0
  489. package/dist/cjs/service/WebRTCServiceEntrypoint.js +356 -0
  490. package/dist/cjs/sfu/SFU.d.ts +356 -0
  491. package/dist/cjs/sfu/SFU.js +763 -0
  492. package/dist/cjs/sfu/SFUAccess.d.ts +48 -0
  493. package/dist/cjs/sfu/SFUAccess.js +15 -0
  494. package/dist/cjs/sfu/SFUClusterLeg.d.ts +101 -0
  495. package/dist/cjs/sfu/SFUClusterLeg.js +106 -0
  496. package/dist/cjs/sfu/SFURoom.d.ts +148 -0
  497. package/dist/cjs/sfu/SFURoom.js +1300 -0
  498. package/dist/cjs/sfu/SFUWorker.d.ts +13 -0
  499. package/dist/cjs/sfu/SFUWorker.js +168 -0
  500. package/dist/cjs/sfu/SFUWorkerChannel.d.ts +204 -0
  501. package/dist/cjs/sfu/SFUWorkerChannel.js +105 -0
  502. package/dist/cjs/sfu/SFUWorkerCode.d.ts +5 -0
  503. package/dist/cjs/sfu/SFUWorkerCode.js +4 -0
  504. package/dist/cjs/sfu/SFUWorkers.d.ts +247 -0
  505. package/dist/cjs/sfu/SFUWorkers.js +552 -0
  506. package/dist/cjs/shared/ChunkedChannel.d.ts +122 -0
  507. package/dist/cjs/shared/ChunkedChannel.js +182 -0
  508. package/dist/cjs/shared/Connections.d.ts +231 -0
  509. package/dist/cjs/shared/Connections.js +2 -0
  510. package/dist/cjs/shared/Emitter.d.ts +50 -0
  511. package/dist/cjs/shared/Emitter.js +80 -0
  512. package/dist/cjs/shared/Peer.d.ts +182 -0
  513. package/dist/cjs/shared/Peer.js +509 -0
  514. package/dist/cjs/shared/PeerServiceProxy.d.ts +173 -0
  515. package/dist/cjs/shared/PeerServiceProxy.js +304 -0
  516. package/dist/cjs/shared/Room.d.ts +143 -0
  517. package/dist/cjs/shared/Room.js +515 -0
  518. package/dist/cjs/shared/SignalingError.d.ts +40 -0
  519. package/dist/cjs/shared/SignalingError.js +48 -0
  520. package/dist/cjs/shared/SignalingSession.d.ts +97 -0
  521. package/dist/cjs/shared/SignalingSession.js +347 -0
  522. package/dist/cjs/shared/Transports.d.ts +139 -0
  523. package/dist/cjs/shared/Transports.js +285 -0
  524. package/dist/cjs/signaling/MediaServers.d.ts +40 -0
  525. package/dist/cjs/signaling/MediaServers.js +16 -0
  526. package/dist/cjs/signaling/Signaling.d.ts +573 -0
  527. package/dist/cjs/signaling/Signaling.js +945 -0
  528. package/dist/cjs/signaling/SignalingController.d.ts +128 -0
  529. package/dist/cjs/signaling/SignalingController.js +229 -0
  530. package/dist/cjs/turn/TURNCredentials.d.ts +49 -0
  531. package/dist/cjs/turn/TURNCredentials.js +49 -0
  532. package/dist/cjs/turn/TURNIceServers.d.ts +11 -0
  533. package/dist/cjs/turn/TURNIceServers.js +25 -0
  534. package/dist/cjs/turn/TURNServer.d.ts +309 -0
  535. package/dist/cjs/turn/TURNServer.js +331 -0
  536. package/dist/cjs/turn/TURNWorker.d.ts +42 -0
  537. package/dist/cjs/turn/TURNWorker.js +52 -0
  538. package/dist/cjs/turn/TURNWorkerCode.d.ts +5 -0
  539. package/dist/cjs/turn/TURNWorkerCode.js +4 -0
  540. package/dist/cjs/turn/TURNWorkers.d.ts +52 -0
  541. package/dist/cjs/turn/TURNWorkers.js +211 -0
  542. package/dist/cjs/whep/WHEP.d.ts +386 -0
  543. package/dist/cjs/whep/WHEP.js +426 -0
  544. package/dist/cjs/whep/WHEPController.d.ts +134 -0
  545. package/dist/cjs/whep/WHEPController.js +301 -0
  546. package/dist/cjs/whip/WHIP.d.ts +426 -0
  547. package/dist/cjs/whip/WHIP.js +470 -0
  548. package/dist/cjs/whip/WHIPController.d.ts +132 -0
  549. package/dist/cjs/whip/WHIPController.js +299 -0
  550. package/dist/esm/client/SignalingConnection.js +63 -0
  551. package/dist/esm/cluster/Cluster.js +542 -0
  552. package/dist/esm/cluster/ClusterFrames.js +85 -0
  553. package/dist/esm/cluster/ClusterTURN.js +73 -0
  554. package/dist/esm/cluster/Rendezvous.js +20 -0
  555. package/dist/esm/cluster/transports/ClusterTransport.js +1 -0
  556. package/dist/esm/cluster/transports/LoadClient.js +44 -0
  557. package/dist/esm/cluster/transports/MemoryClusterTransport.js +43 -0
  558. package/dist/esm/cluster/transports/NATSClusterTransport.js +66 -0
  559. package/dist/esm/cluster/transports/RedisClusterTransport.js +73 -0
  560. package/dist/esm/exceptions/ClusterRequestException.js +14 -0
  561. package/dist/esm/exceptions/ClusterTimeoutException.js +13 -0
  562. package/dist/esm/exceptions/ClusterTransportNotFoundException.js +14 -0
  563. package/dist/esm/exceptions/SignalingClientRequiredException.js +15 -0
  564. package/dist/esm/exceptions/SignalingConnectionException.js +15 -0
  565. package/dist/esm/exceptions/SignalingDeniedException.js +14 -0
  566. package/dist/esm/exceptions/SignalingLimitException.js +14 -0
  567. package/dist/esm/exceptions/SignalingNotAMemberException.js +14 -0
  568. package/dist/esm/exceptions/WHEPDeniedException.js +18 -0
  569. package/dist/esm/exceptions/WHEPLimitException.js +18 -0
  570. package/dist/esm/exceptions/WHEPMediaTypeException.js +18 -0
  571. package/dist/esm/exceptions/WHEPOfferException.js +19 -0
  572. package/dist/esm/exceptions/WHEPSessionNotFoundException.js +18 -0
  573. package/dist/esm/exceptions/WHIPDeniedException.js +18 -0
  574. package/dist/esm/exceptions/WHIPLimitException.js +18 -0
  575. package/dist/esm/exceptions/WHIPMediaTypeException.js +18 -0
  576. package/dist/esm/exceptions/WHIPOfferException.js +19 -0
  577. package/dist/esm/exceptions/WHIPSessionNotFoundException.js +18 -0
  578. package/dist/esm/exports/Client.js +5 -0
  579. package/dist/esm/exports/WebRTC.js +41 -0
  580. package/dist/esm/lib/common/binary.js +244 -0
  581. package/dist/esm/lib/common/binaryData.js +392 -0
  582. package/dist/esm/lib/common/crc.js +118 -0
  583. package/dist/esm/lib/common/deque.js +85 -0
  584. package/dist/esm/lib/common/event.js +202 -0
  585. package/dist/esm/lib/common/index.js +11 -0
  586. package/dist/esm/lib/common/log.js +55 -0
  587. package/dist/esm/lib/common/network.js +52 -0
  588. package/dist/esm/lib/common/number.js +31 -0
  589. package/dist/esm/lib/common/promise.js +64 -0
  590. package/dist/esm/lib/common/transport.js +401 -0
  591. package/dist/esm/lib/common/type.js +1 -0
  592. package/dist/esm/lib/dtls/cipher/const.js +30 -0
  593. package/dist/esm/lib/dtls/cipher/create.js +98 -0
  594. package/dist/esm/lib/dtls/cipher/ec.js +37 -0
  595. package/dist/esm/lib/dtls/cipher/key-exchange.js +103 -0
  596. package/dist/esm/lib/dtls/cipher/namedCurve.js +24 -0
  597. package/dist/esm/lib/dtls/cipher/prf.js +79 -0
  598. package/dist/esm/lib/dtls/cipher/suites/abstract.js +37 -0
  599. package/dist/esm/lib/dtls/cipher/suites/aead.js +96 -0
  600. package/dist/esm/lib/dtls/cipher/suites/null.js +35 -0
  601. package/dist/esm/lib/dtls/cipher/utils.js +34 -0
  602. package/dist/esm/lib/dtls/cipher/x509.js +94 -0
  603. package/dist/esm/lib/dtls/client.js +72 -0
  604. package/dist/esm/lib/dtls/context/cipher.js +83 -0
  605. package/dist/esm/lib/dtls/context/dtls.js +45 -0
  606. package/dist/esm/lib/dtls/context/srtp.js +8 -0
  607. package/dist/esm/lib/dtls/context/transport.js +13 -0
  608. package/dist/esm/lib/dtls/flight/client/flight1.js +22 -0
  609. package/dist/esm/lib/dtls/flight/client/flight3.js +21 -0
  610. package/dist/esm/lib/dtls/flight/client/flight5.js +202 -0
  611. package/dist/esm/lib/dtls/flight/flight.js +64 -0
  612. package/dist/esm/lib/dtls/flight/server/flight2.js +122 -0
  613. package/dist/esm/lib/dtls/flight/server/flight4.js +83 -0
  614. package/dist/esm/lib/dtls/flight/server/flight6.js +107 -0
  615. package/dist/esm/lib/dtls/handshake/binary.js +17 -0
  616. package/dist/esm/lib/dtls/handshake/const.js +14 -0
  617. package/dist/esm/lib/dtls/handshake/extensions/ellipticCurves.js +36 -0
  618. package/dist/esm/lib/dtls/handshake/extensions/extendedMasterSecret.js +3 -0
  619. package/dist/esm/lib/dtls/handshake/extensions/renegotiationIndication.js +30 -0
  620. package/dist/esm/lib/dtls/handshake/extensions/signature.js +35 -0
  621. package/dist/esm/lib/dtls/handshake/extensions/useSrtp.js +61 -0
  622. package/dist/esm/lib/dtls/handshake/message/alert.js +20 -0
  623. package/dist/esm/lib/dtls/handshake/message/certificate.js +31 -0
  624. package/dist/esm/lib/dtls/handshake/message/changeCipherSpec.js +20 -0
  625. package/dist/esm/lib/dtls/handshake/message/client/certificateVerify.js +31 -0
  626. package/dist/esm/lib/dtls/handshake/message/client/hello.js +44 -0
  627. package/dist/esm/lib/dtls/handshake/message/client/keyExchange.js +29 -0
  628. package/dist/esm/lib/dtls/handshake/message/finished.js +22 -0
  629. package/dist/esm/lib/dtls/handshake/message/server/certificateRequest.js +34 -0
  630. package/dist/esm/lib/dtls/handshake/message/server/hello.js +53 -0
  631. package/dist/esm/lib/dtls/handshake/message/server/helloDone.js +26 -0
  632. package/dist/esm/lib/dtls/handshake/message/server/helloVerifyRequest.js +38 -0
  633. package/dist/esm/lib/dtls/handshake/message/server/keyExchange.js +45 -0
  634. package/dist/esm/lib/dtls/handshake/random.js +25 -0
  635. package/dist/esm/lib/dtls/helper.js +23 -0
  636. package/dist/esm/lib/dtls/imports/common.js +1 -0
  637. package/dist/esm/lib/dtls/imports/rtp.js +1 -0
  638. package/dist/esm/lib/dtls/index.js +97 -0
  639. package/dist/esm/lib/dtls/record/antiReplayWindow.js +98 -0
  640. package/dist/esm/lib/dtls/record/builder.js +22 -0
  641. package/dist/esm/lib/dtls/record/const.js +35 -0
  642. package/dist/esm/lib/dtls/record/message/fragment.js +92 -0
  643. package/dist/esm/lib/dtls/record/message/header.js +30 -0
  644. package/dist/esm/lib/dtls/record/message/plaintext.js +59 -0
  645. package/dist/esm/lib/dtls/record/receive.js +86 -0
  646. package/dist/esm/lib/dtls/server.js +74 -0
  647. package/dist/esm/lib/dtls/socket.js +184 -0
  648. package/dist/esm/lib/dtls/typings/domain.js +1 -0
  649. package/dist/esm/lib/dtls/util/binary.js +5 -0
  650. package/dist/esm/lib/ice/candidate.js +190 -0
  651. package/dist/esm/lib/ice/dns/lookup.js +95 -0
  652. package/dist/esm/lib/ice/dns/mdns.js +139 -0
  653. package/dist/esm/lib/ice/exceptions.js +34 -0
  654. package/dist/esm/lib/ice/helper.js +65 -0
  655. package/dist/esm/lib/ice/ice.js +1547 -0
  656. package/dist/esm/lib/ice/iceBase.js +172 -0
  657. package/dist/esm/lib/ice/imports/common.js +1 -0
  658. package/dist/esm/lib/ice/index.js +12 -0
  659. package/dist/esm/lib/ice/internal/selectAddresses.js +36 -0
  660. package/dist/esm/lib/ice/stun/attributes.js +1 -0
  661. package/dist/esm/lib/ice/stun/const.js +8 -0
  662. package/dist/esm/lib/ice/stun/message.js +1 -0
  663. package/dist/esm/lib/ice/stun/protocol.js +121 -0
  664. package/dist/esm/lib/ice/stun/tcpFrame.js +21 -0
  665. package/dist/esm/lib/ice/stun/tcpProtocol.js +318 -0
  666. package/dist/esm/lib/ice/stun/transaction.js +230 -0
  667. package/dist/esm/lib/ice/turn/frame.js +1 -0
  668. package/dist/esm/lib/ice/turn/protocol.js +630 -0
  669. package/dist/esm/lib/ice/types/model.js +1 -0
  670. package/dist/esm/lib/ice/utils.js +43 -0
  671. package/dist/esm/lib/peer/const.js +50 -0
  672. package/dist/esm/lib/peer/dataChannel.js +127 -0
  673. package/dist/esm/lib/peer/errors.js +17 -0
  674. package/dist/esm/lib/peer/helper.js +77 -0
  675. package/dist/esm/lib/peer/imports/common.js +1 -0
  676. package/dist/esm/lib/peer/imports/dtls.js +1 -0
  677. package/dist/esm/lib/peer/imports/ice.js +1 -0
  678. package/dist/esm/lib/peer/imports/rtp.js +1 -0
  679. package/dist/esm/lib/peer/index.js +14 -0
  680. package/dist/esm/lib/peer/media/codec.js +69 -0
  681. package/dist/esm/lib/peer/media/codecCompatibility.js +128 -0
  682. package/dist/esm/lib/peer/media/extension/rtcpFeedback.js +5 -0
  683. package/dist/esm/lib/peer/media/extension/rtpExtension.js +42 -0
  684. package/dist/esm/lib/peer/media/index.js +12 -0
  685. package/dist/esm/lib/peer/media/parameters.js +50 -0
  686. package/dist/esm/lib/peer/media/receiver/nack.js +100 -0
  687. package/dist/esm/lib/peer/media/receiver/receiverTwcc.js +175 -0
  688. package/dist/esm/lib/peer/media/receiver/statistics.js +67 -0
  689. package/dist/esm/lib/peer/media/router.js +162 -0
  690. package/dist/esm/lib/peer/media/rtpReceiver.js +403 -0
  691. package/dist/esm/lib/peer/media/rtpSender.js +822 -0
  692. package/dist/esm/lib/peer/media/rtpTransceiver.js +241 -0
  693. package/dist/esm/lib/peer/media/sender/cumulativeResult.js +57 -0
  694. package/dist/esm/lib/peer/media/sender/senderBWE.js +95 -0
  695. package/dist/esm/lib/peer/media/stats.js +81 -0
  696. package/dist/esm/lib/peer/media/track.js +208 -0
  697. package/dist/esm/lib/peer/peerConnection.js +1585 -0
  698. package/dist/esm/lib/peer/sctpManager.js +134 -0
  699. package/dist/esm/lib/peer/sdp.js +614 -0
  700. package/dist/esm/lib/peer/sdpManager.js +569 -0
  701. package/dist/esm/lib/peer/secureTransportManager.js +468 -0
  702. package/dist/esm/lib/peer/transceiverManager.js +763 -0
  703. package/dist/esm/lib/peer/transport/dtls.js +564 -0
  704. package/dist/esm/lib/peer/transport/ice.js +426 -0
  705. package/dist/esm/lib/peer/transport/sctp.js +382 -0
  706. package/dist/esm/lib/peer/types/domain.js +16 -0
  707. package/dist/esm/lib/peer/types/util.js +1 -0
  708. package/dist/esm/lib/peer/utils.js +286 -0
  709. package/dist/esm/lib/rtp/codec/av1.js +203 -0
  710. package/dist/esm/lib/rtp/codec/base.js +11 -0
  711. package/dist/esm/lib/rtp/codec/h264.js +118 -0
  712. package/dist/esm/lib/rtp/codec/index.js +66 -0
  713. package/dist/esm/lib/rtp/codec/leb128.js +20 -0
  714. package/dist/esm/lib/rtp/codec/opus.js +21 -0
  715. package/dist/esm/lib/rtp/codec/vp8.js +105 -0
  716. package/dist/esm/lib/rtp/codec/vp9.js +157 -0
  717. package/dist/esm/lib/rtp/const.js +1 -0
  718. package/dist/esm/lib/rtp/helper.js +29 -0
  719. package/dist/esm/lib/rtp/imports/common.js +1 -0
  720. package/dist/esm/lib/rtp/index.js +25 -0
  721. package/dist/esm/lib/rtp/rtcp/header.js +46 -0
  722. package/dist/esm/lib/rtp/rtcp/psfb/fullIntraRequest.js +30 -0
  723. package/dist/esm/lib/rtp/rtcp/psfb/index.js +35 -0
  724. package/dist/esm/lib/rtp/rtcp/psfb/pictureLossIndication.js +16 -0
  725. package/dist/esm/lib/rtp/rtcp/psfb/remb.js +49 -0
  726. package/dist/esm/lib/rtp/rtcp/rr.js +68 -0
  727. package/dist/esm/lib/rtp/rtcp/rtcp.js +53 -0
  728. package/dist/esm/lib/rtp/rtcp/rtpfb/const.js +1 -0
  729. package/dist/esm/lib/rtp/rtcp/rtpfb/index.js +31 -0
  730. package/dist/esm/lib/rtp/rtcp/rtpfb/nack.js +73 -0
  731. package/dist/esm/lib/rtp/rtcp/rtpfb/twcc.js +344 -0
  732. package/dist/esm/lib/rtp/rtcp/sdes.js +91 -0
  733. package/dist/esm/lib/rtp/rtcp/sr.js +104 -0
  734. package/dist/esm/lib/rtp/rtp/headerExtension.js +102 -0
  735. package/dist/esm/lib/rtp/rtp/red/encoder.js +40 -0
  736. package/dist/esm/lib/rtp/rtp/red/handler.js +55 -0
  737. package/dist/esm/lib/rtp/rtp/red/packet.js +107 -0
  738. package/dist/esm/lib/rtp/rtp/rtp.js +266 -0
  739. package/dist/esm/lib/rtp/rtp/rtx.js +25 -0
  740. package/dist/esm/lib/rtp/srtp/cipher/ctr.js +103 -0
  741. package/dist/esm/lib/rtp/srtp/cipher/gcm.js +141 -0
  742. package/dist/esm/lib/rtp/srtp/cipher/index.js +20 -0
  743. package/dist/esm/lib/rtp/srtp/const.js +21 -0
  744. package/dist/esm/lib/rtp/srtp/context/context.js +175 -0
  745. package/dist/esm/lib/rtp/srtp/context/srtcp.js +21 -0
  746. package/dist/esm/lib/rtp/srtp/context/srtp.js +37 -0
  747. package/dist/esm/lib/rtp/srtp/error.js +6 -0
  748. package/dist/esm/lib/rtp/srtp/packet.js +42 -0
  749. package/dist/esm/lib/rtp/srtp/session.js +9 -0
  750. package/dist/esm/lib/rtp/srtp/srtcp.js +17 -0
  751. package/dist/esm/lib/rtp/srtp/srtp.js +16 -0
  752. package/dist/esm/lib/rtp/transport.js +18 -0
  753. package/dist/esm/lib/rtp/util.js +24 -0
  754. package/dist/esm/lib/sctp/chunk.js +515 -0
  755. package/dist/esm/lib/sctp/const.js +19 -0
  756. package/dist/esm/lib/sctp/helper.js +10 -0
  757. package/dist/esm/lib/sctp/imports/common.js +1 -0
  758. package/dist/esm/lib/sctp/index.js +4 -0
  759. package/dist/esm/lib/sctp/param.js +126 -0
  760. package/dist/esm/lib/sctp/sctp.js +1459 -0
  761. package/dist/esm/lib/sctp/transport.js +23 -0
  762. package/dist/esm/lib/turn/index.js +9 -0
  763. package/dist/esm/lib/turn/node/server.js +89 -0
  764. package/dist/esm/lib/turn/node/turnServer.js +560 -0
  765. package/dist/esm/lib/turn/protocol.js +112 -0
  766. package/dist/esm/lib/turn/stun/attributes.js +198 -0
  767. package/dist/esm/lib/turn/stun/const.js +82 -0
  768. package/dist/esm/lib/turn/stun/ip.js +81 -0
  769. package/dist/esm/lib/turn/stun/message.js +174 -0
  770. package/dist/esm/lib/turn/turn/auth.js +6 -0
  771. package/dist/esm/lib/turn/turn/frame.js +61 -0
  772. package/dist/esm/lib/turn/turn/protocol.js +781 -0
  773. package/dist/esm/peer/Endpoints.js +143 -0
  774. package/dist/esm/peer/EngineConfig.js +33 -0
  775. package/dist/esm/peer/EngineConnection.js +22 -0
  776. package/dist/esm/peer/Events.js +81 -0
  777. package/dist/esm/peer/MediaCodecs.js +47 -0
  778. package/dist/esm/peer/MediaTrack.js +305 -0
  779. package/dist/esm/peer/PeerChannel.js +315 -0
  780. package/dist/esm/peer/PeerConnection.js +694 -0
  781. package/dist/esm/peer/PeerThreadChannel.js +266 -0
  782. package/dist/esm/peer/PeerThreadProtocol.js +1 -0
  783. package/dist/esm/peer/PeerThreads.js +264 -0
  784. package/dist/esm/peer/PeerWorker.js +458 -0
  785. package/dist/esm/peer/PeerWorkerCode.js +1 -0
  786. package/dist/esm/peer/RemoteConnection.js +905 -0
  787. package/dist/esm/peer/RtpPacket.js +86 -0
  788. package/dist/esm/peer/RtpTransceiver.js +225 -0
  789. package/dist/esm/peer/SignalingClient.js +249 -0
  790. package/dist/esm/protocol/SignalingProtocol.js +62 -0
  791. package/dist/esm/service/WebRTCServiceEntrypoint.js +352 -0
  792. package/dist/esm/sfu/SFU.js +759 -0
  793. package/dist/esm/sfu/SFUAccess.js +12 -0
  794. package/dist/esm/sfu/SFUClusterLeg.js +102 -0
  795. package/dist/esm/sfu/SFURoom.js +1296 -0
  796. package/dist/esm/sfu/SFUWorker.js +165 -0
  797. package/dist/esm/sfu/SFUWorkerChannel.js +101 -0
  798. package/dist/esm/sfu/SFUWorkerCode.js +1 -0
  799. package/dist/esm/sfu/SFUWorkers.js +547 -0
  800. package/dist/esm/shared/ChunkedChannel.js +178 -0
  801. package/dist/esm/shared/Connections.js +1 -0
  802. package/dist/esm/shared/Emitter.js +76 -0
  803. package/dist/esm/shared/Peer.js +505 -0
  804. package/dist/esm/shared/PeerServiceProxy.js +299 -0
  805. package/dist/esm/shared/Room.js +511 -0
  806. package/dist/esm/shared/SignalingError.js +43 -0
  807. package/dist/esm/shared/SignalingSession.js +343 -0
  808. package/dist/esm/shared/Transports.js +279 -0
  809. package/dist/esm/signaling/MediaServers.js +13 -0
  810. package/dist/esm/signaling/Signaling.js +941 -0
  811. package/dist/esm/signaling/SignalingController.js +225 -0
  812. package/dist/esm/turn/TURNCredentials.js +44 -0
  813. package/dist/esm/turn/TURNIceServers.js +22 -0
  814. package/dist/esm/turn/TURNServer.js +327 -0
  815. package/dist/esm/turn/TURNWorker.js +49 -0
  816. package/dist/esm/turn/TURNWorkerCode.js +1 -0
  817. package/dist/esm/turn/TURNWorkers.js +206 -0
  818. package/dist/esm/whep/WHEP.js +422 -0
  819. package/dist/esm/whep/WHEPController.js +298 -0
  820. package/dist/esm/whip/WHIP.js +466 -0
  821. package/dist/esm/whip/WHIPController.js +296 -0
  822. package/dist/types/client/SignalingConnection.d.ts +81 -0
  823. package/dist/types/cluster/Cluster.d.ts +503 -0
  824. package/dist/types/cluster/ClusterFrames.d.ts +24 -0
  825. package/dist/types/cluster/ClusterTURN.d.ts +63 -0
  826. package/dist/types/cluster/Rendezvous.d.ts +8 -0
  827. package/dist/types/cluster/transports/ClusterTransport.d.ts +34 -0
  828. package/dist/types/cluster/transports/LoadClient.d.ts +6 -0
  829. package/dist/types/cluster/transports/MemoryClusterTransport.d.ts +13 -0
  830. package/dist/types/cluster/transports/NATSClusterTransport.d.ts +23 -0
  831. package/dist/types/cluster/transports/RedisClusterTransport.d.ts +23 -0
  832. package/dist/types/exceptions/ClusterRequestException.d.ts +11 -0
  833. package/dist/types/exceptions/ClusterTimeoutException.d.ts +10 -0
  834. package/dist/types/exceptions/ClusterTransportNotFoundException.d.ts +11 -0
  835. package/dist/types/exceptions/SignalingClientRequiredException.d.ts +12 -0
  836. package/dist/types/exceptions/SignalingConnectionException.d.ts +12 -0
  837. package/dist/types/exceptions/SignalingDeniedException.d.ts +11 -0
  838. package/dist/types/exceptions/SignalingLimitException.d.ts +11 -0
  839. package/dist/types/exceptions/SignalingNotAMemberException.d.ts +11 -0
  840. package/dist/types/exceptions/WHEPDeniedException.d.ts +15 -0
  841. package/dist/types/exceptions/WHEPLimitException.d.ts +15 -0
  842. package/dist/types/exceptions/WHEPMediaTypeException.d.ts +15 -0
  843. package/dist/types/exceptions/WHEPOfferException.d.ts +16 -0
  844. package/dist/types/exceptions/WHEPSessionNotFoundException.d.ts +15 -0
  845. package/dist/types/exceptions/WHIPDeniedException.d.ts +15 -0
  846. package/dist/types/exceptions/WHIPLimitException.d.ts +15 -0
  847. package/dist/types/exceptions/WHIPMediaTypeException.d.ts +15 -0
  848. package/dist/types/exceptions/WHIPOfferException.d.ts +16 -0
  849. package/dist/types/exceptions/WHIPSessionNotFoundException.d.ts +15 -0
  850. package/dist/types/exports/Client.d.ts +11 -0
  851. package/dist/types/exports/WebRTC.d.ts +48 -0
  852. package/dist/types/lib/common/binary.d.ts +51 -0
  853. package/dist/types/lib/common/binaryData.d.ts +116 -0
  854. package/dist/types/lib/common/crc.d.ts +4 -0
  855. package/dist/types/lib/common/deque.d.ts +36 -0
  856. package/dist/types/lib/common/event.d.ts +48 -0
  857. package/dist/types/lib/common/index.d.ts +11 -0
  858. package/dist/types/lib/common/log.d.ts +47 -0
  859. package/dist/types/lib/common/network.d.ts +10 -0
  860. package/dist/types/lib/common/number.d.ts +13 -0
  861. package/dist/types/lib/common/promise.d.ts +21 -0
  862. package/dist/types/lib/common/transport.d.ts +104 -0
  863. package/dist/types/lib/common/type.d.ts +3 -0
  864. package/dist/types/lib/dtls/cipher/const.d.ts +42 -0
  865. package/dist/types/lib/dtls/cipher/create.d.ts +21 -0
  866. package/dist/types/lib/dtls/cipher/ec.d.ts +28 -0
  867. package/dist/types/lib/dtls/cipher/key-exchange.d.ts +43 -0
  868. package/dist/types/lib/dtls/cipher/namedCurve.d.ts +7 -0
  869. package/dist/types/lib/dtls/cipher/prf.d.ts +17 -0
  870. package/dist/types/lib/dtls/cipher/suites/abstract.d.ts +40 -0
  871. package/dist/types/lib/dtls/cipher/suites/aead.d.ts +28 -0
  872. package/dist/types/lib/dtls/cipher/suites/null.d.ts +24 -0
  873. package/dist/types/lib/dtls/cipher/utils.d.ts +18 -0
  874. package/dist/types/lib/dtls/cipher/x509.d.ts +33 -0
  875. package/dist/types/lib/dtls/client.d.ts +7 -0
  876. package/dist/types/lib/dtls/context/cipher.d.ts +42 -0
  877. package/dist/types/lib/dtls/context/dtls.d.ts +38 -0
  878. package/dist/types/lib/dtls/context/srtp.d.ts +5 -0
  879. package/dist/types/lib/dtls/context/transport.d.ts +8 -0
  880. package/dist/types/lib/dtls/flight/client/flight1.d.ts +10 -0
  881. package/dist/types/lib/dtls/flight/client/flight3.d.ts +8 -0
  882. package/dist/types/lib/dtls/flight/client/flight5.d.ts +18 -0
  883. package/dist/types/lib/dtls/flight/flight.d.ts +18 -0
  884. package/dist/types/lib/dtls/flight/server/flight2.d.ts +6 -0
  885. package/dist/types/lib/dtls/flight/server/flight4.d.ts +17 -0
  886. package/dist/types/lib/dtls/flight/server/flight6.d.ts +13 -0
  887. package/dist/types/lib/dtls/handshake/binary.d.ts +16 -0
  888. package/dist/types/lib/dtls/handshake/const.d.ts +13 -0
  889. package/dist/types/lib/dtls/handshake/extensions/ellipticCurves.d.ts +17 -0
  890. package/dist/types/lib/dtls/handshake/extensions/extendedMasterSecret.d.ts +3 -0
  891. package/dist/types/lib/dtls/handshake/extensions/renegotiationIndication.d.ts +18 -0
  892. package/dist/types/lib/dtls/handshake/extensions/signature.d.ts +26 -0
  893. package/dist/types/lib/dtls/handshake/extensions/useSrtp.d.ts +19 -0
  894. package/dist/types/lib/dtls/handshake/message/alert.d.ts +12 -0
  895. package/dist/types/lib/dtls/handshake/message/certificate.d.ts +17 -0
  896. package/dist/types/lib/dtls/handshake/message/changeCipherSpec.d.ts +11 -0
  897. package/dist/types/lib/dtls/handshake/message/client/certificateVerify.d.ts +20 -0
  898. package/dist/types/lib/dtls/handshake/message/client/hello.d.ts +50 -0
  899. package/dist/types/lib/dtls/handshake/message/client/keyExchange.d.ts +17 -0
  900. package/dist/types/lib/dtls/handshake/message/finished.d.ts +13 -0
  901. package/dist/types/lib/dtls/handshake/message/server/certificateRequest.d.ts +31 -0
  902. package/dist/types/lib/dtls/handshake/message/server/hello.d.ts +33 -0
  903. package/dist/types/lib/dtls/handshake/message/server/helloDone.d.ts +12 -0
  904. package/dist/types/lib/dtls/handshake/message/server/helloVerifyRequest.d.ts +32 -0
  905. package/dist/types/lib/dtls/handshake/message/server/keyExchange.d.ts +32 -0
  906. package/dist/types/lib/dtls/handshake/random.d.ts +13 -0
  907. package/dist/types/lib/dtls/helper.d.ts +4 -0
  908. package/dist/types/lib/dtls/imports/common.d.ts +1 -0
  909. package/dist/types/lib/dtls/imports/rtp.d.ts +1 -0
  910. package/dist/types/lib/dtls/index.d.ts +7 -0
  911. package/dist/types/lib/dtls/record/antiReplayWindow.d.ts +27 -0
  912. package/dist/types/lib/dtls/record/builder.d.ts +9 -0
  913. package/dist/types/lib/dtls/record/const.d.ts +33 -0
  914. package/dist/types/lib/dtls/record/message/fragment.d.ts +26 -0
  915. package/dist/types/lib/dtls/record/message/header.d.ts +38 -0
  916. package/dist/types/lib/dtls/record/message/plaintext.d.ts +14 -0
  917. package/dist/types/lib/dtls/record/receive.d.ts +9 -0
  918. package/dist/types/lib/dtls/server.d.ts +6 -0
  919. package/dist/types/lib/dtls/socket.d.ts +52 -0
  920. package/dist/types/lib/dtls/typings/domain.d.ts +20 -0
  921. package/dist/types/lib/dtls/util/binary.d.ts +2 -0
  922. package/dist/types/lib/ice/candidate.d.ts +35 -0
  923. package/dist/types/lib/ice/dns/lookup.d.ts +16 -0
  924. package/dist/types/lib/ice/dns/mdns.d.ts +38 -0
  925. package/dist/types/lib/ice/exceptions.d.ts +24 -0
  926. package/dist/types/lib/ice/helper.d.ts +17 -0
  927. package/dist/types/lib/ice/ice.d.ts +182 -0
  928. package/dist/types/lib/ice/iceBase.d.ts +214 -0
  929. package/dist/types/lib/ice/imports/common.d.ts +1 -0
  930. package/dist/types/lib/ice/index.d.ts +12 -0
  931. package/dist/types/lib/ice/internal/selectAddresses.d.ts +9 -0
  932. package/dist/types/lib/ice/stun/attributes.d.ts +1 -0
  933. package/dist/types/lib/ice/stun/const.d.ts +8 -0
  934. package/dist/types/lib/ice/stun/message.d.ts +1 -0
  935. package/dist/types/lib/ice/stun/protocol.d.ts +30 -0
  936. package/dist/types/lib/ice/stun/tcpFrame.d.ts +5 -0
  937. package/dist/types/lib/ice/stun/tcpProtocol.d.ts +57 -0
  938. package/dist/types/lib/ice/stun/transaction.d.ts +75 -0
  939. package/dist/types/lib/ice/turn/frame.d.ts +1 -0
  940. package/dist/types/lib/ice/turn/protocol.d.ts +170 -0
  941. package/dist/types/lib/ice/types/model.d.ts +56 -0
  942. package/dist/types/lib/ice/utils.d.ts +13 -0
  943. package/dist/types/lib/peer/const.d.ts +36 -0
  944. package/dist/types/lib/peer/dataChannel.d.ts +69 -0
  945. package/dist/types/lib/peer/errors.d.ts +11 -0
  946. package/dist/types/lib/peer/helper.d.ts +20 -0
  947. package/dist/types/lib/peer/imports/common.d.ts +1 -0
  948. package/dist/types/lib/peer/imports/dtls.d.ts +1 -0
  949. package/dist/types/lib/peer/imports/ice.d.ts +1 -0
  950. package/dist/types/lib/peer/imports/rtp.d.ts +1 -0
  951. package/dist/types/lib/peer/index.d.ts +14 -0
  952. package/dist/types/lib/peer/media/codec.d.ts +15 -0
  953. package/dist/types/lib/peer/media/codecCompatibility.d.ts +23 -0
  954. package/dist/types/lib/peer/media/extension/rtcpFeedback.d.ts +6 -0
  955. package/dist/types/lib/peer/media/extension/rtpExtension.d.ts +9 -0
  956. package/dist/types/lib/peer/media/index.d.ts +12 -0
  957. package/dist/types/lib/peer/media/parameters.d.ts +65 -0
  958. package/dist/types/lib/peer/media/receiver/nack.d.ts +23 -0
  959. package/dist/types/lib/peer/media/receiver/receiverTwcc.d.ts +47 -0
  960. package/dist/types/lib/peer/media/receiver/statistics.d.ts +22 -0
  961. package/dist/types/lib/peer/media/router.d.ts +25 -0
  962. package/dist/types/lib/peer/media/rtpReceiver.d.ts +90 -0
  963. package/dist/types/lib/peer/media/rtpSender.d.ts +209 -0
  964. package/dist/types/lib/peer/media/rtpTransceiver.d.ts +117 -0
  965. package/dist/types/lib/peer/media/sender/cumulativeResult.d.ts +19 -0
  966. package/dist/types/lib/peer/media/sender/senderBWE.d.ts +32 -0
  967. package/dist/types/lib/peer/media/stats.d.ts +293 -0
  968. package/dist/types/lib/peer/media/track.d.ts +67 -0
  969. package/dist/types/lib/peer/peerConnection.d.ts +458 -0
  970. package/dist/types/lib/peer/sctpManager.d.ts +28 -0
  971. package/dist/types/lib/peer/sdp.d.ts +97 -0
  972. package/dist/types/lib/peer/sdpManager.d.ts +116 -0
  973. package/dist/types/lib/peer/secureTransportManager.d.ts +96 -0
  974. package/dist/types/lib/peer/transceiverManager.d.ts +151 -0
  975. package/dist/types/lib/peer/transport/dtls.d.ts +95 -0
  976. package/dist/types/lib/peer/transport/ice.d.ts +143 -0
  977. package/dist/types/lib/peer/transport/sctp.d.ts +56 -0
  978. package/dist/types/lib/peer/types/domain.d.ts +5 -0
  979. package/dist/types/lib/peer/types/util.d.ts +2 -0
  980. package/dist/types/lib/peer/utils.d.ts +73 -0
  981. package/dist/types/lib/rtp/codec/av1.d.ts +56 -0
  982. package/dist/types/lib/rtp/codec/base.d.ts +8 -0
  983. package/dist/types/lib/rtp/codec/h264.d.ts +32 -0
  984. package/dist/types/lib/rtp/codec/index.d.ts +16 -0
  985. package/dist/types/lib/rtp/codec/leb128.d.ts +5 -0
  986. package/dist/types/lib/rtp/codec/opus.d.ts +9 -0
  987. package/dist/types/lib/rtp/codec/vp8.d.ts +27 -0
  988. package/dist/types/lib/rtp/codec/vp9.d.ts +46 -0
  989. package/dist/types/lib/rtp/const.d.ts +1 -0
  990. package/dist/types/lib/rtp/helper.d.ts +8 -0
  991. package/dist/types/lib/rtp/imports/common.d.ts +1 -0
  992. package/dist/types/lib/rtp/index.d.ts +25 -0
  993. package/dist/types/lib/rtp/rtcp/header.d.ts +13 -0
  994. package/dist/types/lib/rtp/rtcp/psfb/fullIntraRequest.d.ts +16 -0
  995. package/dist/types/lib/rtp/rtcp/psfb/index.d.ts +14 -0
  996. package/dist/types/lib/rtp/rtcp/psfb/pictureLossIndication.d.ts +10 -0
  997. package/dist/types/lib/rtp/rtcp/psfb/remb.d.ts +16 -0
  998. package/dist/types/lib/rtp/rtcp/rr.d.ts +32 -0
  999. package/dist/types/lib/rtp/rtcp/rtcp.d.ts +10 -0
  1000. package/dist/types/lib/rtp/rtcp/rtpfb/const.d.ts +1 -0
  1001. package/dist/types/lib/rtp/rtcp/rtpfb/index.d.ts +14 -0
  1002. package/dist/types/lib/rtp/rtcp/rtpfb/nack.d.ts +17 -0
  1003. package/dist/types/lib/rtp/rtcp/rtpfb/twcc.d.ts +71 -0
  1004. package/dist/types/lib/rtp/rtcp/sdes.d.ts +26 -0
  1005. package/dist/types/lib/rtp/rtcp/sr.d.ts +41 -0
  1006. package/dist/types/lib/rtp/rtp/headerExtension.d.ts +72 -0
  1007. package/dist/types/lib/rtp/rtp/red/encoder.d.ts +13 -0
  1008. package/dist/types/lib/rtp/rtp/red/handler.d.ts +6 -0
  1009. package/dist/types/lib/rtp/rtp/red/packet.d.ts +26 -0
  1010. package/dist/types/lib/rtp/rtp/rtp.d.ts +44 -0
  1011. package/dist/types/lib/rtp/rtp/rtx.d.ts +3 -0
  1012. package/dist/types/lib/rtp/srtp/cipher/ctr.d.ts +16 -0
  1013. package/dist/types/lib/rtp/srtp/cipher/gcm.d.ts +17 -0
  1014. package/dist/types/lib/rtp/srtp/cipher/index.d.ts +13 -0
  1015. package/dist/types/lib/rtp/srtp/const.d.ts +6 -0
  1016. package/dist/types/lib/rtp/srtp/context/context.d.ts +45 -0
  1017. package/dist/types/lib/rtp/srtp/context/srtcp.d.ts +8 -0
  1018. package/dist/types/lib/rtp/srtp/context/srtp.d.ts +9 -0
  1019. package/dist/types/lib/rtp/srtp/error.d.ts +3 -0
  1020. package/dist/types/lib/rtp/srtp/packet.d.ts +5 -0
  1021. package/dist/types/lib/rtp/srtp/session.d.ts +19 -0
  1022. package/dist/types/lib/rtp/srtp/srtcp.d.ts +8 -0
  1023. package/dist/types/lib/rtp/srtp/srtp.d.ts +9 -0
  1024. package/dist/types/lib/rtp/transport.d.ts +15 -0
  1025. package/dist/types/lib/rtp/util.d.ts +11 -0
  1026. package/dist/types/lib/sctp/chunk.d.ts +164 -0
  1027. package/dist/types/lib/sctp/const.d.ts +17 -0
  1028. package/dist/types/lib/sctp/helper.d.ts +5 -0
  1029. package/dist/types/lib/sctp/imports/common.d.ts +1 -0
  1030. package/dist/types/lib/sctp/index.d.ts +6 -0
  1031. package/dist/types/lib/sctp/param.d.ts +40 -0
  1032. package/dist/types/lib/sctp/sctp.d.ts +210 -0
  1033. package/dist/types/lib/sctp/transport.d.ts +15 -0
  1034. package/dist/types/lib/turn/index.d.ts +9 -0
  1035. package/dist/types/lib/turn/node/server.d.ts +21 -0
  1036. package/dist/types/lib/turn/node/turnServer.d.ts +91 -0
  1037. package/dist/types/lib/turn/protocol.d.ts +47 -0
  1038. package/dist/types/lib/turn/stun/attributes.d.ts +37 -0
  1039. package/dist/types/lib/turn/stun/const.d.ts +28 -0
  1040. package/dist/types/lib/turn/stun/ip.d.ts +12 -0
  1041. package/dist/types/lib/turn/stun/message.d.ts +37 -0
  1042. package/dist/types/lib/turn/turn/auth.d.ts +1 -0
  1043. package/dist/types/lib/turn/turn/frame.d.ts +13 -0
  1044. package/dist/types/lib/turn/turn/protocol.d.ts +147 -0
  1045. package/dist/types/peer/Endpoints.d.ts +75 -0
  1046. package/dist/types/peer/EngineConfig.d.ts +20 -0
  1047. package/dist/types/peer/EngineConnection.d.ts +22 -0
  1048. package/dist/types/peer/Events.d.ts +55 -0
  1049. package/dist/types/peer/MediaCodecs.d.ts +27 -0
  1050. package/dist/types/peer/MediaTrack.d.ts +212 -0
  1051. package/dist/types/peer/PeerChannel.d.ts +248 -0
  1052. package/dist/types/peer/PeerConnection.d.ts +603 -0
  1053. package/dist/types/peer/PeerThreadChannel.d.ts +112 -0
  1054. package/dist/types/peer/PeerThreadProtocol.d.ts +325 -0
  1055. package/dist/types/peer/PeerThreads.d.ts +114 -0
  1056. package/dist/types/peer/PeerWorker.d.ts +6 -0
  1057. package/dist/types/peer/PeerWorkerCode.d.ts +5 -0
  1058. package/dist/types/peer/RemoteConnection.d.ts +314 -0
  1059. package/dist/types/peer/RtpPacket.d.ts +112 -0
  1060. package/dist/types/peer/RtpTransceiver.d.ts +167 -0
  1061. package/dist/types/peer/SignalingClient.d.ts +236 -0
  1062. package/dist/types/protocol/SignalingProtocol.d.ts +266 -0
  1063. package/dist/types/service/WebRTCServiceEntrypoint.d.ts +158 -0
  1064. package/dist/types/sfu/SFU.d.ts +356 -0
  1065. package/dist/types/sfu/SFUAccess.d.ts +48 -0
  1066. package/dist/types/sfu/SFUClusterLeg.d.ts +101 -0
  1067. package/dist/types/sfu/SFURoom.d.ts +148 -0
  1068. package/dist/types/sfu/SFUWorker.d.ts +13 -0
  1069. package/dist/types/sfu/SFUWorkerChannel.d.ts +204 -0
  1070. package/dist/types/sfu/SFUWorkerCode.d.ts +5 -0
  1071. package/dist/types/sfu/SFUWorkers.d.ts +247 -0
  1072. package/dist/types/shared/ChunkedChannel.d.ts +122 -0
  1073. package/dist/types/shared/Connections.d.ts +231 -0
  1074. package/dist/types/shared/Emitter.d.ts +50 -0
  1075. package/dist/types/shared/Peer.d.ts +182 -0
  1076. package/dist/types/shared/PeerServiceProxy.d.ts +173 -0
  1077. package/dist/types/shared/Room.d.ts +143 -0
  1078. package/dist/types/shared/SignalingError.d.ts +40 -0
  1079. package/dist/types/shared/SignalingSession.d.ts +97 -0
  1080. package/dist/types/shared/Transports.d.ts +139 -0
  1081. package/dist/types/signaling/MediaServers.d.ts +40 -0
  1082. package/dist/types/signaling/Signaling.d.ts +573 -0
  1083. package/dist/types/signaling/SignalingController.d.ts +128 -0
  1084. package/dist/types/turn/TURNCredentials.d.ts +49 -0
  1085. package/dist/types/turn/TURNIceServers.d.ts +11 -0
  1086. package/dist/types/turn/TURNServer.d.ts +309 -0
  1087. package/dist/types/turn/TURNWorker.d.ts +42 -0
  1088. package/dist/types/turn/TURNWorkerCode.d.ts +5 -0
  1089. package/dist/types/turn/TURNWorkers.d.ts +52 -0
  1090. package/dist/types/whep/WHEP.d.ts +386 -0
  1091. package/dist/types/whep/WHEPController.d.ts +134 -0
  1092. package/dist/types/whip/WHIP.d.ts +426 -0
  1093. package/dist/types/whip/WHIPController.d.ts +132 -0
  1094. package/package.json +115 -4
@@ -0,0 +1,945 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.Signaling = void 0;
13
+ exports.buildSignalingOptions = buildSignalingOptions;
14
+ const core_1 = require("@lakutata/core");
15
+ const di_1 = require("@lakutata/core/decorator/di");
16
+ const SignalingProtocol_js_1 = require("../protocol/SignalingProtocol.js");
17
+ const Rendezvous_js_1 = require("../cluster/Rendezvous.js");
18
+ const ClusterTURN_js_1 = require("../cluster/ClusterTURN.js");
19
+ const SignalingDeniedException_js_1 = require("../exceptions/SignalingDeniedException.js");
20
+ const SignalingLimitException_js_1 = require("../exceptions/SignalingLimitException.js");
21
+ const SignalingNotAMemberException_js_1 = require("../exceptions/SignalingNotAMemberException.js");
22
+ const MediaServers_js_1 = require("./MediaServers.js");
23
+ /**
24
+ * The topics of the signaling on the cluster
25
+ */
26
+ const TOPIC = {
27
+ membership: 'webrtc.signaling.membership',
28
+ snapshot: 'webrtc.signaling.snapshot',
29
+ deliver: 'webrtc.signaling.deliver',
30
+ admit: 'webrtc.signaling.admit'
31
+ };
32
+ /**
33
+ * How long a signal waits for the node of its receiver, and an admission for the node of its room, in milliseconds
34
+ */
35
+ const CLUSTER_REQUEST_TIMEOUT = 2000;
36
+ /**
37
+ * How long a place in a full room is held for a member admitted by the node of the room, until its join arrives
38
+ */
39
+ const RESERVATION_TIMEOUT = 5000;
40
+ /**
41
+ * The beginnings of the ids kept for the members the server adds itself
42
+ */
43
+ const RESERVED_PREFIXES = ['sfu:', 'whip:'];
44
+ /**
45
+ * Whether a join is later than another: by time, then by node id when at the same millisecond
46
+ * @param join
47
+ * @param other
48
+ */
49
+ function later(join, other) {
50
+ return join.joinedAt !== other.joinedAt ? join.joinedAt > other.joinedAt : join.node > other.node;
51
+ }
52
+ /**
53
+ * A member as the other members see it, without the fields it does not have
54
+ * @param peerId
55
+ * @param metadata
56
+ * @param session
57
+ * @param role
58
+ * @param sfu
59
+ */
60
+ function peerOf(peerId, metadata, session, role, sfu) {
61
+ return { peerId: peerId, metadata: metadata, session: session, ...role ? { role: role } : {}, ...sfu ? { sfu: sfu } : {} };
62
+ }
63
+ /**
64
+ * A member of this node in a room, as the node tells the others
65
+ * @param room
66
+ * @param member
67
+ */
68
+ function recordOf(room, member) {
69
+ const sfu = member.sfus.get(room);
70
+ return { room: room, peerId: member.peerId, metadata: member.rooms.get(room), session: member.session, joinedAt: member.joinedAt.get(room) ?? 0, ...member.role ? { role: member.role } : {}, ...sfu ? { sfu: sfu } : {} };
71
+ }
72
+ /**
73
+ * The event a connection emits when its client goes away, if it is one of a known kind
74
+ * @param socket
75
+ */
76
+ function disconnectionEventOf(socket) {
77
+ if (!socket || typeof socket !== 'object' || typeof socket.once !== 'function')
78
+ return undefined;
79
+ //A socket of Socket.IO: its handshake and its namespace
80
+ if ('handshake' in socket && 'nsp' in socket)
81
+ return 'disconnect';
82
+ //A WebSocket of ws: its state and its pings
83
+ if ('readyState' in socket && typeof socket.ping === 'function')
84
+ return 'close';
85
+ return undefined;
86
+ }
87
+ /**
88
+ * The signaling of WebRTC: rooms whose members exchange the descriptions and the candidates of their connections. A
89
+ * member is a client of the entrypoint (its `clientId`): it joins a room with `webrtc.join`, gets the members already
90
+ * in it and the ICE servers, sends its offers, answers and candidates to a member with `webrtc.signal`, and receives
91
+ * the events of the room (`webrtc:peer-joined`, `webrtc:peer-left`, `webrtc:signal`). The requests are served by
92
+ * {@link SignalingController}, over Socket.IO or JSON-RPC over WebSocket (the protocol is in the guide, for the clients
93
+ * of other languages).
94
+ *
95
+ * A member leaves its rooms when it asks, when its connection closes (Socket.IO, JSON-RPC over WebSocket), when an
96
+ * event cannot reach it any more, or, for the clients sending heartbeats (over the other transports), after three
97
+ * heartbeat intervals without a request. The signals are checked: only between members of the same room, of a limited
98
+ * size and rate.
99
+ *
100
+ * With a {@link Cluster} (its `cluster` option), the instances of the application share the rooms: each node tells the
101
+ * others who joins and leaves through it, a signal to a member of another node goes through that node, and the members
102
+ * of a node that stops or cannot be reached any more leave their rooms (`disconnected`). `maxPeers` is counted over the
103
+ * whole cluster, by the node each room falls to.
104
+ *
105
+ * Register it as `signaling` with {@link buildSignalingOptions}, and add {@link SignalingController} to the
106
+ * controllers of the entrypoint.
107
+ * @example
108
+ * ```typescript
109
+ * import {Application} from 'lakutata'
110
+ * import {buildEntrypoints} from 'lakutata/com/entrypoint'
111
+ * import {socketIOServiceEntrypoint} from 'lakutata/adapter/socket.io'
112
+ * import {buildSignalingOptions, buildTURNServerOptions, SignalingController} from '@lakutata/webrtc'
113
+ *
114
+ * Application.run(() => ({
115
+ * id: 'meet.app',
116
+ * name: 'Meet',
117
+ * components: {
118
+ * turn: buildTURNServerOptions({publicAddress: '203.0.113.10', secret: process.env.TURN_SECRET}),
119
+ * //The members get the ICE servers of turn; only the users of the meeting may join its room
120
+ * signaling: buildSignalingOptions({
121
+ * turn: 'turn',
122
+ * authorize: (peer, room): boolean => room === 'meeting' && peer.peerId.startsWith('user-')
123
+ * }),
124
+ * entrypoint: buildEntrypoints({
125
+ * controllers: [SignalingController],
126
+ * service: socketIOServiceEntrypoint({port: 3000})
127
+ * })
128
+ * },
129
+ * bootstrap: ['turn', 'entrypoint']
130
+ * }))
131
+ * ```
132
+ */
133
+ let Signaling = class Signaling extends core_1.Component {
134
+ //The members connected to this node, by room
135
+ #rooms = new Map();
136
+ #members = new Map();
137
+ //The members connected to the other nodes of the cluster, by room
138
+ #remote = new Map();
139
+ //The number of the last change of each node applied here
140
+ #applied = new Map();
141
+ //The changes of the nodes received while their members are being fetched
142
+ #syncing = new Map();
143
+ //The places held in the full rooms falling to this node: by room, the members admitted and until when
144
+ #reservations = new Map();
145
+ #hooked = new WeakSet();
146
+ #detach = [];
147
+ #seq = 0;
148
+ #sweeper;
149
+ #entrypointObject;
150
+ #clusterObject;
151
+ /**
152
+ * Start the sweep of the members without heartbeats, and join the cluster.
153
+ * @protected
154
+ */
155
+ async init() {
156
+ this.#sweeper = setInterval(() => this.sweep(), this.heartbeatInterval);
157
+ this.#sweeper.unref();
158
+ if (this.cluster)
159
+ await this.attach(await this.getObject(this.cluster));
160
+ }
161
+ /**
162
+ * Stop the sweep, leave the cluster and forget the rooms.
163
+ * @protected
164
+ */
165
+ async destroy() {
166
+ clearInterval(this.#sweeper);
167
+ this.#detach.splice(0).forEach((detach) => detach());
168
+ this.#rooms.clear();
169
+ this.#members.clear();
170
+ this.#remote.clear();
171
+ }
172
+ /**
173
+ * The rooms and their members (of all the nodes, with a cluster).
174
+ * @returns For each room, the ids of its members.
175
+ * @example
176
+ * ```typescript
177
+ * import type {Signaling} from '@lakutata/webrtc'
178
+ *
179
+ * declare const signaling: Signaling
180
+ * //{meeting: ['alice', 'bob']}
181
+ * console.log(signaling.rooms())
182
+ * ```
183
+ */
184
+ rooms() {
185
+ const rooms = Object.fromEntries([...this.#rooms].map(([room, members]) => [room, [...members.keys()]]));
186
+ for (const [room, members] of this.#remote)
187
+ rooms[room] = [...rooms[room] ?? [], ...members.keys()];
188
+ return rooms;
189
+ }
190
+ /**
191
+ * Add a member to a room: the other members get `webrtc:peer-joined`. Joining a room again updates its metadata and
192
+ * its session.
193
+ * @param peerId The member's id (its client id).
194
+ * @param room The room.
195
+ * @param options Its metadata, its session, the context of its request.
196
+ * @returns The members already in the room, the ICE servers and how to keep the membership alive.
197
+ * @throws {SignalingDeniedException} When `authorize` refuses the room, or the id is kept for the members of the
198
+ * server (`sfu:`, `whip:`) and no role is given.
199
+ * @throws {SignalingLimitException} When the room is full, or the metadata is over `maxMessageSize`.
200
+ * @example
201
+ * ```typescript
202
+ * import type {Signaling, SignalingJoinResult} from '@lakutata/webrtc'
203
+ *
204
+ * declare const signaling: Signaling
205
+ * //A member added by the application itself (SignalingController does it for the clients)
206
+ * const result: SignalingJoinResult = await signaling.join('device-7', 'device-7', {metadata: {kind: 'camera'}})
207
+ * ```
208
+ */
209
+ async join(peerId, room, options = {}) {
210
+ const { metadata, session, context, role, receive } = options;
211
+ const size = metadata === undefined ? 0 : Buffer.byteLength(JSON.stringify(metadata));
212
+ if (size > this.maxMessageSize) {
213
+ throw new SignalingLimitException_js_1.SignalingLimitException('Metadata of {size} bytes is over the limit of {limit}', { size: size, limit: this.maxMessageSize });
214
+ }
215
+ if (!role) {
216
+ //A client may not take the place of a member of the server
217
+ if (RESERVED_PREFIXES.some((prefix) => peerId.startsWith(prefix)) || this.#members.get(peerId)?.role || this.remoteRoleOf(peerId)) {
218
+ throw new SignalingDeniedException_js_1.SignalingDeniedException('The id {peerId} is kept for the members of the server', { peerId: peerId });
219
+ }
220
+ if (this.authorize && !(await this.authorize({ peerId: peerId, metadata: metadata, session: session }, room, context))) {
221
+ throw new SignalingDeniedException_js_1.SignalingDeniedException('The member {peerId} may not join the room {room}', { peerId: peerId, room: room });
222
+ }
223
+ if (this.maxPeers && !(await this.admit(room, peerId))) {
224
+ throw new SignalingLimitException_js_1.SignalingLimitException('The room {room} is full ({maxPeers} members)', { room: room, maxPeers: this.maxPeers });
225
+ }
226
+ }
227
+ //The media server of the room joins it first
228
+ const sfu = role ? undefined : await this.mediaServerOf(room, peerId);
229
+ let members = this.#rooms.get(room);
230
+ if (!members) {
231
+ members = new Map();
232
+ this.#rooms.set(room, members);
233
+ }
234
+ const member = this.member(peerId, context);
235
+ if (session !== undefined)
236
+ member.session = session;
237
+ if (role)
238
+ member.role = role;
239
+ if (receive) {
240
+ member.receive = receive;
241
+ member.heartbeats = false;
242
+ }
243
+ const locals = [...members.values()].filter((other) => other.peerId !== peerId);
244
+ //Joining through this node, it is no longer a member through another one
245
+ const moved = this.forgetRemote(room, peerId);
246
+ const peers = [
247
+ ...locals.map((other) => peerOf(other.peerId, other.rooms.get(room), other.session, other.role, other.sfus.get(room))),
248
+ ...[...this.#remote.get(room)?.entries() ?? []].map(([id, other]) => peerOf(id, other.metadata, other.session, other.role, other.sfu))
249
+ ];
250
+ member.rooms.set(room, metadata);
251
+ if (sfu)
252
+ member.sfus.set(room, sfu);
253
+ else
254
+ member.sfus.delete(room);
255
+ //Later than its join through the other node, whatever the clocks of the nodes
256
+ member.joinedAt.set(room, Math.max(Date.now(), (moved?.joinedAt ?? 0) + 1));
257
+ members.set(peerId, member);
258
+ this.#reservations.get(room)?.delete(peerId);
259
+ this.announceChange({ kind: 'join', seq: 0, ...recordOf(room, member) });
260
+ const event = { room: room, ...peerOf(peerId, metadata, member.session, member.role, sfu) };
261
+ //The other nodes tell their own members
262
+ for (const other of locals)
263
+ await this.push(other.peerId, SignalingProtocol_js_1.SignalingEvent.peerJoined, event);
264
+ const { iceServers, credentialTtl } = await this.iceServersOf(peerId);
265
+ return {
266
+ v: SignalingProtocol_js_1.SIGNALING_PROTOCOL_VERSION,
267
+ peerId: peerId,
268
+ peers: peers,
269
+ iceServers: iceServers,
270
+ credentialTtl: credentialTtl,
271
+ heartbeatInterval: member.heartbeats ? this.heartbeatInterval : 0,
272
+ ...sfu ? { sfu: sfu } : {}
273
+ };
274
+ }
275
+ /**
276
+ * Send a description or a candidate to a member of a room, as `webrtc:signal` from the sender.
277
+ * @param peerId The sender's id.
278
+ * @param room The room both are in.
279
+ * @param to The receiver's id.
280
+ * @param signal The description (with the streams of the media server of the room, from it), or the candidate.
281
+ * @returns Whether the event reached the receiver.
282
+ * @throws {SignalingNotAMemberException} When the sender or the receiver is not in the room.
283
+ * @throws {SignalingLimitException} When the signal is too large, or the sender sends too many (a member of the
284
+ * server is not limited).
285
+ * @example
286
+ * ```typescript
287
+ * import type {Signaling} from '@lakutata/webrtc'
288
+ *
289
+ * declare const signaling: Signaling
290
+ * declare const offer: string
291
+ * const delivered: boolean = await signaling.signal('device-7', 'device-7', 'alice', {description: {type: 'offer', sdp: offer}})
292
+ * ```
293
+ */
294
+ async signal(peerId, room, to, signal) {
295
+ const members = this.#rooms.get(room);
296
+ const member = members?.get(peerId);
297
+ if (!members || !member)
298
+ throw new SignalingNotAMemberException_js_1.SignalingNotAMemberException('The member {peerId} is not in the room {room}', { peerId: peerId, room: room });
299
+ const remote = members.has(to) ? undefined : this.#remote.get(room)?.get(to);
300
+ if (!members.has(to) && !remote)
301
+ throw new SignalingNotAMemberException_js_1.SignalingNotAMemberException('The member {peerId} is not in the room {room}', { peerId: to, room: room });
302
+ //The members of the server send descriptions of all the media of the room, as often as the members publish
303
+ if (!member.role) {
304
+ const size = Buffer.byteLength(JSON.stringify(signal));
305
+ if (size > this.maxMessageSize) {
306
+ throw new SignalingLimitException_js_1.SignalingLimitException('A signal of {size} bytes is over the limit of {limit}', { size: size, limit: this.maxMessageSize });
307
+ }
308
+ this.consume(member);
309
+ }
310
+ member.lastSeen = Date.now();
311
+ const event = { room: room, from: peerId, session: member.session };
312
+ if (signal.description)
313
+ event.description = signal.description;
314
+ if (signal.candidate !== undefined)
315
+ event.candidate = signal.candidate;
316
+ if (signal.streams)
317
+ event.streams = signal.streams;
318
+ if (!remote)
319
+ return await this.push(to, SignalingProtocol_js_1.SignalingEvent.signal, event);
320
+ //Through the node of the receiver, unless it is known to be gone (its members leave with it)
321
+ const cluster = this.#clusterObject;
322
+ if (!cluster.nodes().some((node) => node.id === remote.node))
323
+ return false;
324
+ try {
325
+ return await cluster.request(remote.node, TOPIC.deliver, { to: to, event: event }, { timeout: CLUSTER_REQUEST_TIMEOUT }) === true;
326
+ }
327
+ catch {
328
+ return false;
329
+ }
330
+ }
331
+ /**
332
+ * Take a member out of a room: the other members get `webrtc:peer-left`.
333
+ * @param peerId The member's id.
334
+ * @param room The room.
335
+ * @returns Resolves once the other members are told.
336
+ * @example
337
+ * ```typescript
338
+ * import type {Signaling} from '@lakutata/webrtc'
339
+ *
340
+ * declare const signaling: Signaling
341
+ * await signaling.leave('device-7', 'device-7')
342
+ * ```
343
+ */
344
+ async leave(peerId, room) {
345
+ await this.remove(peerId, room, 'left');
346
+ }
347
+ /**
348
+ * Take a member out of all its rooms (its client went away).
349
+ * @param peerId The member's id.
350
+ * @returns Resolves once the other members are told.
351
+ * @example
352
+ * ```typescript
353
+ * import type {Signaling} from '@lakutata/webrtc'
354
+ *
355
+ * declare const signaling: Signaling
356
+ * await signaling.disconnect('device-7')
357
+ * ```
358
+ */
359
+ async disconnect(peerId) {
360
+ const member = this.#members.get(peerId);
361
+ if (!member)
362
+ return;
363
+ for (const room of [...member.rooms.keys()])
364
+ await this.remove(peerId, room, 'disconnected');
365
+ }
366
+ /**
367
+ * Note that a member's client is still there (`webrtc.heartbeat`, and any request).
368
+ * @param peerId The member's id.
369
+ * @example
370
+ * ```typescript
371
+ * import type {Signaling} from '@lakutata/webrtc'
372
+ *
373
+ * declare const signaling: Signaling
374
+ * signaling.heartbeat('device-7')
375
+ * ```
376
+ */
377
+ heartbeat(peerId) {
378
+ const member = this.#members.get(peerId);
379
+ if (member)
380
+ member.lastSeen = Date.now();
381
+ }
382
+ /**
383
+ * The ICE servers of a member, with new TURN credentials: the ones of `turn`, of the TURN servers of the cluster
384
+ * chosen for it, then the others.
385
+ * @param peerId The member's id (the user of the TURN credentials).
386
+ * @returns The ICE servers, and how long their credentials are valid in seconds (0 without TURN).
387
+ * @example
388
+ * ```typescript
389
+ * import type {Signaling, SignalingIceServer} from '@lakutata/webrtc'
390
+ *
391
+ * declare const signaling: Signaling
392
+ * const {iceServers} = await signaling.iceServersOf('device-7')
393
+ * ```
394
+ */
395
+ async iceServersOf(peerId) {
396
+ return (0, ClusterTURN_js_1.iceServersFor)(peerId, {
397
+ turn: this.turn ? await this.getObject(this.turn) : undefined,
398
+ cluster: this.#clusterObject,
399
+ secret: this.turnSecret,
400
+ select: this.selectTURN,
401
+ iceServers: this.iceServers
402
+ });
403
+ }
404
+ /**
405
+ * Take a member out of a room, telling the other members why.
406
+ * @param peerId The member's id.
407
+ * @param room The room.
408
+ * @param reason `left` when it asked, `disconnected` when its client went away.
409
+ * @returns Resolves once the other members are told.
410
+ * @protected
411
+ */
412
+ async remove(peerId, room, reason) {
413
+ const members = this.#rooms.get(room);
414
+ const member = members?.get(peerId);
415
+ if (!members || !member)
416
+ return;
417
+ this.forgetLocal(room, member);
418
+ this.announceChange({ kind: 'leave', seq: 0, room: room, peerId: peerId, reason: reason });
419
+ const event = { room: room, peerId: peerId, reason: reason };
420
+ for (const other of [...members.keys()])
421
+ await this.push(other, SignalingProtocol_js_1.SignalingEvent.peerLeft, event);
422
+ }
423
+ /**
424
+ * Take a member of this node out of a room, without telling anyone
425
+ * @param room The room.
426
+ * @param member The member.
427
+ * @protected
428
+ */
429
+ forgetLocal(room, member) {
430
+ const members = this.#rooms.get(room);
431
+ if (members?.get(member.peerId) !== member)
432
+ return;
433
+ members.delete(member.peerId);
434
+ member.rooms.delete(room);
435
+ member.joinedAt.delete(room);
436
+ member.sfus.delete(room);
437
+ if (!members.size)
438
+ this.#rooms.delete(room);
439
+ if (!member.rooms.size && this.#members.get(member.peerId) === member)
440
+ this.#members.delete(member.peerId);
441
+ }
442
+ /**
443
+ * Take a member of another node out of a room, without telling anyone
444
+ * @param room The room.
445
+ * @param peerId The member's id.
446
+ * @param node Only if it is a member through this node.
447
+ * @returns The member taken out.
448
+ * @protected
449
+ */
450
+ forgetRemote(room, peerId, node) {
451
+ const members = this.#remote.get(room);
452
+ const remote = members?.get(peerId);
453
+ if (!members || !remote || (node !== undefined && remote.node !== node))
454
+ return undefined;
455
+ members.delete(peerId);
456
+ if (!members.size)
457
+ this.#remote.delete(room);
458
+ return remote;
459
+ }
460
+ /**
461
+ * Join the cluster: receive the changes of the other nodes, answer their requests, fetch their members when they
462
+ * come up or when changes of theirs were missed, and take out the members of the nodes going down
463
+ * @param cluster The cluster component.
464
+ * @protected
465
+ */
466
+ async attach(cluster) {
467
+ this.#clusterObject = cluster;
468
+ const onUp = (node) => void this.sync(node.id);
469
+ const onDown = (node) => void this.dropNode(node.id);
470
+ const onUpdate = (node) => {
471
+ //Its heartbeat comes after its changes: a later number than the one applied means changes were lost
472
+ const seq = node.services.signaling?.seq;
473
+ if (typeof seq === 'number' && !this.#syncing.has(node.id) && seq > (this.#applied.get(node.id) ?? -1))
474
+ void this.sync(node.id);
475
+ };
476
+ cluster.on('node-up', onUp);
477
+ cluster.on('node-down', onDown);
478
+ cluster.on('node-update', onUpdate);
479
+ this.#detach.push(() => cluster.off('node-up', onUp), () => cluster.off('node-down', onDown), () => cluster.off('node-update', onUpdate), cluster.subscribe(TOPIC.membership, (event, from) => void this.received(from, event)), cluster.handle(TOPIC.snapshot, () => this.snapshot()), cluster.handle(TOPIC.deliver, ({ to, event }) => this.deliver(to, event)), cluster.handle(TOPIC.admit, ({ room, peerId }) => this.reserve(room, peerId)), () => cluster.announce('signaling', undefined));
480
+ cluster.announce('signaling', { seq: this.#seq });
481
+ //The nodes found before
482
+ for (const node of cluster.nodes())
483
+ if (!node.local)
484
+ void this.sync(node.id);
485
+ }
486
+ /**
487
+ * Tell the other nodes of a change of the members of this node
488
+ * @param event The change, numbered here.
489
+ * @protected
490
+ */
491
+ announceChange(event) {
492
+ const cluster = this.#clusterObject;
493
+ if (!cluster)
494
+ return;
495
+ event.seq = ++this.#seq;
496
+ cluster.publish(TOPIC.membership, event);
497
+ cluster.announce('signaling', { seq: this.#seq });
498
+ }
499
+ /**
500
+ * The members of this node, for another node
501
+ * @protected
502
+ */
503
+ snapshot() {
504
+ const members = [];
505
+ for (const [room, locals] of this.#rooms) {
506
+ for (const member of locals.values()) {
507
+ members.push(recordOf(room, member));
508
+ }
509
+ }
510
+ return { seq: this.#seq, members: members };
511
+ }
512
+ /**
513
+ * Fetch the members of a node, replacing what this node knew of them; the changes received meanwhile are applied
514
+ * after
515
+ * @param node The id of the node.
516
+ * @protected
517
+ */
518
+ async sync(node) {
519
+ if (this.#syncing.has(node) || !this.#clusterObject)
520
+ return;
521
+ const queue = [];
522
+ this.#syncing.set(node, queue);
523
+ let snapshot;
524
+ try {
525
+ snapshot = await this.#clusterObject.request(node, TOPIC.snapshot, {});
526
+ }
527
+ catch {
528
+ //Gone, or not answering: fetched again at its next sign
529
+ if (this.#syncing.get(node) === queue)
530
+ this.#syncing.delete(node);
531
+ return;
532
+ }
533
+ //The node went down meanwhile
534
+ if (this.#syncing.get(node) !== queue)
535
+ return;
536
+ //The members it no longer has left, the new ones joined
537
+ const kept = new Set();
538
+ for (const record of snapshot.members) {
539
+ kept.add(JSON.stringify([record.room, record.peerId]));
540
+ const known = this.#remote.get(record.room)?.get(record.peerId);
541
+ if (known?.node === node && known.joinedAt === record.joinedAt && known.session === record.session && known.sfu === record.sfu)
542
+ continue;
543
+ await this.joinedRemote(node, record);
544
+ }
545
+ for (const [room, members] of [...this.#remote]) {
546
+ for (const [peerId, remote] of [...members]) {
547
+ if (remote.node === node && !kept.has(JSON.stringify([room, peerId])))
548
+ await this.leftRemote(node, room, peerId, 'disconnected');
549
+ }
550
+ }
551
+ this.#applied.set(node, snapshot.seq);
552
+ //The changes received meanwhile, those coming while they are applied included
553
+ while (queue.length) {
554
+ if (this.#syncing.get(node) !== queue)
555
+ return;
556
+ const event = queue.shift();
557
+ const applied = this.#applied.get(node);
558
+ if (event.seq <= applied)
559
+ continue;
560
+ if (event.seq !== applied + 1) {
561
+ //Missed again: fetched again, with the changes after
562
+ this.#syncing.delete(node);
563
+ void this.sync(node);
564
+ return void this.#syncing.get(node)?.push(event, ...queue.splice(0));
565
+ }
566
+ this.#applied.set(node, event.seq);
567
+ await this.apply(node, event);
568
+ }
569
+ if (this.#syncing.get(node) === queue)
570
+ this.#syncing.delete(node);
571
+ }
572
+ /**
573
+ * Receive a change of another node, in its order: a change missed makes this node fetch its members
574
+ * @param node The id of the node.
575
+ * @param event The change.
576
+ * @protected
577
+ */
578
+ async received(node, event) {
579
+ const queue = this.#syncing.get(node);
580
+ if (queue)
581
+ return void queue.push(event);
582
+ const applied = this.#applied.get(node);
583
+ if (applied !== undefined && event.seq <= applied)
584
+ return;
585
+ if (applied === undefined || event.seq !== applied + 1) {
586
+ void this.sync(node);
587
+ return void this.#syncing.get(node)?.push(event);
588
+ }
589
+ this.#applied.set(node, event.seq);
590
+ await this.apply(node, event);
591
+ }
592
+ /**
593
+ * Apply a change of another node
594
+ * @param node The id of the node.
595
+ * @param event The change.
596
+ * @protected
597
+ */
598
+ async apply(node, event) {
599
+ switch (event.kind) {
600
+ case 'join':
601
+ return await this.joinedRemote(node, event);
602
+ case 'leave':
603
+ return await this.leftRemote(node, event.room, event.peerId, event.reason);
604
+ case 'yield':
605
+ return void this.forgetRemote(event.room, event.peerId, node);
606
+ }
607
+ }
608
+ /**
609
+ * A member joined a room through another node: of two nodes having it, the later join wins (the node of the earlier
610
+ * one gives it up); the members of this node in the room are told
611
+ * @param node The id of the node.
612
+ * @param record The member, its room and when it joined.
613
+ * @protected
614
+ */
615
+ async joinedRemote(node, record) {
616
+ const { room, peerId } = record;
617
+ const joined = { joinedAt: record.joinedAt, node: node };
618
+ const local = this.#rooms.get(room)?.get(peerId);
619
+ if (local && later({ joinedAt: local.joinedAt.get(room) ?? 0, node: this.#clusterObject.nodeId }, joined))
620
+ return;
621
+ const known = this.#remote.get(room)?.get(peerId);
622
+ if (known && known.node !== node && later(known, joined))
623
+ return;
624
+ if (local) {
625
+ this.forgetLocal(room, local);
626
+ this.announceChange({ kind: 'yield', seq: 0, room: room, peerId: peerId });
627
+ }
628
+ if (!this.#remote.has(room))
629
+ this.#remote.set(room, new Map());
630
+ this.#remote.get(room).set(peerId, { node: node, metadata: record.metadata, session: record.session, joinedAt: record.joinedAt, ...record.role ? { role: record.role } : {}, ...record.sfu ? { sfu: record.sfu } : {} });
631
+ this.#reservations.get(room)?.delete(peerId);
632
+ const event = { room: room, ...peerOf(peerId, record.metadata, record.session, record.role, record.sfu) };
633
+ for (const other of [...this.#rooms.get(room)?.keys() ?? []])
634
+ await this.push(other, SignalingProtocol_js_1.SignalingEvent.peerJoined, event);
635
+ }
636
+ /**
637
+ * A member of another node left a room: the members of this node in the room are told
638
+ * @param node The id of the node.
639
+ * @param room The room.
640
+ * @param peerId The member's id.
641
+ * @param reason `left` when it asked, `disconnected` when its client or its node went away.
642
+ * @protected
643
+ */
644
+ async leftRemote(node, room, peerId, reason) {
645
+ if (!this.forgetRemote(room, peerId, node))
646
+ return;
647
+ const event = { room: room, peerId: peerId, reason: reason };
648
+ for (const other of [...this.#rooms.get(room)?.keys() ?? []])
649
+ await this.push(other, SignalingProtocol_js_1.SignalingEvent.peerLeft, event);
650
+ }
651
+ /**
652
+ * A node went down: its members leave their rooms (`disconnected`)
653
+ * @param node The id of the node.
654
+ * @protected
655
+ */
656
+ async dropNode(node) {
657
+ this.#applied.delete(node);
658
+ this.#syncing.delete(node);
659
+ for (const [room, members] of [...this.#remote]) {
660
+ for (const [peerId, remote] of [...members]) {
661
+ if (remote.node === node)
662
+ await this.leftRemote(node, room, peerId, 'disconnected');
663
+ }
664
+ }
665
+ }
666
+ /**
667
+ * Push a signal from another node to a member of this node
668
+ * @param to The receiver's id.
669
+ * @param event The signal.
670
+ * @protected
671
+ */
672
+ async deliver(to, event) {
673
+ if (!this.#rooms.get(event?.room)?.has(to))
674
+ return false;
675
+ return await this.push(to, SignalingProtocol_js_1.SignalingEvent.signal, event);
676
+ }
677
+ /**
678
+ * Whether a member may join a room of `maxPeers` members at most: counted by this node without a cluster, by the
679
+ * node the room falls to with one (another one when that node does not answer)
680
+ * @param room The room.
681
+ * @param peerId The member's id.
682
+ * @protected
683
+ */
684
+ async admit(room, peerId) {
685
+ const cluster = this.#clusterObject;
686
+ if (!cluster) {
687
+ const members = this.#rooms.get(room);
688
+ return !members || members.has(peerId) || [...members.values()].filter((member) => !member.role).length < this.maxPeers;
689
+ }
690
+ for (let attempt = 0; attempt < 2; attempt++) {
691
+ const owner = (0, Rendezvous_js_1.rendezvous)(room, cluster.nodes().map((node) => node.id));
692
+ if (owner === cluster.nodeId)
693
+ return this.reserve(room, peerId);
694
+ try {
695
+ return await cluster.request(owner, TOPIC.admit, { room: room, peerId: peerId }, { timeout: CLUSTER_REQUEST_TIMEOUT }) === true;
696
+ }
697
+ catch {
698
+ //Gone or not answering: the room falls to another node once it is taken as gone
699
+ }
700
+ }
701
+ return this.reserve(room, peerId);
702
+ }
703
+ /**
704
+ * Hold a place for a member in a room falling to this node, if the room has one: its members of all the nodes and
705
+ * the places held count
706
+ * @param room The room.
707
+ * @param peerId The member's id.
708
+ * @protected
709
+ */
710
+ reserve(room, peerId) {
711
+ if (typeof room !== 'string' || typeof peerId !== 'string')
712
+ return false;
713
+ const now = Date.now();
714
+ const reservations = this.#reservations.get(room) ?? new Map();
715
+ for (const [id, expiresAt] of reservations)
716
+ if (expiresAt < now)
717
+ reservations.delete(id);
718
+ //The members of the server are not counted
719
+ const present = new Set([
720
+ ...[...this.#rooms.get(room)?.values() ?? []].filter((member) => !member.role).map((member) => member.peerId),
721
+ ...[...this.#remote.get(room)?.entries() ?? []].filter(([, member]) => !member.role).map(([id]) => id)
722
+ ]);
723
+ if (present.has(peerId))
724
+ return true;
725
+ for (const id of present)
726
+ reservations.delete(id);
727
+ if (!reservations.has(peerId) && present.size + reservations.size >= this.maxPeers) {
728
+ if (!reservations.size)
729
+ this.#reservations.delete(room);
730
+ return false;
731
+ }
732
+ reservations.set(peerId, now + RESERVATION_TIMEOUT);
733
+ this.#reservations.set(room, reservations);
734
+ return true;
735
+ }
736
+ /**
737
+ * The media server a member joining a room connects to: the one of this node, else, in a cluster, one of the media
738
+ * servers of the other nodes (the least loaded answering), which chooses as it would for a member of its own node
739
+ * @param room The room.
740
+ * @param peerId The member's id.
741
+ * @returns The id of the member of the media server, none for a room without one.
742
+ * @throws {SignalingLimitException} When no media server takes the member.
743
+ * @protected
744
+ */
745
+ async mediaServerOf(room, peerId) {
746
+ const local = MediaServers_js_1.mediaServers.get(this);
747
+ if (local)
748
+ return await local(room, peerId);
749
+ const cluster = this.#clusterObject;
750
+ if (!cluster)
751
+ return undefined;
752
+ const load = (node) => {
753
+ const announced = node.services[MediaServers_js_1.MEDIA_SERVER_SERVICE];
754
+ return announced.members + announced.viewers;
755
+ };
756
+ const servers = cluster.nodes()
757
+ .filter((node) => !node.local && !!node.services[MediaServers_js_1.MEDIA_SERVER_SERVICE])
758
+ .sort((a, b) => load(a) - load(b));
759
+ if (!servers.length)
760
+ return undefined;
761
+ for (const server of servers.slice(0, 2)) {
762
+ let reply;
763
+ try {
764
+ reply = await cluster.request(server.id, MediaServers_js_1.MEDIA_SERVER_ASSIGN_TOPIC, { room: room, peerId: peerId });
765
+ }
766
+ catch {
767
+ //Gone or not answering: the next one
768
+ continue;
769
+ }
770
+ //Full: it chose among all the media servers
771
+ if ('full' in reply)
772
+ break;
773
+ return reply.sfu ?? undefined;
774
+ }
775
+ throw new SignalingLimitException_js_1.SignalingLimitException('No media server takes the member {peerId} in the room {room}', { peerId: peerId, room: room });
776
+ }
777
+ /**
778
+ * The role of a member of another node, in any room
779
+ * @param peerId The member's id.
780
+ * @protected
781
+ */
782
+ remoteRoleOf(peerId) {
783
+ for (const members of this.#remote.values()) {
784
+ const role = members.get(peerId)?.role;
785
+ if (role)
786
+ return role;
787
+ }
788
+ return undefined;
789
+ }
790
+ /**
791
+ * The member of a client, created on its first request; its Socket.IO socket, when its request came through one,
792
+ * takes it out of its rooms when it disconnects (unless the client reconnected through another socket first).
793
+ * @param peerId The member's id.
794
+ * @param context The context of its request.
795
+ * @returns The member.
796
+ * @protected
797
+ */
798
+ member(peerId, context) {
799
+ let member = this.#members.get(peerId);
800
+ if (!member) {
801
+ member = { peerId: peerId, rooms: new Map(), joinedAt: new Map(), heartbeats: true, lastSeen: Date.now(), tokens: this.maxMessagesPerSecond * 2, refilledAt: Date.now(), sfus: new Map() };
802
+ this.#members.set(peerId, member);
803
+ }
804
+ member.lastSeen = Date.now();
805
+ const socket = context?.socket;
806
+ const event = disconnectionEventOf(socket);
807
+ if (event) {
808
+ member.heartbeats = false;
809
+ member.socket = socket;
810
+ if (!this.#hooked.has(socket)) {
811
+ this.#hooked.add(socket);
812
+ socket.once(event, () => {
813
+ if (this.#members.get(peerId)?.socket === socket)
814
+ void this.disconnect(peerId).catch(() => undefined);
815
+ });
816
+ }
817
+ }
818
+ return member;
819
+ }
820
+ /**
821
+ * Take a token of the member's rate (refilled at maxMessagesPerSecond, up to twice as many).
822
+ * @param member The member.
823
+ * @throws {SignalingLimitException} When no token is left.
824
+ * @protected
825
+ */
826
+ consume(member) {
827
+ const now = Date.now();
828
+ member.tokens = Math.min(this.maxMessagesPerSecond * 2, member.tokens + (now - member.refilledAt) / 1000 * this.maxMessagesPerSecond);
829
+ member.refilledAt = now;
830
+ if (member.tokens < 1) {
831
+ throw new SignalingLimitException_js_1.SignalingLimitException('The member {peerId} sends more than {rate} signals per second', { peerId: member.peerId, rate: this.maxMessagesPerSecond });
832
+ }
833
+ member.tokens--;
834
+ }
835
+ /**
836
+ * Push an event to a member; a member it cannot reach any more leaves its rooms.
837
+ * @param peerId The member's id.
838
+ * @param event The event.
839
+ * @param payload Its payload.
840
+ * @returns Whether the event reached the member.
841
+ * @protected
842
+ */
843
+ async push(peerId, event, payload) {
844
+ const receive = this.#members.get(peerId)?.receive;
845
+ if (receive) {
846
+ try {
847
+ receive(event, payload);
848
+ }
849
+ catch {
850
+ //The member of the application handles its own errors
851
+ }
852
+ return true;
853
+ }
854
+ this.#entrypointObject ??= await this.getObject(this.entrypoint);
855
+ const delivered = this.#entrypointObject.notify(peerId, event, payload);
856
+ if (!delivered)
857
+ setImmediate(() => void this.disconnect(peerId).catch(() => undefined));
858
+ return delivered;
859
+ }
860
+ /**
861
+ * Take out the members sending heartbeats that were not seen for three intervals.
862
+ * @protected
863
+ */
864
+ sweep() {
865
+ const limit = Date.now() - this.heartbeatInterval * 3;
866
+ for (const member of [...this.#members.values()]) {
867
+ if (member.heartbeats && member.lastSeen < limit)
868
+ void this.disconnect(member.peerId).catch(() => undefined);
869
+ }
870
+ }
871
+ };
872
+ exports.Signaling = Signaling;
873
+ __decorate([
874
+ (0, di_1.Configurable)(core_1.DTO.String().optional().default('entrypoint')),
875
+ __metadata("design:type", String)
876
+ ], Signaling.prototype, "entrypoint", void 0);
877
+ __decorate([
878
+ (0, di_1.Configurable)(core_1.DTO.String().optional()),
879
+ __metadata("design:type", String)
880
+ ], Signaling.prototype, "cluster", void 0);
881
+ __decorate([
882
+ (0, di_1.Configurable)(core_1.DTO.String().optional()),
883
+ __metadata("design:type", String)
884
+ ], Signaling.prototype, "turn", void 0);
885
+ __decorate([
886
+ (0, di_1.Configurable)(core_1.DTO.String().min(1).optional()),
887
+ __metadata("design:type", String)
888
+ ], Signaling.prototype, "turnSecret", void 0);
889
+ __decorate([
890
+ (0, di_1.Configurable)(core_1.DTO.Function().optional()),
891
+ __metadata("design:type", Function)
892
+ ], Signaling.prototype, "selectTURN", void 0);
893
+ __decorate([
894
+ (0, di_1.Configurable)(core_1.DTO.Array().items(core_1.DTO.Object({
895
+ urls: core_1.DTO.Alternatives(core_1.DTO.String(), core_1.DTO.Array().items(core_1.DTO.String())).required(),
896
+ username: core_1.DTO.String().optional(),
897
+ credential: core_1.DTO.String().optional()
898
+ })).optional().default([])),
899
+ __metadata("design:type", Array)
900
+ ], Signaling.prototype, "iceServers", void 0);
901
+ __decorate([
902
+ (0, di_1.Configurable)(core_1.DTO.Function().optional()),
903
+ __metadata("design:type", Function)
904
+ ], Signaling.prototype, "authorize", void 0);
905
+ __decorate([
906
+ (0, di_1.Configurable)(core_1.DTO.Number().integer().min(0).optional().default(0)),
907
+ __metadata("design:type", Number)
908
+ ], Signaling.prototype, "maxPeers", void 0);
909
+ __decorate([
910
+ (0, di_1.Configurable)(core_1.DTO.Number().integer().positive().optional().default(65536)),
911
+ __metadata("design:type", Number)
912
+ ], Signaling.prototype, "maxMessageSize", void 0);
913
+ __decorate([
914
+ (0, di_1.Configurable)(core_1.DTO.Number().positive().optional().default(50)),
915
+ __metadata("design:type", Number)
916
+ ], Signaling.prototype, "maxMessagesPerSecond", void 0);
917
+ __decorate([
918
+ (0, di_1.Configurable)(core_1.DTO.Number().integer().positive().optional().default(10000)),
919
+ __metadata("design:type", Number)
920
+ ], Signaling.prototype, "heartbeatInterval", void 0);
921
+ exports.Signaling = Signaling = __decorate([
922
+ (0, di_1.Singleton)()
923
+ ], Signaling);
924
+ /**
925
+ * Build the options of a {@link Signaling} component, for the `components` of an application (named `signaling`, the
926
+ * name {@link SignalingController} uses).
927
+ * @param options The TURN server, the other ICE servers, who may join which room, the limits (all optional).
928
+ * @returns The component options.
929
+ * @example
930
+ * ```typescript
931
+ * import {Application} from 'lakutata'
932
+ * import {buildSignalingOptions} from '@lakutata/webrtc'
933
+ *
934
+ * Application.run(() => ({
935
+ * id: 'meet.app',
936
+ * name: 'Meet',
937
+ * components: {
938
+ * signaling: buildSignalingOptions({iceServers: [{urls: 'stun:stun.example.com:3478'}], maxPeers: 8})
939
+ * }
940
+ * }))
941
+ * ```
942
+ */
943
+ function buildSignalingOptions(options = {}) {
944
+ return { class: Signaling, ...options };
945
+ }