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