@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,941 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Component, DTO } from '@lakutata/core';
11
+ import { Configurable, Singleton } from '@lakutata/core/decorator/di';
12
+ import { SIGNALING_PROTOCOL_VERSION, SignalingEvent } from '../protocol/SignalingProtocol.js';
13
+ import { rendezvous } from '../cluster/Rendezvous.js';
14
+ import { iceServersFor } from '../cluster/ClusterTURN.js';
15
+ import { SignalingDeniedException } from '../exceptions/SignalingDeniedException.js';
16
+ import { SignalingLimitException } from '../exceptions/SignalingLimitException.js';
17
+ import { SignalingNotAMemberException } from '../exceptions/SignalingNotAMemberException.js';
18
+ import { MEDIA_SERVER_ASSIGN_TOPIC, MEDIA_SERVER_SERVICE, mediaServers } from './MediaServers.js';
19
+ /**
20
+ * The topics of the signaling on the cluster
21
+ */
22
+ const TOPIC = {
23
+ membership: 'webrtc.signaling.membership',
24
+ snapshot: 'webrtc.signaling.snapshot',
25
+ deliver: 'webrtc.signaling.deliver',
26
+ admit: 'webrtc.signaling.admit'
27
+ };
28
+ /**
29
+ * How long a signal waits for the node of its receiver, and an admission for the node of its room, in milliseconds
30
+ */
31
+ const CLUSTER_REQUEST_TIMEOUT = 2000;
32
+ /**
33
+ * How long a place in a full room is held for a member admitted by the node of the room, until its join arrives
34
+ */
35
+ const RESERVATION_TIMEOUT = 5000;
36
+ /**
37
+ * The beginnings of the ids kept for the members the server adds itself
38
+ */
39
+ const RESERVED_PREFIXES = ['sfu:', 'whip:'];
40
+ /**
41
+ * Whether a join is later than another: by time, then by node id when at the same millisecond
42
+ * @param join
43
+ * @param other
44
+ */
45
+ function later(join, other) {
46
+ return join.joinedAt !== other.joinedAt ? join.joinedAt > other.joinedAt : join.node > other.node;
47
+ }
48
+ /**
49
+ * A member as the other members see it, without the fields it does not have
50
+ * @param peerId
51
+ * @param metadata
52
+ * @param session
53
+ * @param role
54
+ * @param sfu
55
+ */
56
+ function peerOf(peerId, metadata, session, role, sfu) {
57
+ return { peerId: peerId, metadata: metadata, session: session, ...role ? { role: role } : {}, ...sfu ? { sfu: sfu } : {} };
58
+ }
59
+ /**
60
+ * A member of this node in a room, as the node tells the others
61
+ * @param room
62
+ * @param member
63
+ */
64
+ function recordOf(room, member) {
65
+ const sfu = member.sfus.get(room);
66
+ 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 } : {} };
67
+ }
68
+ /**
69
+ * The event a connection emits when its client goes away, if it is one of a known kind
70
+ * @param socket
71
+ */
72
+ function disconnectionEventOf(socket) {
73
+ if (!socket || typeof socket !== 'object' || typeof socket.once !== 'function')
74
+ return undefined;
75
+ //A socket of Socket.IO: its handshake and its namespace
76
+ if ('handshake' in socket && 'nsp' in socket)
77
+ return 'disconnect';
78
+ //A WebSocket of ws: its state and its pings
79
+ if ('readyState' in socket && typeof socket.ping === 'function')
80
+ return 'close';
81
+ return undefined;
82
+ }
83
+ /**
84
+ * The signaling of WebRTC: rooms whose members exchange the descriptions and the candidates of their connections. A
85
+ * member is a client of the entrypoint (its `clientId`): it joins a room with `webrtc.join`, gets the members already
86
+ * in it and the ICE servers, sends its offers, answers and candidates to a member with `webrtc.signal`, and receives
87
+ * the events of the room (`webrtc:peer-joined`, `webrtc:peer-left`, `webrtc:signal`). The requests are served by
88
+ * {@link SignalingController}, over Socket.IO or JSON-RPC over WebSocket (the protocol is in the guide, for the clients
89
+ * of other languages).
90
+ *
91
+ * A member leaves its rooms when it asks, when its connection closes (Socket.IO, JSON-RPC over WebSocket), when an
92
+ * event cannot reach it any more, or, for the clients sending heartbeats (over the other transports), after three
93
+ * heartbeat intervals without a request. The signals are checked: only between members of the same room, of a limited
94
+ * size and rate.
95
+ *
96
+ * With a {@link Cluster} (its `cluster` option), the instances of the application share the rooms: each node tells the
97
+ * others who joins and leaves through it, a signal to a member of another node goes through that node, and the members
98
+ * of a node that stops or cannot be reached any more leave their rooms (`disconnected`). `maxPeers` is counted over the
99
+ * whole cluster, by the node each room falls to.
100
+ *
101
+ * Register it as `signaling` with {@link buildSignalingOptions}, and add {@link SignalingController} to the
102
+ * controllers of the entrypoint.
103
+ * @example
104
+ * ```typescript
105
+ * import {Application} from 'lakutata'
106
+ * import {buildEntrypoints} from 'lakutata/com/entrypoint'
107
+ * import {socketIOServiceEntrypoint} from 'lakutata/adapter/socket.io'
108
+ * import {buildSignalingOptions, buildTURNServerOptions, SignalingController} from '@lakutata/webrtc'
109
+ *
110
+ * Application.run(() => ({
111
+ * id: 'meet.app',
112
+ * name: 'Meet',
113
+ * components: {
114
+ * turn: buildTURNServerOptions({publicAddress: '203.0.113.10', secret: process.env.TURN_SECRET}),
115
+ * //The members get the ICE servers of turn; only the users of the meeting may join its room
116
+ * signaling: buildSignalingOptions({
117
+ * turn: 'turn',
118
+ * authorize: (peer, room): boolean => room === 'meeting' && peer.peerId.startsWith('user-')
119
+ * }),
120
+ * entrypoint: buildEntrypoints({
121
+ * controllers: [SignalingController],
122
+ * service: socketIOServiceEntrypoint({port: 3000})
123
+ * })
124
+ * },
125
+ * bootstrap: ['turn', 'entrypoint']
126
+ * }))
127
+ * ```
128
+ */
129
+ let Signaling = class Signaling extends Component {
130
+ //The members connected to this node, by room
131
+ #rooms = new Map();
132
+ #members = new Map();
133
+ //The members connected to the other nodes of the cluster, by room
134
+ #remote = new Map();
135
+ //The number of the last change of each node applied here
136
+ #applied = new Map();
137
+ //The changes of the nodes received while their members are being fetched
138
+ #syncing = new Map();
139
+ //The places held in the full rooms falling to this node: by room, the members admitted and until when
140
+ #reservations = new Map();
141
+ #hooked = new WeakSet();
142
+ #detach = [];
143
+ #seq = 0;
144
+ #sweeper;
145
+ #entrypointObject;
146
+ #clusterObject;
147
+ /**
148
+ * Start the sweep of the members without heartbeats, and join the cluster.
149
+ * @protected
150
+ */
151
+ async init() {
152
+ this.#sweeper = setInterval(() => this.sweep(), this.heartbeatInterval);
153
+ this.#sweeper.unref();
154
+ if (this.cluster)
155
+ await this.attach(await this.getObject(this.cluster));
156
+ }
157
+ /**
158
+ * Stop the sweep, leave the cluster and forget the rooms.
159
+ * @protected
160
+ */
161
+ async destroy() {
162
+ clearInterval(this.#sweeper);
163
+ this.#detach.splice(0).forEach((detach) => detach());
164
+ this.#rooms.clear();
165
+ this.#members.clear();
166
+ this.#remote.clear();
167
+ }
168
+ /**
169
+ * The rooms and their members (of all the nodes, with a cluster).
170
+ * @returns For each room, the ids of its members.
171
+ * @example
172
+ * ```typescript
173
+ * import type {Signaling} from '@lakutata/webrtc'
174
+ *
175
+ * declare const signaling: Signaling
176
+ * //{meeting: ['alice', 'bob']}
177
+ * console.log(signaling.rooms())
178
+ * ```
179
+ */
180
+ rooms() {
181
+ const rooms = Object.fromEntries([...this.#rooms].map(([room, members]) => [room, [...members.keys()]]));
182
+ for (const [room, members] of this.#remote)
183
+ rooms[room] = [...rooms[room] ?? [], ...members.keys()];
184
+ return rooms;
185
+ }
186
+ /**
187
+ * Add a member to a room: the other members get `webrtc:peer-joined`. Joining a room again updates its metadata and
188
+ * its session.
189
+ * @param peerId The member's id (its client id).
190
+ * @param room The room.
191
+ * @param options Its metadata, its session, the context of its request.
192
+ * @returns The members already in the room, the ICE servers and how to keep the membership alive.
193
+ * @throws {SignalingDeniedException} When `authorize` refuses the room, or the id is kept for the members of the
194
+ * server (`sfu:`, `whip:`) and no role is given.
195
+ * @throws {SignalingLimitException} When the room is full, or the metadata is over `maxMessageSize`.
196
+ * @example
197
+ * ```typescript
198
+ * import type {Signaling, SignalingJoinResult} from '@lakutata/webrtc'
199
+ *
200
+ * declare const signaling: Signaling
201
+ * //A member added by the application itself (SignalingController does it for the clients)
202
+ * const result: SignalingJoinResult = await signaling.join('device-7', 'device-7', {metadata: {kind: 'camera'}})
203
+ * ```
204
+ */
205
+ async join(peerId, room, options = {}) {
206
+ const { metadata, session, context, role, receive } = options;
207
+ const size = metadata === undefined ? 0 : Buffer.byteLength(JSON.stringify(metadata));
208
+ if (size > this.maxMessageSize) {
209
+ throw new SignalingLimitException('Metadata of {size} bytes is over the limit of {limit}', { size: size, limit: this.maxMessageSize });
210
+ }
211
+ if (!role) {
212
+ //A client may not take the place of a member of the server
213
+ if (RESERVED_PREFIXES.some((prefix) => peerId.startsWith(prefix)) || this.#members.get(peerId)?.role || this.remoteRoleOf(peerId)) {
214
+ throw new SignalingDeniedException('The id {peerId} is kept for the members of the server', { peerId: peerId });
215
+ }
216
+ if (this.authorize && !(await this.authorize({ peerId: peerId, metadata: metadata, session: session }, room, context))) {
217
+ throw new SignalingDeniedException('The member {peerId} may not join the room {room}', { peerId: peerId, room: room });
218
+ }
219
+ if (this.maxPeers && !(await this.admit(room, peerId))) {
220
+ throw new SignalingLimitException('The room {room} is full ({maxPeers} members)', { room: room, maxPeers: this.maxPeers });
221
+ }
222
+ }
223
+ //The media server of the room joins it first
224
+ const sfu = role ? undefined : await this.mediaServerOf(room, peerId);
225
+ let members = this.#rooms.get(room);
226
+ if (!members) {
227
+ members = new Map();
228
+ this.#rooms.set(room, members);
229
+ }
230
+ const member = this.member(peerId, context);
231
+ if (session !== undefined)
232
+ member.session = session;
233
+ if (role)
234
+ member.role = role;
235
+ if (receive) {
236
+ member.receive = receive;
237
+ member.heartbeats = false;
238
+ }
239
+ const locals = [...members.values()].filter((other) => other.peerId !== peerId);
240
+ //Joining through this node, it is no longer a member through another one
241
+ const moved = this.forgetRemote(room, peerId);
242
+ const peers = [
243
+ ...locals.map((other) => peerOf(other.peerId, other.rooms.get(room), other.session, other.role, other.sfus.get(room))),
244
+ ...[...this.#remote.get(room)?.entries() ?? []].map(([id, other]) => peerOf(id, other.metadata, other.session, other.role, other.sfu))
245
+ ];
246
+ member.rooms.set(room, metadata);
247
+ if (sfu)
248
+ member.sfus.set(room, sfu);
249
+ else
250
+ member.sfus.delete(room);
251
+ //Later than its join through the other node, whatever the clocks of the nodes
252
+ member.joinedAt.set(room, Math.max(Date.now(), (moved?.joinedAt ?? 0) + 1));
253
+ members.set(peerId, member);
254
+ this.#reservations.get(room)?.delete(peerId);
255
+ this.announceChange({ kind: 'join', seq: 0, ...recordOf(room, member) });
256
+ const event = { room: room, ...peerOf(peerId, metadata, member.session, member.role, sfu) };
257
+ //The other nodes tell their own members
258
+ for (const other of locals)
259
+ await this.push(other.peerId, SignalingEvent.peerJoined, event);
260
+ const { iceServers, credentialTtl } = await this.iceServersOf(peerId);
261
+ return {
262
+ v: SIGNALING_PROTOCOL_VERSION,
263
+ peerId: peerId,
264
+ peers: peers,
265
+ iceServers: iceServers,
266
+ credentialTtl: credentialTtl,
267
+ heartbeatInterval: member.heartbeats ? this.heartbeatInterval : 0,
268
+ ...sfu ? { sfu: sfu } : {}
269
+ };
270
+ }
271
+ /**
272
+ * Send a description or a candidate to a member of a room, as `webrtc:signal` from the sender.
273
+ * @param peerId The sender's id.
274
+ * @param room The room both are in.
275
+ * @param to The receiver's id.
276
+ * @param signal The description (with the streams of the media server of the room, from it), or the candidate.
277
+ * @returns Whether the event reached the receiver.
278
+ * @throws {SignalingNotAMemberException} When the sender or the receiver is not in the room.
279
+ * @throws {SignalingLimitException} When the signal is too large, or the sender sends too many (a member of the
280
+ * server is not limited).
281
+ * @example
282
+ * ```typescript
283
+ * import type {Signaling} from '@lakutata/webrtc'
284
+ *
285
+ * declare const signaling: Signaling
286
+ * declare const offer: string
287
+ * const delivered: boolean = await signaling.signal('device-7', 'device-7', 'alice', {description: {type: 'offer', sdp: offer}})
288
+ * ```
289
+ */
290
+ async signal(peerId, room, to, signal) {
291
+ const members = this.#rooms.get(room);
292
+ const member = members?.get(peerId);
293
+ if (!members || !member)
294
+ throw new SignalingNotAMemberException('The member {peerId} is not in the room {room}', { peerId: peerId, room: room });
295
+ const remote = members.has(to) ? undefined : this.#remote.get(room)?.get(to);
296
+ if (!members.has(to) && !remote)
297
+ throw new SignalingNotAMemberException('The member {peerId} is not in the room {room}', { peerId: to, room: room });
298
+ //The members of the server send descriptions of all the media of the room, as often as the members publish
299
+ if (!member.role) {
300
+ const size = Buffer.byteLength(JSON.stringify(signal));
301
+ if (size > this.maxMessageSize) {
302
+ throw new SignalingLimitException('A signal of {size} bytes is over the limit of {limit}', { size: size, limit: this.maxMessageSize });
303
+ }
304
+ this.consume(member);
305
+ }
306
+ member.lastSeen = Date.now();
307
+ const event = { room: room, from: peerId, session: member.session };
308
+ if (signal.description)
309
+ event.description = signal.description;
310
+ if (signal.candidate !== undefined)
311
+ event.candidate = signal.candidate;
312
+ if (signal.streams)
313
+ event.streams = signal.streams;
314
+ if (!remote)
315
+ return await this.push(to, SignalingEvent.signal, event);
316
+ //Through the node of the receiver, unless it is known to be gone (its members leave with it)
317
+ const cluster = this.#clusterObject;
318
+ if (!cluster.nodes().some((node) => node.id === remote.node))
319
+ return false;
320
+ try {
321
+ return await cluster.request(remote.node, TOPIC.deliver, { to: to, event: event }, { timeout: CLUSTER_REQUEST_TIMEOUT }) === true;
322
+ }
323
+ catch {
324
+ return false;
325
+ }
326
+ }
327
+ /**
328
+ * Take a member out of a room: the other members get `webrtc:peer-left`.
329
+ * @param peerId The member's id.
330
+ * @param room The room.
331
+ * @returns Resolves once the other members are told.
332
+ * @example
333
+ * ```typescript
334
+ * import type {Signaling} from '@lakutata/webrtc'
335
+ *
336
+ * declare const signaling: Signaling
337
+ * await signaling.leave('device-7', 'device-7')
338
+ * ```
339
+ */
340
+ async leave(peerId, room) {
341
+ await this.remove(peerId, room, 'left');
342
+ }
343
+ /**
344
+ * Take a member out of all its rooms (its client went away).
345
+ * @param peerId The member's id.
346
+ * @returns Resolves once the other members are told.
347
+ * @example
348
+ * ```typescript
349
+ * import type {Signaling} from '@lakutata/webrtc'
350
+ *
351
+ * declare const signaling: Signaling
352
+ * await signaling.disconnect('device-7')
353
+ * ```
354
+ */
355
+ async disconnect(peerId) {
356
+ const member = this.#members.get(peerId);
357
+ if (!member)
358
+ return;
359
+ for (const room of [...member.rooms.keys()])
360
+ await this.remove(peerId, room, 'disconnected');
361
+ }
362
+ /**
363
+ * Note that a member's client is still there (`webrtc.heartbeat`, and any request).
364
+ * @param peerId The member's id.
365
+ * @example
366
+ * ```typescript
367
+ * import type {Signaling} from '@lakutata/webrtc'
368
+ *
369
+ * declare const signaling: Signaling
370
+ * signaling.heartbeat('device-7')
371
+ * ```
372
+ */
373
+ heartbeat(peerId) {
374
+ const member = this.#members.get(peerId);
375
+ if (member)
376
+ member.lastSeen = Date.now();
377
+ }
378
+ /**
379
+ * The ICE servers of a member, with new TURN credentials: the ones of `turn`, of the TURN servers of the cluster
380
+ * chosen for it, then the others.
381
+ * @param peerId The member's id (the user of the TURN credentials).
382
+ * @returns The ICE servers, and how long their credentials are valid in seconds (0 without TURN).
383
+ * @example
384
+ * ```typescript
385
+ * import type {Signaling, SignalingIceServer} from '@lakutata/webrtc'
386
+ *
387
+ * declare const signaling: Signaling
388
+ * const {iceServers} = await signaling.iceServersOf('device-7')
389
+ * ```
390
+ */
391
+ async iceServersOf(peerId) {
392
+ return iceServersFor(peerId, {
393
+ turn: this.turn ? await this.getObject(this.turn) : undefined,
394
+ cluster: this.#clusterObject,
395
+ secret: this.turnSecret,
396
+ select: this.selectTURN,
397
+ iceServers: this.iceServers
398
+ });
399
+ }
400
+ /**
401
+ * Take a member out of a room, telling the other members why.
402
+ * @param peerId The member's id.
403
+ * @param room The room.
404
+ * @param reason `left` when it asked, `disconnected` when its client went away.
405
+ * @returns Resolves once the other members are told.
406
+ * @protected
407
+ */
408
+ async remove(peerId, room, reason) {
409
+ const members = this.#rooms.get(room);
410
+ const member = members?.get(peerId);
411
+ if (!members || !member)
412
+ return;
413
+ this.forgetLocal(room, member);
414
+ this.announceChange({ kind: 'leave', seq: 0, room: room, peerId: peerId, reason: reason });
415
+ const event = { room: room, peerId: peerId, reason: reason };
416
+ for (const other of [...members.keys()])
417
+ await this.push(other, SignalingEvent.peerLeft, event);
418
+ }
419
+ /**
420
+ * Take a member of this node out of a room, without telling anyone
421
+ * @param room The room.
422
+ * @param member The member.
423
+ * @protected
424
+ */
425
+ forgetLocal(room, member) {
426
+ const members = this.#rooms.get(room);
427
+ if (members?.get(member.peerId) !== member)
428
+ return;
429
+ members.delete(member.peerId);
430
+ member.rooms.delete(room);
431
+ member.joinedAt.delete(room);
432
+ member.sfus.delete(room);
433
+ if (!members.size)
434
+ this.#rooms.delete(room);
435
+ if (!member.rooms.size && this.#members.get(member.peerId) === member)
436
+ this.#members.delete(member.peerId);
437
+ }
438
+ /**
439
+ * Take a member of another node out of a room, without telling anyone
440
+ * @param room The room.
441
+ * @param peerId The member's id.
442
+ * @param node Only if it is a member through this node.
443
+ * @returns The member taken out.
444
+ * @protected
445
+ */
446
+ forgetRemote(room, peerId, node) {
447
+ const members = this.#remote.get(room);
448
+ const remote = members?.get(peerId);
449
+ if (!members || !remote || (node !== undefined && remote.node !== node))
450
+ return undefined;
451
+ members.delete(peerId);
452
+ if (!members.size)
453
+ this.#remote.delete(room);
454
+ return remote;
455
+ }
456
+ /**
457
+ * Join the cluster: receive the changes of the other nodes, answer their requests, fetch their members when they
458
+ * come up or when changes of theirs were missed, and take out the members of the nodes going down
459
+ * @param cluster The cluster component.
460
+ * @protected
461
+ */
462
+ async attach(cluster) {
463
+ this.#clusterObject = cluster;
464
+ const onUp = (node) => void this.sync(node.id);
465
+ const onDown = (node) => void this.dropNode(node.id);
466
+ const onUpdate = (node) => {
467
+ //Its heartbeat comes after its changes: a later number than the one applied means changes were lost
468
+ const seq = node.services.signaling?.seq;
469
+ if (typeof seq === 'number' && !this.#syncing.has(node.id) && seq > (this.#applied.get(node.id) ?? -1))
470
+ void this.sync(node.id);
471
+ };
472
+ cluster.on('node-up', onUp);
473
+ cluster.on('node-down', onDown);
474
+ cluster.on('node-update', onUpdate);
475
+ 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));
476
+ cluster.announce('signaling', { seq: this.#seq });
477
+ //The nodes found before
478
+ for (const node of cluster.nodes())
479
+ if (!node.local)
480
+ void this.sync(node.id);
481
+ }
482
+ /**
483
+ * Tell the other nodes of a change of the members of this node
484
+ * @param event The change, numbered here.
485
+ * @protected
486
+ */
487
+ announceChange(event) {
488
+ const cluster = this.#clusterObject;
489
+ if (!cluster)
490
+ return;
491
+ event.seq = ++this.#seq;
492
+ cluster.publish(TOPIC.membership, event);
493
+ cluster.announce('signaling', { seq: this.#seq });
494
+ }
495
+ /**
496
+ * The members of this node, for another node
497
+ * @protected
498
+ */
499
+ snapshot() {
500
+ const members = [];
501
+ for (const [room, locals] of this.#rooms) {
502
+ for (const member of locals.values()) {
503
+ members.push(recordOf(room, member));
504
+ }
505
+ }
506
+ return { seq: this.#seq, members: members };
507
+ }
508
+ /**
509
+ * Fetch the members of a node, replacing what this node knew of them; the changes received meanwhile are applied
510
+ * after
511
+ * @param node The id of the node.
512
+ * @protected
513
+ */
514
+ async sync(node) {
515
+ if (this.#syncing.has(node) || !this.#clusterObject)
516
+ return;
517
+ const queue = [];
518
+ this.#syncing.set(node, queue);
519
+ let snapshot;
520
+ try {
521
+ snapshot = await this.#clusterObject.request(node, TOPIC.snapshot, {});
522
+ }
523
+ catch {
524
+ //Gone, or not answering: fetched again at its next sign
525
+ if (this.#syncing.get(node) === queue)
526
+ this.#syncing.delete(node);
527
+ return;
528
+ }
529
+ //The node went down meanwhile
530
+ if (this.#syncing.get(node) !== queue)
531
+ return;
532
+ //The members it no longer has left, the new ones joined
533
+ const kept = new Set();
534
+ for (const record of snapshot.members) {
535
+ kept.add(JSON.stringify([record.room, record.peerId]));
536
+ const known = this.#remote.get(record.room)?.get(record.peerId);
537
+ if (known?.node === node && known.joinedAt === record.joinedAt && known.session === record.session && known.sfu === record.sfu)
538
+ continue;
539
+ await this.joinedRemote(node, record);
540
+ }
541
+ for (const [room, members] of [...this.#remote]) {
542
+ for (const [peerId, remote] of [...members]) {
543
+ if (remote.node === node && !kept.has(JSON.stringify([room, peerId])))
544
+ await this.leftRemote(node, room, peerId, 'disconnected');
545
+ }
546
+ }
547
+ this.#applied.set(node, snapshot.seq);
548
+ //The changes received meanwhile, those coming while they are applied included
549
+ while (queue.length) {
550
+ if (this.#syncing.get(node) !== queue)
551
+ return;
552
+ const event = queue.shift();
553
+ const applied = this.#applied.get(node);
554
+ if (event.seq <= applied)
555
+ continue;
556
+ if (event.seq !== applied + 1) {
557
+ //Missed again: fetched again, with the changes after
558
+ this.#syncing.delete(node);
559
+ void this.sync(node);
560
+ return void this.#syncing.get(node)?.push(event, ...queue.splice(0));
561
+ }
562
+ this.#applied.set(node, event.seq);
563
+ await this.apply(node, event);
564
+ }
565
+ if (this.#syncing.get(node) === queue)
566
+ this.#syncing.delete(node);
567
+ }
568
+ /**
569
+ * Receive a change of another node, in its order: a change missed makes this node fetch its members
570
+ * @param node The id of the node.
571
+ * @param event The change.
572
+ * @protected
573
+ */
574
+ async received(node, event) {
575
+ const queue = this.#syncing.get(node);
576
+ if (queue)
577
+ return void queue.push(event);
578
+ const applied = this.#applied.get(node);
579
+ if (applied !== undefined && event.seq <= applied)
580
+ return;
581
+ if (applied === undefined || event.seq !== applied + 1) {
582
+ void this.sync(node);
583
+ return void this.#syncing.get(node)?.push(event);
584
+ }
585
+ this.#applied.set(node, event.seq);
586
+ await this.apply(node, event);
587
+ }
588
+ /**
589
+ * Apply a change of another node
590
+ * @param node The id of the node.
591
+ * @param event The change.
592
+ * @protected
593
+ */
594
+ async apply(node, event) {
595
+ switch (event.kind) {
596
+ case 'join':
597
+ return await this.joinedRemote(node, event);
598
+ case 'leave':
599
+ return await this.leftRemote(node, event.room, event.peerId, event.reason);
600
+ case 'yield':
601
+ return void this.forgetRemote(event.room, event.peerId, node);
602
+ }
603
+ }
604
+ /**
605
+ * A member joined a room through another node: of two nodes having it, the later join wins (the node of the earlier
606
+ * one gives it up); the members of this node in the room are told
607
+ * @param node The id of the node.
608
+ * @param record The member, its room and when it joined.
609
+ * @protected
610
+ */
611
+ async joinedRemote(node, record) {
612
+ const { room, peerId } = record;
613
+ const joined = { joinedAt: record.joinedAt, node: node };
614
+ const local = this.#rooms.get(room)?.get(peerId);
615
+ if (local && later({ joinedAt: local.joinedAt.get(room) ?? 0, node: this.#clusterObject.nodeId }, joined))
616
+ return;
617
+ const known = this.#remote.get(room)?.get(peerId);
618
+ if (known && known.node !== node && later(known, joined))
619
+ return;
620
+ if (local) {
621
+ this.forgetLocal(room, local);
622
+ this.announceChange({ kind: 'yield', seq: 0, room: room, peerId: peerId });
623
+ }
624
+ if (!this.#remote.has(room))
625
+ this.#remote.set(room, new Map());
626
+ 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 } : {} });
627
+ this.#reservations.get(room)?.delete(peerId);
628
+ const event = { room: room, ...peerOf(peerId, record.metadata, record.session, record.role, record.sfu) };
629
+ for (const other of [...this.#rooms.get(room)?.keys() ?? []])
630
+ await this.push(other, SignalingEvent.peerJoined, event);
631
+ }
632
+ /**
633
+ * A member of another node left a room: the members of this node in the room are told
634
+ * @param node The id of the node.
635
+ * @param room The room.
636
+ * @param peerId The member's id.
637
+ * @param reason `left` when it asked, `disconnected` when its client or its node went away.
638
+ * @protected
639
+ */
640
+ async leftRemote(node, room, peerId, reason) {
641
+ if (!this.forgetRemote(room, peerId, node))
642
+ return;
643
+ const event = { room: room, peerId: peerId, reason: reason };
644
+ for (const other of [...this.#rooms.get(room)?.keys() ?? []])
645
+ await this.push(other, SignalingEvent.peerLeft, event);
646
+ }
647
+ /**
648
+ * A node went down: its members leave their rooms (`disconnected`)
649
+ * @param node The id of the node.
650
+ * @protected
651
+ */
652
+ async dropNode(node) {
653
+ this.#applied.delete(node);
654
+ this.#syncing.delete(node);
655
+ for (const [room, members] of [...this.#remote]) {
656
+ for (const [peerId, remote] of [...members]) {
657
+ if (remote.node === node)
658
+ await this.leftRemote(node, room, peerId, 'disconnected');
659
+ }
660
+ }
661
+ }
662
+ /**
663
+ * Push a signal from another node to a member of this node
664
+ * @param to The receiver's id.
665
+ * @param event The signal.
666
+ * @protected
667
+ */
668
+ async deliver(to, event) {
669
+ if (!this.#rooms.get(event?.room)?.has(to))
670
+ return false;
671
+ return await this.push(to, SignalingEvent.signal, event);
672
+ }
673
+ /**
674
+ * Whether a member may join a room of `maxPeers` members at most: counted by this node without a cluster, by the
675
+ * node the room falls to with one (another one when that node does not answer)
676
+ * @param room The room.
677
+ * @param peerId The member's id.
678
+ * @protected
679
+ */
680
+ async admit(room, peerId) {
681
+ const cluster = this.#clusterObject;
682
+ if (!cluster) {
683
+ const members = this.#rooms.get(room);
684
+ return !members || members.has(peerId) || [...members.values()].filter((member) => !member.role).length < this.maxPeers;
685
+ }
686
+ for (let attempt = 0; attempt < 2; attempt++) {
687
+ const owner = rendezvous(room, cluster.nodes().map((node) => node.id));
688
+ if (owner === cluster.nodeId)
689
+ return this.reserve(room, peerId);
690
+ try {
691
+ return await cluster.request(owner, TOPIC.admit, { room: room, peerId: peerId }, { timeout: CLUSTER_REQUEST_TIMEOUT }) === true;
692
+ }
693
+ catch {
694
+ //Gone or not answering: the room falls to another node once it is taken as gone
695
+ }
696
+ }
697
+ return this.reserve(room, peerId);
698
+ }
699
+ /**
700
+ * 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
701
+ * the places held count
702
+ * @param room The room.
703
+ * @param peerId The member's id.
704
+ * @protected
705
+ */
706
+ reserve(room, peerId) {
707
+ if (typeof room !== 'string' || typeof peerId !== 'string')
708
+ return false;
709
+ const now = Date.now();
710
+ const reservations = this.#reservations.get(room) ?? new Map();
711
+ for (const [id, expiresAt] of reservations)
712
+ if (expiresAt < now)
713
+ reservations.delete(id);
714
+ //The members of the server are not counted
715
+ const present = new Set([
716
+ ...[...this.#rooms.get(room)?.values() ?? []].filter((member) => !member.role).map((member) => member.peerId),
717
+ ...[...this.#remote.get(room)?.entries() ?? []].filter(([, member]) => !member.role).map(([id]) => id)
718
+ ]);
719
+ if (present.has(peerId))
720
+ return true;
721
+ for (const id of present)
722
+ reservations.delete(id);
723
+ if (!reservations.has(peerId) && present.size + reservations.size >= this.maxPeers) {
724
+ if (!reservations.size)
725
+ this.#reservations.delete(room);
726
+ return false;
727
+ }
728
+ reservations.set(peerId, now + RESERVATION_TIMEOUT);
729
+ this.#reservations.set(room, reservations);
730
+ return true;
731
+ }
732
+ /**
733
+ * The media server a member joining a room connects to: the one of this node, else, in a cluster, one of the media
734
+ * servers of the other nodes (the least loaded answering), which chooses as it would for a member of its own node
735
+ * @param room The room.
736
+ * @param peerId The member's id.
737
+ * @returns The id of the member of the media server, none for a room without one.
738
+ * @throws {SignalingLimitException} When no media server takes the member.
739
+ * @protected
740
+ */
741
+ async mediaServerOf(room, peerId) {
742
+ const local = mediaServers.get(this);
743
+ if (local)
744
+ return await local(room, peerId);
745
+ const cluster = this.#clusterObject;
746
+ if (!cluster)
747
+ return undefined;
748
+ const load = (node) => {
749
+ const announced = node.services[MEDIA_SERVER_SERVICE];
750
+ return announced.members + announced.viewers;
751
+ };
752
+ const servers = cluster.nodes()
753
+ .filter((node) => !node.local && !!node.services[MEDIA_SERVER_SERVICE])
754
+ .sort((a, b) => load(a) - load(b));
755
+ if (!servers.length)
756
+ return undefined;
757
+ for (const server of servers.slice(0, 2)) {
758
+ let reply;
759
+ try {
760
+ reply = await cluster.request(server.id, MEDIA_SERVER_ASSIGN_TOPIC, { room: room, peerId: peerId });
761
+ }
762
+ catch {
763
+ //Gone or not answering: the next one
764
+ continue;
765
+ }
766
+ //Full: it chose among all the media servers
767
+ if ('full' in reply)
768
+ break;
769
+ return reply.sfu ?? undefined;
770
+ }
771
+ throw new SignalingLimitException('No media server takes the member {peerId} in the room {room}', { peerId: peerId, room: room });
772
+ }
773
+ /**
774
+ * The role of a member of another node, in any room
775
+ * @param peerId The member's id.
776
+ * @protected
777
+ */
778
+ remoteRoleOf(peerId) {
779
+ for (const members of this.#remote.values()) {
780
+ const role = members.get(peerId)?.role;
781
+ if (role)
782
+ return role;
783
+ }
784
+ return undefined;
785
+ }
786
+ /**
787
+ * The member of a client, created on its first request; its Socket.IO socket, when its request came through one,
788
+ * takes it out of its rooms when it disconnects (unless the client reconnected through another socket first).
789
+ * @param peerId The member's id.
790
+ * @param context The context of its request.
791
+ * @returns The member.
792
+ * @protected
793
+ */
794
+ member(peerId, context) {
795
+ let member = this.#members.get(peerId);
796
+ if (!member) {
797
+ member = { peerId: peerId, rooms: new Map(), joinedAt: new Map(), heartbeats: true, lastSeen: Date.now(), tokens: this.maxMessagesPerSecond * 2, refilledAt: Date.now(), sfus: new Map() };
798
+ this.#members.set(peerId, member);
799
+ }
800
+ member.lastSeen = Date.now();
801
+ const socket = context?.socket;
802
+ const event = disconnectionEventOf(socket);
803
+ if (event) {
804
+ member.heartbeats = false;
805
+ member.socket = socket;
806
+ if (!this.#hooked.has(socket)) {
807
+ this.#hooked.add(socket);
808
+ socket.once(event, () => {
809
+ if (this.#members.get(peerId)?.socket === socket)
810
+ void this.disconnect(peerId).catch(() => undefined);
811
+ });
812
+ }
813
+ }
814
+ return member;
815
+ }
816
+ /**
817
+ * Take a token of the member's rate (refilled at maxMessagesPerSecond, up to twice as many).
818
+ * @param member The member.
819
+ * @throws {SignalingLimitException} When no token is left.
820
+ * @protected
821
+ */
822
+ consume(member) {
823
+ const now = Date.now();
824
+ member.tokens = Math.min(this.maxMessagesPerSecond * 2, member.tokens + (now - member.refilledAt) / 1000 * this.maxMessagesPerSecond);
825
+ member.refilledAt = now;
826
+ if (member.tokens < 1) {
827
+ throw new SignalingLimitException('The member {peerId} sends more than {rate} signals per second', { peerId: member.peerId, rate: this.maxMessagesPerSecond });
828
+ }
829
+ member.tokens--;
830
+ }
831
+ /**
832
+ * Push an event to a member; a member it cannot reach any more leaves its rooms.
833
+ * @param peerId The member's id.
834
+ * @param event The event.
835
+ * @param payload Its payload.
836
+ * @returns Whether the event reached the member.
837
+ * @protected
838
+ */
839
+ async push(peerId, event, payload) {
840
+ const receive = this.#members.get(peerId)?.receive;
841
+ if (receive) {
842
+ try {
843
+ receive(event, payload);
844
+ }
845
+ catch {
846
+ //The member of the application handles its own errors
847
+ }
848
+ return true;
849
+ }
850
+ this.#entrypointObject ??= await this.getObject(this.entrypoint);
851
+ const delivered = this.#entrypointObject.notify(peerId, event, payload);
852
+ if (!delivered)
853
+ setImmediate(() => void this.disconnect(peerId).catch(() => undefined));
854
+ return delivered;
855
+ }
856
+ /**
857
+ * Take out the members sending heartbeats that were not seen for three intervals.
858
+ * @protected
859
+ */
860
+ sweep() {
861
+ const limit = Date.now() - this.heartbeatInterval * 3;
862
+ for (const member of [...this.#members.values()]) {
863
+ if (member.heartbeats && member.lastSeen < limit)
864
+ void this.disconnect(member.peerId).catch(() => undefined);
865
+ }
866
+ }
867
+ };
868
+ __decorate([
869
+ Configurable(DTO.String().optional().default('entrypoint')),
870
+ __metadata("design:type", String)
871
+ ], Signaling.prototype, "entrypoint", void 0);
872
+ __decorate([
873
+ Configurable(DTO.String().optional()),
874
+ __metadata("design:type", String)
875
+ ], Signaling.prototype, "cluster", void 0);
876
+ __decorate([
877
+ Configurable(DTO.String().optional()),
878
+ __metadata("design:type", String)
879
+ ], Signaling.prototype, "turn", void 0);
880
+ __decorate([
881
+ Configurable(DTO.String().min(1).optional()),
882
+ __metadata("design:type", String)
883
+ ], Signaling.prototype, "turnSecret", void 0);
884
+ __decorate([
885
+ Configurable(DTO.Function().optional()),
886
+ __metadata("design:type", Function)
887
+ ], Signaling.prototype, "selectTURN", void 0);
888
+ __decorate([
889
+ Configurable(DTO.Array().items(DTO.Object({
890
+ urls: DTO.Alternatives(DTO.String(), DTO.Array().items(DTO.String())).required(),
891
+ username: DTO.String().optional(),
892
+ credential: DTO.String().optional()
893
+ })).optional().default([])),
894
+ __metadata("design:type", Array)
895
+ ], Signaling.prototype, "iceServers", void 0);
896
+ __decorate([
897
+ Configurable(DTO.Function().optional()),
898
+ __metadata("design:type", Function)
899
+ ], Signaling.prototype, "authorize", void 0);
900
+ __decorate([
901
+ Configurable(DTO.Number().integer().min(0).optional().default(0)),
902
+ __metadata("design:type", Number)
903
+ ], Signaling.prototype, "maxPeers", void 0);
904
+ __decorate([
905
+ Configurable(DTO.Number().integer().positive().optional().default(65536)),
906
+ __metadata("design:type", Number)
907
+ ], Signaling.prototype, "maxMessageSize", void 0);
908
+ __decorate([
909
+ Configurable(DTO.Number().positive().optional().default(50)),
910
+ __metadata("design:type", Number)
911
+ ], Signaling.prototype, "maxMessagesPerSecond", void 0);
912
+ __decorate([
913
+ Configurable(DTO.Number().integer().positive().optional().default(10000)),
914
+ __metadata("design:type", Number)
915
+ ], Signaling.prototype, "heartbeatInterval", void 0);
916
+ Signaling = __decorate([
917
+ Singleton()
918
+ ], Signaling);
919
+ export { Signaling };
920
+ /**
921
+ * Build the options of a {@link Signaling} component, for the `components` of an application (named `signaling`, the
922
+ * name {@link SignalingController} uses).
923
+ * @param options The TURN server, the other ICE servers, who may join which room, the limits (all optional).
924
+ * @returns The component options.
925
+ * @example
926
+ * ```typescript
927
+ * import {Application} from 'lakutata'
928
+ * import {buildSignalingOptions} from '@lakutata/webrtc'
929
+ *
930
+ * Application.run(() => ({
931
+ * id: 'meet.app',
932
+ * name: 'Meet',
933
+ * components: {
934
+ * signaling: buildSignalingOptions({iceServers: [{urls: 'stun:stun.example.com:3478'}], maxPeers: 8})
935
+ * }
936
+ * }))
937
+ * ```
938
+ */
939
+ export function buildSignalingOptions(options = {}) {
940
+ return { class: Signaling, ...options };
941
+ }