@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.
- package/LICENSE +23 -0
- package/README.md +509 -2
- package/README.zh-CN.md +399 -0
- package/THIRD_PARTY_NOTICES.md +652 -0
- package/dist/cjs/client/SignalingConnection.d.ts +81 -0
- package/dist/cjs/client/SignalingConnection.js +67 -0
- package/dist/cjs/cluster/Cluster.d.ts +503 -0
- package/dist/cjs/cluster/Cluster.js +546 -0
- package/dist/cjs/cluster/ClusterFrames.d.ts +24 -0
- package/dist/cjs/cluster/ClusterFrames.js +90 -0
- package/dist/cjs/cluster/ClusterTURN.d.ts +63 -0
- package/dist/cjs/cluster/ClusterTURN.js +78 -0
- package/dist/cjs/cluster/Rendezvous.d.ts +8 -0
- package/dist/cjs/cluster/Rendezvous.js +23 -0
- package/dist/cjs/cluster/transports/ClusterTransport.d.ts +34 -0
- package/dist/cjs/cluster/transports/ClusterTransport.js +2 -0
- package/dist/cjs/cluster/transports/LoadClient.d.ts +6 -0
- package/dist/cjs/cluster/transports/LoadClient.js +80 -0
- package/dist/cjs/cluster/transports/MemoryClusterTransport.d.ts +13 -0
- package/dist/cjs/cluster/transports/MemoryClusterTransport.js +47 -0
- package/dist/cjs/cluster/transports/NATSClusterTransport.d.ts +23 -0
- package/dist/cjs/cluster/transports/NATSClusterTransport.js +70 -0
- package/dist/cjs/cluster/transports/RedisClusterTransport.d.ts +23 -0
- package/dist/cjs/cluster/transports/RedisClusterTransport.js +77 -0
- package/dist/cjs/exceptions/ClusterRequestException.d.ts +11 -0
- package/dist/cjs/exceptions/ClusterRequestException.js +18 -0
- package/dist/cjs/exceptions/ClusterTimeoutException.d.ts +10 -0
- package/dist/cjs/exceptions/ClusterTimeoutException.js +17 -0
- package/dist/cjs/exceptions/ClusterTransportNotFoundException.d.ts +11 -0
- package/dist/cjs/exceptions/ClusterTransportNotFoundException.js +18 -0
- package/dist/cjs/exceptions/SignalingClientRequiredException.d.ts +12 -0
- package/dist/cjs/exceptions/SignalingClientRequiredException.js +19 -0
- package/dist/cjs/exceptions/SignalingConnectionException.d.ts +12 -0
- package/dist/cjs/exceptions/SignalingConnectionException.js +19 -0
- package/dist/cjs/exceptions/SignalingDeniedException.d.ts +11 -0
- package/dist/cjs/exceptions/SignalingDeniedException.js +18 -0
- package/dist/cjs/exceptions/SignalingLimitException.d.ts +11 -0
- package/dist/cjs/exceptions/SignalingLimitException.js +18 -0
- package/dist/cjs/exceptions/SignalingNotAMemberException.d.ts +11 -0
- package/dist/cjs/exceptions/SignalingNotAMemberException.js +18 -0
- package/dist/cjs/exceptions/WHEPDeniedException.d.ts +15 -0
- package/dist/cjs/exceptions/WHEPDeniedException.js +22 -0
- package/dist/cjs/exceptions/WHEPLimitException.d.ts +15 -0
- package/dist/cjs/exceptions/WHEPLimitException.js +22 -0
- package/dist/cjs/exceptions/WHEPMediaTypeException.d.ts +15 -0
- package/dist/cjs/exceptions/WHEPMediaTypeException.js +22 -0
- package/dist/cjs/exceptions/WHEPOfferException.d.ts +16 -0
- package/dist/cjs/exceptions/WHEPOfferException.js +23 -0
- package/dist/cjs/exceptions/WHEPSessionNotFoundException.d.ts +15 -0
- package/dist/cjs/exceptions/WHEPSessionNotFoundException.js +22 -0
- package/dist/cjs/exceptions/WHIPDeniedException.d.ts +15 -0
- package/dist/cjs/exceptions/WHIPDeniedException.js +22 -0
- package/dist/cjs/exceptions/WHIPLimitException.d.ts +15 -0
- package/dist/cjs/exceptions/WHIPLimitException.js +22 -0
- package/dist/cjs/exceptions/WHIPMediaTypeException.d.ts +15 -0
- package/dist/cjs/exceptions/WHIPMediaTypeException.js +22 -0
- package/dist/cjs/exceptions/WHIPOfferException.d.ts +16 -0
- package/dist/cjs/exceptions/WHIPOfferException.js +23 -0
- package/dist/cjs/exceptions/WHIPSessionNotFoundException.d.ts +15 -0
- package/dist/cjs/exceptions/WHIPSessionNotFoundException.js +22 -0
- package/dist/cjs/exports/Client.d.ts +11 -0
- package/dist/cjs/exports/Client.js +29 -0
- package/dist/cjs/exports/WebRTC.d.ts +48 -0
- package/dist/cjs/exports/WebRTC.js +72 -0
- package/dist/cjs/lib/common/binary.d.ts +51 -0
- package/dist/cjs/lib/common/binary.js +264 -0
- package/dist/cjs/lib/common/binaryData.d.ts +116 -0
- package/dist/cjs/lib/common/binaryData.js +400 -0
- package/dist/cjs/lib/common/crc.d.ts +4 -0
- package/dist/cjs/lib/common/crc.js +122 -0
- package/dist/cjs/lib/common/deque.d.ts +36 -0
- package/dist/cjs/lib/common/deque.js +89 -0
- package/dist/cjs/lib/common/event.d.ts +48 -0
- package/dist/cjs/lib/common/event.js +207 -0
- package/dist/cjs/lib/common/index.d.ts +11 -0
- package/dist/cjs/lib/common/index.js +50 -0
- package/dist/cjs/lib/common/log.d.ts +47 -0
- package/dist/cjs/lib/common/log.js +62 -0
- package/dist/cjs/lib/common/network.d.ts +10 -0
- package/dist/cjs/lib/common/network.js +60 -0
- package/dist/cjs/lib/common/number.d.ts +13 -0
- package/dist/cjs/lib/common/number.js +43 -0
- package/dist/cjs/lib/common/promise.d.ts +21 -0
- package/dist/cjs/lib/common/promise.js +70 -0
- package/dist/cjs/lib/common/transport.d.ts +104 -0
- package/dist/cjs/lib/common/transport.js +441 -0
- package/dist/cjs/lib/common/type.d.ts +3 -0
- package/dist/cjs/lib/common/type.js +2 -0
- package/dist/cjs/lib/dtls/cipher/const.d.ts +42 -0
- package/dist/cjs/lib/dtls/cipher/const.js +33 -0
- package/dist/cjs/lib/dtls/cipher/create.d.ts +21 -0
- package/dist/cjs/lib/dtls/cipher/create.js +105 -0
- package/dist/cjs/lib/dtls/cipher/ec.d.ts +28 -0
- package/dist/cjs/lib/dtls/cipher/ec.js +44 -0
- package/dist/cjs/lib/dtls/cipher/key-exchange.d.ts +43 -0
- package/dist/cjs/lib/dtls/cipher/key-exchange.js +113 -0
- package/dist/cjs/lib/dtls/cipher/namedCurve.d.ts +7 -0
- package/dist/cjs/lib/dtls/cipher/namedCurve.js +27 -0
- package/dist/cjs/lib/dtls/cipher/prf.d.ts +17 -0
- package/dist/cjs/lib/dtls/cipher/prf.js +92 -0
- package/dist/cjs/lib/dtls/cipher/suites/abstract.d.ts +40 -0
- package/dist/cjs/lib/dtls/cipher/suites/abstract.js +41 -0
- package/dist/cjs/lib/dtls/cipher/suites/aead.d.ts +28 -0
- package/dist/cjs/lib/dtls/cipher/suites/aead.js +132 -0
- package/dist/cjs/lib/dtls/cipher/suites/null.d.ts +24 -0
- package/dist/cjs/lib/dtls/cipher/suites/null.js +41 -0
- package/dist/cjs/lib/dtls/cipher/utils.d.ts +18 -0
- package/dist/cjs/lib/dtls/cipher/utils.js +70 -0
- package/dist/cjs/lib/dtls/cipher/x509.d.ts +33 -0
- package/dist/cjs/lib/dtls/cipher/x509.js +100 -0
- package/dist/cjs/lib/dtls/client.d.ts +7 -0
- package/dist/cjs/lib/dtls/client.js +76 -0
- package/dist/cjs/lib/dtls/context/cipher.d.ts +42 -0
- package/dist/cjs/lib/dtls/context/cipher.js +87 -0
- package/dist/cjs/lib/dtls/context/dtls.d.ts +38 -0
- package/dist/cjs/lib/dtls/context/dtls.js +49 -0
- package/dist/cjs/lib/dtls/context/srtp.d.ts +5 -0
- package/dist/cjs/lib/dtls/context/srtp.js +12 -0
- package/dist/cjs/lib/dtls/context/transport.d.ts +8 -0
- package/dist/cjs/lib/dtls/context/transport.js +17 -0
- package/dist/cjs/lib/dtls/flight/client/flight1.d.ts +10 -0
- package/dist/cjs/lib/dtls/flight/client/flight1.js +26 -0
- package/dist/cjs/lib/dtls/flight/client/flight3.d.ts +8 -0
- package/dist/cjs/lib/dtls/flight/client/flight3.js +25 -0
- package/dist/cjs/lib/dtls/flight/client/flight5.d.ts +18 -0
- package/dist/cjs/lib/dtls/flight/client/flight5.js +206 -0
- package/dist/cjs/lib/dtls/flight/flight.d.ts +18 -0
- package/dist/cjs/lib/dtls/flight/flight.js +68 -0
- package/dist/cjs/lib/dtls/flight/server/flight2.d.ts +6 -0
- package/dist/cjs/lib/dtls/flight/server/flight2.js +126 -0
- package/dist/cjs/lib/dtls/flight/server/flight4.d.ts +17 -0
- package/dist/cjs/lib/dtls/flight/server/flight4.js +87 -0
- package/dist/cjs/lib/dtls/flight/server/flight6.d.ts +13 -0
- package/dist/cjs/lib/dtls/flight/server/flight6.js +111 -0
- package/dist/cjs/lib/dtls/handshake/binary.d.ts +16 -0
- package/dist/cjs/lib/dtls/handshake/binary.js +20 -0
- package/dist/cjs/lib/dtls/handshake/const.d.ts +13 -0
- package/dist/cjs/lib/dtls/handshake/const.js +17 -0
- package/dist/cjs/lib/dtls/handshake/extensions/ellipticCurves.d.ts +17 -0
- package/dist/cjs/lib/dtls/handshake/extensions/ellipticCurves.js +40 -0
- package/dist/cjs/lib/dtls/handshake/extensions/extendedMasterSecret.d.ts +3 -0
- package/dist/cjs/lib/dtls/handshake/extensions/extendedMasterSecret.js +7 -0
- package/dist/cjs/lib/dtls/handshake/extensions/renegotiationIndication.d.ts +18 -0
- package/dist/cjs/lib/dtls/handshake/extensions/renegotiationIndication.js +34 -0
- package/dist/cjs/lib/dtls/handshake/extensions/signature.d.ts +26 -0
- package/dist/cjs/lib/dtls/handshake/extensions/signature.js +39 -0
- package/dist/cjs/lib/dtls/handshake/extensions/useSrtp.d.ts +19 -0
- package/dist/cjs/lib/dtls/handshake/extensions/useSrtp.js +65 -0
- package/dist/cjs/lib/dtls/handshake/message/alert.d.ts +12 -0
- package/dist/cjs/lib/dtls/handshake/message/alert.js +24 -0
- package/dist/cjs/lib/dtls/handshake/message/certificate.d.ts +17 -0
- package/dist/cjs/lib/dtls/handshake/message/certificate.js +35 -0
- package/dist/cjs/lib/dtls/handshake/message/changeCipherSpec.d.ts +11 -0
- package/dist/cjs/lib/dtls/handshake/message/changeCipherSpec.js +24 -0
- package/dist/cjs/lib/dtls/handshake/message/client/certificateVerify.d.ts +20 -0
- package/dist/cjs/lib/dtls/handshake/message/client/certificateVerify.js +35 -0
- package/dist/cjs/lib/dtls/handshake/message/client/hello.d.ts +50 -0
- package/dist/cjs/lib/dtls/handshake/message/client/hello.js +48 -0
- package/dist/cjs/lib/dtls/handshake/message/client/keyExchange.d.ts +17 -0
- package/dist/cjs/lib/dtls/handshake/message/client/keyExchange.js +33 -0
- package/dist/cjs/lib/dtls/handshake/message/finished.d.ts +13 -0
- package/dist/cjs/lib/dtls/handshake/message/finished.js +26 -0
- package/dist/cjs/lib/dtls/handshake/message/server/certificateRequest.d.ts +31 -0
- package/dist/cjs/lib/dtls/handshake/message/server/certificateRequest.js +38 -0
- package/dist/cjs/lib/dtls/handshake/message/server/hello.d.ts +33 -0
- package/dist/cjs/lib/dtls/handshake/message/server/hello.js +57 -0
- package/dist/cjs/lib/dtls/handshake/message/server/helloDone.d.ts +12 -0
- package/dist/cjs/lib/dtls/handshake/message/server/helloDone.js +30 -0
- package/dist/cjs/lib/dtls/handshake/message/server/helloVerifyRequest.d.ts +32 -0
- package/dist/cjs/lib/dtls/handshake/message/server/helloVerifyRequest.js +42 -0
- package/dist/cjs/lib/dtls/handshake/message/server/keyExchange.d.ts +32 -0
- package/dist/cjs/lib/dtls/handshake/message/server/keyExchange.js +49 -0
- package/dist/cjs/lib/dtls/handshake/random.d.ts +13 -0
- package/dist/cjs/lib/dtls/handshake/random.js +29 -0
- package/dist/cjs/lib/dtls/helper.d.ts +4 -0
- package/dist/cjs/lib/dtls/helper.js +30 -0
- package/dist/cjs/lib/dtls/imports/common.d.ts +1 -0
- package/dist/cjs/lib/dtls/imports/common.js +17 -0
- package/dist/cjs/lib/dtls/imports/rtp.d.ts +1 -0
- package/dist/cjs/lib/dtls/imports/rtp.js +17 -0
- package/dist/cjs/lib/dtls/index.d.ts +7 -0
- package/dist/cjs/lib/dtls/index.js +117 -0
- package/dist/cjs/lib/dtls/record/antiReplayWindow.d.ts +27 -0
- package/dist/cjs/lib/dtls/record/antiReplayWindow.js +102 -0
- package/dist/cjs/lib/dtls/record/builder.d.ts +9 -0
- package/dist/cjs/lib/dtls/record/builder.js +27 -0
- package/dist/cjs/lib/dtls/record/const.d.ts +33 -0
- package/dist/cjs/lib/dtls/record/const.js +38 -0
- package/dist/cjs/lib/dtls/record/message/fragment.d.ts +26 -0
- package/dist/cjs/lib/dtls/record/message/fragment.js +96 -0
- package/dist/cjs/lib/dtls/record/message/header.d.ts +38 -0
- package/dist/cjs/lib/dtls/record/message/header.js +34 -0
- package/dist/cjs/lib/dtls/record/message/plaintext.d.ts +14 -0
- package/dist/cjs/lib/dtls/record/message/plaintext.js +63 -0
- package/dist/cjs/lib/dtls/record/receive.d.ts +9 -0
- package/dist/cjs/lib/dtls/record/receive.js +91 -0
- package/dist/cjs/lib/dtls/server.d.ts +6 -0
- package/dist/cjs/lib/dtls/server.js +78 -0
- package/dist/cjs/lib/dtls/socket.d.ts +52 -0
- package/dist/cjs/lib/dtls/socket.js +188 -0
- package/dist/cjs/lib/dtls/typings/domain.d.ts +20 -0
- package/dist/cjs/lib/dtls/typings/domain.js +2 -0
- package/dist/cjs/lib/dtls/util/binary.d.ts +2 -0
- package/dist/cjs/lib/dtls/util/binary.js +8 -0
- package/dist/cjs/lib/ice/candidate.d.ts +35 -0
- package/dist/cjs/lib/ice/candidate.js +198 -0
- package/dist/cjs/lib/ice/dns/lookup.d.ts +16 -0
- package/dist/cjs/lib/ice/dns/lookup.js +133 -0
- package/dist/cjs/lib/ice/dns/mdns.d.ts +38 -0
- package/dist/cjs/lib/ice/dns/mdns.js +145 -0
- package/dist/cjs/lib/ice/exceptions.d.ts +24 -0
- package/dist/cjs/lib/ice/exceptions.js +41 -0
- package/dist/cjs/lib/ice/helper.d.ts +17 -0
- package/dist/cjs/lib/ice/helper.js +74 -0
- package/dist/cjs/lib/ice/ice.d.ts +182 -0
- package/dist/cjs/lib/ice/ice.js +1584 -0
- package/dist/cjs/lib/ice/iceBase.d.ts +214 -0
- package/dist/cjs/lib/ice/iceBase.js +182 -0
- package/dist/cjs/lib/ice/imports/common.d.ts +1 -0
- package/dist/cjs/lib/ice/imports/common.js +17 -0
- package/dist/cjs/lib/ice/index.d.ts +12 -0
- package/dist/cjs/lib/ice/index.js +30 -0
- package/dist/cjs/lib/ice/internal/selectAddresses.d.ts +9 -0
- package/dist/cjs/lib/ice/internal/selectAddresses.js +39 -0
- package/dist/cjs/lib/ice/stun/attributes.d.ts +1 -0
- package/dist/cjs/lib/ice/stun/attributes.js +17 -0
- package/dist/cjs/lib/ice/stun/const.d.ts +8 -0
- package/dist/cjs/lib/ice/stun/const.js +25 -0
- package/dist/cjs/lib/ice/stun/message.d.ts +1 -0
- package/dist/cjs/lib/ice/stun/message.js +17 -0
- package/dist/cjs/lib/ice/stun/protocol.d.ts +30 -0
- package/dist/cjs/lib/ice/stun/protocol.js +125 -0
- package/dist/cjs/lib/ice/stun/tcpFrame.d.ts +5 -0
- package/dist/cjs/lib/ice/stun/tcpFrame.js +25 -0
- package/dist/cjs/lib/ice/stun/tcpProtocol.d.ts +57 -0
- package/dist/cjs/lib/ice/stun/tcpProtocol.js +323 -0
- package/dist/cjs/lib/ice/stun/transaction.d.ts +75 -0
- package/dist/cjs/lib/ice/stun/transaction.js +239 -0
- package/dist/cjs/lib/ice/turn/frame.d.ts +1 -0
- package/dist/cjs/lib/ice/turn/frame.js +17 -0
- package/dist/cjs/lib/ice/turn/protocol.d.ts +170 -0
- package/dist/cjs/lib/ice/turn/protocol.js +638 -0
- package/dist/cjs/lib/ice/types/model.d.ts +56 -0
- package/dist/cjs/lib/ice/types/model.js +2 -0
- package/dist/cjs/lib/ice/utils.d.ts +13 -0
- package/dist/cjs/lib/ice/utils.js +84 -0
- package/dist/cjs/lib/peer/const.d.ts +36 -0
- package/dist/cjs/lib/peer/const.js +53 -0
- package/dist/cjs/lib/peer/dataChannel.d.ts +69 -0
- package/dist/cjs/lib/peer/dataChannel.js +133 -0
- package/dist/cjs/lib/peer/errors.d.ts +11 -0
- package/dist/cjs/lib/peer/errors.js +23 -0
- package/dist/cjs/lib/peer/helper.d.ts +20 -0
- package/dist/cjs/lib/peer/helper.js +84 -0
- package/dist/cjs/lib/peer/imports/common.d.ts +1 -0
- package/dist/cjs/lib/peer/imports/common.js +17 -0
- package/dist/cjs/lib/peer/imports/dtls.d.ts +1 -0
- package/dist/cjs/lib/peer/imports/dtls.js +17 -0
- package/dist/cjs/lib/peer/imports/ice.d.ts +1 -0
- package/dist/cjs/lib/peer/imports/ice.js +17 -0
- package/dist/cjs/lib/peer/imports/rtp.d.ts +1 -0
- package/dist/cjs/lib/peer/imports/rtp.js +17 -0
- package/dist/cjs/lib/peer/index.d.ts +14 -0
- package/dist/cjs/lib/peer/index.js +30 -0
- package/dist/cjs/lib/peer/media/codec.d.ts +15 -0
- package/dist/cjs/lib/peer/media/codec.js +80 -0
- package/dist/cjs/lib/peer/media/codecCompatibility.d.ts +23 -0
- package/dist/cjs/lib/peer/media/codecCompatibility.js +137 -0
- package/dist/cjs/lib/peer/media/extension/rtcpFeedback.d.ts +6 -0
- package/dist/cjs/lib/peer/media/extension/rtcpFeedback.js +13 -0
- package/dist/cjs/lib/peer/media/extension/rtpExtension.d.ts +9 -0
- package/dist/cjs/lib/peer/media/extension/rtpExtension.js +52 -0
- package/dist/cjs/lib/peer/media/index.d.ts +12 -0
- package/dist/cjs/lib/peer/media/index.js +28 -0
- package/dist/cjs/lib/peer/media/parameters.d.ts +65 -0
- package/dist/cjs/lib/peer/media/parameters.js +60 -0
- package/dist/cjs/lib/peer/media/receiver/nack.d.ts +23 -0
- package/dist/cjs/lib/peer/media/receiver/nack.js +104 -0
- package/dist/cjs/lib/peer/media/receiver/receiverTwcc.d.ts +47 -0
- package/dist/cjs/lib/peer/media/receiver/receiverTwcc.js +179 -0
- package/dist/cjs/lib/peer/media/receiver/statistics.d.ts +22 -0
- package/dist/cjs/lib/peer/media/receiver/statistics.js +71 -0
- package/dist/cjs/lib/peer/media/router.d.ts +25 -0
- package/dist/cjs/lib/peer/media/router.js +166 -0
- package/dist/cjs/lib/peer/media/rtpReceiver.d.ts +90 -0
- package/dist/cjs/lib/peer/media/rtpReceiver.js +407 -0
- package/dist/cjs/lib/peer/media/rtpSender.d.ts +209 -0
- package/dist/cjs/lib/peer/media/rtpSender.js +826 -0
- package/dist/cjs/lib/peer/media/rtpTransceiver.d.ts +117 -0
- package/dist/cjs/lib/peer/media/rtpTransceiver.js +245 -0
- package/dist/cjs/lib/peer/media/sender/cumulativeResult.d.ts +19 -0
- package/dist/cjs/lib/peer/media/sender/cumulativeResult.js +61 -0
- package/dist/cjs/lib/peer/media/sender/senderBWE.d.ts +32 -0
- package/dist/cjs/lib/peer/media/sender/senderBWE.js +99 -0
- package/dist/cjs/lib/peer/media/stats.d.ts +293 -0
- package/dist/cjs/lib/peer/media/stats.js +90 -0
- package/dist/cjs/lib/peer/media/track.d.ts +67 -0
- package/dist/cjs/lib/peer/media/track.js +216 -0
- package/dist/cjs/lib/peer/peerConnection.d.ts +458 -0
- package/dist/cjs/lib/peer/peerConnection.js +1591 -0
- package/dist/cjs/lib/peer/sctpManager.d.ts +28 -0
- package/dist/cjs/lib/peer/sctpManager.js +138 -0
- package/dist/cjs/lib/peer/sdp.d.ts +97 -0
- package/dist/cjs/lib/peer/sdp.js +628 -0
- package/dist/cjs/lib/peer/sdpManager.d.ts +116 -0
- package/dist/cjs/lib/peer/sdpManager.js +573 -0
- package/dist/cjs/lib/peer/secureTransportManager.d.ts +96 -0
- package/dist/cjs/lib/peer/secureTransportManager.js +472 -0
- package/dist/cjs/lib/peer/transceiverManager.d.ts +151 -0
- package/dist/cjs/lib/peer/transceiverManager.js +767 -0
- package/dist/cjs/lib/peer/transport/dtls.d.ts +95 -0
- package/dist/cjs/lib/peer/transport/dtls.js +571 -0
- package/dist/cjs/lib/peer/transport/ice.d.ts +143 -0
- package/dist/cjs/lib/peer/transport/ice.js +436 -0
- package/dist/cjs/lib/peer/transport/sctp.d.ts +56 -0
- package/dist/cjs/lib/peer/transport/sctp.js +387 -0
- package/dist/cjs/lib/peer/types/domain.d.ts +5 -0
- package/dist/cjs/lib/peer/types/domain.js +19 -0
- package/dist/cjs/lib/peer/types/util.d.ts +2 -0
- package/dist/cjs/lib/peer/types/util.js +2 -0
- package/dist/cjs/lib/peer/utils.d.ts +73 -0
- package/dist/cjs/lib/peer/utils.js +306 -0
- package/dist/cjs/lib/rtp/codec/av1.d.ts +56 -0
- package/dist/cjs/lib/rtp/codec/av1.js +209 -0
- package/dist/cjs/lib/rtp/codec/base.d.ts +8 -0
- package/dist/cjs/lib/rtp/codec/base.js +15 -0
- package/dist/cjs/lib/rtp/codec/h264.d.ts +32 -0
- package/dist/cjs/lib/rtp/codec/h264.js +122 -0
- package/dist/cjs/lib/rtp/codec/index.d.ts +16 -0
- package/dist/cjs/lib/rtp/codec/index.js +84 -0
- package/dist/cjs/lib/rtp/codec/leb128.d.ts +5 -0
- package/dist/cjs/lib/rtp/codec/leb128.js +23 -0
- package/dist/cjs/lib/rtp/codec/opus.d.ts +9 -0
- package/dist/cjs/lib/rtp/codec/opus.js +25 -0
- package/dist/cjs/lib/rtp/codec/vp8.d.ts +27 -0
- package/dist/cjs/lib/rtp/codec/vp8.js +109 -0
- package/dist/cjs/lib/rtp/codec/vp9.d.ts +46 -0
- package/dist/cjs/lib/rtp/codec/vp9.js +161 -0
- package/dist/cjs/lib/rtp/const.d.ts +1 -0
- package/dist/cjs/lib/rtp/const.js +4 -0
- package/dist/cjs/lib/rtp/helper.d.ts +8 -0
- package/dist/cjs/lib/rtp/helper.js +36 -0
- package/dist/cjs/lib/rtp/imports/common.d.ts +1 -0
- package/dist/cjs/lib/rtp/imports/common.js +17 -0
- package/dist/cjs/lib/rtp/index.d.ts +25 -0
- package/dist/cjs/lib/rtp/index.js +41 -0
- package/dist/cjs/lib/rtp/rtcp/header.d.ts +13 -0
- package/dist/cjs/lib/rtp/rtcp/header.js +50 -0
- package/dist/cjs/lib/rtp/rtcp/psfb/fullIntraRequest.d.ts +16 -0
- package/dist/cjs/lib/rtp/rtcp/psfb/fullIntraRequest.js +34 -0
- package/dist/cjs/lib/rtp/rtcp/psfb/index.d.ts +14 -0
- package/dist/cjs/lib/rtp/rtcp/psfb/index.js +39 -0
- package/dist/cjs/lib/rtp/rtcp/psfb/pictureLossIndication.d.ts +10 -0
- package/dist/cjs/lib/rtp/rtcp/psfb/pictureLossIndication.js +20 -0
- package/dist/cjs/lib/rtp/rtcp/psfb/remb.d.ts +16 -0
- package/dist/cjs/lib/rtp/rtcp/psfb/remb.js +53 -0
- package/dist/cjs/lib/rtp/rtcp/rr.d.ts +32 -0
- package/dist/cjs/lib/rtp/rtcp/rr.js +73 -0
- package/dist/cjs/lib/rtp/rtcp/rtcp.d.ts +10 -0
- package/dist/cjs/lib/rtp/rtcp/rtcp.js +58 -0
- package/dist/cjs/lib/rtp/rtcp/rtpfb/const.d.ts +1 -0
- package/dist/cjs/lib/rtp/rtcp/rtpfb/const.js +4 -0
- package/dist/cjs/lib/rtp/rtcp/rtpfb/index.d.ts +14 -0
- package/dist/cjs/lib/rtp/rtcp/rtpfb/index.js +35 -0
- package/dist/cjs/lib/rtp/rtcp/rtpfb/nack.d.ts +17 -0
- package/dist/cjs/lib/rtp/rtcp/rtpfb/nack.js +77 -0
- package/dist/cjs/lib/rtp/rtcp/rtpfb/twcc.d.ts +71 -0
- package/dist/cjs/lib/rtp/rtcp/rtpfb/twcc.js +352 -0
- package/dist/cjs/lib/rtp/rtcp/sdes.d.ts +26 -0
- package/dist/cjs/lib/rtp/rtcp/sdes.js +97 -0
- package/dist/cjs/lib/rtp/rtcp/sr.d.ts +41 -0
- package/dist/cjs/lib/rtp/rtcp/sr.js +110 -0
- package/dist/cjs/lib/rtp/rtp/headerExtension.d.ts +72 -0
- package/dist/cjs/lib/rtp/rtp/headerExtension.js +117 -0
- package/dist/cjs/lib/rtp/rtp/red/encoder.d.ts +13 -0
- package/dist/cjs/lib/rtp/rtp/red/encoder.js +44 -0
- package/dist/cjs/lib/rtp/rtp/red/handler.d.ts +6 -0
- package/dist/cjs/lib/rtp/rtp/red/handler.js +59 -0
- package/dist/cjs/lib/rtp/rtp/red/packet.d.ts +26 -0
- package/dist/cjs/lib/rtp/rtp/red/packet.js +112 -0
- package/dist/cjs/lib/rtp/rtp/rtp.d.ts +44 -0
- package/dist/cjs/lib/rtp/rtp/rtp.js +271 -0
- package/dist/cjs/lib/rtp/rtp/rtx.d.ts +3 -0
- package/dist/cjs/lib/rtp/rtp/rtx.js +29 -0
- package/dist/cjs/lib/rtp/srtp/cipher/ctr.d.ts +16 -0
- package/dist/cjs/lib/rtp/srtp/cipher/ctr.js +107 -0
- package/dist/cjs/lib/rtp/srtp/cipher/gcm.d.ts +17 -0
- package/dist/cjs/lib/rtp/srtp/cipher/gcm.js +145 -0
- package/dist/cjs/lib/rtp/srtp/cipher/index.d.ts +13 -0
- package/dist/cjs/lib/rtp/srtp/cipher/index.js +24 -0
- package/dist/cjs/lib/rtp/srtp/const.d.ts +6 -0
- package/dist/cjs/lib/rtp/srtp/const.js +26 -0
- package/dist/cjs/lib/rtp/srtp/context/context.d.ts +45 -0
- package/dist/cjs/lib/rtp/srtp/context/context.js +180 -0
- package/dist/cjs/lib/rtp/srtp/context/srtcp.d.ts +8 -0
- package/dist/cjs/lib/rtp/srtp/context/srtcp.js +25 -0
- package/dist/cjs/lib/rtp/srtp/context/srtp.d.ts +9 -0
- package/dist/cjs/lib/rtp/srtp/context/srtp.js +41 -0
- package/dist/cjs/lib/rtp/srtp/error.d.ts +3 -0
- package/dist/cjs/lib/rtp/srtp/error.js +10 -0
- package/dist/cjs/lib/rtp/srtp/packet.d.ts +5 -0
- package/dist/cjs/lib/rtp/srtp/packet.js +47 -0
- package/dist/cjs/lib/rtp/srtp/session.d.ts +19 -0
- package/dist/cjs/lib/rtp/srtp/session.js +13 -0
- package/dist/cjs/lib/rtp/srtp/srtcp.d.ts +8 -0
- package/dist/cjs/lib/rtp/srtp/srtcp.js +21 -0
- package/dist/cjs/lib/rtp/srtp/srtp.d.ts +9 -0
- package/dist/cjs/lib/rtp/srtp/srtp.js +20 -0
- package/dist/cjs/lib/rtp/transport.d.ts +15 -0
- package/dist/cjs/lib/rtp/transport.js +23 -0
- package/dist/cjs/lib/rtp/util.d.ts +11 -0
- package/dist/cjs/lib/rtp/util.js +28 -0
- package/dist/cjs/lib/sctp/chunk.d.ts +164 -0
- package/dist/cjs/lib/sctp/chunk.js +542 -0
- package/dist/cjs/lib/sctp/const.d.ts +17 -0
- package/dist/cjs/lib/sctp/const.js +22 -0
- package/dist/cjs/lib/sctp/helper.d.ts +5 -0
- package/dist/cjs/lib/sctp/helper.js +14 -0
- package/dist/cjs/lib/sctp/imports/common.d.ts +1 -0
- package/dist/cjs/lib/sctp/imports/common.js +17 -0
- package/dist/cjs/lib/sctp/index.d.ts +6 -0
- package/dist/cjs/lib/sctp/index.js +20 -0
- package/dist/cjs/lib/sctp/param.d.ts +40 -0
- package/dist/cjs/lib/sctp/param.js +132 -0
- package/dist/cjs/lib/sctp/sctp.d.ts +210 -0
- package/dist/cjs/lib/sctp/sctp.js +1467 -0
- package/dist/cjs/lib/sctp/transport.d.ts +15 -0
- package/dist/cjs/lib/sctp/transport.js +28 -0
- package/dist/cjs/lib/turn/index.d.ts +9 -0
- package/dist/cjs/lib/turn/index.js +25 -0
- package/dist/cjs/lib/turn/node/server.d.ts +21 -0
- package/dist/cjs/lib/turn/node/server.js +94 -0
- package/dist/cjs/lib/turn/node/turnServer.d.ts +91 -0
- package/dist/cjs/lib/turn/node/turnServer.js +565 -0
- package/dist/cjs/lib/turn/protocol.d.ts +47 -0
- package/dist/cjs/lib/turn/protocol.js +116 -0
- package/dist/cjs/lib/turn/stun/attributes.d.ts +37 -0
- package/dist/cjs/lib/turn/stun/attributes.js +208 -0
- package/dist/cjs/lib/turn/stun/const.d.ts +28 -0
- package/dist/cjs/lib/turn/stun/const.js +87 -0
- package/dist/cjs/lib/turn/stun/ip.d.ts +12 -0
- package/dist/cjs/lib/turn/stun/ip.js +87 -0
- package/dist/cjs/lib/turn/stun/message.d.ts +37 -0
- package/dist/cjs/lib/turn/stun/message.js +180 -0
- package/dist/cjs/lib/turn/turn/auth.d.ts +1 -0
- package/dist/cjs/lib/turn/turn/auth.js +9 -0
- package/dist/cjs/lib/turn/turn/frame.d.ts +13 -0
- package/dist/cjs/lib/turn/turn/frame.js +68 -0
- package/dist/cjs/lib/turn/turn/protocol.d.ts +147 -0
- package/dist/cjs/lib/turn/turn/protocol.js +785 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/peer/Endpoints.d.ts +75 -0
- package/dist/cjs/peer/Endpoints.js +154 -0
- package/dist/cjs/peer/EngineConfig.d.ts +20 -0
- package/dist/cjs/peer/EngineConfig.js +36 -0
- package/dist/cjs/peer/EngineConnection.d.ts +22 -0
- package/dist/cjs/peer/EngineConnection.js +27 -0
- package/dist/cjs/peer/Events.d.ts +55 -0
- package/dist/cjs/peer/Events.js +85 -0
- package/dist/cjs/peer/MediaCodecs.d.ts +27 -0
- package/dist/cjs/peer/MediaCodecs.js +53 -0
- package/dist/cjs/peer/MediaTrack.d.ts +212 -0
- package/dist/cjs/peer/MediaTrack.js +313 -0
- package/dist/cjs/peer/PeerChannel.d.ts +248 -0
- package/dist/cjs/peer/PeerChannel.js +319 -0
- package/dist/cjs/peer/PeerConnection.d.ts +603 -0
- package/dist/cjs/peer/PeerConnection.js +697 -0
- package/dist/cjs/peer/PeerThreadChannel.d.ts +112 -0
- package/dist/cjs/peer/PeerThreadChannel.js +273 -0
- package/dist/cjs/peer/PeerThreadProtocol.d.ts +325 -0
- package/dist/cjs/peer/PeerThreadProtocol.js +2 -0
- package/dist/cjs/peer/PeerThreads.d.ts +114 -0
- package/dist/cjs/peer/PeerThreads.js +268 -0
- package/dist/cjs/peer/PeerWorker.d.ts +6 -0
- package/dist/cjs/peer/PeerWorker.js +461 -0
- package/dist/cjs/peer/PeerWorkerCode.d.ts +5 -0
- package/dist/cjs/peer/PeerWorkerCode.js +4 -0
- package/dist/cjs/peer/RemoteConnection.d.ts +314 -0
- package/dist/cjs/peer/RemoteConnection.js +913 -0
- package/dist/cjs/peer/RtpPacket.d.ts +112 -0
- package/dist/cjs/peer/RtpPacket.js +92 -0
- package/dist/cjs/peer/RtpTransceiver.d.ts +167 -0
- package/dist/cjs/peer/RtpTransceiver.js +235 -0
- package/dist/cjs/peer/SignalingClient.d.ts +236 -0
- package/dist/cjs/peer/SignalingClient.js +285 -0
- package/dist/cjs/protocol/SignalingProtocol.d.ts +266 -0
- package/dist/cjs/protocol/SignalingProtocol.js +65 -0
- package/dist/cjs/service/WebRTCServiceEntrypoint.d.ts +158 -0
- package/dist/cjs/service/WebRTCServiceEntrypoint.js +356 -0
- package/dist/cjs/sfu/SFU.d.ts +356 -0
- package/dist/cjs/sfu/SFU.js +763 -0
- package/dist/cjs/sfu/SFUAccess.d.ts +48 -0
- package/dist/cjs/sfu/SFUAccess.js +15 -0
- package/dist/cjs/sfu/SFUClusterLeg.d.ts +101 -0
- package/dist/cjs/sfu/SFUClusterLeg.js +106 -0
- package/dist/cjs/sfu/SFURoom.d.ts +148 -0
- package/dist/cjs/sfu/SFURoom.js +1300 -0
- package/dist/cjs/sfu/SFUWorker.d.ts +13 -0
- package/dist/cjs/sfu/SFUWorker.js +168 -0
- package/dist/cjs/sfu/SFUWorkerChannel.d.ts +204 -0
- package/dist/cjs/sfu/SFUWorkerChannel.js +105 -0
- package/dist/cjs/sfu/SFUWorkerCode.d.ts +5 -0
- package/dist/cjs/sfu/SFUWorkerCode.js +4 -0
- package/dist/cjs/sfu/SFUWorkers.d.ts +247 -0
- package/dist/cjs/sfu/SFUWorkers.js +552 -0
- package/dist/cjs/shared/ChunkedChannel.d.ts +122 -0
- package/dist/cjs/shared/ChunkedChannel.js +182 -0
- package/dist/cjs/shared/Connections.d.ts +231 -0
- package/dist/cjs/shared/Connections.js +2 -0
- package/dist/cjs/shared/Emitter.d.ts +50 -0
- package/dist/cjs/shared/Emitter.js +80 -0
- package/dist/cjs/shared/Peer.d.ts +182 -0
- package/dist/cjs/shared/Peer.js +509 -0
- package/dist/cjs/shared/PeerServiceProxy.d.ts +173 -0
- package/dist/cjs/shared/PeerServiceProxy.js +304 -0
- package/dist/cjs/shared/Room.d.ts +143 -0
- package/dist/cjs/shared/Room.js +515 -0
- package/dist/cjs/shared/SignalingError.d.ts +40 -0
- package/dist/cjs/shared/SignalingError.js +48 -0
- package/dist/cjs/shared/SignalingSession.d.ts +97 -0
- package/dist/cjs/shared/SignalingSession.js +347 -0
- package/dist/cjs/shared/Transports.d.ts +139 -0
- package/dist/cjs/shared/Transports.js +285 -0
- package/dist/cjs/signaling/MediaServers.d.ts +40 -0
- package/dist/cjs/signaling/MediaServers.js +16 -0
- package/dist/cjs/signaling/Signaling.d.ts +573 -0
- package/dist/cjs/signaling/Signaling.js +945 -0
- package/dist/cjs/signaling/SignalingController.d.ts +128 -0
- package/dist/cjs/signaling/SignalingController.js +229 -0
- package/dist/cjs/turn/TURNCredentials.d.ts +49 -0
- package/dist/cjs/turn/TURNCredentials.js +49 -0
- package/dist/cjs/turn/TURNIceServers.d.ts +11 -0
- package/dist/cjs/turn/TURNIceServers.js +25 -0
- package/dist/cjs/turn/TURNServer.d.ts +309 -0
- package/dist/cjs/turn/TURNServer.js +331 -0
- package/dist/cjs/turn/TURNWorker.d.ts +42 -0
- package/dist/cjs/turn/TURNWorker.js +52 -0
- package/dist/cjs/turn/TURNWorkerCode.d.ts +5 -0
- package/dist/cjs/turn/TURNWorkerCode.js +4 -0
- package/dist/cjs/turn/TURNWorkers.d.ts +52 -0
- package/dist/cjs/turn/TURNWorkers.js +211 -0
- package/dist/cjs/whep/WHEP.d.ts +386 -0
- package/dist/cjs/whep/WHEP.js +426 -0
- package/dist/cjs/whep/WHEPController.d.ts +134 -0
- package/dist/cjs/whep/WHEPController.js +301 -0
- package/dist/cjs/whip/WHIP.d.ts +426 -0
- package/dist/cjs/whip/WHIP.js +470 -0
- package/dist/cjs/whip/WHIPController.d.ts +132 -0
- package/dist/cjs/whip/WHIPController.js +299 -0
- package/dist/esm/client/SignalingConnection.js +63 -0
- package/dist/esm/cluster/Cluster.js +542 -0
- package/dist/esm/cluster/ClusterFrames.js +85 -0
- package/dist/esm/cluster/ClusterTURN.js +73 -0
- package/dist/esm/cluster/Rendezvous.js +20 -0
- package/dist/esm/cluster/transports/ClusterTransport.js +1 -0
- package/dist/esm/cluster/transports/LoadClient.js +44 -0
- package/dist/esm/cluster/transports/MemoryClusterTransport.js +43 -0
- package/dist/esm/cluster/transports/NATSClusterTransport.js +66 -0
- package/dist/esm/cluster/transports/RedisClusterTransport.js +73 -0
- package/dist/esm/exceptions/ClusterRequestException.js +14 -0
- package/dist/esm/exceptions/ClusterTimeoutException.js +13 -0
- package/dist/esm/exceptions/ClusterTransportNotFoundException.js +14 -0
- package/dist/esm/exceptions/SignalingClientRequiredException.js +15 -0
- package/dist/esm/exceptions/SignalingConnectionException.js +15 -0
- package/dist/esm/exceptions/SignalingDeniedException.js +14 -0
- package/dist/esm/exceptions/SignalingLimitException.js +14 -0
- package/dist/esm/exceptions/SignalingNotAMemberException.js +14 -0
- package/dist/esm/exceptions/WHEPDeniedException.js +18 -0
- package/dist/esm/exceptions/WHEPLimitException.js +18 -0
- package/dist/esm/exceptions/WHEPMediaTypeException.js +18 -0
- package/dist/esm/exceptions/WHEPOfferException.js +19 -0
- package/dist/esm/exceptions/WHEPSessionNotFoundException.js +18 -0
- package/dist/esm/exceptions/WHIPDeniedException.js +18 -0
- package/dist/esm/exceptions/WHIPLimitException.js +18 -0
- package/dist/esm/exceptions/WHIPMediaTypeException.js +18 -0
- package/dist/esm/exceptions/WHIPOfferException.js +19 -0
- package/dist/esm/exceptions/WHIPSessionNotFoundException.js +18 -0
- package/dist/esm/exports/Client.js +5 -0
- package/dist/esm/exports/WebRTC.js +41 -0
- package/dist/esm/lib/common/binary.js +244 -0
- package/dist/esm/lib/common/binaryData.js +392 -0
- package/dist/esm/lib/common/crc.js +118 -0
- package/dist/esm/lib/common/deque.js +85 -0
- package/dist/esm/lib/common/event.js +202 -0
- package/dist/esm/lib/common/index.js +11 -0
- package/dist/esm/lib/common/log.js +55 -0
- package/dist/esm/lib/common/network.js +52 -0
- package/dist/esm/lib/common/number.js +31 -0
- package/dist/esm/lib/common/promise.js +64 -0
- package/dist/esm/lib/common/transport.js +401 -0
- package/dist/esm/lib/common/type.js +1 -0
- package/dist/esm/lib/dtls/cipher/const.js +30 -0
- package/dist/esm/lib/dtls/cipher/create.js +98 -0
- package/dist/esm/lib/dtls/cipher/ec.js +37 -0
- package/dist/esm/lib/dtls/cipher/key-exchange.js +103 -0
- package/dist/esm/lib/dtls/cipher/namedCurve.js +24 -0
- package/dist/esm/lib/dtls/cipher/prf.js +79 -0
- package/dist/esm/lib/dtls/cipher/suites/abstract.js +37 -0
- package/dist/esm/lib/dtls/cipher/suites/aead.js +96 -0
- package/dist/esm/lib/dtls/cipher/suites/null.js +35 -0
- package/dist/esm/lib/dtls/cipher/utils.js +34 -0
- package/dist/esm/lib/dtls/cipher/x509.js +94 -0
- package/dist/esm/lib/dtls/client.js +72 -0
- package/dist/esm/lib/dtls/context/cipher.js +83 -0
- package/dist/esm/lib/dtls/context/dtls.js +45 -0
- package/dist/esm/lib/dtls/context/srtp.js +8 -0
- package/dist/esm/lib/dtls/context/transport.js +13 -0
- package/dist/esm/lib/dtls/flight/client/flight1.js +22 -0
- package/dist/esm/lib/dtls/flight/client/flight3.js +21 -0
- package/dist/esm/lib/dtls/flight/client/flight5.js +202 -0
- package/dist/esm/lib/dtls/flight/flight.js +64 -0
- package/dist/esm/lib/dtls/flight/server/flight2.js +122 -0
- package/dist/esm/lib/dtls/flight/server/flight4.js +83 -0
- package/dist/esm/lib/dtls/flight/server/flight6.js +107 -0
- package/dist/esm/lib/dtls/handshake/binary.js +17 -0
- package/dist/esm/lib/dtls/handshake/const.js +14 -0
- package/dist/esm/lib/dtls/handshake/extensions/ellipticCurves.js +36 -0
- package/dist/esm/lib/dtls/handshake/extensions/extendedMasterSecret.js +3 -0
- package/dist/esm/lib/dtls/handshake/extensions/renegotiationIndication.js +30 -0
- package/dist/esm/lib/dtls/handshake/extensions/signature.js +35 -0
- package/dist/esm/lib/dtls/handshake/extensions/useSrtp.js +61 -0
- package/dist/esm/lib/dtls/handshake/message/alert.js +20 -0
- package/dist/esm/lib/dtls/handshake/message/certificate.js +31 -0
- package/dist/esm/lib/dtls/handshake/message/changeCipherSpec.js +20 -0
- package/dist/esm/lib/dtls/handshake/message/client/certificateVerify.js +31 -0
- package/dist/esm/lib/dtls/handshake/message/client/hello.js +44 -0
- package/dist/esm/lib/dtls/handshake/message/client/keyExchange.js +29 -0
- package/dist/esm/lib/dtls/handshake/message/finished.js +22 -0
- package/dist/esm/lib/dtls/handshake/message/server/certificateRequest.js +34 -0
- package/dist/esm/lib/dtls/handshake/message/server/hello.js +53 -0
- package/dist/esm/lib/dtls/handshake/message/server/helloDone.js +26 -0
- package/dist/esm/lib/dtls/handshake/message/server/helloVerifyRequest.js +38 -0
- package/dist/esm/lib/dtls/handshake/message/server/keyExchange.js +45 -0
- package/dist/esm/lib/dtls/handshake/random.js +25 -0
- package/dist/esm/lib/dtls/helper.js +23 -0
- package/dist/esm/lib/dtls/imports/common.js +1 -0
- package/dist/esm/lib/dtls/imports/rtp.js +1 -0
- package/dist/esm/lib/dtls/index.js +97 -0
- package/dist/esm/lib/dtls/record/antiReplayWindow.js +98 -0
- package/dist/esm/lib/dtls/record/builder.js +22 -0
- package/dist/esm/lib/dtls/record/const.js +35 -0
- package/dist/esm/lib/dtls/record/message/fragment.js +92 -0
- package/dist/esm/lib/dtls/record/message/header.js +30 -0
- package/dist/esm/lib/dtls/record/message/plaintext.js +59 -0
- package/dist/esm/lib/dtls/record/receive.js +86 -0
- package/dist/esm/lib/dtls/server.js +74 -0
- package/dist/esm/lib/dtls/socket.js +184 -0
- package/dist/esm/lib/dtls/typings/domain.js +1 -0
- package/dist/esm/lib/dtls/util/binary.js +5 -0
- package/dist/esm/lib/ice/candidate.js +190 -0
- package/dist/esm/lib/ice/dns/lookup.js +95 -0
- package/dist/esm/lib/ice/dns/mdns.js +139 -0
- package/dist/esm/lib/ice/exceptions.js +34 -0
- package/dist/esm/lib/ice/helper.js +65 -0
- package/dist/esm/lib/ice/ice.js +1547 -0
- package/dist/esm/lib/ice/iceBase.js +172 -0
- package/dist/esm/lib/ice/imports/common.js +1 -0
- package/dist/esm/lib/ice/index.js +12 -0
- package/dist/esm/lib/ice/internal/selectAddresses.js +36 -0
- package/dist/esm/lib/ice/stun/attributes.js +1 -0
- package/dist/esm/lib/ice/stun/const.js +8 -0
- package/dist/esm/lib/ice/stun/message.js +1 -0
- package/dist/esm/lib/ice/stun/protocol.js +121 -0
- package/dist/esm/lib/ice/stun/tcpFrame.js +21 -0
- package/dist/esm/lib/ice/stun/tcpProtocol.js +318 -0
- package/dist/esm/lib/ice/stun/transaction.js +230 -0
- package/dist/esm/lib/ice/turn/frame.js +1 -0
- package/dist/esm/lib/ice/turn/protocol.js +630 -0
- package/dist/esm/lib/ice/types/model.js +1 -0
- package/dist/esm/lib/ice/utils.js +43 -0
- package/dist/esm/lib/peer/const.js +50 -0
- package/dist/esm/lib/peer/dataChannel.js +127 -0
- package/dist/esm/lib/peer/errors.js +17 -0
- package/dist/esm/lib/peer/helper.js +77 -0
- package/dist/esm/lib/peer/imports/common.js +1 -0
- package/dist/esm/lib/peer/imports/dtls.js +1 -0
- package/dist/esm/lib/peer/imports/ice.js +1 -0
- package/dist/esm/lib/peer/imports/rtp.js +1 -0
- package/dist/esm/lib/peer/index.js +14 -0
- package/dist/esm/lib/peer/media/codec.js +69 -0
- package/dist/esm/lib/peer/media/codecCompatibility.js +128 -0
- package/dist/esm/lib/peer/media/extension/rtcpFeedback.js +5 -0
- package/dist/esm/lib/peer/media/extension/rtpExtension.js +42 -0
- package/dist/esm/lib/peer/media/index.js +12 -0
- package/dist/esm/lib/peer/media/parameters.js +50 -0
- package/dist/esm/lib/peer/media/receiver/nack.js +100 -0
- package/dist/esm/lib/peer/media/receiver/receiverTwcc.js +175 -0
- package/dist/esm/lib/peer/media/receiver/statistics.js +67 -0
- package/dist/esm/lib/peer/media/router.js +162 -0
- package/dist/esm/lib/peer/media/rtpReceiver.js +403 -0
- package/dist/esm/lib/peer/media/rtpSender.js +822 -0
- package/dist/esm/lib/peer/media/rtpTransceiver.js +241 -0
- package/dist/esm/lib/peer/media/sender/cumulativeResult.js +57 -0
- package/dist/esm/lib/peer/media/sender/senderBWE.js +95 -0
- package/dist/esm/lib/peer/media/stats.js +81 -0
- package/dist/esm/lib/peer/media/track.js +208 -0
- package/dist/esm/lib/peer/peerConnection.js +1585 -0
- package/dist/esm/lib/peer/sctpManager.js +134 -0
- package/dist/esm/lib/peer/sdp.js +614 -0
- package/dist/esm/lib/peer/sdpManager.js +569 -0
- package/dist/esm/lib/peer/secureTransportManager.js +468 -0
- package/dist/esm/lib/peer/transceiverManager.js +763 -0
- package/dist/esm/lib/peer/transport/dtls.js +564 -0
- package/dist/esm/lib/peer/transport/ice.js +426 -0
- package/dist/esm/lib/peer/transport/sctp.js +382 -0
- package/dist/esm/lib/peer/types/domain.js +16 -0
- package/dist/esm/lib/peer/types/util.js +1 -0
- package/dist/esm/lib/peer/utils.js +286 -0
- package/dist/esm/lib/rtp/codec/av1.js +203 -0
- package/dist/esm/lib/rtp/codec/base.js +11 -0
- package/dist/esm/lib/rtp/codec/h264.js +118 -0
- package/dist/esm/lib/rtp/codec/index.js +66 -0
- package/dist/esm/lib/rtp/codec/leb128.js +20 -0
- package/dist/esm/lib/rtp/codec/opus.js +21 -0
- package/dist/esm/lib/rtp/codec/vp8.js +105 -0
- package/dist/esm/lib/rtp/codec/vp9.js +157 -0
- package/dist/esm/lib/rtp/const.js +1 -0
- package/dist/esm/lib/rtp/helper.js +29 -0
- package/dist/esm/lib/rtp/imports/common.js +1 -0
- package/dist/esm/lib/rtp/index.js +25 -0
- package/dist/esm/lib/rtp/rtcp/header.js +46 -0
- package/dist/esm/lib/rtp/rtcp/psfb/fullIntraRequest.js +30 -0
- package/dist/esm/lib/rtp/rtcp/psfb/index.js +35 -0
- package/dist/esm/lib/rtp/rtcp/psfb/pictureLossIndication.js +16 -0
- package/dist/esm/lib/rtp/rtcp/psfb/remb.js +49 -0
- package/dist/esm/lib/rtp/rtcp/rr.js +68 -0
- package/dist/esm/lib/rtp/rtcp/rtcp.js +53 -0
- package/dist/esm/lib/rtp/rtcp/rtpfb/const.js +1 -0
- package/dist/esm/lib/rtp/rtcp/rtpfb/index.js +31 -0
- package/dist/esm/lib/rtp/rtcp/rtpfb/nack.js +73 -0
- package/dist/esm/lib/rtp/rtcp/rtpfb/twcc.js +344 -0
- package/dist/esm/lib/rtp/rtcp/sdes.js +91 -0
- package/dist/esm/lib/rtp/rtcp/sr.js +104 -0
- package/dist/esm/lib/rtp/rtp/headerExtension.js +102 -0
- package/dist/esm/lib/rtp/rtp/red/encoder.js +40 -0
- package/dist/esm/lib/rtp/rtp/red/handler.js +55 -0
- package/dist/esm/lib/rtp/rtp/red/packet.js +107 -0
- package/dist/esm/lib/rtp/rtp/rtp.js +266 -0
- package/dist/esm/lib/rtp/rtp/rtx.js +25 -0
- package/dist/esm/lib/rtp/srtp/cipher/ctr.js +103 -0
- package/dist/esm/lib/rtp/srtp/cipher/gcm.js +141 -0
- package/dist/esm/lib/rtp/srtp/cipher/index.js +20 -0
- package/dist/esm/lib/rtp/srtp/const.js +21 -0
- package/dist/esm/lib/rtp/srtp/context/context.js +175 -0
- package/dist/esm/lib/rtp/srtp/context/srtcp.js +21 -0
- package/dist/esm/lib/rtp/srtp/context/srtp.js +37 -0
- package/dist/esm/lib/rtp/srtp/error.js +6 -0
- package/dist/esm/lib/rtp/srtp/packet.js +42 -0
- package/dist/esm/lib/rtp/srtp/session.js +9 -0
- package/dist/esm/lib/rtp/srtp/srtcp.js +17 -0
- package/dist/esm/lib/rtp/srtp/srtp.js +16 -0
- package/dist/esm/lib/rtp/transport.js +18 -0
- package/dist/esm/lib/rtp/util.js +24 -0
- package/dist/esm/lib/sctp/chunk.js +515 -0
- package/dist/esm/lib/sctp/const.js +19 -0
- package/dist/esm/lib/sctp/helper.js +10 -0
- package/dist/esm/lib/sctp/imports/common.js +1 -0
- package/dist/esm/lib/sctp/index.js +4 -0
- package/dist/esm/lib/sctp/param.js +126 -0
- package/dist/esm/lib/sctp/sctp.js +1459 -0
- package/dist/esm/lib/sctp/transport.js +23 -0
- package/dist/esm/lib/turn/index.js +9 -0
- package/dist/esm/lib/turn/node/server.js +89 -0
- package/dist/esm/lib/turn/node/turnServer.js +560 -0
- package/dist/esm/lib/turn/protocol.js +112 -0
- package/dist/esm/lib/turn/stun/attributes.js +198 -0
- package/dist/esm/lib/turn/stun/const.js +82 -0
- package/dist/esm/lib/turn/stun/ip.js +81 -0
- package/dist/esm/lib/turn/stun/message.js +174 -0
- package/dist/esm/lib/turn/turn/auth.js +6 -0
- package/dist/esm/lib/turn/turn/frame.js +61 -0
- package/dist/esm/lib/turn/turn/protocol.js +781 -0
- package/dist/esm/peer/Endpoints.js +143 -0
- package/dist/esm/peer/EngineConfig.js +33 -0
- package/dist/esm/peer/EngineConnection.js +22 -0
- package/dist/esm/peer/Events.js +81 -0
- package/dist/esm/peer/MediaCodecs.js +47 -0
- package/dist/esm/peer/MediaTrack.js +305 -0
- package/dist/esm/peer/PeerChannel.js +315 -0
- package/dist/esm/peer/PeerConnection.js +694 -0
- package/dist/esm/peer/PeerThreadChannel.js +266 -0
- package/dist/esm/peer/PeerThreadProtocol.js +1 -0
- package/dist/esm/peer/PeerThreads.js +264 -0
- package/dist/esm/peer/PeerWorker.js +458 -0
- package/dist/esm/peer/PeerWorkerCode.js +1 -0
- package/dist/esm/peer/RemoteConnection.js +905 -0
- package/dist/esm/peer/RtpPacket.js +86 -0
- package/dist/esm/peer/RtpTransceiver.js +225 -0
- package/dist/esm/peer/SignalingClient.js +249 -0
- package/dist/esm/protocol/SignalingProtocol.js +62 -0
- package/dist/esm/service/WebRTCServiceEntrypoint.js +352 -0
- package/dist/esm/sfu/SFU.js +759 -0
- package/dist/esm/sfu/SFUAccess.js +12 -0
- package/dist/esm/sfu/SFUClusterLeg.js +102 -0
- package/dist/esm/sfu/SFURoom.js +1296 -0
- package/dist/esm/sfu/SFUWorker.js +165 -0
- package/dist/esm/sfu/SFUWorkerChannel.js +101 -0
- package/dist/esm/sfu/SFUWorkerCode.js +1 -0
- package/dist/esm/sfu/SFUWorkers.js +547 -0
- package/dist/esm/shared/ChunkedChannel.js +178 -0
- package/dist/esm/shared/Connections.js +1 -0
- package/dist/esm/shared/Emitter.js +76 -0
- package/dist/esm/shared/Peer.js +505 -0
- package/dist/esm/shared/PeerServiceProxy.js +299 -0
- package/dist/esm/shared/Room.js +511 -0
- package/dist/esm/shared/SignalingError.js +43 -0
- package/dist/esm/shared/SignalingSession.js +343 -0
- package/dist/esm/shared/Transports.js +279 -0
- package/dist/esm/signaling/MediaServers.js +13 -0
- package/dist/esm/signaling/Signaling.js +941 -0
- package/dist/esm/signaling/SignalingController.js +225 -0
- package/dist/esm/turn/TURNCredentials.js +44 -0
- package/dist/esm/turn/TURNIceServers.js +22 -0
- package/dist/esm/turn/TURNServer.js +327 -0
- package/dist/esm/turn/TURNWorker.js +49 -0
- package/dist/esm/turn/TURNWorkerCode.js +1 -0
- package/dist/esm/turn/TURNWorkers.js +206 -0
- package/dist/esm/whep/WHEP.js +422 -0
- package/dist/esm/whep/WHEPController.js +298 -0
- package/dist/esm/whip/WHIP.js +466 -0
- package/dist/esm/whip/WHIPController.js +296 -0
- package/dist/types/client/SignalingConnection.d.ts +81 -0
- package/dist/types/cluster/Cluster.d.ts +503 -0
- package/dist/types/cluster/ClusterFrames.d.ts +24 -0
- package/dist/types/cluster/ClusterTURN.d.ts +63 -0
- package/dist/types/cluster/Rendezvous.d.ts +8 -0
- package/dist/types/cluster/transports/ClusterTransport.d.ts +34 -0
- package/dist/types/cluster/transports/LoadClient.d.ts +6 -0
- package/dist/types/cluster/transports/MemoryClusterTransport.d.ts +13 -0
- package/dist/types/cluster/transports/NATSClusterTransport.d.ts +23 -0
- package/dist/types/cluster/transports/RedisClusterTransport.d.ts +23 -0
- package/dist/types/exceptions/ClusterRequestException.d.ts +11 -0
- package/dist/types/exceptions/ClusterTimeoutException.d.ts +10 -0
- package/dist/types/exceptions/ClusterTransportNotFoundException.d.ts +11 -0
- package/dist/types/exceptions/SignalingClientRequiredException.d.ts +12 -0
- package/dist/types/exceptions/SignalingConnectionException.d.ts +12 -0
- package/dist/types/exceptions/SignalingDeniedException.d.ts +11 -0
- package/dist/types/exceptions/SignalingLimitException.d.ts +11 -0
- package/dist/types/exceptions/SignalingNotAMemberException.d.ts +11 -0
- package/dist/types/exceptions/WHEPDeniedException.d.ts +15 -0
- package/dist/types/exceptions/WHEPLimitException.d.ts +15 -0
- package/dist/types/exceptions/WHEPMediaTypeException.d.ts +15 -0
- package/dist/types/exceptions/WHEPOfferException.d.ts +16 -0
- package/dist/types/exceptions/WHEPSessionNotFoundException.d.ts +15 -0
- package/dist/types/exceptions/WHIPDeniedException.d.ts +15 -0
- package/dist/types/exceptions/WHIPLimitException.d.ts +15 -0
- package/dist/types/exceptions/WHIPMediaTypeException.d.ts +15 -0
- package/dist/types/exceptions/WHIPOfferException.d.ts +16 -0
- package/dist/types/exceptions/WHIPSessionNotFoundException.d.ts +15 -0
- package/dist/types/exports/Client.d.ts +11 -0
- package/dist/types/exports/WebRTC.d.ts +48 -0
- package/dist/types/lib/common/binary.d.ts +51 -0
- package/dist/types/lib/common/binaryData.d.ts +116 -0
- package/dist/types/lib/common/crc.d.ts +4 -0
- package/dist/types/lib/common/deque.d.ts +36 -0
- package/dist/types/lib/common/event.d.ts +48 -0
- package/dist/types/lib/common/index.d.ts +11 -0
- package/dist/types/lib/common/log.d.ts +47 -0
- package/dist/types/lib/common/network.d.ts +10 -0
- package/dist/types/lib/common/number.d.ts +13 -0
- package/dist/types/lib/common/promise.d.ts +21 -0
- package/dist/types/lib/common/transport.d.ts +104 -0
- package/dist/types/lib/common/type.d.ts +3 -0
- package/dist/types/lib/dtls/cipher/const.d.ts +42 -0
- package/dist/types/lib/dtls/cipher/create.d.ts +21 -0
- package/dist/types/lib/dtls/cipher/ec.d.ts +28 -0
- package/dist/types/lib/dtls/cipher/key-exchange.d.ts +43 -0
- package/dist/types/lib/dtls/cipher/namedCurve.d.ts +7 -0
- package/dist/types/lib/dtls/cipher/prf.d.ts +17 -0
- package/dist/types/lib/dtls/cipher/suites/abstract.d.ts +40 -0
- package/dist/types/lib/dtls/cipher/suites/aead.d.ts +28 -0
- package/dist/types/lib/dtls/cipher/suites/null.d.ts +24 -0
- package/dist/types/lib/dtls/cipher/utils.d.ts +18 -0
- package/dist/types/lib/dtls/cipher/x509.d.ts +33 -0
- package/dist/types/lib/dtls/client.d.ts +7 -0
- package/dist/types/lib/dtls/context/cipher.d.ts +42 -0
- package/dist/types/lib/dtls/context/dtls.d.ts +38 -0
- package/dist/types/lib/dtls/context/srtp.d.ts +5 -0
- package/dist/types/lib/dtls/context/transport.d.ts +8 -0
- package/dist/types/lib/dtls/flight/client/flight1.d.ts +10 -0
- package/dist/types/lib/dtls/flight/client/flight3.d.ts +8 -0
- package/dist/types/lib/dtls/flight/client/flight5.d.ts +18 -0
- package/dist/types/lib/dtls/flight/flight.d.ts +18 -0
- package/dist/types/lib/dtls/flight/server/flight2.d.ts +6 -0
- package/dist/types/lib/dtls/flight/server/flight4.d.ts +17 -0
- package/dist/types/lib/dtls/flight/server/flight6.d.ts +13 -0
- package/dist/types/lib/dtls/handshake/binary.d.ts +16 -0
- package/dist/types/lib/dtls/handshake/const.d.ts +13 -0
- package/dist/types/lib/dtls/handshake/extensions/ellipticCurves.d.ts +17 -0
- package/dist/types/lib/dtls/handshake/extensions/extendedMasterSecret.d.ts +3 -0
- package/dist/types/lib/dtls/handshake/extensions/renegotiationIndication.d.ts +18 -0
- package/dist/types/lib/dtls/handshake/extensions/signature.d.ts +26 -0
- package/dist/types/lib/dtls/handshake/extensions/useSrtp.d.ts +19 -0
- package/dist/types/lib/dtls/handshake/message/alert.d.ts +12 -0
- package/dist/types/lib/dtls/handshake/message/certificate.d.ts +17 -0
- package/dist/types/lib/dtls/handshake/message/changeCipherSpec.d.ts +11 -0
- package/dist/types/lib/dtls/handshake/message/client/certificateVerify.d.ts +20 -0
- package/dist/types/lib/dtls/handshake/message/client/hello.d.ts +50 -0
- package/dist/types/lib/dtls/handshake/message/client/keyExchange.d.ts +17 -0
- package/dist/types/lib/dtls/handshake/message/finished.d.ts +13 -0
- package/dist/types/lib/dtls/handshake/message/server/certificateRequest.d.ts +31 -0
- package/dist/types/lib/dtls/handshake/message/server/hello.d.ts +33 -0
- package/dist/types/lib/dtls/handshake/message/server/helloDone.d.ts +12 -0
- package/dist/types/lib/dtls/handshake/message/server/helloVerifyRequest.d.ts +32 -0
- package/dist/types/lib/dtls/handshake/message/server/keyExchange.d.ts +32 -0
- package/dist/types/lib/dtls/handshake/random.d.ts +13 -0
- package/dist/types/lib/dtls/helper.d.ts +4 -0
- package/dist/types/lib/dtls/imports/common.d.ts +1 -0
- package/dist/types/lib/dtls/imports/rtp.d.ts +1 -0
- package/dist/types/lib/dtls/index.d.ts +7 -0
- package/dist/types/lib/dtls/record/antiReplayWindow.d.ts +27 -0
- package/dist/types/lib/dtls/record/builder.d.ts +9 -0
- package/dist/types/lib/dtls/record/const.d.ts +33 -0
- package/dist/types/lib/dtls/record/message/fragment.d.ts +26 -0
- package/dist/types/lib/dtls/record/message/header.d.ts +38 -0
- package/dist/types/lib/dtls/record/message/plaintext.d.ts +14 -0
- package/dist/types/lib/dtls/record/receive.d.ts +9 -0
- package/dist/types/lib/dtls/server.d.ts +6 -0
- package/dist/types/lib/dtls/socket.d.ts +52 -0
- package/dist/types/lib/dtls/typings/domain.d.ts +20 -0
- package/dist/types/lib/dtls/util/binary.d.ts +2 -0
- package/dist/types/lib/ice/candidate.d.ts +35 -0
- package/dist/types/lib/ice/dns/lookup.d.ts +16 -0
- package/dist/types/lib/ice/dns/mdns.d.ts +38 -0
- package/dist/types/lib/ice/exceptions.d.ts +24 -0
- package/dist/types/lib/ice/helper.d.ts +17 -0
- package/dist/types/lib/ice/ice.d.ts +182 -0
- package/dist/types/lib/ice/iceBase.d.ts +214 -0
- package/dist/types/lib/ice/imports/common.d.ts +1 -0
- package/dist/types/lib/ice/index.d.ts +12 -0
- package/dist/types/lib/ice/internal/selectAddresses.d.ts +9 -0
- package/dist/types/lib/ice/stun/attributes.d.ts +1 -0
- package/dist/types/lib/ice/stun/const.d.ts +8 -0
- package/dist/types/lib/ice/stun/message.d.ts +1 -0
- package/dist/types/lib/ice/stun/protocol.d.ts +30 -0
- package/dist/types/lib/ice/stun/tcpFrame.d.ts +5 -0
- package/dist/types/lib/ice/stun/tcpProtocol.d.ts +57 -0
- package/dist/types/lib/ice/stun/transaction.d.ts +75 -0
- package/dist/types/lib/ice/turn/frame.d.ts +1 -0
- package/dist/types/lib/ice/turn/protocol.d.ts +170 -0
- package/dist/types/lib/ice/types/model.d.ts +56 -0
- package/dist/types/lib/ice/utils.d.ts +13 -0
- package/dist/types/lib/peer/const.d.ts +36 -0
- package/dist/types/lib/peer/dataChannel.d.ts +69 -0
- package/dist/types/lib/peer/errors.d.ts +11 -0
- package/dist/types/lib/peer/helper.d.ts +20 -0
- package/dist/types/lib/peer/imports/common.d.ts +1 -0
- package/dist/types/lib/peer/imports/dtls.d.ts +1 -0
- package/dist/types/lib/peer/imports/ice.d.ts +1 -0
- package/dist/types/lib/peer/imports/rtp.d.ts +1 -0
- package/dist/types/lib/peer/index.d.ts +14 -0
- package/dist/types/lib/peer/media/codec.d.ts +15 -0
- package/dist/types/lib/peer/media/codecCompatibility.d.ts +23 -0
- package/dist/types/lib/peer/media/extension/rtcpFeedback.d.ts +6 -0
- package/dist/types/lib/peer/media/extension/rtpExtension.d.ts +9 -0
- package/dist/types/lib/peer/media/index.d.ts +12 -0
- package/dist/types/lib/peer/media/parameters.d.ts +65 -0
- package/dist/types/lib/peer/media/receiver/nack.d.ts +23 -0
- package/dist/types/lib/peer/media/receiver/receiverTwcc.d.ts +47 -0
- package/dist/types/lib/peer/media/receiver/statistics.d.ts +22 -0
- package/dist/types/lib/peer/media/router.d.ts +25 -0
- package/dist/types/lib/peer/media/rtpReceiver.d.ts +90 -0
- package/dist/types/lib/peer/media/rtpSender.d.ts +209 -0
- package/dist/types/lib/peer/media/rtpTransceiver.d.ts +117 -0
- package/dist/types/lib/peer/media/sender/cumulativeResult.d.ts +19 -0
- package/dist/types/lib/peer/media/sender/senderBWE.d.ts +32 -0
- package/dist/types/lib/peer/media/stats.d.ts +293 -0
- package/dist/types/lib/peer/media/track.d.ts +67 -0
- package/dist/types/lib/peer/peerConnection.d.ts +458 -0
- package/dist/types/lib/peer/sctpManager.d.ts +28 -0
- package/dist/types/lib/peer/sdp.d.ts +97 -0
- package/dist/types/lib/peer/sdpManager.d.ts +116 -0
- package/dist/types/lib/peer/secureTransportManager.d.ts +96 -0
- package/dist/types/lib/peer/transceiverManager.d.ts +151 -0
- package/dist/types/lib/peer/transport/dtls.d.ts +95 -0
- package/dist/types/lib/peer/transport/ice.d.ts +143 -0
- package/dist/types/lib/peer/transport/sctp.d.ts +56 -0
- package/dist/types/lib/peer/types/domain.d.ts +5 -0
- package/dist/types/lib/peer/types/util.d.ts +2 -0
- package/dist/types/lib/peer/utils.d.ts +73 -0
- package/dist/types/lib/rtp/codec/av1.d.ts +56 -0
- package/dist/types/lib/rtp/codec/base.d.ts +8 -0
- package/dist/types/lib/rtp/codec/h264.d.ts +32 -0
- package/dist/types/lib/rtp/codec/index.d.ts +16 -0
- package/dist/types/lib/rtp/codec/leb128.d.ts +5 -0
- package/dist/types/lib/rtp/codec/opus.d.ts +9 -0
- package/dist/types/lib/rtp/codec/vp8.d.ts +27 -0
- package/dist/types/lib/rtp/codec/vp9.d.ts +46 -0
- package/dist/types/lib/rtp/const.d.ts +1 -0
- package/dist/types/lib/rtp/helper.d.ts +8 -0
- package/dist/types/lib/rtp/imports/common.d.ts +1 -0
- package/dist/types/lib/rtp/index.d.ts +25 -0
- package/dist/types/lib/rtp/rtcp/header.d.ts +13 -0
- package/dist/types/lib/rtp/rtcp/psfb/fullIntraRequest.d.ts +16 -0
- package/dist/types/lib/rtp/rtcp/psfb/index.d.ts +14 -0
- package/dist/types/lib/rtp/rtcp/psfb/pictureLossIndication.d.ts +10 -0
- package/dist/types/lib/rtp/rtcp/psfb/remb.d.ts +16 -0
- package/dist/types/lib/rtp/rtcp/rr.d.ts +32 -0
- package/dist/types/lib/rtp/rtcp/rtcp.d.ts +10 -0
- package/dist/types/lib/rtp/rtcp/rtpfb/const.d.ts +1 -0
- package/dist/types/lib/rtp/rtcp/rtpfb/index.d.ts +14 -0
- package/dist/types/lib/rtp/rtcp/rtpfb/nack.d.ts +17 -0
- package/dist/types/lib/rtp/rtcp/rtpfb/twcc.d.ts +71 -0
- package/dist/types/lib/rtp/rtcp/sdes.d.ts +26 -0
- package/dist/types/lib/rtp/rtcp/sr.d.ts +41 -0
- package/dist/types/lib/rtp/rtp/headerExtension.d.ts +72 -0
- package/dist/types/lib/rtp/rtp/red/encoder.d.ts +13 -0
- package/dist/types/lib/rtp/rtp/red/handler.d.ts +6 -0
- package/dist/types/lib/rtp/rtp/red/packet.d.ts +26 -0
- package/dist/types/lib/rtp/rtp/rtp.d.ts +44 -0
- package/dist/types/lib/rtp/rtp/rtx.d.ts +3 -0
- package/dist/types/lib/rtp/srtp/cipher/ctr.d.ts +16 -0
- package/dist/types/lib/rtp/srtp/cipher/gcm.d.ts +17 -0
- package/dist/types/lib/rtp/srtp/cipher/index.d.ts +13 -0
- package/dist/types/lib/rtp/srtp/const.d.ts +6 -0
- package/dist/types/lib/rtp/srtp/context/context.d.ts +45 -0
- package/dist/types/lib/rtp/srtp/context/srtcp.d.ts +8 -0
- package/dist/types/lib/rtp/srtp/context/srtp.d.ts +9 -0
- package/dist/types/lib/rtp/srtp/error.d.ts +3 -0
- package/dist/types/lib/rtp/srtp/packet.d.ts +5 -0
- package/dist/types/lib/rtp/srtp/session.d.ts +19 -0
- package/dist/types/lib/rtp/srtp/srtcp.d.ts +8 -0
- package/dist/types/lib/rtp/srtp/srtp.d.ts +9 -0
- package/dist/types/lib/rtp/transport.d.ts +15 -0
- package/dist/types/lib/rtp/util.d.ts +11 -0
- package/dist/types/lib/sctp/chunk.d.ts +164 -0
- package/dist/types/lib/sctp/const.d.ts +17 -0
- package/dist/types/lib/sctp/helper.d.ts +5 -0
- package/dist/types/lib/sctp/imports/common.d.ts +1 -0
- package/dist/types/lib/sctp/index.d.ts +6 -0
- package/dist/types/lib/sctp/param.d.ts +40 -0
- package/dist/types/lib/sctp/sctp.d.ts +210 -0
- package/dist/types/lib/sctp/transport.d.ts +15 -0
- package/dist/types/lib/turn/index.d.ts +9 -0
- package/dist/types/lib/turn/node/server.d.ts +21 -0
- package/dist/types/lib/turn/node/turnServer.d.ts +91 -0
- package/dist/types/lib/turn/protocol.d.ts +47 -0
- package/dist/types/lib/turn/stun/attributes.d.ts +37 -0
- package/dist/types/lib/turn/stun/const.d.ts +28 -0
- package/dist/types/lib/turn/stun/ip.d.ts +12 -0
- package/dist/types/lib/turn/stun/message.d.ts +37 -0
- package/dist/types/lib/turn/turn/auth.d.ts +1 -0
- package/dist/types/lib/turn/turn/frame.d.ts +13 -0
- package/dist/types/lib/turn/turn/protocol.d.ts +147 -0
- package/dist/types/peer/Endpoints.d.ts +75 -0
- package/dist/types/peer/EngineConfig.d.ts +20 -0
- package/dist/types/peer/EngineConnection.d.ts +22 -0
- package/dist/types/peer/Events.d.ts +55 -0
- package/dist/types/peer/MediaCodecs.d.ts +27 -0
- package/dist/types/peer/MediaTrack.d.ts +212 -0
- package/dist/types/peer/PeerChannel.d.ts +248 -0
- package/dist/types/peer/PeerConnection.d.ts +603 -0
- package/dist/types/peer/PeerThreadChannel.d.ts +112 -0
- package/dist/types/peer/PeerThreadProtocol.d.ts +325 -0
- package/dist/types/peer/PeerThreads.d.ts +114 -0
- package/dist/types/peer/PeerWorker.d.ts +6 -0
- package/dist/types/peer/PeerWorkerCode.d.ts +5 -0
- package/dist/types/peer/RemoteConnection.d.ts +314 -0
- package/dist/types/peer/RtpPacket.d.ts +112 -0
- package/dist/types/peer/RtpTransceiver.d.ts +167 -0
- package/dist/types/peer/SignalingClient.d.ts +236 -0
- package/dist/types/protocol/SignalingProtocol.d.ts +266 -0
- package/dist/types/service/WebRTCServiceEntrypoint.d.ts +158 -0
- package/dist/types/sfu/SFU.d.ts +356 -0
- package/dist/types/sfu/SFUAccess.d.ts +48 -0
- package/dist/types/sfu/SFUClusterLeg.d.ts +101 -0
- package/dist/types/sfu/SFURoom.d.ts +148 -0
- package/dist/types/sfu/SFUWorker.d.ts +13 -0
- package/dist/types/sfu/SFUWorkerChannel.d.ts +204 -0
- package/dist/types/sfu/SFUWorkerCode.d.ts +5 -0
- package/dist/types/sfu/SFUWorkers.d.ts +247 -0
- package/dist/types/shared/ChunkedChannel.d.ts +122 -0
- package/dist/types/shared/Connections.d.ts +231 -0
- package/dist/types/shared/Emitter.d.ts +50 -0
- package/dist/types/shared/Peer.d.ts +182 -0
- package/dist/types/shared/PeerServiceProxy.d.ts +173 -0
- package/dist/types/shared/Room.d.ts +143 -0
- package/dist/types/shared/SignalingError.d.ts +40 -0
- package/dist/types/shared/SignalingSession.d.ts +97 -0
- package/dist/types/shared/Transports.d.ts +139 -0
- package/dist/types/signaling/MediaServers.d.ts +40 -0
- package/dist/types/signaling/Signaling.d.ts +573 -0
- package/dist/types/signaling/SignalingController.d.ts +128 -0
- package/dist/types/turn/TURNCredentials.d.ts +49 -0
- package/dist/types/turn/TURNIceServers.d.ts +11 -0
- package/dist/types/turn/TURNServer.d.ts +309 -0
- package/dist/types/turn/TURNWorker.d.ts +42 -0
- package/dist/types/turn/TURNWorkerCode.d.ts +5 -0
- package/dist/types/turn/TURNWorkers.d.ts +52 -0
- package/dist/types/whep/WHEP.d.ts +386 -0
- package/dist/types/whep/WHEPController.d.ts +134 -0
- package/dist/types/whip/WHIP.d.ts +426 -0
- package/dist/types/whip/WHIPController.d.ts +132 -0
- package/package.json +115 -4
|
@@ -0,0 +1,763 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SFU = void 0;
|
|
13
|
+
exports.buildSFUOptions = buildSFUOptions;
|
|
14
|
+
const node_crypto_1 = require("node:crypto");
|
|
15
|
+
const core_1 = require("@lakutata/core");
|
|
16
|
+
const di_1 = require("@lakutata/core/decorator/di");
|
|
17
|
+
const SignalingLimitException_js_1 = require("../exceptions/SignalingLimitException.js");
|
|
18
|
+
const log_js_1 = require("../lib/common/log.js");
|
|
19
|
+
const MediaCodecs_js_1 = require("../peer/MediaCodecs.js");
|
|
20
|
+
const PeerConnection_js_1 = require("../peer/PeerConnection.js");
|
|
21
|
+
const MediaServers_js_1 = require("../signaling/MediaServers.js");
|
|
22
|
+
const SFUAccess_js_1 = require("./SFUAccess.js");
|
|
23
|
+
const SFUClusterLeg_js_1 = require("./SFUClusterLeg.js");
|
|
24
|
+
const SFURoom_js_1 = require("./SFURoom.js");
|
|
25
|
+
const SFUWorkers_js_1 = require("./SFUWorkers.js");
|
|
26
|
+
/**
|
|
27
|
+
* A node refused what it was asked to take (its offer, its room): the other nodes are not asked
|
|
28
|
+
*/
|
|
29
|
+
class Refused extends Error {
|
|
30
|
+
}
|
|
31
|
+
const log = (0, log_js_1.debug)('webrtc/sfu');
|
|
32
|
+
/**
|
|
33
|
+
* How often a media server announces its load on the cluster, in milliseconds
|
|
34
|
+
*/
|
|
35
|
+
const ANNOUNCE_INTERVAL = 1000;
|
|
36
|
+
/**
|
|
37
|
+
* How long a node remembers a leg the node of its session stopped waiting for, in milliseconds
|
|
38
|
+
*/
|
|
39
|
+
const GIVEN_UP_TIME = 60000;
|
|
40
|
+
/**
|
|
41
|
+
* How many nodes are tried for a member at most
|
|
42
|
+
*/
|
|
43
|
+
const MAX_PLACEMENT_ATTEMPTS = 3;
|
|
44
|
+
/**
|
|
45
|
+
* The media server of the rooms of a {@link Signaling} (a selective forwarding unit): each member connects to the
|
|
46
|
+
* server only, publishes its tracks once, and receives the tracks of the others from the server, which forwards their
|
|
47
|
+
* packets without decoding them. A room of many members then costs each of them one connection and one upload, instead
|
|
48
|
+
* of one of each per other member.
|
|
49
|
+
*
|
|
50
|
+
* The server is a member of each room it serves (its id starts with `sfu:`, its role is `sfu`); the clients of this
|
|
51
|
+
* package (`SignalingClient`, `SignalingConnection` of `./client`) connect to it by themselves, and their rooms and
|
|
52
|
+
* peers work as without it: `room.publish()` sends a track to every member, each peer emits the tracks of its member,
|
|
53
|
+
* and a data channel to a member goes through the server, which relays its messages (unlike between two members, the
|
|
54
|
+
* server sees them; with a cluster, the servers of both members relay them). The key frame requests of the members go
|
|
55
|
+
* to the publisher, at most every 500 ms; the lost packets are sent again by the server; the bandwidth of each
|
|
56
|
+
* connection is estimated from the transport-wide feedback. A member receiving the messages of a channel slower than
|
|
57
|
+
* they are sent makes the sender wait, without the server keeping more than a few megabytes of them.
|
|
58
|
+
*
|
|
59
|
+
* Events: `publish` and `unpublish` (an {@link SFUTrack}) when a member of this node starts and stops publishing a
|
|
60
|
+
* track (with a cluster, they are emitted on the node of the member only), `unsupported` (the room, the id of the
|
|
61
|
+
* member or of the viewer of WHEP, the track) when a member or a viewer does not support the codec of a track it should
|
|
62
|
+
* receive, `congestion` (the room, the id of the member, whether it is congested, the bit rate estimated in bits per
|
|
63
|
+
* second) when the bandwidth to a member is too low, and when it is enough again.
|
|
64
|
+
*
|
|
65
|
+
* Register it with {@link buildSFUOptions}, and bootstrap it: it attaches itself to the signaling when it starts.
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* import {Application} from 'lakutata'
|
|
69
|
+
* import {buildEntrypoints} from 'lakutata/com/entrypoint'
|
|
70
|
+
* import {socketIOServiceEntrypoint} from 'lakutata/adapter/socket.io'
|
|
71
|
+
* import {buildSFUOptions, buildSignalingOptions, SignalingController} from '@lakutata/webrtc'
|
|
72
|
+
*
|
|
73
|
+
* Application.run(() => ({
|
|
74
|
+
* id: 'meet.app',
|
|
75
|
+
* name: 'Meet',
|
|
76
|
+
* components: {
|
|
77
|
+
* signaling: buildSignalingOptions(),
|
|
78
|
+
* //The meetings go through the server; the other rooms stay peer to peer
|
|
79
|
+
* sfu: buildSFUOptions({
|
|
80
|
+
* serves: (room: string): boolean => room.startsWith('meeting-'),
|
|
81
|
+
* iceAdditionalHostAddresses: ['203.0.113.10'],
|
|
82
|
+
* icePortRange: [40000, 40999]
|
|
83
|
+
* }),
|
|
84
|
+
* entrypoint: buildEntrypoints({
|
|
85
|
+
* controllers: [SignalingController],
|
|
86
|
+
* service: socketIOServiceEntrypoint({port: 3000})
|
|
87
|
+
* })
|
|
88
|
+
* },
|
|
89
|
+
* bootstrap: ['sfu', 'entrypoint']
|
|
90
|
+
* }))
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
let SFU = class SFU extends core_1.Component {
|
|
94
|
+
#rooms = new Map();
|
|
95
|
+
#workers;
|
|
96
|
+
//The rooms being left: a room joined again waits for it
|
|
97
|
+
#leaving = new Map();
|
|
98
|
+
#id = `sfu:${(0, node_crypto_1.randomUUID)()}`;
|
|
99
|
+
#signalingObject;
|
|
100
|
+
#clusterObject;
|
|
101
|
+
//Announces the load of the server on the cluster
|
|
102
|
+
#announcer;
|
|
103
|
+
//The legs of the sessions of WHIP and WHEP of this node on other nodes, the legs of this node for the sessions of
|
|
104
|
+
//other nodes, the choices of source of the viewers of this node on other nodes (by the ids of the legs)
|
|
105
|
+
#clusterLegs = new Map();
|
|
106
|
+
#servedLegs = new Map();
|
|
107
|
+
#choosers = new Map();
|
|
108
|
+
//The legs the node of their session gave up before they were taken (its request timed out), until when
|
|
109
|
+
#givenUp = new Map();
|
|
110
|
+
#detach = [];
|
|
111
|
+
/**
|
|
112
|
+
* Attach the server to the signaling.
|
|
113
|
+
* @protected
|
|
114
|
+
*/
|
|
115
|
+
async init() {
|
|
116
|
+
SFUAccess_js_1.sfuRooms.set(this, this.#rooms);
|
|
117
|
+
this.#signalingObject = await this.getObject(this.signaling);
|
|
118
|
+
if (this.cluster) {
|
|
119
|
+
const cluster = await this.getObject(this.cluster);
|
|
120
|
+
this.#clusterObject = cluster;
|
|
121
|
+
//One member of the server in each room, the same in all of them: the one of this node
|
|
122
|
+
this.#id = `sfu:${cluster.nodeId}`;
|
|
123
|
+
const down = (node) => this.#nodeDown(node.id);
|
|
124
|
+
cluster.on('node-down', down);
|
|
125
|
+
this.#detach.push(cluster.handle(MediaServers_js_1.MEDIA_SERVER_ASSIGN_TOPIC, ({ room, peerId }) => this.#reply(() => this.assign(room, peerId))), cluster.handle(SFUClusterLeg_js_1.SFU_TOPICS.serve, ({ room, peerId, kind }) => this.#reply(async () => {
|
|
126
|
+
if (this.serves && !this.serves(room))
|
|
127
|
+
return undefined;
|
|
128
|
+
await this.#serveLocal(room, peerId, kind);
|
|
129
|
+
return this.#id;
|
|
130
|
+
})),
|
|
131
|
+
//The legs of the sessions of other nodes
|
|
132
|
+
cluster.handle(SFUClusterLeg_js_1.SFU_TOPICS.publish, ({ room, peerId, offer }, from) => this.#takeLeg(from, room, peerId, () => this.#publishLocal(room, peerId, offer))), cluster.handle(SFUClusterLeg_js_1.SFU_TOPICS.play, ({ room, viewerId, offer, select }, from) => this.#takeLeg(from, room, viewerId, () => this.#playLocal(room, viewerId, offer, select
|
|
133
|
+
? async (tracks) => await cluster.request(from, SFUClusterLeg_js_1.SFU_TOPICS.choose, { id: viewerId, tracks: tracks }) ?? undefined
|
|
134
|
+
: undefined))), cluster.handle(SFUClusterLeg_js_1.SFU_TOPICS.patch, async ({ id, fragment, restart }) => {
|
|
135
|
+
const served = this.#servedLegs.get(id);
|
|
136
|
+
if (!served)
|
|
137
|
+
throw new Error('There is no such session');
|
|
138
|
+
const answer = await served.leg.patch(fragment, restart);
|
|
139
|
+
return answer === null ? { stale: true } : answer === undefined ? {} : { fragment: answer };
|
|
140
|
+
}), cluster.handle(SFUClusterLeg_js_1.SFU_TOPICS.end, ({ id }) => {
|
|
141
|
+
const served = this.#servedLegs.get(id);
|
|
142
|
+
if (served)
|
|
143
|
+
served.leg.close();
|
|
144
|
+
else
|
|
145
|
+
this.#giveUp(id);
|
|
146
|
+
return true;
|
|
147
|
+
}),
|
|
148
|
+
//The legs of the sessions of this node on other nodes
|
|
149
|
+
cluster.handle(SFUClusterLeg_js_1.SFU_TOPICS.ended, ({ id }) => {
|
|
150
|
+
this.#clusterLegs.get(id)?.end();
|
|
151
|
+
return true;
|
|
152
|
+
}), cluster.handle(SFUClusterLeg_js_1.SFU_TOPICS.source, ({ id, source }) => {
|
|
153
|
+
this.#clusterLegs.get(id)?.sourced(source ?? undefined);
|
|
154
|
+
return true;
|
|
155
|
+
}), cluster.handle(SFUClusterLeg_js_1.SFU_TOPICS.choose, async ({ id, tracks }) => await this.#choosers.get(id)?.(tracks) ?? null), () => cluster.off('node-down', down), () => cluster.announce(MediaServers_js_1.MEDIA_SERVER_SERVICE, undefined));
|
|
156
|
+
this.#announce();
|
|
157
|
+
this.#announcer = setInterval(() => this.#announce(), ANNOUNCE_INTERVAL);
|
|
158
|
+
this.#announcer.unref();
|
|
159
|
+
}
|
|
160
|
+
if (this.workers)
|
|
161
|
+
await this.#startWorkers();
|
|
162
|
+
MediaServers_js_1.mediaServers.set(this.#signalingObject, (room, peerId) => this.assign(room, peerId));
|
|
163
|
+
SFUAccess_js_1.sfuAccess.set(this, {
|
|
164
|
+
publish: async (room, offer) => {
|
|
165
|
+
//Its own id: the id of the session is the credential of its publisher
|
|
166
|
+
const peerId = `whip:${(0, node_crypto_1.randomUUID)()}`;
|
|
167
|
+
if (this.serves && !this.serves(room))
|
|
168
|
+
throw new Error(`The media server does not serve the room ${room}`);
|
|
169
|
+
const cluster = this.#clusterObject;
|
|
170
|
+
if (!cluster)
|
|
171
|
+
return { peerId: peerId, leg: await this.#publishLocal(room, peerId, offer) };
|
|
172
|
+
return {
|
|
173
|
+
peerId: peerId,
|
|
174
|
+
leg: await this.#placeOn({ room: room, peerId: peerId, kind: 'whip' }, cluster, () => this.#publishLocal(room, peerId, offer), async (node) => {
|
|
175
|
+
const reply = await this.#requestLeg(cluster, node, peerId, SFUClusterLeg_js_1.SFU_TOPICS.publish, { room: room, peerId: peerId, offer: offer });
|
|
176
|
+
return this.#legOf(node, peerId, reply);
|
|
177
|
+
})
|
|
178
|
+
};
|
|
179
|
+
},
|
|
180
|
+
play: async (room, offer, select) => {
|
|
181
|
+
const viewerId = `whep:${(0, node_crypto_1.randomUUID)()}`;
|
|
182
|
+
if (this.serves && !this.serves(room))
|
|
183
|
+
throw new Error(`The media server does not serve the room ${room}`);
|
|
184
|
+
const cluster = this.#clusterObject;
|
|
185
|
+
if (!cluster)
|
|
186
|
+
return { viewerId: viewerId, leg: await this.#playLocal(room, viewerId, offer, select) };
|
|
187
|
+
//Its source chosen here, where the session is, wherever its connection is
|
|
188
|
+
if (select)
|
|
189
|
+
this.#choosers.set(viewerId, select);
|
|
190
|
+
try {
|
|
191
|
+
return {
|
|
192
|
+
viewerId: viewerId,
|
|
193
|
+
leg: await this.#placeOn({ room: room, peerId: viewerId, kind: 'viewer' }, cluster, () => this.#playLocal(room, viewerId, offer, select), async (node) => {
|
|
194
|
+
const reply = await this.#requestLeg(cluster, node, viewerId, SFUClusterLeg_js_1.SFU_TOPICS.play, { room: room, viewerId: viewerId, offer: offer, select: !!select });
|
|
195
|
+
const leg = this.#legOf(node, viewerId, reply);
|
|
196
|
+
if (leg !== 'full')
|
|
197
|
+
leg.ended(() => this.#choosers.delete(viewerId));
|
|
198
|
+
return leg;
|
|
199
|
+
})
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
finally {
|
|
203
|
+
//A choice of a viewer on another node only
|
|
204
|
+
const leg = this.#clusterLegs.get(viewerId);
|
|
205
|
+
if (!leg)
|
|
206
|
+
this.#choosers.delete(viewerId);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Detach the server, and leave the rooms.
|
|
213
|
+
* @protected
|
|
214
|
+
*/
|
|
215
|
+
async destroy() {
|
|
216
|
+
if (this.#signalingObject && MediaServers_js_1.mediaServers.get(this.#signalingObject))
|
|
217
|
+
MediaServers_js_1.mediaServers.delete(this.#signalingObject);
|
|
218
|
+
clearInterval(this.#announcer);
|
|
219
|
+
for (const detach of this.#detach.splice(0))
|
|
220
|
+
detach();
|
|
221
|
+
for (const leg of [...this.#clusterLegs.values()])
|
|
222
|
+
leg.close();
|
|
223
|
+
for (const { leg } of [...this.#servedLegs.values()])
|
|
224
|
+
leg.close();
|
|
225
|
+
const rooms = [...this.#rooms.values()];
|
|
226
|
+
this.#rooms.clear();
|
|
227
|
+
await Promise.all(rooms.map((room) => room.close()));
|
|
228
|
+
await this.#workers?.stop();
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* The rooms the server is in, with their members on this node, the tracks these members publish and the number of
|
|
232
|
+
* viewers of WHEP on this node; with a cluster, each node reports its own. With `workers`, each thread reports its
|
|
233
|
+
* rooms: a change made in a thread (a session of WHEP ending) shows here a moment later.
|
|
234
|
+
* @returns For each room, the ids of its members, its tracks and its viewers.
|
|
235
|
+
* @example
|
|
236
|
+
* ```typescript
|
|
237
|
+
* import type {SFU} from '@lakutata/webrtc'
|
|
238
|
+
*
|
|
239
|
+
* declare const sfu: SFU
|
|
240
|
+
* for (const [room, {members, tracks}] of Object.entries(sfu.rooms())) console.log(room, members.length, tracks.length)
|
|
241
|
+
* ```
|
|
242
|
+
*/
|
|
243
|
+
rooms() {
|
|
244
|
+
return Object.fromEntries([...this.#rooms].map(([name, room]) => [name, { members: [...room.members], tracks: room.tracks, viewers: room.viewers }]));
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* A track published in a room, to read its packets (to record them) or to send it on another connection. With a
|
|
248
|
+
* cluster, a track of a member of another node is received from that node while it is read here.
|
|
249
|
+
* @param room The room.
|
|
250
|
+
* @param peerId The member publishing it.
|
|
251
|
+
* @param trackId The id of the track ({@link SFUTrack.id}).
|
|
252
|
+
* @returns The track, or undefined when it is not published.
|
|
253
|
+
* @example
|
|
254
|
+
* ```typescript
|
|
255
|
+
* import type {RtpPacket, SFU, SFUTrack} from '@lakutata/webrtc'
|
|
256
|
+
*
|
|
257
|
+
* declare const sfu: SFU
|
|
258
|
+
* //Record the audio of the members of the room
|
|
259
|
+
* sfu.on('publish', (track: SFUTrack): void => {
|
|
260
|
+
* if (track.kind === 'audio') sfu.track(track.room, track.peerId, track.id)?.on('rtp', (packet: RtpPacket): void => console.log(packet.timestamp))
|
|
261
|
+
* })
|
|
262
|
+
* ```
|
|
263
|
+
*/
|
|
264
|
+
track(room, peerId, trackId) {
|
|
265
|
+
return this.#rooms.get(room)?.track(peerId, trackId);
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Give a member joining a room a media server, once the server is in the room: this one, or with a cluster the one
|
|
269
|
+
* of the node chosen (`selectSFU`)
|
|
270
|
+
* @param room The room.
|
|
271
|
+
* @param peerId The id of the member.
|
|
272
|
+
* @param kind A member, a stream of WHIP, or a viewer of WHEP (`maxMembers` does not count the viewers).
|
|
273
|
+
* @returns The id of the member of the server, or undefined for a room the servers do not serve.
|
|
274
|
+
* @throws {SignalingLimitException} When no media server takes the member.
|
|
275
|
+
* @protected
|
|
276
|
+
*/
|
|
277
|
+
async assign(room, peerId, kind = 'member') {
|
|
278
|
+
if (this.serves && !this.serves(room))
|
|
279
|
+
return undefined;
|
|
280
|
+
if (!this.#clusterObject) {
|
|
281
|
+
await this.#serveLocal(room, peerId, kind);
|
|
282
|
+
return this.#id;
|
|
283
|
+
}
|
|
284
|
+
return await this.#place({ room: room, peerId: peerId, kind: kind }, this.#clusterObject);
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Give a member the media server of a node of the cluster: the one chosen, else the default choice, the next one
|
|
288
|
+
* when it is full or does not answer
|
|
289
|
+
* @param placement
|
|
290
|
+
* @param cluster
|
|
291
|
+
*/
|
|
292
|
+
async #place(placement, cluster) {
|
|
293
|
+
return await this.#placeOn(placement, cluster, async () => {
|
|
294
|
+
await this.#serveLocal(placement.room, placement.peerId, placement.kind);
|
|
295
|
+
return this.#id;
|
|
296
|
+
}, async (node) => {
|
|
297
|
+
const reply = await cluster.request(node, SFUClusterLeg_js_1.SFU_TOPICS.serve, placement);
|
|
298
|
+
return 'full' in reply ? 'full' : reply.sfu ?? undefined;
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Take something in a room on a node: the nodes are tried in the order of the choice, the next one when one is full
|
|
303
|
+
* or does not answer
|
|
304
|
+
* @param placement What joins the room.
|
|
305
|
+
* @param cluster
|
|
306
|
+
* @param local Takes it on this node.
|
|
307
|
+
* @param remote Asks another node to take it.
|
|
308
|
+
* @throws {SignalingLimitException} When no node takes it.
|
|
309
|
+
* @throws {Error} When a node refuses it (its room, its offer).
|
|
310
|
+
*/
|
|
311
|
+
async #placeOn(placement, cluster, local, remote) {
|
|
312
|
+
for (const node of (await this.#candidates(placement, cluster)).slice(0, MAX_PLACEMENT_ATTEMPTS)) {
|
|
313
|
+
if (node.local) {
|
|
314
|
+
try {
|
|
315
|
+
return await local();
|
|
316
|
+
}
|
|
317
|
+
catch (error) {
|
|
318
|
+
if (error instanceof SignalingLimitException_js_1.SignalingLimitException)
|
|
319
|
+
continue;
|
|
320
|
+
throw error;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
let result;
|
|
324
|
+
try {
|
|
325
|
+
result = await remote(node.id);
|
|
326
|
+
}
|
|
327
|
+
catch (error) {
|
|
328
|
+
if (error instanceof Refused)
|
|
329
|
+
throw error;
|
|
330
|
+
//Gone or not answering
|
|
331
|
+
continue;
|
|
332
|
+
}
|
|
333
|
+
if (result !== 'full')
|
|
334
|
+
return result;
|
|
335
|
+
}
|
|
336
|
+
throw new SignalingLimitException_js_1.SignalingLimitException('No media server takes the member {peerId} in the room {room}', { peerId: placement.peerId, room: placement.room });
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* The nodes a member may be given, in the order they are tried: the one selectSFU chooses, then for a room some
|
|
340
|
+
* nodes have, the least loaded of them that is not full, for a new room this node when it is not full, then the least
|
|
341
|
+
* loaded of the others, the ones full at last
|
|
342
|
+
* @param placement
|
|
343
|
+
* @param cluster
|
|
344
|
+
*/
|
|
345
|
+
async #candidates(placement, cluster) {
|
|
346
|
+
//The nodes with members of the room: their members of the server are in it
|
|
347
|
+
const serving = new Set((this.#signalingObject.rooms()[placement.room] ?? [])
|
|
348
|
+
.filter((id) => id.startsWith('sfu:'))
|
|
349
|
+
.map((id) => id.slice('sfu:'.length)));
|
|
350
|
+
const nodes = cluster.nodes()
|
|
351
|
+
.filter((node) => node.local || !!node.services[MediaServers_js_1.MEDIA_SERVER_SERVICE])
|
|
352
|
+
.map((node) => {
|
|
353
|
+
const load = node.local ? this.#load() : node.services[MediaServers_js_1.MEDIA_SERVER_SERVICE];
|
|
354
|
+
return { id: node.id, labels: node.labels, local: node.local, members: load.members, viewers: load.viewers, maxMembers: load.maxMembers, serving: serving.has(node.id) };
|
|
355
|
+
});
|
|
356
|
+
const full = (node) => placement.kind !== 'viewer' && node.maxMembers > 0 && node.members >= node.maxMembers;
|
|
357
|
+
const byLoad = (a, b) => a.members + a.viewers - b.members - b.viewers || a.id.localeCompare(b.id);
|
|
358
|
+
const order = [];
|
|
359
|
+
const add = (candidates) => {
|
|
360
|
+
for (const node of candidates)
|
|
361
|
+
if (!order.includes(node))
|
|
362
|
+
order.push(node);
|
|
363
|
+
};
|
|
364
|
+
const chosen = this.selectSFU ? await this.selectSFU({ ...placement }, nodes.map((node) => ({ ...node }))) : undefined;
|
|
365
|
+
if (chosen !== undefined)
|
|
366
|
+
add(nodes.filter((node) => node.id === chosen));
|
|
367
|
+
//A room stays on the fewest nodes: the members of a room are forwarded between its nodes
|
|
368
|
+
if (serving.size)
|
|
369
|
+
add(nodes.filter((node) => node.serving && !full(node)).sort(byLoad));
|
|
370
|
+
else
|
|
371
|
+
add(nodes.filter((node) => node.local && !full(node)));
|
|
372
|
+
add(nodes.filter((node) => !full(node)).sort(byLoad));
|
|
373
|
+
//Full as they announced it a moment ago
|
|
374
|
+
add(nodes.filter(full).sort(byLoad));
|
|
375
|
+
return order;
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* A stream published with WHIP joins a room of this server
|
|
379
|
+
* @param room
|
|
380
|
+
* @param peerId
|
|
381
|
+
* @param offer
|
|
382
|
+
*/
|
|
383
|
+
async #publishLocal(room, peerId, offer) {
|
|
384
|
+
await this.#serveLocal(room, peerId, 'whip');
|
|
385
|
+
return await this.#rooms.get(room).publish(peerId, offer);
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* A viewer of WHEP plays a room of this server
|
|
389
|
+
* @param room
|
|
390
|
+
* @param viewerId
|
|
391
|
+
* @param offer
|
|
392
|
+
* @param select
|
|
393
|
+
*/
|
|
394
|
+
async #playLocal(room, viewerId, offer, select) {
|
|
395
|
+
await this.#serveLocal(room, viewerId, 'viewer');
|
|
396
|
+
return await this.#rooms.get(room).play(viewerId, offer, select);
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Take a stream of WHIP or a viewer of WHEP of a session of another node: its node is told when its connection
|
|
400
|
+
* ends, and when the source of a viewer changes
|
|
401
|
+
* @param node The node of the session.
|
|
402
|
+
* @param room
|
|
403
|
+
* @param id The id of the leg.
|
|
404
|
+
* @param take Takes it in the room.
|
|
405
|
+
*/
|
|
406
|
+
async #takeLeg(node, room, id, take) {
|
|
407
|
+
if (this.serves && !this.serves(room))
|
|
408
|
+
return { refused: `The media server does not serve the room ${room}` };
|
|
409
|
+
let leg;
|
|
410
|
+
try {
|
|
411
|
+
leg = await take();
|
|
412
|
+
}
|
|
413
|
+
catch (error) {
|
|
414
|
+
if (error instanceof SignalingLimitException_js_1.SignalingLimitException)
|
|
415
|
+
return { full: true };
|
|
416
|
+
return { refused: error.message };
|
|
417
|
+
}
|
|
418
|
+
//The node of its session stopped waiting for it meanwhile
|
|
419
|
+
if (this.#givenUp.delete(id)) {
|
|
420
|
+
leg.close();
|
|
421
|
+
return { refused: 'The session was given up' };
|
|
422
|
+
}
|
|
423
|
+
this.#servedLegs.set(id, { leg: leg, node: node });
|
|
424
|
+
leg.ended(() => {
|
|
425
|
+
if (this.#servedLegs.get(id)?.leg !== leg)
|
|
426
|
+
return;
|
|
427
|
+
this.#servedLegs.delete(id);
|
|
428
|
+
this.#clusterObject?.request(node, SFUClusterLeg_js_1.SFU_TOPICS.ended, { id: id }).catch(() => undefined);
|
|
429
|
+
});
|
|
430
|
+
return { answer: leg.answer, ...leg.source ? { source: leg.source() ?? null } : {} };
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Ask another node to take a stream of WHIP or a viewer of WHEP; when it does not answer in time, it is told to
|
|
434
|
+
* close the leg if it takes it later
|
|
435
|
+
* @param cluster
|
|
436
|
+
* @param node
|
|
437
|
+
* @param id The id of the leg.
|
|
438
|
+
* @param topic
|
|
439
|
+
* @param message
|
|
440
|
+
*/
|
|
441
|
+
async #requestLeg(cluster, node, id, topic, message) {
|
|
442
|
+
try {
|
|
443
|
+
return await cluster.request(node, topic, message, { timeout: SFUClusterLeg_js_1.LEG_TIMEOUT });
|
|
444
|
+
}
|
|
445
|
+
catch (error) {
|
|
446
|
+
cluster.request(node, SFUClusterLeg_js_1.SFU_TOPICS.end, { id: id }).catch(() => undefined);
|
|
447
|
+
throw error;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* The leg of a session of this node on another node, from its answer
|
|
452
|
+
* @param node
|
|
453
|
+
* @param id
|
|
454
|
+
* @param reply
|
|
455
|
+
* @throws {Refused} When the node refused it.
|
|
456
|
+
*/
|
|
457
|
+
#legOf(node, id, reply) {
|
|
458
|
+
if ('full' in reply)
|
|
459
|
+
return 'full';
|
|
460
|
+
if ('refused' in reply)
|
|
461
|
+
throw new Refused(reply.refused);
|
|
462
|
+
const cluster = this.#clusterObject;
|
|
463
|
+
const link = {
|
|
464
|
+
legs: this.#clusterLegs,
|
|
465
|
+
request: (to, topic, message) => cluster.request(to, topic, message, { timeout: SFUClusterLeg_js_1.LEG_TIMEOUT })
|
|
466
|
+
};
|
|
467
|
+
return new SFUClusterLeg_js_1.ClusterLeg(link, node, id, reply.answer, reply.source ?? undefined);
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* The source of a viewer of WHEP of this server changed: the node of its session is told, if it is another one
|
|
471
|
+
* @param viewerId
|
|
472
|
+
* @param source
|
|
473
|
+
*/
|
|
474
|
+
#sourced(viewerId, source) {
|
|
475
|
+
const served = this.#servedLegs.get(viewerId);
|
|
476
|
+
if (served)
|
|
477
|
+
this.#clusterObject?.request(served.node, SFUClusterLeg_js_1.SFU_TOPICS.source, { id: viewerId, source: source ?? null }).catch(() => undefined);
|
|
478
|
+
}
|
|
479
|
+
/**
|
|
480
|
+
* The node of the session of a leg not taken yet stopped waiting for it: the leg is closed once taken (the ones of
|
|
481
|
+
* the last minute are kept)
|
|
482
|
+
* @param id
|
|
483
|
+
*/
|
|
484
|
+
#giveUp(id) {
|
|
485
|
+
const now = Date.now();
|
|
486
|
+
for (const [each, until] of this.#givenUp)
|
|
487
|
+
if (until < now)
|
|
488
|
+
this.#givenUp.delete(each);
|
|
489
|
+
this.#givenUp.set(id, now + GIVEN_UP_TIME);
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* A node went down: the legs of the sessions of this node on it are gone, the legs of its sessions here are closed
|
|
493
|
+
* @param node
|
|
494
|
+
*/
|
|
495
|
+
#nodeDown(node) {
|
|
496
|
+
for (const leg of [...this.#clusterLegs.values()])
|
|
497
|
+
if (leg.node === node)
|
|
498
|
+
leg.end();
|
|
499
|
+
for (const { leg, node: owner } of [...this.#servedLegs.values()])
|
|
500
|
+
if (owner === node)
|
|
501
|
+
leg.close();
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* Take a member in a room of this server
|
|
505
|
+
* @param room
|
|
506
|
+
* @param peerId
|
|
507
|
+
* @param kind
|
|
508
|
+
*/
|
|
509
|
+
async #serveLocal(room, peerId, kind) {
|
|
510
|
+
const count = this.#load().members;
|
|
511
|
+
if (kind !== 'viewer' && this.maxMembers && count >= this.maxMembers && !this.#rooms.get(room)?.members.includes(peerId)) {
|
|
512
|
+
throw new SignalingLimitException_js_1.SignalingLimitException('The media server has {count} members already', { count: count });
|
|
513
|
+
}
|
|
514
|
+
await this.#serve(room);
|
|
515
|
+
}
|
|
516
|
+
/**
|
|
517
|
+
* The members and the viewers of the server
|
|
518
|
+
*/
|
|
519
|
+
#load() {
|
|
520
|
+
let members = 0;
|
|
521
|
+
let viewers = 0;
|
|
522
|
+
for (const room of this.#rooms.values()) {
|
|
523
|
+
members += room.members.length;
|
|
524
|
+
viewers += room.viewers;
|
|
525
|
+
}
|
|
526
|
+
return { members: members, viewers: viewers, maxMembers: this.maxMembers };
|
|
527
|
+
}
|
|
528
|
+
/**
|
|
529
|
+
* Tell the other nodes the load of the server
|
|
530
|
+
*/
|
|
531
|
+
#announce() {
|
|
532
|
+
this.#clusterObject?.announce(MediaServers_js_1.MEDIA_SERVER_SERVICE, this.#load());
|
|
533
|
+
}
|
|
534
|
+
/**
|
|
535
|
+
* Answer a request of another node for a member
|
|
536
|
+
* @param assign Gives the member a media server.
|
|
537
|
+
*/
|
|
538
|
+
async #reply(assign) {
|
|
539
|
+
try {
|
|
540
|
+
return { sfu: await assign() ?? null };
|
|
541
|
+
}
|
|
542
|
+
catch (error) {
|
|
543
|
+
if (error instanceof SignalingLimitException_js_1.SignalingLimitException)
|
|
544
|
+
return { full: true };
|
|
545
|
+
throw error;
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
/**
|
|
549
|
+
* Join a room; one being left is joined again once it is left
|
|
550
|
+
* @param room
|
|
551
|
+
*/
|
|
552
|
+
async #serve(room) {
|
|
553
|
+
await this.#leaving.get(room);
|
|
554
|
+
let served = this.#rooms.get(room);
|
|
555
|
+
if (!served || served.closed) {
|
|
556
|
+
served = this.#workers ? this.#workers.room(room) : new SFURoom_js_1.SFURoom(this.#host(), room);
|
|
557
|
+
this.#rooms.set(room, served);
|
|
558
|
+
}
|
|
559
|
+
try {
|
|
560
|
+
await served.ready;
|
|
561
|
+
}
|
|
562
|
+
catch (error) {
|
|
563
|
+
if (this.#rooms.get(room) === served)
|
|
564
|
+
this.#rooms.delete(room);
|
|
565
|
+
throw error;
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
/**
|
|
569
|
+
* Start the worker threads, each with its part of the ports
|
|
570
|
+
*/
|
|
571
|
+
async #startWorkers() {
|
|
572
|
+
const ranges = Array.from({ length: this.workers }, (_, index) => {
|
|
573
|
+
if (!this.icePortRange)
|
|
574
|
+
return undefined;
|
|
575
|
+
const [first, last] = this.icePortRange;
|
|
576
|
+
const size = last - first + 1;
|
|
577
|
+
if (size < this.workers)
|
|
578
|
+
throw new RangeError(`The ICE port range has ${size} ports, fewer than the ${this.workers} worker threads`);
|
|
579
|
+
return [first + Math.floor(index * size / this.workers), first + Math.floor((index + 1) * size / this.workers) - 1];
|
|
580
|
+
});
|
|
581
|
+
const sfu = this;
|
|
582
|
+
this.#workers = new SFUWorkers_js_1.SFUWorkers({
|
|
583
|
+
id: this.#id,
|
|
584
|
+
get signaling() {
|
|
585
|
+
return sfu.#signalingObject;
|
|
586
|
+
},
|
|
587
|
+
select: this.select ? (subscriber, track) => this.#selects(subscriber, track) : undefined,
|
|
588
|
+
emit: (event, ...args) => this.emit(event, ...args),
|
|
589
|
+
emptied: (room) => this.#leave(room),
|
|
590
|
+
lost: (room) => this.#lost(room),
|
|
591
|
+
sourced: (viewerId, source) => this.#sourced(viewerId, source),
|
|
592
|
+
...this.workerResourceLimits ? { resourceLimits: this.workerResourceLimits } : {}
|
|
593
|
+
}, ranges.map((range, thread) => ({
|
|
594
|
+
thread: thread,
|
|
595
|
+
connection: {
|
|
596
|
+
headerExtensions: true,
|
|
597
|
+
...this.codecs ? { codecs: this.codecs } : {},
|
|
598
|
+
...range ? { icePortRange: range } : {},
|
|
599
|
+
...this.iceAdditionalHostAddresses ? { iceAdditionalHostAddresses: this.iceAdditionalHostAddresses } : {}
|
|
600
|
+
},
|
|
601
|
+
select: !!this.select
|
|
602
|
+
})));
|
|
603
|
+
try {
|
|
604
|
+
await this.#workers.ready;
|
|
605
|
+
}
|
|
606
|
+
catch (error) {
|
|
607
|
+
await this.#workers.stop();
|
|
608
|
+
this.#workers = undefined;
|
|
609
|
+
throw error;
|
|
610
|
+
}
|
|
611
|
+
SFUAccess_js_1.sfuWorkers.set(this, this.#workers);
|
|
612
|
+
}
|
|
613
|
+
/**
|
|
614
|
+
* Whether a member receives a track: the answer of select, no when it throws
|
|
615
|
+
* @param subscriber
|
|
616
|
+
* @param track
|
|
617
|
+
*/
|
|
618
|
+
#selects(subscriber, track) {
|
|
619
|
+
if (!this.select)
|
|
620
|
+
return true;
|
|
621
|
+
try {
|
|
622
|
+
return this.select(subscriber, track);
|
|
623
|
+
}
|
|
624
|
+
catch (error) {
|
|
625
|
+
log('select threw for %s and the track %s of %s, which it does not receive: %s', subscriber.peerId, track.id, track.peerId, error);
|
|
626
|
+
return false;
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
/**
|
|
630
|
+
* What the rooms need of the server
|
|
631
|
+
* @protected
|
|
632
|
+
*/
|
|
633
|
+
#host() {
|
|
634
|
+
const sfu = this;
|
|
635
|
+
return {
|
|
636
|
+
id: this.#id,
|
|
637
|
+
get signaling() {
|
|
638
|
+
return sfu.#signalingObject;
|
|
639
|
+
},
|
|
640
|
+
connect: () => this.getObject(PeerConnection_js_1.PeerConnection, {
|
|
641
|
+
headerExtensions: true,
|
|
642
|
+
...this.codecs ? { codecs: this.codecs } : {},
|
|
643
|
+
...this.icePortRange ? { icePortRange: this.icePortRange } : {},
|
|
644
|
+
...this.iceAdditionalHostAddresses ? { iceAdditionalHostAddresses: this.iceAdditionalHostAddresses } : {}
|
|
645
|
+
}),
|
|
646
|
+
select: (subscriber, track) => this.#selects(subscriber, track),
|
|
647
|
+
emit: (event, ...args) => this.emit(event, ...args),
|
|
648
|
+
emptied: (room) => this.#leave(room),
|
|
649
|
+
sourced: (viewerId, source) => this.#sourced(viewerId, source)
|
|
650
|
+
};
|
|
651
|
+
}
|
|
652
|
+
/**
|
|
653
|
+
* The worker thread of a room stopped: the server and the streams of WHIP leave the room, and the server joins it
|
|
654
|
+
* again (in another thread) when it has members, which connect to it again
|
|
655
|
+
* @param room
|
|
656
|
+
*/
|
|
657
|
+
#lost(room) {
|
|
658
|
+
if (this.#rooms.get(room.name) === room)
|
|
659
|
+
this.#rooms.delete(room.name);
|
|
660
|
+
const left = [this.#id, ...room.members.filter((id) => id.startsWith('whip:'))];
|
|
661
|
+
const leaving = Promise.all(left.map((id) => this.#signalingObject.leave(id, room.name).catch(() => undefined))).then(() => {
|
|
662
|
+
if (this.#leaving.get(room.name) === leaving)
|
|
663
|
+
this.#leaving.delete(room.name);
|
|
664
|
+
});
|
|
665
|
+
this.#leaving.set(room.name, leaving);
|
|
666
|
+
leaving.then(() => {
|
|
667
|
+
const members = this.#signalingObject.rooms()[room.name] ?? [];
|
|
668
|
+
return members.some((id) => !id.startsWith('sfu:') && !id.startsWith('whip:')) ? this.#serve(room.name) : undefined;
|
|
669
|
+
}).catch(() => undefined);
|
|
670
|
+
}
|
|
671
|
+
/**
|
|
672
|
+
* Leave a room without members
|
|
673
|
+
* @param room
|
|
674
|
+
*/
|
|
675
|
+
#leave(room) {
|
|
676
|
+
if (this.#rooms.get(room.name) !== room)
|
|
677
|
+
return;
|
|
678
|
+
this.#rooms.delete(room.name);
|
|
679
|
+
const leaving = room.close().finally(() => {
|
|
680
|
+
if (this.#leaving.get(room.name) === leaving)
|
|
681
|
+
this.#leaving.delete(room.name);
|
|
682
|
+
});
|
|
683
|
+
this.#leaving.set(room.name, leaving);
|
|
684
|
+
}
|
|
685
|
+
};
|
|
686
|
+
exports.SFU = SFU;
|
|
687
|
+
__decorate([
|
|
688
|
+
(0, di_1.Configurable)(core_1.DTO.String().optional().default('signaling')),
|
|
689
|
+
__metadata("design:type", String)
|
|
690
|
+
], SFU.prototype, "signaling", void 0);
|
|
691
|
+
__decorate([
|
|
692
|
+
(0, di_1.Configurable)(core_1.DTO.String().optional()),
|
|
693
|
+
__metadata("design:type", String)
|
|
694
|
+
], SFU.prototype, "cluster", void 0);
|
|
695
|
+
__decorate([
|
|
696
|
+
(0, di_1.Configurable)(core_1.DTO.Function().optional()),
|
|
697
|
+
__metadata("design:type", Function)
|
|
698
|
+
], SFU.prototype, "selectSFU", void 0);
|
|
699
|
+
__decorate([
|
|
700
|
+
(0, di_1.Configurable)(core_1.DTO.Function().optional()),
|
|
701
|
+
__metadata("design:type", Function)
|
|
702
|
+
], SFU.prototype, "serves", void 0);
|
|
703
|
+
__decorate([
|
|
704
|
+
(0, di_1.Configurable)(core_1.DTO.Array().items(core_1.DTO.String().valid(...MediaCodecs_js_1.SUPPORTED_CODECS).insensitive()).optional()),
|
|
705
|
+
__metadata("design:type", Array)
|
|
706
|
+
], SFU.prototype, "codecs", void 0);
|
|
707
|
+
__decorate([
|
|
708
|
+
(0, di_1.Configurable)(core_1.DTO.Array().items(core_1.DTO.Number().port()).length(2).optional()),
|
|
709
|
+
__metadata("design:type", Array)
|
|
710
|
+
], SFU.prototype, "icePortRange", void 0);
|
|
711
|
+
__decorate([
|
|
712
|
+
(0, di_1.Configurable)(core_1.DTO.Array().items(core_1.DTO.String()).optional()),
|
|
713
|
+
__metadata("design:type", Array)
|
|
714
|
+
], SFU.prototype, "iceAdditionalHostAddresses", void 0);
|
|
715
|
+
__decorate([
|
|
716
|
+
(0, di_1.Configurable)(core_1.DTO.Number().integer().min(0).optional().default(0)),
|
|
717
|
+
__metadata("design:type", Number)
|
|
718
|
+
], SFU.prototype, "maxMembers", void 0);
|
|
719
|
+
__decorate([
|
|
720
|
+
(0, di_1.Configurable)(core_1.DTO.Function().optional()),
|
|
721
|
+
__metadata("design:type", Function)
|
|
722
|
+
], SFU.prototype, "select", void 0);
|
|
723
|
+
__decorate([
|
|
724
|
+
(0, di_1.Configurable)(core_1.DTO.Number().integer().min(0).optional().default(0)),
|
|
725
|
+
__metadata("design:type", Number)
|
|
726
|
+
], SFU.prototype, "workers", void 0);
|
|
727
|
+
__decorate([
|
|
728
|
+
(0, di_1.Configurable)(core_1.DTO.Object({
|
|
729
|
+
maxYoungGenerationSizeMb: core_1.DTO.Number().positive().optional(),
|
|
730
|
+
maxOldGenerationSizeMb: core_1.DTO.Number().positive().optional(),
|
|
731
|
+
codeRangeSizeMb: core_1.DTO.Number().positive().optional(),
|
|
732
|
+
stackSizeMb: core_1.DTO.Number().positive().optional()
|
|
733
|
+
}).optional()),
|
|
734
|
+
__metadata("design:type", Object)
|
|
735
|
+
], SFU.prototype, "workerResourceLimits", void 0);
|
|
736
|
+
exports.SFU = SFU = __decorate([
|
|
737
|
+
(0, di_1.Singleton)()
|
|
738
|
+
], SFU);
|
|
739
|
+
/**
|
|
740
|
+
* Build the options of a {@link SFU} component, for the `components` of an application.
|
|
741
|
+
* @param options The signaling, the rooms served, the codecs, the ports, the limits, the selection of the tracks (all
|
|
742
|
+
* optional).
|
|
743
|
+
* @returns The component options.
|
|
744
|
+
* @example
|
|
745
|
+
* ```typescript
|
|
746
|
+
* import {Application} from 'lakutata'
|
|
747
|
+
* import {buildSFUOptions, buildSignalingOptions} from '@lakutata/webrtc'
|
|
748
|
+
*
|
|
749
|
+
* Application.run(() => ({
|
|
750
|
+
* id: 'meet.app',
|
|
751
|
+
* name: 'Meet',
|
|
752
|
+
* components: {
|
|
753
|
+
* signaling: buildSignalingOptions(),
|
|
754
|
+
* //The members whose metadata says they only listen receive the audio only
|
|
755
|
+
* sfu: buildSFUOptions({select: (subscriber, track): boolean => track.kind === 'audio' || (subscriber.metadata as {listener?: boolean})?.listener !== true})
|
|
756
|
+
* },
|
|
757
|
+
* bootstrap: ['sfu']
|
|
758
|
+
* }))
|
|
759
|
+
* ```
|
|
760
|
+
*/
|
|
761
|
+
function buildSFUOptions(options = {}) {
|
|
762
|
+
return { class: SFU, ...options };
|
|
763
|
+
}
|