@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,1591 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RTCTrackEvent = exports.defaultPeerConfig = exports.findCodecByMimeType = exports.RTCPeerConnection = void 0;
4
+ const node_crypto_1 = require("node:crypto");
5
+ const index_js_1 = require("../sctp/index.js");
6
+ const errors_js_1 = require("./errors.js");
7
+ const helper_js_1 = require("./helper.js");
8
+ const common_js_1 = require("./imports/common.js");
9
+ const index_js_2 = require("./media/index.js");
10
+ const stats_js_1 = require("./media/stats.js");
11
+ const sctpManager_js_1 = require("./sctpManager.js");
12
+ const sdp_js_1 = require("./sdp.js");
13
+ const sdpManager_js_1 = require("./sdpManager.js");
14
+ const secureTransportManager_js_1 = require("./secureTransportManager.js");
15
+ const sctp_js_1 = require("./transport/sctp.js");
16
+ const utils_js_1 = require("./utils.js");
17
+ const log = (0, common_js_1.debug)('webrtc/peer/peerConnection');
18
+ /**
19
+ * W3C compatibility notes kept near the public RTCPeerConnection surface so the
20
+ * reviewable diff does not depend on external PR text.
21
+ *
22
+ * - `current/pending*Description`, `canTrickleIceCandidates`, `sctp`,
23
+ * `addIceCandidate(null)`, and `RTCConfiguration` round-trip behavior are
24
+ * implemented here and covered by `tests/wpt/peerConnectionApiCompatibility.test.ts`.
25
+ * - `addIceCandidate()` also validates `sdpMid` / `sdpMLineIndex` /
26
+ * `usernameFragment` against the applied remote description and appends
27
+ * candidates or end-of-candidates markers to the corresponding m-section.
28
+ * The public API keeps werift's historical pre-SRD buffering behavior, while
29
+ * the WPT runner wraps the class to exercise strict spec rejection.
30
+ * - `bundlePolicy: "balanced"` is accepted for input compatibility but is
31
+ * normalized to werift's `"max-compat"` behavior, so `getConfiguration()`
32
+ * returns the normalized value.
33
+ * - `setLocalDescription()` keeps the historical `SessionDescription` return
34
+ * value for non-rollback calls, while `{ type: "rollback" }` resolves `void`
35
+ * to match the actual behavior without pretending to return a description.
36
+ * - API reference markdown is regenerated with `cd packages/webrtc && npm run doc`.
37
+ * The generated output lives under `packages/webrtc/doc/`; compatibility
38
+ * notes remain here and in the package README so review context is visible
39
+ * even when generated docs are not committed in the same change.
40
+ */
41
+ class RTCPeerConnection extends helper_js_1.EventTarget {
42
+ get ondatachannel() {
43
+ return this.eventHandlers.ondatachannel ?? null;
44
+ }
45
+ set ondatachannel(value) {
46
+ this.eventHandlers.ondatachannel = value ?? undefined;
47
+ }
48
+ get onicecandidate() {
49
+ return this.eventHandlers.onicecandidate ?? null;
50
+ }
51
+ set onicecandidate(value) {
52
+ this.eventHandlers.onicecandidate = value ?? undefined;
53
+ }
54
+ get onicecandidateerror() {
55
+ return this.eventHandlers.onicecandidateerror ?? null;
56
+ }
57
+ set onicecandidateerror(value) {
58
+ this.eventHandlers.onicecandidateerror = value ?? undefined;
59
+ }
60
+ get onicegatheringstatechange() {
61
+ return this.eventHandlers.onicegatheringstatechange ?? null;
62
+ }
63
+ set onicegatheringstatechange(value) {
64
+ this.eventHandlers.onicegatheringstatechange = value ?? undefined;
65
+ }
66
+ get onnegotiationneeded() {
67
+ return this.eventHandlers.onnegotiationneeded ?? null;
68
+ }
69
+ set onnegotiationneeded(value) {
70
+ this.eventHandlers.onnegotiationneeded = value ?? undefined;
71
+ }
72
+ get onsignalingstatechange() {
73
+ return this.eventHandlers.onsignalingstatechange ?? null;
74
+ }
75
+ set onsignalingstatechange(value) {
76
+ this.eventHandlers.onsignalingstatechange = value ?? undefined;
77
+ }
78
+ get ontrack() {
79
+ return this.eventHandlers.ontrack ?? null;
80
+ }
81
+ set ontrack(value) {
82
+ this.eventHandlers.ontrack = value ?? undefined;
83
+ }
84
+ get onconnectionstatechange() {
85
+ return this.eventHandlers.onconnectionstatechange ?? null;
86
+ }
87
+ set onconnectionstatechange(value) {
88
+ this.eventHandlers.onconnectionstatechange = value ?? undefined;
89
+ }
90
+ get oniceconnectionstatechange() {
91
+ return this.eventHandlers.oniceconnectionstatechange ?? null;
92
+ }
93
+ set oniceconnectionstatechange(value) {
94
+ this.eventHandlers.oniceconnectionstatechange = value ?? undefined;
95
+ }
96
+ constructor(config = {}) {
97
+ super();
98
+ this.id = (0, node_crypto_1.randomUUID)().toString();
99
+ this.cname = (0, node_crypto_1.randomUUID)().toString();
100
+ this.config = generateDefaultPeerConfig();
101
+ this.signalingState = 'stable';
102
+ this.negotiationneeded = false;
103
+ /**同じ tick の複数の変更で negotiationneeded を重複発火しないための予約フラグ */
104
+ this.negotiationneededScheduled = false;
105
+ /**交渉が必要な変更の通し番号 */
106
+ this.negotiationChangeSeq = 0;
107
+ /**answer まで確定した local offer が反映している変更の通し番号 */
108
+ this.negotiatedChangeSeq = 0;
109
+ this.lastCreatedOfferChangeSeq = 0;
110
+ this.needRestart = false;
111
+ this.router = new index_js_2.RtpRouter();
112
+ this.isClosed = false;
113
+ this.shouldNegotiationneeded = false;
114
+ this.pendingRemoteCandidates = [];
115
+ this.iceGatheringStateChange = new common_js_1.Event();
116
+ this.iceConnectionStateChange = new common_js_1.Event();
117
+ this.signalingStateChange = new common_js_1.Event();
118
+ this.connectionStateChange = new common_js_1.Event();
119
+ this.onDataChannel = new common_js_1.Event();
120
+ this.onRemoteTransceiverAdded = new common_js_1.Event();
121
+ this.onTransceiverAdded = new common_js_1.Event();
122
+ this.onIceCandidate = new common_js_1.Event();
123
+ this.onNegotiationneeded = new common_js_1.Event();
124
+ this.onTrack = new common_js_1.Event();
125
+ this.eventHandlers = {};
126
+ /**交渉が必要な変更を記録し、negotiationneeded を予約する */
127
+ this.needNegotiation = () => {
128
+ this.negotiationChangeSeq++;
129
+ this.scheduleNegotiationneeded();
130
+ };
131
+ this.setConfiguration(config);
132
+ this.sdpManager = new sdpManager_js_1.SDPManager({
133
+ cname: this.cname,
134
+ bundlePolicy: this.config.bundlePolicy,
135
+ mLineReuse: this.config.mLineReuse
136
+ });
137
+ this.transceiverManager = new index_js_2.TransceiverManager(this.cname, this.config, this.router);
138
+ this.transceiverManager.onTransceiverAdded.pipe(this.onTransceiverAdded);
139
+ this.transceiverManager.onRemoteTransceiverAdded.pipe(this.onRemoteTransceiverAdded);
140
+ this.transceiverManager.onTrack.subscribe(({ track, streams, transceiver }) => {
141
+ const event = new RTCTrackEvent({
142
+ track,
143
+ streams,
144
+ transceiver,
145
+ receiver: transceiver.receiver
146
+ });
147
+ this.onTrack.execute(track);
148
+ this.emit('track', event);
149
+ if (this.ontrack) {
150
+ (0, common_js_1.runDetached)(() => this.ontrack(event), (error) => log('event handler failed', error));
151
+ }
152
+ });
153
+ this.transceiverManager.onNegotiationNeeded.subscribe(() => this.needNegotiation());
154
+ this.sctpManager = new sctpManager_js_1.SctpTransportManager();
155
+ this.sctpManager.onDataChannel.subscribe((channel) => {
156
+ this.onDataChannel.execute(channel);
157
+ const event = { type: 'datachannel', channel };
158
+ if (this.ondatachannel)
159
+ (0, common_js_1.runDetached)(() => this.ondatachannel(event), (error) => log('event handler failed', error));
160
+ this.emit('datachannel', event);
161
+ });
162
+ this.secureManager = new secureTransportManager_js_1.SecureTransportManager({
163
+ config: this.config,
164
+ sctpManager: this.sctpManager,
165
+ transceiverManager: this.transceiverManager
166
+ });
167
+ this.secureManager.iceGatheringStateChange.subscribe((state) => {
168
+ this.iceGatheringStateChange.execute(state);
169
+ if (this.onicegatheringstatechange) {
170
+ (0, common_js_1.runDetached)(() => this.onicegatheringstatechange(new globalThis.Event('icegatheringstatechange')), (error) => log('event handler failed', error));
171
+ }
172
+ this.emit('icegatheringstatechange');
173
+ });
174
+ this.secureManager.iceConnectionStateChange.subscribe((state) => {
175
+ if (state === 'closed') {
176
+ this.close().catch((error) => log('close failed', error));
177
+ }
178
+ this.iceConnectionStateChange.execute(state);
179
+ if (this.oniceconnectionstatechange)
180
+ (0, common_js_1.runDetached)(() => this.oniceconnectionstatechange(), (error) => log('event handler failed', error));
181
+ this.emit('iceconnectionstatechange');
182
+ });
183
+ this.secureManager.connectionStateChange.subscribe((state) => {
184
+ this.connectionStateChange.execute(state);
185
+ if (this.onconnectionstatechange)
186
+ (0, common_js_1.runDetached)(() => this.onconnectionstatechange(), (error) => log('event handler failed', error));
187
+ this.emit('connectionstatechange');
188
+ });
189
+ this.secureManager.onIceCandidate.subscribe((candidate) => {
190
+ const iceCandidate = candidate ? candidate.toJSON() : undefined;
191
+ this.onIceCandidate.execute(iceCandidate);
192
+ const event = {
193
+ type: 'icecandidate',
194
+ candidate: iceCandidate
195
+ };
196
+ if (this.onicecandidate)
197
+ (0, common_js_1.runDetached)(() => this.onicecandidate(event), (error) => log('event handler failed', error));
198
+ this.emit('icecandidate', event);
199
+ });
200
+ }
201
+ get connectionState() {
202
+ return this.secureManager.connectionState;
203
+ }
204
+ get iceConnectionState() {
205
+ return this.secureManager.iceConnectionState;
206
+ }
207
+ get iceGathererState() {
208
+ return this.secureManager.iceGatheringState;
209
+ }
210
+ get iceGatheringState() {
211
+ return this.secureManager.iceGatheringState;
212
+ }
213
+ get dtlsTransports() {
214
+ return this.secureManager.dtlsTransports;
215
+ }
216
+ get sctpTransport() {
217
+ return this.sctpManager.sctpTransport;
218
+ }
219
+ get sctp() {
220
+ return this.sctpTransport ?? null;
221
+ }
222
+ get sctpRemotePort() {
223
+ return this.sctpManager.sctpRemotePort;
224
+ }
225
+ get iceTransports() {
226
+ return this.secureManager.iceTransports;
227
+ }
228
+ get extIdUriMap() {
229
+ return this.router.extIdUriMap;
230
+ }
231
+ get iceGeneration() {
232
+ return this.iceTransports[0].connection.generation;
233
+ }
234
+ get localDescription() {
235
+ return this.sdpManager.localDescription ?? null;
236
+ }
237
+ get currentLocalDescription() {
238
+ return this.sdpManager.currentLocalDescription?.toJSON() ?? null;
239
+ }
240
+ get pendingLocalDescription() {
241
+ return this.sdpManager.pendingLocalDescription?.toJSON() ?? null;
242
+ }
243
+ get remoteDescription() {
244
+ return this.sdpManager.remoteDescription ?? null;
245
+ }
246
+ get currentRemoteDescription() {
247
+ return this.sdpManager.currentRemoteDescription?.toJSON() ?? null;
248
+ }
249
+ get pendingRemoteDescription() {
250
+ return this.sdpManager.pendingRemoteDescription?.toJSON() ?? null;
251
+ }
252
+ get canTrickleIceCandidates() {
253
+ const remoteDescription = this.sdpManager._remoteDescription;
254
+ if (!remoteDescription) {
255
+ return null;
256
+ }
257
+ const iceOptions = [
258
+ remoteDescription.iceOptions,
259
+ ...remoteDescription.media.map((media) => media.iceOptions)
260
+ ]
261
+ .filter((value) => !!value)
262
+ .join(' ');
263
+ return iceOptions.split(/\s+/).includes('trickle');
264
+ }
265
+ get remoteIsBundled() {
266
+ return this.sdpManager.remoteIsBundled;
267
+ }
268
+ /**@private */
269
+ get _localDescription() {
270
+ return this.sdpManager._localDescription;
271
+ }
272
+ /**@private */
273
+ get _remoteDescription() {
274
+ return this.sdpManager._remoteDescription;
275
+ }
276
+ getTransceivers() {
277
+ return this.transceiverManager.getTransceivers();
278
+ }
279
+ getSenders() {
280
+ return this.transceiverManager.getSenders();
281
+ }
282
+ getReceivers() {
283
+ return this.transceiverManager.getReceivers();
284
+ }
285
+ setConfiguration(config) {
286
+ const normalizedConfig = normalizePeerConfiguration(config);
287
+ const isReconfiguration = !!this.sdpManager;
288
+ if (normalizedConfig.rtcpMuxPolicy &&
289
+ normalizedConfig.rtcpMuxPolicy !== 'require') {
290
+ throw new Error('rtcpMuxPolicy must be require');
291
+ }
292
+ if (normalizedConfig.iceCandidatePoolSize !== undefined &&
293
+ (!Number.isInteger(normalizedConfig.iceCandidatePoolSize) ||
294
+ normalizedConfig.iceCandidatePoolSize < 0)) {
295
+ throw new Error('iceCandidatePoolSize must be a non-negative integer');
296
+ }
297
+ if (isReconfiguration &&
298
+ normalizedConfig.bundlePolicy !== undefined &&
299
+ normalizedConfig.bundlePolicy !== this.config.bundlePolicy) {
300
+ throw new Error('bundlePolicy cannot be changed');
301
+ }
302
+ if (normalizedConfig.mLineReuse !== undefined &&
303
+ !MLineReuseModes.includes(normalizedConfig.mLineReuse)) {
304
+ throw (0, errors_js_1.createWebRtcTypeError)(`mLineReuse must be one of ${MLineReuseModes.join(', ')}`);
305
+ }
306
+ if (isReconfiguration &&
307
+ normalizedConfig.mLineReuse !== undefined &&
308
+ normalizedConfig.mLineReuse !== this.config.mLineReuse) {
309
+ throw (0, errors_js_1.createWebRtcDomException)('InvalidModificationError', 'mLineReuse cannot be changed');
310
+ }
311
+ if (isReconfiguration &&
312
+ normalizedConfig.rtcpMuxPolicy !== undefined &&
313
+ normalizedConfig.rtcpMuxPolicy !== this.config.rtcpMuxPolicy) {
314
+ throw new Error('rtcpMuxPolicy cannot be changed');
315
+ }
316
+ if (isReconfiguration &&
317
+ normalizedConfig.certificates !== undefined &&
318
+ !hasSameCertificates(normalizedConfig.certificates, this.config.certificates)) {
319
+ throw new Error('certificates cannot be changed');
320
+ }
321
+ if (isReconfiguration &&
322
+ normalizedConfig.iceCandidatePoolSize !== undefined &&
323
+ this.localDescription &&
324
+ normalizedConfig.iceCandidatePoolSize !== this.config.iceCandidatePoolSize) {
325
+ throw new Error('iceCandidatePoolSize cannot be changed after setLocalDescription');
326
+ }
327
+ if ((normalizedConfig.iceCandidatePoolSize ?? 0) > 0) {
328
+ throw new Error('iceCandidatePoolSize > 0 is not supported');
329
+ }
330
+ if (normalizedConfig.sctp !== undefined) {
331
+ const requestedSctpMtu = normalizedConfig.sctp.mtu ?? index_js_1.DEFAULT_SCTP_MTU;
332
+ (0, index_js_1.validateSctpMtu)(requestedSctpMtu);
333
+ if (this.sctpManager?.sctpTransport &&
334
+ requestedSctpMtu !== this.config.sctp.mtu) {
335
+ throw new Error('sctp.mtu cannot be changed after SCTP transport creation');
336
+ }
337
+ }
338
+ (0, utils_js_1.deepMerge)(this.config, normalizedConfig);
339
+ this.config.sctp = {
340
+ mtu: this.config.sctp?.mtu ?? index_js_1.DEFAULT_SCTP_MTU
341
+ };
342
+ if (this.config.icePortRange) {
343
+ const [min, max] = this.config.icePortRange;
344
+ if (min === max)
345
+ throw new Error('should not be same value');
346
+ if (min >= max)
347
+ throw new Error('The min must be less than max');
348
+ }
349
+ if (!Number.isInteger(this.config.maxMessageSize) ||
350
+ this.config.maxMessageSize < 0) {
351
+ throw new Error('maxMessageSize must be a non-negative integer');
352
+ }
353
+ if (this.sctpManager?.sctpTransport) {
354
+ this.sctpManager.sctpTransport.maxMessageSize =
355
+ this.config.maxMessageSize;
356
+ }
357
+ assignDynamicPayloadTypes(this.config);
358
+ //One id per extension, the same in all the media (of a bundle)
359
+ const extensionIds = new Map();
360
+ const extensions = [
361
+ ...(this.config.headerExtensions.audio || []),
362
+ ...(this.config.headerExtensions.video || [])
363
+ ];
364
+ extensions.forEach((v) => {
365
+ if (!extensionIds.has(v.uri))
366
+ extensionIds.set(v.uri, extensionIds.size + 1);
367
+ v.id = extensionIds.get(v.uri);
368
+ });
369
+ // Propagate ICE server changes only to transports still in gathering
370
+ // state "new". JSEP (RFC 8829 §4.1.18): STUN/TURN changes affect the next
371
+ // gathering phase; once gathering has started or finished, nothing is
372
+ // applied to the live Connection (WHIP: createOffer → setConfiguration →
373
+ // setLocalDescription). Per-transport state is used so a gatherer that
374
+ // was reset to "new" (e.g. after ICE restart) is not blocked by a stale
375
+ // manager aggregate of "complete".
376
+ if (isReconfiguration &&
377
+ this.secureManager &&
378
+ (normalizedConfig.iceServers !== undefined ||
379
+ normalizedConfig.turnUdpFamily !== undefined)) {
380
+ this.secureManager.updateIceServers();
381
+ }
382
+ }
383
+ getConfiguration() {
384
+ return clonePeerConfiguration(this.config);
385
+ }
386
+ /**
387
+ * The header extensions of a media not negotiated yet: the ones configured, with the ids the connection negotiated
388
+ * for them in its other media (an extension has one id in all the media of a bundle: a browser refuses another one),
389
+ * else their configured ids when not taken by another extension, else free ones
390
+ */
391
+ headerExtensionsFor(kind) {
392
+ const negotiated = new Map();
393
+ for (const transceiver of this.transceiverManager.getTransceivers()) {
394
+ for (const extension of transceiver.headerExtensions)
395
+ negotiated.set(extension.uri, extension.id);
396
+ }
397
+ const taken = new Set(negotiated.values());
398
+ return (this.config.headerExtensions[kind] ?? []).flatMap((extension) => {
399
+ let id = negotiated.get(extension.uri);
400
+ if (id === undefined) {
401
+ id = taken.has(extension.id)
402
+ ? Array.from({ length: 14 }, (_, index) => index + 1).find((free) => !taken.has(free))
403
+ : extension.id;
404
+ if (id === undefined)
405
+ return [];
406
+ taken.add(id);
407
+ negotiated.set(extension.uri, id);
408
+ }
409
+ return [new index_js_2.RTCRtpHeaderExtensionParameters({ uri: extension.uri, id })];
410
+ });
411
+ }
412
+ async createOffer({ iceRestart } = {}) {
413
+ if (iceRestart || this.needRestart) {
414
+ this.needRestart = false;
415
+ this.secureManager.restartIce();
416
+ }
417
+ await this.secureManager.ensureCerts();
418
+ for (const transceiver of this.transceiverManager.getTransceivers()) {
419
+ if (transceiver.codecs.length === 0 ||
420
+ transceiver.codecPreferencesNeedResolution) {
421
+ this.transceiverManager.assignTransceiverCodecs(transceiver);
422
+ }
423
+ if (transceiver.headerExtensions.length === 0) {
424
+ transceiver.headerExtensions = this.headerExtensionsFor(transceiver.kind);
425
+ }
426
+ }
427
+ const description = this.sdpManager.buildOfferSdp(this.transceiverManager.getTransceivers(), this.sctpTransport);
428
+ const createdOffer = description.toJSON();
429
+ this.lastCreatedOffer = createdOffer;
430
+ this.lastCreatedOfferChangeSeq = this.negotiationChangeSeq;
431
+ return createdOffer;
432
+ }
433
+ createSctpTransport() {
434
+ const sctp = this.sctpManager.createSctpTransport(this.config.maxMessageSize, this.config.sctp);
435
+ const dtlsTransport = this.findOrCreateTransport();
436
+ sctp.setDtlsTransport(dtlsTransport);
437
+ return sctp;
438
+ }
439
+ createDataChannel(label, options = {}) {
440
+ if (!this.sctpTransport) {
441
+ this.createSctpTransport();
442
+ this.needNegotiation();
443
+ }
444
+ const channel = this.sctpManager.createDataChannel(label, options);
445
+ if (!channel.sctp.dtlsTransport) {
446
+ const dtlsTransport = this.findOrCreateTransport();
447
+ channel.sctp.setDtlsTransport(dtlsTransport);
448
+ }
449
+ return channel;
450
+ }
451
+ removeTrack(sender) {
452
+ if (this.isClosed) {
453
+ throw (0, errors_js_1.createWebRtcDomException)('InvalidStateError', 'peer closed');
454
+ }
455
+ if (this.transceiverManager.removeTrack(sender)) {
456
+ this.needNegotiation();
457
+ }
458
+ }
459
+ /**未交渉の変更が残っていれば negotiationneeded を予約する (stable 復帰時の再判定にも使う) */
460
+ scheduleNegotiationneeded() {
461
+ this.invalidateLastCreatedDescriptions();
462
+ this.shouldNegotiationneeded = true;
463
+ if (this.negotiationneeded ||
464
+ this.negotiationneededScheduled ||
465
+ this.signalingState !== 'stable') {
466
+ return;
467
+ }
468
+ this.shouldNegotiationneeded = false;
469
+ this.negotiationneededScheduled = true;
470
+ setImmediate(() => {
471
+ this.negotiationneededScheduled = false;
472
+ if (this.negotiatedChangeSeq >= this.negotiationChangeSeq) {
473
+ // 発火前に適用された local offer が変更をすべて含んでいる
474
+ return;
475
+ }
476
+ if (this.signalingState !== 'stable') {
477
+ // stable に戻った時点で改めて判定する
478
+ this.shouldNegotiationneeded = true;
479
+ return;
480
+ }
481
+ this.negotiationneeded = true;
482
+ this.onNegotiationneeded.execute();
483
+ if (this.onnegotiationneeded) {
484
+ (0, common_js_1.runDetached)(() => this.onnegotiationneeded(new globalThis.Event('negotiationneeded')), (error) => log('event handler failed', error));
485
+ }
486
+ this.emit('negotiationneeded');
487
+ });
488
+ }
489
+ invalidateLastCreatedDescriptions() {
490
+ this.lastCreatedAnswer = undefined;
491
+ this.lastCreatedOffer = undefined;
492
+ }
493
+ async waitForPendingDescriptionTask() {
494
+ this.assertNotClosed();
495
+ await Promise.resolve();
496
+ if (this.isClosed) {
497
+ await new Promise(() => undefined);
498
+ }
499
+ }
500
+ findOrCreateTransport() {
501
+ const existingDtlsTransport = this.dtlsTransports.find((transport) => transport.state !== 'closed');
502
+ // Gather ICE candidates for only one track. If the remote endpoint is not bundle-aware, negotiate only one media track.
503
+ // https://w3c.github.io/webrtc-pc/#rtcbundlepolicy-enum
504
+ if (this.sdpManager.bundlePolicy === 'max-bundle' ||
505
+ (this.sdpManager.bundlePolicy !== 'disable' && this.remoteIsBundled)) {
506
+ if (existingDtlsTransport) {
507
+ return existingDtlsTransport;
508
+ }
509
+ }
510
+ return this.createDtlsTransport();
511
+ }
512
+ /**
513
+ * @param inheritCredentials false の場合は BUNDLE 外の独立 transport として
514
+ * 既存 transport と異なる ICE credentials を使う
515
+ */
516
+ createDtlsTransport({ inheritCredentials = true } = {}) {
517
+ const dtlsTransport = this.secureManager.createTransport({
518
+ inheritCredentials
519
+ });
520
+ dtlsTransport.onRtp.subscribe((rtp) => {
521
+ this.router.routeRtp(rtp);
522
+ });
523
+ dtlsTransport.onRtcp.subscribe((rtcp) => {
524
+ this.router.routeRtcp(rtcp);
525
+ });
526
+ const iceTransport = dtlsTransport.iceTransport;
527
+ iceTransport.onNegotiationNeeded.subscribe(() => {
528
+ this.needNegotiation();
529
+ });
530
+ iceTransport.onIceCandidate.subscribe((candidate) => {
531
+ if (!this.localDescription) {
532
+ log('localDescription not found when ice candidate was gathered');
533
+ return;
534
+ }
535
+ if (!candidate) {
536
+ this.sdpManager.setLocal(this._localDescription, this.transceiverManager.getTransceivers(), this.sctpTransport);
537
+ this.onIceCandidate.execute(undefined);
538
+ if (this.onicecandidate) {
539
+ (0, common_js_1.runDetached)(() => this.onicecandidate({ candidate: undefined }), (error) => log('event handler failed', error));
540
+ }
541
+ this.emit('icecandidate', { candidate: undefined });
542
+ return;
543
+ }
544
+ if (!this._localDescription) {
545
+ log('localDescription not found when ice candidate was gathered');
546
+ return;
547
+ }
548
+ const owner = this.resolveLocalCandidateOwner(iceTransport);
549
+ if (!owner) {
550
+ // 停止 / 拒否した m-line だけが使う transport の候補は通知しない
551
+ log('no accepted m-line owns the ice transport', iceTransport.id);
552
+ return;
553
+ }
554
+ this.secureManager.handleNewIceCandidate({
555
+ candidate,
556
+ sdpMid: owner.mid,
557
+ sdpMLineIndex: owner.index
558
+ });
559
+ });
560
+ return dtlsTransport;
561
+ }
562
+ /**
563
+ * local candidate の sdpMid / sdpMLineIndex を、その ICE transport を実際に
564
+ * 所有する受け入れ済み m-line (BUNDLE なら tag) に合わせる。
565
+ */
566
+ resolveLocalCandidateOwner(iceTransport) {
567
+ const description = this._localDescription;
568
+ if (!description) {
569
+ return;
570
+ }
571
+ const owners = description.media
572
+ .map((media, index) => ({ media, index }))
573
+ .filter(({ media }) => {
574
+ if (media.port === 0) {
575
+ return false;
576
+ }
577
+ const mid = media.rtp.muxId;
578
+ if (media.kind === 'application') {
579
+ return (!!this.sctpTransport &&
580
+ this.sctpTransport.mid === mid &&
581
+ this.sctpTransport.dtlsTransport?.iceTransport.id ===
582
+ iceTransport.id);
583
+ }
584
+ const transceiver = this.transceiverManager
585
+ .getTransceivers()
586
+ .find((t) => t.mid != undefined && t.mid === mid);
587
+ return (!!transceiver &&
588
+ !transceiver.stopped &&
589
+ transceiver.dtlsTransport?.iceTransport.id === iceTransport.id);
590
+ });
591
+ const tags = description.group
592
+ .filter((group) => group.semantic === 'BUNDLE')
593
+ .map((group) => group.items[0]);
594
+ const owner = owners.find(({ media }) => tags.includes(media.rtp.muxId)) ?? owners[0];
595
+ if (!owner) {
596
+ return;
597
+ }
598
+ return { mid: owner.media.rtp.muxId, index: owner.index };
599
+ }
600
+ /**
601
+ * answer 確定後の stopping transceiver を整理する。
602
+ * @returns port 0 を自分の offer で交渉すべき transceiver が残っているか
603
+ */
604
+ settleStoppingTransceivers() {
605
+ const negotiatedMids = new Set((this.sdpManager.currentLocalDescription?.media ?? [])
606
+ .filter((media) => media.port !== 0 && media.rtp.muxId)
607
+ .map((media) => media.rtp.muxId));
608
+ const pending = this.transceiverManager.settleStoppingTransceivers(negotiatedMids);
609
+ this.closeIdleTransports();
610
+ return pending;
611
+ }
612
+ /**停止した transceiver の transport のうち、live な利用者がいないものを閉じる */
613
+ closeIdleTransports(candidates = this.transceiverManager
614
+ .getTransceivers()
615
+ .filter((t) => t.stopped)
616
+ .map((t) => t.dtlsTransport)) {
617
+ const live = new Set(this.dtlsTransports.map((t) => t.id));
618
+ for (const transport of new Set(candidates)) {
619
+ if (!transport ||
620
+ transport.state === 'closed' ||
621
+ live.has(transport.id)) {
622
+ continue;
623
+ }
624
+ transport.stop().catch((error) => {
625
+ log('failed to close idle transport', error);
626
+ });
627
+ }
628
+ }
629
+ async setLocalDescription(sessionDescription) {
630
+ // https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/setLocalDescription#type
631
+ const implicitOfferState = [
632
+ 'stable',
633
+ 'have-local-offer',
634
+ 'have-remote-pranswer'
635
+ ];
636
+ await this.waitForPendingDescriptionTask();
637
+ if (sessionDescription?.type === 'rollback') {
638
+ this.sdpManager.rollbackLocalDescription(this.signalingState);
639
+ this.rollbackLocalOffer();
640
+ for (const transceiver of this.transceiverManager.getTransceivers()) {
641
+ transceiver.pendingLocalOfferCodecs = undefined;
642
+ }
643
+ this.pendingOfferChangeSeq = undefined;
644
+ this.setSignalingState('stable');
645
+ if (this.shouldNegotiationneeded) {
646
+ this.scheduleNegotiationneeded();
647
+ }
648
+ this.invalidateLastCreatedDescriptions();
649
+ return;
650
+ }
651
+ const needsGeneratedDescription = !sessionDescription?.type ||
652
+ !sessionDescription.sdp ||
653
+ sessionDescription.sdp.length === 0;
654
+ const generatedDescription = needsGeneratedDescription
655
+ ? sessionDescription?.type === 'offer'
656
+ ? (this.lastCreatedOffer ?? (await this.createOffer()))
657
+ : sessionDescription?.type === 'answer' ||
658
+ sessionDescription?.type === 'pranswer'
659
+ ? (this.lastCreatedAnswer ?? (await this.createAnswer()))
660
+ : implicitOfferState.includes(this.signalingState)
661
+ ? (this.lastCreatedOffer ?? (await this.createOffer()))
662
+ : (this.lastCreatedAnswer ?? (await this.createAnswer()))
663
+ : undefined;
664
+ sessionDescription = {
665
+ type: sessionDescription?.type ?? generatedDescription.type,
666
+ sdp: sessionDescription?.sdp && sessionDescription.sdp.length > 0
667
+ ? sessionDescription.sdp
668
+ : generatedDescription.sdp
669
+ };
670
+ if (sessionDescription.type === 'offer' &&
671
+ this.lastCreatedOffer &&
672
+ sessionDescription.sdp !== this.lastCreatedOffer.sdp) {
673
+ throw (0, errors_js_1.createWebRtcDomException)('InvalidModificationError', 'setLocalDescription must use the latest created offer');
674
+ }
675
+ // # parse and validate description
676
+ const descriptionType = sessionDescription.type;
677
+ const descriptionSdp = sessionDescription.sdp;
678
+ const description = this.sdpManager.parseSdp({
679
+ sdp: descriptionSdp,
680
+ isLocal: true,
681
+ signalingState: this.signalingState,
682
+ type: descriptionType
683
+ });
684
+ // # update signaling state
685
+ if (description.type === 'offer') {
686
+ // この offer は作成時点までの変更を含む。answer の適用で交渉済みにする
687
+ this.pendingOfferChangeSeq =
688
+ this.lastCreatedOffer?.sdp === sessionDescription.sdp
689
+ ? this.lastCreatedOfferChangeSeq
690
+ : undefined;
691
+ this.setSignalingState('have-local-offer');
692
+ }
693
+ else if (description.type === 'answer') {
694
+ this.setSignalingState('stable');
695
+ }
696
+ else if (description.type === 'pranswer') {
697
+ this.setSignalingState('have-local-pranswer');
698
+ }
699
+ if (description.type === 'answer') {
700
+ // answer の確定で拒否予定の m-line を停止し、RTP pipeline / 遊休 transport を解放する
701
+ this.transceiverManager.commitRemoteOffer();
702
+ // port 0 で答えた m-line (aggressive の inactive など) は offerer 側で拒否として停止が確定する。
703
+ // answerer 側も同じ位置を停止確定にし、offerer が新 MID で再利用できるようにする
704
+ for (const media of description.media) {
705
+ if (!['audio', 'video'].includes(media.kind) || media.port !== 0) {
706
+ continue;
707
+ }
708
+ const transceiver = this.transceiverManager
709
+ .getTransceivers()
710
+ .find((t) => t.mid === media.rtp.muxId && !t.stopped);
711
+ transceiver?.commitStopped({ rejected: true });
712
+ }
713
+ this.closeIdleTransports();
714
+ }
715
+ // # assign MID
716
+ for (const [i, media] of (0, helper_js_1.enumerate)(description.media)) {
717
+ const mid = media.rtp.muxId;
718
+ this.sdpManager.registerMid(mid);
719
+ if (['audio', 'video'].includes(media.kind) && media.port !== 0) {
720
+ // 停止済み、別 kind、別 MID の transceiver には割り当てない (MID の一意性を保つ)
721
+ const transceiver = this.transceiverManager
722
+ .getTransceivers()
723
+ .find((t) => t.mLineIndex === i &&
724
+ !t.stopped &&
725
+ t.kind === media.kind &&
726
+ (t.mid == null || t.mid === mid));
727
+ if (transceiver) {
728
+ transceiver.mid = mid;
729
+ if (description.type === 'offer') {
730
+ transceiver.pendingLocalOfferCodecs = [...media.rtp.codecs];
731
+ }
732
+ }
733
+ }
734
+ if (media.kind === 'application' && this.sctpTransport) {
735
+ this.sctpTransport.mid = mid;
736
+ }
737
+ }
738
+ // setup ice,dtls role
739
+ const role = description.media.find((media) => media.dtlsParams)?.dtlsParams
740
+ ?.role;
741
+ // transport ごとに、その transport を使う受け入れ済み m-line の a=setup を適用する
742
+ // (BUNDLE group 外の独立 transport は先頭 m-line と異なる role を持ちうる)
743
+ const roleOfTransport = new Map();
744
+ for (const media of description.media) {
745
+ const mid = media.rtp.muxId;
746
+ const mediaRole = media.dtlsParams?.role;
747
+ if (media.port === 0 || mid == undefined || !mediaRole) {
748
+ continue;
749
+ }
750
+ const owner = media.kind === 'application'
751
+ ? this.sctpTransport?.mid === mid
752
+ ? this.sctpTransport
753
+ : undefined
754
+ : this.transceiverManager
755
+ .getTransceivers()
756
+ .find((t) => t.mid === mid && !t.stopped);
757
+ if (owner?.dtlsTransport && !roleOfTransport.has(owner.dtlsTransport)) {
758
+ roleOfTransport.set(owner.dtlsTransport, mediaRole);
759
+ }
760
+ }
761
+ this.secureManager.setLocalRole({
762
+ type: description.type === 'offer' ? 'offer' : 'answer',
763
+ role,
764
+ roleOfTransport
765
+ });
766
+ // # configure direction
767
+ if (['answer', 'pranswer'].includes(description.type)) {
768
+ for (const media of description.media) {
769
+ const t = this.transceiverManager
770
+ .getTransceivers()
771
+ .find((t) => t.mid != undefined && t.mid === media.rtp.muxId);
772
+ if (!t || t.stopped || t.pendingRejection) {
773
+ continue;
774
+ }
775
+ const direction = t.stopping
776
+ ? 'inactive'
777
+ : (0, utils_js_1.andDirection)(t.direction, t.offerDirection);
778
+ t.setCurrentDirection(direction);
779
+ }
780
+ }
781
+ // for trickle ice
782
+ this.sdpManager.setLocal(description, this.transceiverManager.getTransceivers(), this.sctpTransport);
783
+ await this.gatherCandidates().catch((e) => {
784
+ log('gatherCandidates failed', e);
785
+ });
786
+ // connect transports
787
+ if (description.type === 'answer') {
788
+ this.connect().catch((err) => {
789
+ log('connect failed', err);
790
+ this.secureManager.setConnectionState('failed');
791
+ });
792
+ }
793
+ this.sdpManager.setLocal(description, this.transceiverManager.getTransceivers(), this.sctpTransport);
794
+ // answerer の stop() は次の自分の offer で交渉する
795
+ const hasUnnegotiatedStop = description.type === 'answer' && this.settleStoppingTransceivers();
796
+ if (this.shouldNegotiationneeded || hasUnnegotiatedStop) {
797
+ this.scheduleNegotiationneeded();
798
+ }
799
+ this.invalidateLastCreatedDescriptions();
800
+ return description;
801
+ }
802
+ async gatherCandidates() {
803
+ await this.secureManager.gatherCandidates();
804
+ }
805
+ async addIceCandidate(candidateMessage = {}) {
806
+ if (this.isClosed) {
807
+ throw (0, errors_js_1.createWebRtcDomException)('InvalidStateError', 'is closed');
808
+ }
809
+ if (!this.remoteDescription || !this.sdpManager._remoteDescription) {
810
+ this.pendingRemoteCandidates.push(candidateMessage);
811
+ return;
812
+ }
813
+ await this.applyRemoteIceCandidate(candidateMessage);
814
+ }
815
+ async applyRemoteIceCandidate(candidateMessage) {
816
+ const sdp = this.sdpManager._remoteDescription;
817
+ if (!sdp) {
818
+ return;
819
+ }
820
+ const appliedCandidate = await this.secureManager.addIceCandidate(sdp, candidateMessage);
821
+ const remoteDescription = this.sdpManager._remoteDescription;
822
+ if (!remoteDescription || !appliedCandidate) {
823
+ return;
824
+ }
825
+ if (appliedCandidate.kind === 'end-of-candidates') {
826
+ for (const mediaIndex of appliedCandidate.mediaIndices) {
827
+ const media = remoteDescription.media[mediaIndex];
828
+ if (media) {
829
+ media.iceCandidatesComplete = true;
830
+ }
831
+ }
832
+ return;
833
+ }
834
+ for (const mediaIndex of appliedCandidate.mediaIndices) {
835
+ const media = remoteDescription.media[mediaIndex];
836
+ if (!media) {
837
+ continue;
838
+ }
839
+ media.iceCandidates.push(appliedCandidate.candidate);
840
+ }
841
+ }
842
+ async flushPendingRemoteCandidates() {
843
+ while (this.pendingRemoteCandidates.length > 0 &&
844
+ this.remoteDescription &&
845
+ this.sdpManager._remoteDescription) {
846
+ const candidate = this.pendingRemoteCandidates.shift();
847
+ await this.applyRemoteIceCandidate(candidate ?? null);
848
+ }
849
+ }
850
+ async connect() {
851
+ log('start connect');
852
+ const res = await Promise.allSettled(this.dtlsTransports.map(async (dtlsTransport) => {
853
+ const { iceTransport } = dtlsTransport;
854
+ if (iceTransport.state === 'connected') {
855
+ return;
856
+ }
857
+ //Not negotiated yet (the transport of a transceiver added since, which the next offer bundles): the
858
+ //negotiation giving it its remote parameters connects it
859
+ if (!iceTransport.connection.remoteUsername || !iceTransport.connection.remotePassword) {
860
+ return;
861
+ }
862
+ const checkDtlsConnected = () => dtlsTransport.state === 'connected';
863
+ if (checkDtlsConnected()) {
864
+ //After an ICE restart (new credentials, no pair nominated), DTLS is still connected: ICE checks
865
+ //again, and the records go over the pair it nominates
866
+ if (!iceTransport.connection.nominated) {
867
+ await iceTransport.start().catch((err) => {
868
+ log('iceTransport.start failed', err);
869
+ throw err;
870
+ });
871
+ }
872
+ return;
873
+ }
874
+ this.secureManager.setConnectionState('connecting');
875
+ await iceTransport.start().catch((err) => {
876
+ log('iceTransport.start failed', err);
877
+ throw err;
878
+ });
879
+ if (checkDtlsConnected()) {
880
+ return;
881
+ }
882
+ await dtlsTransport.start().catch((err) => {
883
+ log('dtlsTransport.start failed', err);
884
+ throw err;
885
+ });
886
+ if (this.sctpTransport &&
887
+ this.sctpTransport.dtlsTransport.id === dtlsTransport.id) {
888
+ await this.sctpManager.connectSctp();
889
+ }
890
+ }));
891
+ if (res.find((r) => r.status === 'rejected')) {
892
+ this.secureManager.setConnectionState('failed');
893
+ }
894
+ else {
895
+ this.secureManager.setConnectionState('connected');
896
+ }
897
+ }
898
+ restartIce() {
899
+ this.needRestart = true;
900
+ this.needNegotiation();
901
+ }
902
+ async setRemoteDescription(sessionDescription) {
903
+ if (sessionDescription instanceof sdp_js_1.SessionDescription) {
904
+ sessionDescription = sessionDescription.toSdp();
905
+ }
906
+ await this.waitForPendingDescriptionTask();
907
+ //An offer of the other side while this side offers: this side's offer is rolled back first, the offer of the
908
+ //other side then associated with the transceivers as they were before it
909
+ const needsImplicitLocalRollback = sessionDescription.type === 'offer' &&
910
+ ['have-local-offer', 'have-local-pranswer'].includes(this.signalingState);
911
+ if (needsImplicitLocalRollback) {
912
+ this.sdpManager.rollbackLocalDescription(this.signalingState);
913
+ this.rollbackLocalOffer();
914
+ for (const transceiver of this.transceiverManager.getTransceivers()) {
915
+ transceiver.pendingLocalOfferCodecs = undefined;
916
+ }
917
+ this.pendingOfferChangeSeq = undefined;
918
+ this.shouldNegotiationneeded = true;
919
+ this.setSignalingState('stable');
920
+ await Promise.resolve();
921
+ }
922
+ let codecPlan = new Map();
923
+ if (sessionDescription.type &&
924
+ sessionDescription.type !== 'rollback' &&
925
+ sessionDescription.sdp) {
926
+ const preview = this.sdpManager.parseSdp({
927
+ sdp: sessionDescription.sdp,
928
+ isLocal: false,
929
+ signalingState: this.signalingState,
930
+ type: sessionDescription.type
931
+ });
932
+ // 本適用と同じ対応付けで全 m-line の codec を副作用なしに解決する
933
+ const planned = new Set();
934
+ codecPlan = this.transceiverManager.planRemoteRtpCodecs(preview, (remoteMedia, index) => {
935
+ const transceiver = this.findTransceiverForRemoteMedia(remoteMedia, index, planned, sessionDescription.type === 'offer');
936
+ if (transceiver)
937
+ planned.add(transceiver);
938
+ return transceiver;
939
+ });
940
+ }
941
+ // # parse and validate description
942
+ this.assertAnswerKeepsSharedTransports(sessionDescription);
943
+ const remoteSdp = this.sdpManager.setRemoteDescription(sessionDescription, this.signalingState);
944
+ if (!remoteSdp) {
945
+ // 非対応 re-offer などの rollback では元の transceiver 対応を復元する
946
+ const transportsBeforeRollback = this.transceiverManager
947
+ .getTransceivers()
948
+ .map((t) => t.dtlsTransport);
949
+ this.transceiverManager.rollbackRemoteOffer();
950
+ this.closeIdleTransports(transportsBeforeRollback);
951
+ this.setSignalingState('stable');
952
+ if (this.shouldNegotiationneeded) {
953
+ this.scheduleNegotiationneeded();
954
+ }
955
+ this.invalidateLastCreatedDescriptions();
956
+ return;
957
+ }
958
+ if (remoteSdp.type === 'offer') {
959
+ this.transceiverManager.beginRemoteOffer();
960
+ }
961
+ // # apply description
962
+ const bundleGroups = this.config.bundlePolicy === 'disable'
963
+ ? []
964
+ : remoteSdp.group.filter((group) => group.semantic === 'BUNDLE');
965
+ const groupOfMid = (mid) => mid == undefined
966
+ ? undefined
967
+ : bundleGroups.find((group) => group.items.includes(mid));
968
+ // ## associate m-lines with transceivers / sctp
969
+ const associated = new Set();
970
+ const entries = remoteSdp.media.map((remoteMedia, index) => {
971
+ if (['audio', 'video'].includes(remoteMedia.kind)) {
972
+ let transceiver = this.findTransceiverForRemoteMedia(remoteMedia, index, associated, remoteSdp.type === 'offer');
973
+ if (!transceiver) {
974
+ if (remoteMedia.port === 0) {
975
+ // 未知の MID の拒否済み m-line には transceiver を関連付けない
976
+ return { remoteMedia, index };
977
+ }
978
+ transceiver = this.addRemoteTransceiver(remoteMedia, index);
979
+ }
980
+ else if (transceiver.mid == null) {
981
+ this.transceiverManager.associateMLine(transceiver, index);
982
+ }
983
+ associated.add(transceiver);
984
+ return { remoteMedia, index, transceiver };
985
+ }
986
+ else if (remoteMedia.kind === 'application') {
987
+ let sctpTransport = this.sctpTransport;
988
+ if (!sctpTransport) {
989
+ sctpTransport = this.createSctpTransport();
990
+ sctpTransport.mid = remoteMedia.rtp.muxId;
991
+ }
992
+ return { remoteMedia, index, sctpTransport };
993
+ }
994
+ else {
995
+ throw new Error('invalid media kind');
996
+ }
997
+ });
998
+ if (remoteSdp.type === 'offer') {
999
+ this.transceiverManager.releaseUnassociatedReservations(associated, remoteSdp.media.length);
1000
+ }
1001
+ const ownerOf = (entry) => entry.transceiver ?? entry.sctpTransport;
1002
+ // ## transport ownership
1003
+ // remote offer の所有関係は bundlePolicy によらず offer の BUNDLE group だけで決まる
1004
+ // (max-bundle は自分の offer にだけ効く)。group ごとに 1 つの transport を共有し、
1005
+ // 異なる group や group 外の m-line とは共有しない。
1006
+ // remote answer では offer で渡した ICE credentials を保つため transport を作り直さない
1007
+ // (共有 transport を分割する answer は assertAnswerKeepsSharedTransports で事前に拒否済み)
1008
+ const isRemoteOffer = remoteSdp.type === 'offer';
1009
+ const liveTransport = (transport) => !!transport && transport.state !== 'closed';
1010
+ const groupTransports = new Map();
1011
+ const claimed = new Set();
1012
+ for (const group of bundleGroups) {
1013
+ const members = entries.filter((entry) => !!ownerOf(entry) &&
1014
+ group.items.includes(entry.remoteMedia.rtp.muxId));
1015
+ if (members.length === 0) {
1016
+ continue;
1017
+ }
1018
+ // 既存 member の transport を優先し、他の group が使っていれば新しい transport を作る
1019
+ let shared = members
1020
+ .map((entry) => ownerOf(entry).dtlsTransport)
1021
+ .find((transport) => liveTransport(transport) &&
1022
+ (!isRemoteOffer || !claimed.has(transport)));
1023
+ if (!shared) {
1024
+ shared = this.createDtlsTransport({ inheritCredentials: false });
1025
+ }
1026
+ groupTransports.set(group, shared);
1027
+ claimed.add(shared);
1028
+ for (const entry of members) {
1029
+ const owner = ownerOf(entry);
1030
+ if (owner.dtlsTransport !== shared) {
1031
+ owner.setDtlsTransport(shared);
1032
+ }
1033
+ }
1034
+ }
1035
+ if (isRemoteOffer) {
1036
+ // group 外 (group のない offer を含む) で受け入れた m-line は独立した transport / ICE credentials を持つ
1037
+ for (const entry of entries) {
1038
+ const owner = ownerOf(entry);
1039
+ if (!owner ||
1040
+ entry.remoteMedia.port === 0 ||
1041
+ groupOfMid(entry.remoteMedia.rtp.muxId)) {
1042
+ continue;
1043
+ }
1044
+ if (!liveTransport(owner.dtlsTransport) ||
1045
+ claimed.has(owner.dtlsTransport)) {
1046
+ owner.setDtlsTransport(this.createDtlsTransport({ inheritCredentials: false }));
1047
+ }
1048
+ claimed.add(owner.dtlsTransport);
1049
+ }
1050
+ }
1051
+ // ## apply RTP / SCTP (受け入れ判定)
1052
+ const acceptedEntries = new Set();
1053
+ for (const entry of entries) {
1054
+ const { remoteMedia, index } = entry;
1055
+ if (entry.transceiver) {
1056
+ if (this.transceiverManager.setRemoteRTP(entry.transceiver, remoteMedia, remoteSdp.type, index, codecPlan.get(index) ?? [])) {
1057
+ acceptedEntries.add(entry);
1058
+ }
1059
+ }
1060
+ else if (entry.sctpTransport) {
1061
+ this.sctpManager.setRemoteSCTP(remoteMedia, index);
1062
+ acceptedEntries.add(entry);
1063
+ }
1064
+ }
1065
+ // ICE / DTLS パラメータは group で最初に受け入れた member (tag) から適用する
1066
+ // (codec 不一致で拒否した member のパラメータは使わない)
1067
+ const groupParamSources = new Map();
1068
+ for (const group of bundleGroups) {
1069
+ for (const mid of group.items) {
1070
+ const entry = entries.find((e) => e.remoteMedia.rtp.muxId === mid &&
1071
+ e.remoteMedia.port !== 0 &&
1072
+ acceptedEntries.has(e));
1073
+ if (entry) {
1074
+ groupParamSources.set(group, entry);
1075
+ break;
1076
+ }
1077
+ }
1078
+ }
1079
+ // ## apply transport parameters
1080
+ for (const entry of entries) {
1081
+ const { remoteMedia } = entry;
1082
+ const owner = ownerOf(entry);
1083
+ if (!owner) {
1084
+ continue;
1085
+ }
1086
+ const accepted = acceptedEntries.has(entry);
1087
+ const dtlsTransport = owner.dtlsTransport;
1088
+ const group = groupOfMid(remoteMedia.rtp.muxId);
1089
+ if (remoteMedia.port === 0 ||
1090
+ !dtlsTransport ||
1091
+ dtlsTransport.state === 'closed' ||
1092
+ // group 外の拒否 section の transport は使わない
1093
+ (!accepted && !group)) {
1094
+ continue;
1095
+ }
1096
+ const iceTransport = dtlsTransport.iceTransport;
1097
+ const ownsTransportParams = !group || groupParamSources.get(group) === entry;
1098
+ if (ownsTransportParams) {
1099
+ if (remoteMedia.iceParams) {
1100
+ const renomination = !!this.sdpManager.inactiveRemoteMedia;
1101
+ iceTransport.setRemoteParams(remoteMedia.iceParams, renomination);
1102
+ // One agent full, one lite: The full agent MUST take the controlling role, and the lite agent MUST take the controlled role
1103
+ // RFC 8445 S6.1.1
1104
+ if (remoteMedia.iceParams.iceLite &&
1105
+ !iceTransport.connection.iceLite) {
1106
+ iceTransport.connection.iceControlling = true;
1107
+ }
1108
+ }
1109
+ if (remoteMedia.dtlsParams) {
1110
+ dtlsTransport.setRemoteParams(remoteMedia.dtlsParams);
1111
+ }
1112
+ }
1113
+ // # add ICE candidates
1114
+ for (const candidate of remoteMedia.iceCandidates) {
1115
+ iceTransport.addRemoteCandidate(candidate).catch((error) => log('add candidate failed', error));
1116
+ }
1117
+ if (remoteMedia.iceCandidatesComplete) {
1118
+ iceTransport.addRemoteCandidate(undefined).catch((error) => log('end of candidates failed', error));
1119
+ }
1120
+ // # set DTLS role
1121
+ if (remoteSdp.type === 'answer' && remoteMedia.dtlsParams?.role) {
1122
+ dtlsTransport.role =
1123
+ remoteMedia.dtlsParams.role === 'client' ? 'server' : 'client';
1124
+ }
1125
+ }
1126
+ if (remoteSdp.type === 'answer') {
1127
+ // answer に含まれない既存 m-line は remote 起因の停止として確定する
1128
+ for (const transceiver of this.transceiverManager.getTransceivers()) {
1129
+ if (!associated.has(transceiver) &&
1130
+ transceiver.mid != undefined &&
1131
+ !transceiver.stopped) {
1132
+ transceiver.commitStopped({ rejected: true });
1133
+ }
1134
+ }
1135
+ this.closeIdleTransports();
1136
+ }
1137
+ if (remoteSdp.type === 'offer') {
1138
+ this.setSignalingState('have-remote-offer');
1139
+ }
1140
+ else if (remoteSdp.type === 'answer') {
1141
+ this.setSignalingState('stable');
1142
+ }
1143
+ else if (remoteSdp.type === 'pranswer') {
1144
+ this.setSignalingState('have-remote-pranswer');
1145
+ }
1146
+ await this.flushPendingRemoteCandidates();
1147
+ // connect transports
1148
+ if (remoteSdp.type === 'answer') {
1149
+ log('caller start connect');
1150
+ this.connect().catch((err) => {
1151
+ log('connect failed', err);
1152
+ this.secureManager.setConnectionState('failed');
1153
+ });
1154
+ }
1155
+ this.negotiationneeded = false;
1156
+ if (remoteSdp.type === 'answer' &&
1157
+ this.pendingOfferChangeSeq != undefined) {
1158
+ this.negotiatedChangeSeq = Math.max(this.negotiatedChangeSeq, this.pendingOfferChangeSeq);
1159
+ this.pendingOfferChangeSeq = undefined;
1160
+ }
1161
+ const hasUnnegotiatedStop = remoteSdp.type === 'answer' && this.settleStoppingTransceivers();
1162
+ if (this.shouldNegotiationneeded || hasUnnegotiatedStop) {
1163
+ this.scheduleNegotiationneeded();
1164
+ }
1165
+ this.invalidateLastCreatedDescriptions();
1166
+ }
1167
+ /**
1168
+ * remote answer / pranswer の検証 (offerer 側、状態を変更する前に実行する)。
1169
+ * local offer で 1 つの transport を共有した m-line を、answer が同じ BUNDLE group に置かずに
1170
+ * 異なる ICE credentials で受け入れることはできない (RFC 8843 7.3.2)。共有 transport は分割できず、
1171
+ * 新しい transport を作ると offer で渡した ICE credentials とも一致しなくなる。
1172
+ * group の記述が MID と一致しなくても remote の ICE credentials が同じなら、同じ transport のまま扱う。
1173
+ */
1174
+ assertAnswerKeepsSharedTransports(sessionDescription) {
1175
+ if (!['answer', 'pranswer'].includes(sessionDescription.type ?? '') ||
1176
+ !['have-local-offer', 'have-local-pranswer'].includes(this.signalingState) ||
1177
+ !sessionDescription.sdp ||
1178
+ this.config.bundlePolicy === 'disable') {
1179
+ return;
1180
+ }
1181
+ const answer = sdp_js_1.SessionDescription.parse(sessionDescription.sdp);
1182
+ const answerGroups = answer.group.filter((g) => g.semantic === 'BUNDLE');
1183
+ const byTransport = new Map();
1184
+ for (const media of answer.media) {
1185
+ const mid = media.rtp.muxId;
1186
+ if (media.port === 0 || mid == undefined) {
1187
+ continue;
1188
+ }
1189
+ const owner = media.kind === 'application'
1190
+ ? this.sctpTransport?.mid === mid
1191
+ ? this.sctpTransport
1192
+ : undefined
1193
+ : this.transceiverManager
1194
+ .getTransceivers()
1195
+ .find((t) => t.mid === mid && !t.stopped);
1196
+ const transport = owner?.dtlsTransport;
1197
+ if (!transport) {
1198
+ continue;
1199
+ }
1200
+ const current = {
1201
+ group: answerGroups.find((g) => g.items.includes(mid)),
1202
+ credentials: `${media.iceParams?.usernameFragment}:${media.iceParams?.password}`
1203
+ };
1204
+ const first = byTransport.get(transport);
1205
+ if (!first) {
1206
+ byTransport.set(transport, current);
1207
+ continue;
1208
+ }
1209
+ const sameGroup = !!current.group && current.group === first.group;
1210
+ if (!sameGroup && current.credentials !== first.credentials) {
1211
+ throw (0, errors_js_1.createWebRtcDomException)('InvalidAccessError', `mid=${mid} shares a transport in the local offer but the remote ${sessionDescription.type} moves it out of that BUNDLE group`);
1212
+ }
1213
+ }
1214
+ }
1215
+ /**
1216
+ * remote m-line に対応する transceiver を探す。MID の一致を優先し、
1217
+ * 未関連付け transceiver は同じ offer 内で異なる m-line に割り当てる。
1218
+ */
1219
+ findTransceiverForRemoteMedia(remoteMedia, index, associated, offer) {
1220
+ const candidates = this.transceiverManager
1221
+ .getTransceivers()
1222
+ .filter((t) => !associated.has(t) && t.kind === remoteMedia.kind);
1223
+ const mid = remoteMedia.rtp.muxId;
1224
+ const byMid = mid != undefined ? candidates.find((t) => t.mid === mid) : undefined;
1225
+ if (byMid) {
1226
+ return byMid;
1227
+ }
1228
+ if (remoteMedia.port === 0) {
1229
+ return;
1230
+ }
1231
+ //A media of an offer asking to receive takes a transceiver of addTrack, never one of addTransceiver (it sends
1232
+ //something else: RFC 8829 5.10)
1233
+ const unassociated = candidates.filter((t) => t.mid == null &&
1234
+ !t.stopping &&
1235
+ !t.stopped &&
1236
+ (!offer ||
1237
+ (t.addedByAddTrack &&
1238
+ ['sendrecv', 'recvonly'].includes(remoteMedia.direction ?? 'sendrecv'))));
1239
+ return unassociated.find((t) => t.mLineIndex === index) ?? unassociated[0];
1240
+ }
1241
+ /**
1242
+ * remote offer / answer の m-line 用に transceiver を作る。
1243
+ * 同じ位置に停止済みの旧 transceiver があれば、それを復活させず新しい receiver/router で置き換える。
1244
+ */
1245
+ addRemoteTransceiver(remoteMedia, index) {
1246
+ const dtlsTransport = this.findOrCreateTransport();
1247
+ const transceiver = this.transceiverManager.addTransceiver(remoteMedia.kind, dtlsTransport, { direction: 'recvonly' }, { remoteMLineIndex: index });
1248
+ transceiver.mid = remoteMedia.rtp.muxId ?? null;
1249
+ this.secureManager.updateIceConnectionState();
1250
+ this.onRemoteTransceiverAdded.execute(transceiver);
1251
+ return transceiver;
1252
+ }
1253
+ addTransceiver(trackOrKind, options = {}) {
1254
+ const dtlsTransport = this.findOrCreateTransport();
1255
+ const transceiver = this.transceiverManager.addTransceiver(trackOrKind, dtlsTransport, options);
1256
+ this.secureManager.updateIceConnectionState();
1257
+ this.needNegotiation();
1258
+ return transceiver;
1259
+ }
1260
+ // todo fix
1261
+ addTrack(track, ...streams) {
1262
+ return this.addTrackOn(undefined, track, ...streams);
1263
+ }
1264
+ /**
1265
+ * Whether addTrack may give a track of its kind to a transceiver, rather than adding one
1266
+ * @param transceiver
1267
+ */
1268
+ reusableForTrack(transceiver) {
1269
+ return this.transceiverManager.reusableForTrack(transceiver, transceiver.kind);
1270
+ }
1271
+ /**
1272
+ * addTrack, on the transceiver chosen already (by the main thread, for a connection served in a worker thread) if
1273
+ * it may still take the track, else on a new one, as for null
1274
+ * @param chosen
1275
+ * @param track
1276
+ * @param streams
1277
+ */
1278
+ addTrackOn(chosen, track, ...streams) {
1279
+ if (this.isClosed) {
1280
+ throw (0, errors_js_1.createWebRtcDomException)('InvalidStateError', 'is closed');
1281
+ }
1282
+ const transceiver = this.transceiverManager.addTrack(track, streams, chosen);
1283
+ if (!transceiver.dtlsTransport) {
1284
+ const dtlsTransport = this.findOrCreateTransport();
1285
+ transceiver.setDtlsTransport(dtlsTransport);
1286
+ }
1287
+ this.needNegotiation();
1288
+ return transceiver.sender;
1289
+ }
1290
+ async createAnswer() {
1291
+ this.assertNotClosed();
1292
+ await this.secureManager.ensureCerts();
1293
+ // setCodecPreferences() で無効化された transceiver を再解決する。
1294
+ // offer 側と異なり answer は remote offer との交渉結果を使い、
1295
+ // sender/receiver の codec 状態も新しい negotiated codec に同期する。
1296
+ for (const transceiver of this.transceiverManager.getTransceivers()) {
1297
+ if (transceiver.codecs.length !== 0 &&
1298
+ !transceiver.codecPreferencesNeedResolution) {
1299
+ continue;
1300
+ }
1301
+ // 拒否予定 / 停止済みの m-line は port 0 で answer するため codec を解決しない
1302
+ if (transceiver.pendingRejection ||
1303
+ transceiver.stopping ||
1304
+ transceiver.stopped) {
1305
+ continue;
1306
+ }
1307
+ const remoteDescription = this.sdpManager._remoteDescription;
1308
+ const remoteMedia = remoteDescription?.media.find((media) => media.rtp.muxId != undefined &&
1309
+ media.rtp.muxId === transceiver.mid &&
1310
+ media.kind === transceiver.kind) ??
1311
+ (transceiver.mLineIndex != undefined
1312
+ ? remoteDescription?.media[transceiver.mLineIndex]
1313
+ : undefined);
1314
+ if (remoteMedia && ['audio', 'video'].includes(remoteMedia.kind)) {
1315
+ this.transceiverManager.resyncAnswerCodecs(transceiver, remoteMedia);
1316
+ }
1317
+ else {
1318
+ this.transceiverManager.assignTransceiverCodecs(transceiver);
1319
+ }
1320
+ if (transceiver.headerExtensions.length === 0) {
1321
+ transceiver.headerExtensions = this.headerExtensionsFor(transceiver.kind);
1322
+ }
1323
+ }
1324
+ const description = this.sdpManager.buildAnswerSdp({
1325
+ transceivers: this.transceiverManager.getTransceivers(),
1326
+ sctpTransport: this.sctpTransport,
1327
+ signalingState: this.signalingState
1328
+ });
1329
+ const createdAnswer = description.toJSON();
1330
+ this.lastCreatedAnswer = createdAnswer;
1331
+ return createdAnswer;
1332
+ }
1333
+ assertNotClosed() {
1334
+ if (this.isClosed) {
1335
+ throw (0, errors_js_1.createWebRtcDomException)('InvalidStateError', 'RTCPeerConnection is closed');
1336
+ }
1337
+ }
1338
+ /**
1339
+ * The signaling state is stable: the associations of the transceivers and of the data channels are kept, for a
1340
+ * rollback of the next local offer
1341
+ */
1342
+ markStable() {
1343
+ this.transceiverManager.markStable();
1344
+ const sctp = this.sctpTransport;
1345
+ this.stableSctp = sctp ? { mid: sctp.mid, mLineIndex: sctp.mLineIndex } : undefined;
1346
+ }
1347
+ /**
1348
+ * A local offer is rolled back: the transceivers and the data channels are associated as before it
1349
+ */
1350
+ rollbackLocalOffer() {
1351
+ this.transceiverManager.rollbackLocalOffer();
1352
+ const sctp = this.sctpTransport;
1353
+ if (sctp) {
1354
+ sctp.mid = this.stableSctp?.mid;
1355
+ sctp.mLineIndex = this.stableSctp?.mLineIndex;
1356
+ }
1357
+ }
1358
+ setSignalingState(state) {
1359
+ if (this.signalingState === state) {
1360
+ return;
1361
+ }
1362
+ log('signalingStateChange', state);
1363
+ this.signalingState = state;
1364
+ if (state === 'stable')
1365
+ this.markStable();
1366
+ this.signalingStateChange.execute(state);
1367
+ if (this.onsignalingstatechange) {
1368
+ (0, common_js_1.runDetached)(() => this.onsignalingstatechange(new globalThis.Event('signalingstatechange')), (error) => log('event handler failed', error));
1369
+ }
1370
+ this.emit('signalingstatechange');
1371
+ }
1372
+ createPeerConnectionStats(timestamp) {
1373
+ return {
1374
+ type: 'peer-connection',
1375
+ id: (0, stats_js_1.generateStatsId)('peer-connection', this.id),
1376
+ timestamp,
1377
+ dataChannelsOpened: this.sctpManager.dataChannelsOpened,
1378
+ dataChannelsClosed: this.sctpManager.dataChannelsClosed
1379
+ };
1380
+ }
1381
+ async getStats(selector) {
1382
+ const timestamp = (0, stats_js_1.getStatsTimestamp)();
1383
+ const stats = [];
1384
+ if (!selector) {
1385
+ stats.push(this.createPeerConnectionStats(timestamp));
1386
+ }
1387
+ stats.push(...this.transceiverManager.collectStats(timestamp));
1388
+ const transportStats = await this.secureManager.getStats(timestamp);
1389
+ stats.push(...transportStats);
1390
+ if (!selector && this.sctpTransport) {
1391
+ const dataChannelStats = await this.sctpManager.getStats(timestamp);
1392
+ if (dataChannelStats) {
1393
+ stats.push(...dataChannelStats);
1394
+ }
1395
+ }
1396
+ if (!selector) {
1397
+ return (0, stats_js_1.buildStatsReport)(stats);
1398
+ }
1399
+ return (0, stats_js_1.buildStatsReport)(stats, this.transceiverManager.getStatsRootIds(selector));
1400
+ }
1401
+ async close() {
1402
+ if (this.isClosed)
1403
+ return;
1404
+ this.isClosed = true;
1405
+ this.pendingRemoteCandidates.length = 0;
1406
+ this.setSignalingState('closed');
1407
+ this.transceiverManager.close();
1408
+ // SCTP ABORT は DTLS/ICE が生きている間に送る(close は abrupt であり SHUTDOWN ではない)
1409
+ await this.sctpManager.close();
1410
+ await this.secureManager.close();
1411
+ // 公開 Event を完了させ、購読者・クロージャが PeerConnection を保持し続けないようにする
1412
+ this.completePeerEvents();
1413
+ log('peerConnection closed');
1414
+ }
1415
+ completePeerEvents() {
1416
+ const events = [
1417
+ this.onDataChannel,
1418
+ this.iceGatheringStateChange,
1419
+ this.iceConnectionStateChange,
1420
+ this.signalingStateChange,
1421
+ this.connectionStateChange,
1422
+ this.onTransceiverAdded,
1423
+ this.onRemoteTransceiverAdded,
1424
+ this.onIceCandidate,
1425
+ this.onNegotiationneeded
1426
+ ];
1427
+ for (const event of events) {
1428
+ if (!event.ended) {
1429
+ event.complete();
1430
+ }
1431
+ }
1432
+ }
1433
+ }
1434
+ exports.RTCPeerConnection = RTCPeerConnection;
1435
+ const MLineReuseModes = ['compatible', 'aggressive'];
1436
+ const findCodecByMimeType = (codecs, target) => codecs.find((localCodec) => localCodec.mimeType.toLowerCase() === target.mimeType.toLowerCase())
1437
+ ? target
1438
+ : undefined;
1439
+ exports.findCodecByMimeType = findCodecByMimeType;
1440
+ function assignDynamicPayloadTypes(config) {
1441
+ for (const [i, codecParams] of (0, helper_js_1.enumerate)([
1442
+ ...(config.codecs.audio || []),
1443
+ ...(config.codecs.video || [])
1444
+ ])) {
1445
+ if (codecParams.payloadType != undefined) {
1446
+ continue;
1447
+ }
1448
+ codecParams.payloadType = 96 + i;
1449
+ switch (codecParams.name.toLowerCase()) {
1450
+ case 'rtx':
1451
+ {
1452
+ codecParams.parameters = `apt=${codecParams.payloadType - 1}`;
1453
+ }
1454
+ break;
1455
+ case 'red':
1456
+ {
1457
+ if (codecParams.contentType === 'audio') {
1458
+ const redundant = codecParams.payloadType + 1;
1459
+ codecParams.parameters = `${redundant}/${redundant}`;
1460
+ codecParams.payloadType = 63;
1461
+ }
1462
+ }
1463
+ break;
1464
+ }
1465
+ }
1466
+ }
1467
+ function generateDefaultPeerConfig() {
1468
+ return {
1469
+ codecs: (0, index_js_2.defaultCodecs)(),
1470
+ headerExtensions: {
1471
+ audio: [],
1472
+ video: []
1473
+ },
1474
+ iceTransportPolicy: 'all',
1475
+ iceLite: false,
1476
+ iceServers: [],
1477
+ icePortRange: undefined,
1478
+ iceInterfaceAddresses: undefined,
1479
+ iceAdditionalHostAddresses: undefined,
1480
+ iceUseIpv4: true,
1481
+ iceUseIpv6: true,
1482
+ iceUseTcp: false,
1483
+ iceTcpPassive: true,
1484
+ iceStunGatherTimeout: undefined,
1485
+ iceTurnConnectTimeout: undefined,
1486
+ turnTransport: undefined,
1487
+ turnTlsOptions: undefined,
1488
+ turnUdpFamily: undefined,
1489
+ iceFilterStunResponse: undefined,
1490
+ iceFilterCandidatePair: undefined,
1491
+ icePasswordPrefix: undefined,
1492
+ iceUseLinkLocalAddress: undefined,
1493
+ dtls: {},
1494
+ bundlePolicy: 'max-compat',
1495
+ rtcpMuxPolicy: 'require',
1496
+ iceCandidatePoolSize: 0,
1497
+ certificates: [],
1498
+ debug: {},
1499
+ midSuffix: false,
1500
+ forceTurnTCP: false,
1501
+ maxMessageSize: sctp_js_1.DEFAULT_MAX_MESSAGE_SIZE,
1502
+ sctp: { mtu: index_js_1.DEFAULT_SCTP_MTU },
1503
+ pendingRtp: false,
1504
+ mLineReuse: 'compatible'
1505
+ };
1506
+ }
1507
+ exports.defaultPeerConfig = generateDefaultPeerConfig();
1508
+ function normalizePeerConfiguration(config) {
1509
+ const input = Object(config ?? {});
1510
+ const normalizedConfig = { ...input };
1511
+ if (input.sctp !== undefined) {
1512
+ normalizedConfig.sctp = { ...input.sctp };
1513
+ }
1514
+ if (input.bundlePolicy === 'balanced') {
1515
+ normalizedConfig.bundlePolicy = 'max-compat';
1516
+ }
1517
+ if ('certificates' in input) {
1518
+ if (input.certificates === undefined) {
1519
+ normalizedConfig.certificates = undefined;
1520
+ }
1521
+ else if (!Array.isArray(input.certificates) ||
1522
+ input.certificates.some((certificate) => certificate == null)) {
1523
+ throw (0, errors_js_1.createWebRtcTypeError)('certificates must be an array of RTCCertificate');
1524
+ }
1525
+ else {
1526
+ normalizedConfig.certificates = [...input.certificates];
1527
+ }
1528
+ }
1529
+ if ('iceCandidatePoolSize' in input) {
1530
+ normalizedConfig.iceCandidatePoolSize = coerceUnsignedShort(input.iceCandidatePoolSize, 'iceCandidatePoolSize');
1531
+ }
1532
+ return normalizedConfig;
1533
+ }
1534
+ function coerceUnsignedShort(value, name) {
1535
+ const coerced = Number(value);
1536
+ if (!Number.isFinite(coerced) ||
1537
+ !Number.isInteger(coerced) ||
1538
+ coerced < 0 ||
1539
+ coerced > 65535) {
1540
+ throw (0, errors_js_1.createWebRtcTypeError)(`${name} must be an unsigned short`);
1541
+ }
1542
+ return coerced;
1543
+ }
1544
+ function hasSameCertificates(left, right) {
1545
+ return (left.length === right.length &&
1546
+ left.every((certificate, index) => certificate === right[index]));
1547
+ }
1548
+ function clonePeerConfiguration(config) {
1549
+ return {
1550
+ ...config,
1551
+ codecs: {
1552
+ audio: config.codecs.audio ? [...config.codecs.audio] : undefined,
1553
+ video: config.codecs.video ? [...config.codecs.video] : undefined
1554
+ },
1555
+ headerExtensions: {
1556
+ audio: config.headerExtensions.audio
1557
+ ? [...config.headerExtensions.audio]
1558
+ : undefined,
1559
+ video: config.headerExtensions.video
1560
+ ? [...config.headerExtensions.video]
1561
+ : undefined
1562
+ },
1563
+ iceServers: config.iceServers.map((server) => ({
1564
+ ...server,
1565
+ urls: Array.isArray(server.urls) ? [...server.urls] : server.urls
1566
+ })),
1567
+ icePortRange: config.icePortRange
1568
+ ? [...config.icePortRange]
1569
+ : undefined,
1570
+ iceAdditionalHostAddresses: config.iceAdditionalHostAddresses
1571
+ ? [...config.iceAdditionalHostAddresses]
1572
+ : undefined,
1573
+ dtls: { ...config.dtls },
1574
+ certificates: [...config.certificates],
1575
+ debug: { ...config.debug },
1576
+ sctp: { ...config.sctp },
1577
+ pendingRtp: typeof config.pendingRtp === 'object' && config.pendingRtp != undefined
1578
+ ? { ...config.pendingRtp }
1579
+ : config.pendingRtp
1580
+ };
1581
+ }
1582
+ class RTCTrackEvent {
1583
+ constructor(init) {
1584
+ this.type = 'track';
1585
+ this.track = init.track;
1586
+ this.streams = [...init.streams];
1587
+ this.transceiver = init.transceiver;
1588
+ this.receiver = init.receiver;
1589
+ }
1590
+ }
1591
+ exports.RTCTrackEvent = RTCTrackEvent;