@matter/protocol 0.16.0-alpha.0-20251203-aaf94bca8 → 0.16.0-alpha.0-20251207-37e501b18
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/dist/cjs/action/client/ClientInteraction.d.ts.map +1 -1
- package/dist/cjs/action/client/ClientInteraction.js +82 -34
- package/dist/cjs/action/client/ClientInteraction.js.map +2 -2
- package/dist/cjs/action/client/subscription/ClientSubscription.d.ts +10 -5
- package/dist/cjs/action/client/subscription/ClientSubscription.d.ts.map +1 -1
- package/dist/cjs/action/client/subscription/ClientSubscription.js +21 -1
- package/dist/cjs/action/client/subscription/ClientSubscription.js.map +2 -2
- package/dist/cjs/action/client/subscription/ClientSubscriptionHandler.js +2 -3
- package/dist/cjs/action/client/subscription/ClientSubscriptionHandler.js.map +1 -1
- package/dist/cjs/action/client/subscription/ClientSubscriptions.d.ts +4 -2
- package/dist/cjs/action/client/subscription/ClientSubscriptions.d.ts.map +1 -1
- package/dist/cjs/action/client/subscription/ClientSubscriptions.js +68 -8
- package/dist/cjs/action/client/subscription/ClientSubscriptions.js.map +1 -1
- package/dist/cjs/action/client/subscription/PeerSubscription.d.ts +0 -1
- package/dist/cjs/action/client/subscription/PeerSubscription.d.ts.map +1 -1
- package/dist/cjs/action/client/subscription/PeerSubscription.js +1 -2
- package/dist/cjs/action/client/subscription/PeerSubscription.js.map +1 -1
- package/dist/cjs/action/client/subscription/SustainedSubscription.d.ts +0 -2
- package/dist/cjs/action/client/subscription/SustainedSubscription.d.ts.map +1 -1
- package/dist/cjs/action/client/subscription/SustainedSubscription.js +2 -4
- package/dist/cjs/action/client/subscription/SustainedSubscription.js.map +1 -1
- package/dist/cjs/action/request/Invoke.js +2 -2
- package/dist/cjs/action/request/Invoke.js.map +1 -1
- package/dist/cjs/action/server/AttributeReadResponse.d.ts.map +1 -1
- package/dist/cjs/action/server/AttributeReadResponse.js +78 -25
- package/dist/cjs/action/server/AttributeReadResponse.js.map +1 -1
- package/dist/cjs/action/server/AttributeWriteResponse.d.ts.map +1 -1
- package/dist/cjs/action/server/AttributeWriteResponse.js +70 -17
- package/dist/cjs/action/server/AttributeWriteResponse.js.map +1 -1
- package/dist/cjs/action/server/CommandInvokeResponse.d.ts.map +1 -1
- package/dist/cjs/action/server/CommandInvokeResponse.js +83 -30
- package/dist/cjs/action/server/CommandInvokeResponse.js.map +1 -1
- package/dist/cjs/action/server/DataResponse.d.ts +1 -0
- package/dist/cjs/action/server/DataResponse.d.ts.map +1 -1
- package/dist/cjs/action/server/DataResponse.js +3 -0
- package/dist/cjs/action/server/DataResponse.js.map +1 -1
- package/dist/cjs/action/server/ServerInteraction.d.ts.map +1 -1
- package/dist/cjs/action/server/ServerInteraction.js +4 -4
- package/dist/cjs/action/server/ServerInteraction.js.map +1 -1
- package/dist/cjs/advertisement/Advertisement.d.ts.map +1 -1
- package/dist/cjs/advertisement/Advertisement.js +66 -14
- package/dist/cjs/advertisement/Advertisement.js.map +1 -1
- package/dist/cjs/advertisement/Advertiser.d.ts +4 -1
- package/dist/cjs/advertisement/Advertiser.d.ts.map +1 -1
- package/dist/cjs/advertisement/Advertiser.js +63 -2
- package/dist/cjs/advertisement/Advertiser.js.map +1 -1
- package/dist/cjs/advertisement/ble/BleAdvertiser.d.ts +6 -1
- package/dist/cjs/advertisement/ble/BleAdvertiser.d.ts.map +1 -1
- package/dist/cjs/advertisement/ble/BleAdvertiser.js +1 -1
- package/dist/cjs/advertisement/ble/BleAdvertiser.js.map +1 -1
- package/dist/cjs/advertisement/mdns/MdnsAdvertiser.d.ts +5 -1
- package/dist/cjs/advertisement/mdns/MdnsAdvertiser.d.ts.map +1 -1
- package/dist/cjs/advertisement/mdns/MdnsAdvertiser.js +1 -1
- package/dist/cjs/advertisement/mdns/MdnsAdvertiser.js.map +1 -1
- package/dist/cjs/certificate/kinds/definitions/asn.js +1 -1
- package/dist/cjs/certificate/kinds/definitions/asn.js.map +1 -1
- package/dist/cjs/certificate/kinds/definitions/attestation.d.ts.map +1 -1
- package/dist/cjs/cluster/client/AttributeClient.d.ts.map +1 -1
- package/dist/cjs/cluster/client/AttributeClient.js +2 -2
- package/dist/cjs/cluster/client/AttributeClient.js.map +1 -1
- package/dist/cjs/codec/MessageCodec.d.ts +8 -1
- package/dist/cjs/codec/MessageCodec.d.ts.map +1 -1
- package/dist/cjs/codec/MessageCodec.js +38 -28
- package/dist/cjs/codec/MessageCodec.js.map +2 -2
- package/dist/cjs/common/FailsafeContext.d.ts +8 -9
- package/dist/cjs/common/FailsafeContext.d.ts.map +1 -1
- package/dist/cjs/common/FailsafeContext.js +27 -33
- package/dist/cjs/common/FailsafeContext.js.map +1 -1
- package/dist/cjs/common/FailsafeTimer.d.ts +4 -3
- package/dist/cjs/common/FailsafeTimer.d.ts.map +1 -1
- package/dist/cjs/common/FailsafeTimer.js +4 -4
- package/dist/cjs/common/FailsafeTimer.js.map +1 -1
- package/dist/cjs/common/Mark.d.ts +17 -0
- package/dist/cjs/common/Mark.d.ts.map +1 -0
- package/dist/cjs/{peer/OperationalPeer.js → common/Mark.js} +19 -3
- package/dist/cjs/common/Mark.js.map +6 -0
- package/dist/cjs/common/index.d.ts +1 -0
- package/dist/cjs/common/index.d.ts.map +1 -1
- package/dist/cjs/common/index.js +1 -0
- package/dist/cjs/common/index.js.map +1 -1
- package/dist/cjs/fabric/Fabric.d.ts +16 -8
- package/dist/cjs/fabric/Fabric.d.ts.map +1 -1
- package/dist/cjs/fabric/Fabric.js +35 -18
- package/dist/cjs/fabric/Fabric.js.map +1 -1
- package/dist/cjs/fabric/FabricAuthority.d.ts +2 -2
- package/dist/cjs/fabric/FabricAuthority.d.ts.map +1 -1
- package/dist/cjs/fabric/FabricAuthority.js +3 -3
- package/dist/cjs/fabric/FabricAuthority.js.map +1 -1
- package/dist/cjs/fabric/FabricManager.d.ts +10 -14
- package/dist/cjs/fabric/FabricManager.d.ts.map +1 -1
- package/dist/cjs/fabric/FabricManager.js +44 -40
- package/dist/cjs/fabric/FabricManager.js.map +2 -2
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/interaction/AttributeDataEncoder.d.ts +1 -1
- package/dist/cjs/interaction/InteractionClient.d.ts +2 -2
- package/dist/cjs/interaction/InteractionClient.d.ts.map +1 -1
- package/dist/cjs/interaction/InteractionClient.js +39 -22
- package/dist/cjs/interaction/InteractionClient.js.map +1 -1
- package/dist/cjs/interaction/InteractionMessenger.d.ts +2 -2
- package/dist/cjs/interaction/InteractionMessenger.d.ts.map +1 -1
- package/dist/cjs/interaction/InteractionMessenger.js +35 -27
- package/dist/cjs/interaction/InteractionMessenger.js.map +1 -1
- package/dist/cjs/interaction/Subscription.d.ts +16 -37
- package/dist/cjs/interaction/Subscription.d.ts.map +1 -1
- package/dist/cjs/interaction/Subscription.js +15 -68
- package/dist/cjs/interaction/Subscription.js.map +2 -2
- package/dist/cjs/interaction/SubscriptionClient.d.ts +2 -2
- package/dist/cjs/interaction/SubscriptionClient.d.ts.map +1 -1
- package/dist/cjs/interaction/SubscriptionClient.js +2 -2
- package/dist/cjs/interaction/SubscriptionClient.js.map +1 -1
- package/dist/cjs/mdns/MdnsClient.d.ts +10 -10
- package/dist/cjs/mdns/MdnsClient.d.ts.map +1 -1
- package/dist/cjs/mdns/MdnsClient.js +165 -80
- package/dist/cjs/mdns/MdnsClient.js.map +1 -1
- package/dist/cjs/mdns/MdnsServer.d.ts +2 -2
- package/dist/cjs/mdns/MdnsServer.d.ts.map +1 -1
- package/dist/cjs/mdns/MdnsServer.js +173 -94
- package/dist/cjs/mdns/MdnsServer.js.map +2 -2
- package/dist/cjs/mdns/MdnsService.d.ts.map +1 -1
- package/dist/cjs/mdns/MdnsService.js +3 -2
- package/dist/cjs/mdns/MdnsService.js.map +1 -1
- package/dist/cjs/mdns/MdnsSocket.d.ts +3 -2
- package/dist/cjs/mdns/MdnsSocket.d.ts.map +1 -1
- package/dist/cjs/mdns/MdnsSocket.js +2 -1
- package/dist/cjs/mdns/MdnsSocket.js.map +1 -1
- package/dist/cjs/peer/ControllerCommissioner.d.ts +2 -2
- package/dist/cjs/peer/ControllerCommissioner.d.ts.map +1 -1
- package/dist/cjs/peer/ControllerCommissioner.js +26 -28
- package/dist/cjs/peer/ControllerCommissioner.js.map +1 -1
- package/dist/cjs/peer/ControllerDiscovery.d.ts +1 -1
- package/dist/cjs/peer/ControllerDiscovery.d.ts.map +1 -1
- package/dist/cjs/peer/ControllerDiscovery.js +3 -3
- package/dist/cjs/peer/ControllerDiscovery.js.map +1 -1
- package/dist/cjs/peer/Peer.d.ts +57 -0
- package/dist/cjs/peer/Peer.d.ts.map +1 -0
- package/dist/cjs/peer/Peer.js +182 -0
- package/dist/cjs/peer/Peer.js.map +6 -0
- package/dist/cjs/peer/PeerAddress.d.ts.map +1 -1
- package/dist/cjs/peer/PeerAddress.js +5 -2
- package/dist/cjs/peer/PeerAddress.js.map +1 -1
- package/dist/cjs/peer/PeerAddressStore.d.ts +3 -3
- package/dist/cjs/peer/PeerAddressStore.d.ts.map +1 -1
- package/{src/peer/OperationalPeer.ts → dist/cjs/peer/PeerDescriptor.d.ts} +14 -12
- package/dist/cjs/peer/PeerDescriptor.d.ts.map +1 -0
- package/dist/cjs/peer/PeerDescriptor.js +71 -0
- package/dist/cjs/peer/PeerDescriptor.js.map +6 -0
- package/dist/cjs/peer/PeerSet.d.ts +23 -26
- package/dist/cjs/peer/PeerSet.d.ts.map +1 -1
- package/dist/cjs/peer/PeerSet.js +173 -173
- package/dist/cjs/peer/PeerSet.js.map +2 -2
- package/dist/cjs/peer/index.d.ts +1 -1
- package/dist/cjs/peer/index.d.ts.map +1 -1
- package/dist/cjs/peer/index.js +1 -1
- package/dist/cjs/peer/index.js.map +1 -1
- package/dist/cjs/protocol/DeviceAdvertiser.js +4 -4
- package/dist/cjs/protocol/DeviceAdvertiser.js.map +1 -1
- package/dist/cjs/protocol/ExchangeManager.d.ts +6 -9
- package/dist/cjs/protocol/ExchangeManager.d.ts.map +1 -1
- package/dist/cjs/protocol/ExchangeManager.js +306 -246
- package/dist/cjs/protocol/ExchangeManager.js.map +2 -2
- package/dist/cjs/protocol/ExchangeProvider.d.ts +9 -11
- package/dist/cjs/protocol/ExchangeProvider.d.ts.map +1 -1
- package/dist/cjs/protocol/ExchangeProvider.js +79 -32
- package/dist/cjs/protocol/ExchangeProvider.js.map +2 -2
- package/dist/cjs/protocol/MessageChannel.d.ts +6 -7
- package/dist/cjs/protocol/MessageChannel.d.ts.map +1 -1
- package/dist/cjs/protocol/MessageChannel.js +14 -16
- package/dist/cjs/protocol/MessageChannel.js.map +1 -1
- package/dist/cjs/protocol/MessageCounter.d.ts +4 -4
- package/dist/cjs/protocol/MessageCounter.d.ts.map +1 -1
- package/dist/cjs/protocol/MessageCounter.js +7 -7
- package/dist/cjs/protocol/MessageCounter.js.map +1 -1
- package/dist/cjs/protocol/MessageExchange.d.ts +31 -20
- package/dist/cjs/protocol/MessageExchange.d.ts.map +1 -1
- package/dist/cjs/protocol/MessageExchange.js +316 -231
- package/dist/cjs/protocol/MessageExchange.js.map +2 -2
- package/dist/cjs/protocol/ProtocolMocks.d.ts +100 -0
- package/dist/cjs/protocol/ProtocolMocks.d.ts.map +1 -0
- package/dist/cjs/protocol/ProtocolMocks.js +237 -0
- package/dist/cjs/protocol/ProtocolMocks.js.map +6 -0
- package/dist/cjs/protocol/errors.d.ts +35 -0
- package/dist/cjs/protocol/errors.d.ts.map +1 -0
- package/dist/cjs/protocol/errors.js +50 -0
- package/dist/cjs/protocol/errors.js.map +6 -0
- package/dist/cjs/protocol/index.d.ts +2 -1
- package/dist/cjs/protocol/index.d.ts.map +1 -1
- package/dist/cjs/protocol/index.js +2 -1
- package/dist/cjs/protocol/index.js.map +1 -1
- package/dist/cjs/securechannel/SecureChannelMessenger.d.ts +1 -0
- package/dist/cjs/securechannel/SecureChannelMessenger.d.ts.map +1 -1
- package/dist/cjs/securechannel/SecureChannelMessenger.js +3 -0
- package/dist/cjs/securechannel/SecureChannelMessenger.js.map +1 -1
- package/dist/cjs/securechannel/SecureChannelProtocol.js +2 -2
- package/dist/cjs/securechannel/SecureChannelProtocol.js.map +1 -1
- package/dist/cjs/session/GroupSession.d.ts +21 -10
- package/dist/cjs/session/GroupSession.d.ts.map +1 -1
- package/dist/cjs/session/GroupSession.js +37 -12
- package/dist/cjs/session/GroupSession.js.map +1 -1
- package/dist/cjs/session/NodeSession.d.ts +56 -50
- package/dist/cjs/session/NodeSession.d.ts.map +1 -1
- package/dist/cjs/session/NodeSession.js +95 -103
- package/dist/cjs/session/NodeSession.js.map +1 -1
- package/dist/cjs/session/SecureSession.d.ts +4 -4
- package/dist/cjs/session/SecureSession.d.ts.map +1 -1
- package/dist/cjs/session/SecureSession.js +1 -1
- package/dist/cjs/session/SecureSession.js.map +1 -1
- package/dist/cjs/session/Session.d.ts +82 -66
- package/dist/cjs/session/Session.d.ts.map +1 -1
- package/dist/cjs/session/Session.js +218 -45
- package/dist/cjs/session/Session.js.map +1 -1
- package/dist/cjs/session/SessionManager.d.ts +33 -36
- package/dist/cjs/session/SessionManager.d.ts.map +1 -1
- package/dist/cjs/session/SessionManager.js +112 -150
- package/dist/cjs/session/SessionManager.js.map +1 -1
- package/dist/cjs/session/SessionParameters.d.ts +87 -0
- package/dist/cjs/session/SessionParameters.d.ts.map +1 -0
- package/dist/cjs/session/SessionParameters.js +81 -0
- package/dist/cjs/session/SessionParameters.js.map +6 -0
- package/dist/{esm/session/InsecureSession.d.ts → cjs/session/UnsecuredSession.d.ts} +18 -16
- package/dist/cjs/session/UnsecuredSession.d.ts.map +1 -0
- package/dist/cjs/session/{InsecureSession.js → UnsecuredSession.js} +21 -21
- package/dist/cjs/session/UnsecuredSession.js.map +6 -0
- package/dist/cjs/session/case/CaseClient.d.ts.map +1 -1
- package/dist/cjs/session/case/CaseClient.js +6 -4
- package/dist/cjs/session/case/CaseClient.js.map +1 -1
- package/dist/cjs/session/case/CaseServer.d.ts.map +1 -1
- package/dist/cjs/session/case/CaseServer.js +14 -10
- package/dist/cjs/session/case/CaseServer.js.map +1 -1
- package/dist/cjs/session/index.d.ts +2 -1
- package/dist/cjs/session/index.d.ts.map +1 -1
- package/dist/cjs/session/index.js +2 -1
- package/dist/cjs/session/index.js.map +1 -1
- package/dist/cjs/session/pase/PaseClient.d.ts +3 -3
- package/dist/cjs/session/pase/PaseClient.d.ts.map +1 -1
- package/dist/cjs/session/pase/PaseClient.js +5 -3
- package/dist/cjs/session/pase/PaseClient.js.map +1 -1
- package/dist/cjs/session/pase/PaseServer.d.ts.map +1 -1
- package/dist/cjs/session/pase/PaseServer.js +13 -13
- package/dist/cjs/session/pase/PaseServer.js.map +1 -1
- package/dist/esm/action/client/ClientInteraction.d.ts.map +1 -1
- package/dist/esm/action/client/ClientInteraction.js +82 -34
- package/dist/esm/action/client/ClientInteraction.js.map +2 -2
- package/dist/esm/action/client/subscription/ClientSubscription.d.ts +10 -5
- package/dist/esm/action/client/subscription/ClientSubscription.d.ts.map +1 -1
- package/dist/esm/action/client/subscription/ClientSubscription.js +22 -2
- package/dist/esm/action/client/subscription/ClientSubscription.js.map +2 -2
- package/dist/esm/action/client/subscription/ClientSubscriptionHandler.js +2 -3
- package/dist/esm/action/client/subscription/ClientSubscriptionHandler.js.map +1 -1
- package/dist/esm/action/client/subscription/ClientSubscriptions.d.ts +4 -2
- package/dist/esm/action/client/subscription/ClientSubscriptions.d.ts.map +1 -1
- package/dist/esm/action/client/subscription/ClientSubscriptions.js +68 -8
- package/dist/esm/action/client/subscription/ClientSubscriptions.js.map +1 -1
- package/dist/esm/action/client/subscription/PeerSubscription.d.ts +0 -1
- package/dist/esm/action/client/subscription/PeerSubscription.d.ts.map +1 -1
- package/dist/esm/action/client/subscription/PeerSubscription.js +1 -2
- package/dist/esm/action/client/subscription/PeerSubscription.js.map +1 -1
- package/dist/esm/action/client/subscription/SustainedSubscription.d.ts +0 -2
- package/dist/esm/action/client/subscription/SustainedSubscription.d.ts.map +1 -1
- package/dist/esm/action/client/subscription/SustainedSubscription.js +2 -4
- package/dist/esm/action/client/subscription/SustainedSubscription.js.map +1 -1
- package/dist/esm/action/request/Invoke.js +2 -2
- package/dist/esm/action/request/Invoke.js.map +1 -1
- package/dist/esm/action/server/AttributeReadResponse.d.ts.map +1 -1
- package/dist/esm/action/server/AttributeReadResponse.js +78 -25
- package/dist/esm/action/server/AttributeReadResponse.js.map +1 -1
- package/dist/esm/action/server/AttributeWriteResponse.d.ts.map +1 -1
- package/dist/esm/action/server/AttributeWriteResponse.js +70 -17
- package/dist/esm/action/server/AttributeWriteResponse.js.map +1 -1
- package/dist/esm/action/server/CommandInvokeResponse.d.ts.map +1 -1
- package/dist/esm/action/server/CommandInvokeResponse.js +83 -30
- package/dist/esm/action/server/CommandInvokeResponse.js.map +1 -1
- package/dist/esm/action/server/DataResponse.d.ts +1 -0
- package/dist/esm/action/server/DataResponse.d.ts.map +1 -1
- package/dist/esm/action/server/DataResponse.js +3 -0
- package/dist/esm/action/server/DataResponse.js.map +1 -1
- package/dist/esm/action/server/ServerInteraction.d.ts.map +1 -1
- package/dist/esm/action/server/ServerInteraction.js +4 -4
- package/dist/esm/action/server/ServerInteraction.js.map +1 -1
- package/dist/esm/advertisement/Advertisement.d.ts.map +1 -1
- package/dist/esm/advertisement/Advertisement.js +66 -14
- package/dist/esm/advertisement/Advertisement.js.map +1 -1
- package/dist/esm/advertisement/Advertiser.d.ts +4 -1
- package/dist/esm/advertisement/Advertiser.d.ts.map +1 -1
- package/dist/esm/advertisement/Advertiser.js +63 -2
- package/dist/esm/advertisement/Advertiser.js.map +1 -1
- package/dist/esm/advertisement/ble/BleAdvertiser.d.ts +6 -1
- package/dist/esm/advertisement/ble/BleAdvertiser.d.ts.map +1 -1
- package/dist/esm/advertisement/ble/BleAdvertiser.js +1 -1
- package/dist/esm/advertisement/ble/BleAdvertiser.js.map +1 -1
- package/dist/esm/advertisement/mdns/MdnsAdvertiser.d.ts +5 -1
- package/dist/esm/advertisement/mdns/MdnsAdvertiser.d.ts.map +1 -1
- package/dist/esm/advertisement/mdns/MdnsAdvertiser.js +1 -1
- package/dist/esm/advertisement/mdns/MdnsAdvertiser.js.map +1 -1
- package/dist/esm/certificate/kinds/definitions/asn.js +2 -2
- package/dist/esm/certificate/kinds/definitions/asn.js.map +1 -1
- package/dist/esm/certificate/kinds/definitions/attestation.d.ts.map +1 -1
- package/dist/esm/cluster/client/AttributeClient.d.ts.map +1 -1
- package/dist/esm/cluster/client/AttributeClient.js +1 -1
- package/dist/esm/cluster/client/AttributeClient.js.map +1 -1
- package/dist/esm/codec/MessageCodec.d.ts +8 -1
- package/dist/esm/codec/MessageCodec.d.ts.map +1 -1
- package/dist/esm/codec/MessageCodec.js +39 -28
- package/dist/esm/codec/MessageCodec.js.map +2 -2
- package/dist/esm/common/FailsafeContext.d.ts +8 -9
- package/dist/esm/common/FailsafeContext.d.ts.map +1 -1
- package/dist/esm/common/FailsafeContext.js +27 -33
- package/dist/esm/common/FailsafeContext.js.map +1 -1
- package/dist/esm/common/FailsafeTimer.d.ts +4 -3
- package/dist/esm/common/FailsafeTimer.d.ts.map +1 -1
- package/dist/esm/common/FailsafeTimer.js +4 -4
- package/dist/esm/common/FailsafeTimer.js.map +1 -1
- package/dist/esm/common/Mark.d.ts +17 -0
- package/dist/esm/common/Mark.d.ts.map +1 -0
- package/dist/esm/common/Mark.js +18 -0
- package/dist/esm/common/Mark.js.map +6 -0
- package/dist/esm/common/index.d.ts +1 -0
- package/dist/esm/common/index.d.ts.map +1 -1
- package/dist/esm/common/index.js +1 -0
- package/dist/esm/common/index.js.map +1 -1
- package/dist/esm/fabric/Fabric.d.ts +16 -8
- package/dist/esm/fabric/Fabric.d.ts.map +1 -1
- package/dist/esm/fabric/Fabric.js +36 -18
- package/dist/esm/fabric/Fabric.js.map +1 -1
- package/dist/esm/fabric/FabricAuthority.d.ts +2 -2
- package/dist/esm/fabric/FabricAuthority.d.ts.map +1 -1
- package/dist/esm/fabric/FabricAuthority.js +5 -5
- package/dist/esm/fabric/FabricAuthority.js.map +1 -1
- package/dist/esm/fabric/FabricManager.d.ts +10 -14
- package/dist/esm/fabric/FabricManager.d.ts.map +1 -1
- package/dist/esm/fabric/FabricManager.js +45 -40
- package/dist/esm/fabric/FabricManager.js.map +2 -2
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/interaction/AttributeDataEncoder.d.ts +1 -1
- package/dist/esm/interaction/InteractionClient.d.ts +2 -2
- package/dist/esm/interaction/InteractionClient.d.ts.map +1 -1
- package/dist/esm/interaction/InteractionClient.js +39 -22
- package/dist/esm/interaction/InteractionClient.js.map +1 -1
- package/dist/esm/interaction/InteractionMessenger.d.ts +2 -2
- package/dist/esm/interaction/InteractionMessenger.d.ts.map +1 -1
- package/dist/esm/interaction/InteractionMessenger.js +33 -28
- package/dist/esm/interaction/InteractionMessenger.js.map +1 -1
- package/dist/esm/interaction/Subscription.d.ts +16 -37
- package/dist/esm/interaction/Subscription.d.ts.map +1 -1
- package/dist/esm/interaction/Subscription.js +16 -69
- package/dist/esm/interaction/Subscription.js.map +2 -2
- package/dist/esm/interaction/SubscriptionClient.d.ts +2 -2
- package/dist/esm/interaction/SubscriptionClient.d.ts.map +1 -1
- package/dist/esm/interaction/SubscriptionClient.js +2 -2
- package/dist/esm/interaction/SubscriptionClient.js.map +1 -1
- package/dist/esm/mdns/MdnsClient.d.ts +10 -10
- package/dist/esm/mdns/MdnsClient.d.ts.map +1 -1
- package/dist/esm/mdns/MdnsClient.js +166 -80
- package/dist/esm/mdns/MdnsClient.js.map +1 -1
- package/dist/esm/mdns/MdnsServer.d.ts +2 -2
- package/dist/esm/mdns/MdnsServer.d.ts.map +1 -1
- package/dist/esm/mdns/MdnsServer.js +176 -94
- package/dist/esm/mdns/MdnsServer.js.map +2 -2
- package/dist/esm/mdns/MdnsService.d.ts.map +1 -1
- package/dist/esm/mdns/MdnsService.js +3 -2
- package/dist/esm/mdns/MdnsService.js.map +1 -1
- package/dist/esm/mdns/MdnsSocket.d.ts +3 -2
- package/dist/esm/mdns/MdnsSocket.d.ts.map +1 -1
- package/dist/esm/mdns/MdnsSocket.js +2 -1
- package/dist/esm/mdns/MdnsSocket.js.map +1 -1
- package/dist/esm/peer/ControllerCommissioner.d.ts +2 -2
- package/dist/esm/peer/ControllerCommissioner.d.ts.map +1 -1
- package/dist/esm/peer/ControllerCommissioner.js +26 -28
- package/dist/esm/peer/ControllerCommissioner.js.map +1 -1
- package/dist/esm/peer/ControllerDiscovery.d.ts +1 -1
- package/dist/esm/peer/ControllerDiscovery.d.ts.map +1 -1
- package/dist/esm/peer/ControllerDiscovery.js +1 -1
- package/dist/esm/peer/ControllerDiscovery.js.map +1 -1
- package/dist/esm/peer/Peer.d.ts +57 -0
- package/dist/esm/peer/Peer.d.ts.map +1 -0
- package/dist/esm/peer/Peer.js +162 -0
- package/dist/esm/peer/Peer.js.map +6 -0
- package/dist/esm/peer/PeerAddress.d.ts.map +1 -1
- package/dist/esm/peer/PeerAddress.js +5 -2
- package/dist/esm/peer/PeerAddress.js.map +1 -1
- package/dist/esm/peer/PeerAddressStore.d.ts +3 -3
- package/dist/esm/peer/PeerAddressStore.d.ts.map +1 -1
- package/dist/{cjs/peer/OperationalPeer.d.ts → esm/peer/PeerDescriptor.d.ts} +14 -7
- package/dist/esm/peer/PeerDescriptor.d.ts.map +1 -0
- package/dist/esm/peer/PeerDescriptor.js +51 -0
- package/dist/esm/peer/PeerDescriptor.js.map +6 -0
- package/dist/esm/peer/PeerSet.d.ts +23 -26
- package/dist/esm/peer/PeerSet.d.ts.map +1 -1
- package/dist/esm/peer/PeerSet.js +173 -175
- package/dist/esm/peer/PeerSet.js.map +2 -2
- package/dist/esm/peer/index.d.ts +1 -1
- package/dist/esm/peer/index.d.ts.map +1 -1
- package/dist/esm/peer/index.js +1 -1
- package/dist/esm/protocol/DeviceAdvertiser.js +4 -4
- package/dist/esm/protocol/DeviceAdvertiser.js.map +1 -1
- package/dist/esm/protocol/ExchangeManager.d.ts +6 -9
- package/dist/esm/protocol/ExchangeManager.d.ts.map +1 -1
- package/dist/esm/protocol/ExchangeManager.js +308 -251
- package/dist/esm/protocol/ExchangeManager.js.map +2 -2
- package/dist/esm/protocol/ExchangeProvider.d.ts +9 -11
- package/dist/esm/protocol/ExchangeProvider.d.ts.map +1 -1
- package/dist/esm/protocol/ExchangeProvider.js +81 -37
- package/dist/esm/protocol/ExchangeProvider.js.map +2 -2
- package/dist/esm/protocol/MessageChannel.d.ts +6 -7
- package/dist/esm/protocol/MessageChannel.d.ts.map +1 -1
- package/dist/esm/protocol/MessageChannel.js +22 -18
- package/dist/esm/protocol/MessageChannel.js.map +1 -1
- package/dist/esm/protocol/MessageCounter.d.ts +4 -4
- package/dist/esm/protocol/MessageCounter.d.ts.map +1 -1
- package/dist/esm/protocol/MessageCounter.js +7 -7
- package/dist/esm/protocol/MessageCounter.js.map +1 -1
- package/dist/esm/protocol/MessageExchange.d.ts +31 -20
- package/dist/esm/protocol/MessageExchange.d.ts.map +1 -1
- package/dist/esm/protocol/MessageExchange.js +318 -238
- package/dist/esm/protocol/MessageExchange.js.map +2 -2
- package/dist/esm/protocol/ProtocolMocks.d.ts +100 -0
- package/dist/esm/protocol/ProtocolMocks.d.ts.map +1 -0
- package/dist/esm/protocol/ProtocolMocks.js +230 -0
- package/dist/esm/protocol/ProtocolMocks.js.map +6 -0
- package/dist/esm/protocol/errors.d.ts +35 -0
- package/dist/esm/protocol/errors.d.ts.map +1 -0
- package/dist/esm/protocol/errors.js +30 -0
- package/dist/esm/protocol/errors.js.map +6 -0
- package/dist/esm/protocol/index.d.ts +2 -1
- package/dist/esm/protocol/index.d.ts.map +1 -1
- package/dist/esm/protocol/index.js +2 -1
- package/dist/esm/protocol/index.js.map +1 -1
- package/dist/esm/securechannel/SecureChannelMessenger.d.ts +1 -0
- package/dist/esm/securechannel/SecureChannelMessenger.d.ts.map +1 -1
- package/dist/esm/securechannel/SecureChannelMessenger.js +3 -0
- package/dist/esm/securechannel/SecureChannelMessenger.js.map +1 -1
- package/dist/esm/securechannel/SecureChannelProtocol.js +2 -2
- package/dist/esm/securechannel/SecureChannelProtocol.js.map +1 -1
- package/dist/esm/session/GroupSession.d.ts +21 -10
- package/dist/esm/session/GroupSession.d.ts.map +1 -1
- package/dist/esm/session/GroupSession.js +41 -12
- package/dist/esm/session/GroupSession.js.map +1 -1
- package/dist/esm/session/NodeSession.d.ts +56 -50
- package/dist/esm/session/NodeSession.d.ts.map +1 -1
- package/dist/esm/session/NodeSession.js +99 -105
- package/dist/esm/session/NodeSession.js.map +1 -1
- package/dist/esm/session/SecureSession.d.ts +4 -4
- package/dist/esm/session/SecureSession.d.ts.map +1 -1
- package/dist/esm/session/SecureSession.js +1 -1
- package/dist/esm/session/SecureSession.js.map +1 -1
- package/dist/esm/session/Session.d.ts +82 -66
- package/dist/esm/session/Session.d.ts.map +1 -1
- package/dist/esm/session/Session.js +223 -45
- package/dist/esm/session/Session.js.map +1 -1
- package/dist/esm/session/SessionManager.d.ts +33 -36
- package/dist/esm/session/SessionManager.d.ts.map +1 -1
- package/dist/esm/session/SessionManager.js +113 -157
- package/dist/esm/session/SessionManager.js.map +1 -1
- package/dist/esm/session/SessionParameters.d.ts +87 -0
- package/dist/esm/session/SessionParameters.d.ts.map +1 -0
- package/dist/esm/session/SessionParameters.js +61 -0
- package/dist/esm/session/SessionParameters.js.map +6 -0
- package/dist/{cjs/session/InsecureSession.d.ts → esm/session/UnsecuredSession.d.ts} +18 -16
- package/dist/esm/session/UnsecuredSession.d.ts.map +1 -0
- package/dist/esm/session/{InsecureSession.js → UnsecuredSession.js} +18 -18
- package/dist/esm/session/UnsecuredSession.js.map +6 -0
- package/dist/esm/session/case/CaseClient.d.ts.map +1 -1
- package/dist/esm/session/case/CaseClient.js +5 -3
- package/dist/esm/session/case/CaseClient.js.map +1 -1
- package/dist/esm/session/case/CaseServer.d.ts.map +1 -1
- package/dist/esm/session/case/CaseServer.js +14 -10
- package/dist/esm/session/case/CaseServer.js.map +1 -1
- package/dist/esm/session/index.d.ts +2 -1
- package/dist/esm/session/index.d.ts.map +1 -1
- package/dist/esm/session/index.js +2 -1
- package/dist/esm/session/index.js.map +1 -1
- package/dist/esm/session/pase/PaseClient.d.ts +3 -3
- package/dist/esm/session/pase/PaseClient.d.ts.map +1 -1
- package/dist/esm/session/pase/PaseClient.js +5 -3
- package/dist/esm/session/pase/PaseClient.js.map +1 -1
- package/dist/esm/session/pase/PaseServer.d.ts.map +1 -1
- package/dist/esm/session/pase/PaseServer.js +13 -13
- package/dist/esm/session/pase/PaseServer.js.map +1 -1
- package/package.json +6 -6
- package/src/action/client/ClientInteraction.ts +47 -13
- package/src/action/client/subscription/ClientSubscription.ts +30 -5
- package/src/action/client/subscription/ClientSubscriptionHandler.ts +2 -4
- package/src/action/client/subscription/ClientSubscriptions.ts +14 -3
- package/src/action/client/subscription/PeerSubscription.ts +2 -2
- package/src/action/client/subscription/SustainedSubscription.ts +2 -6
- package/src/action/request/Invoke.ts +2 -2
- package/src/action/server/AttributeReadResponse.ts +2 -0
- package/src/action/server/AttributeWriteResponse.ts +2 -0
- package/src/action/server/CommandInvokeResponse.ts +1 -0
- package/src/action/server/DataResponse.ts +4 -0
- package/src/action/server/ServerInteraction.ts +4 -4
- package/src/advertisement/Advertisement.ts +6 -7
- package/src/advertisement/Advertiser.ts +12 -1
- package/src/advertisement/ble/BleAdvertiser.ts +7 -2
- package/src/advertisement/mdns/MdnsAdvertiser.ts +7 -1
- package/src/certificate/kinds/definitions/asn.ts +2 -2
- package/src/certificate/kinds/definitions/attestation.ts +1 -0
- package/src/cluster/client/AttributeClient.ts +1 -1
- package/src/codec/MessageCodec.ts +39 -32
- package/src/common/FailsafeContext.ts +36 -39
- package/src/common/FailsafeTimer.ts +7 -6
- package/src/common/Mark.ts +17 -0
- package/src/common/index.ts +1 -0
- package/src/fabric/Fabric.ts +51 -23
- package/src/fabric/FabricAuthority.ts +4 -4
- package/src/fabric/FabricManager.ts +53 -40
- package/src/index.ts +3 -1
- package/src/interaction/InteractionClient.ts +40 -23
- package/src/interaction/InteractionMessenger.ts +38 -32
- package/src/interaction/Subscription.ts +20 -92
- package/src/interaction/SubscriptionClient.ts +3 -3
- package/src/mdns/MdnsClient.ts +20 -3
- package/src/mdns/MdnsServer.ts +13 -1
- package/src/mdns/MdnsService.ts +3 -2
- package/src/mdns/MdnsSocket.ts +9 -3
- package/src/peer/ControllerCommissioner.ts +35 -37
- package/src/peer/ControllerDiscovery.ts +1 -1
- package/src/peer/Peer.ts +161 -0
- package/src/peer/PeerAddress.ts +6 -2
- package/src/peer/PeerAddressStore.ts +3 -3
- package/src/peer/PeerDescriptor.ts +89 -0
- package/src/peer/PeerSet.ts +145 -213
- package/src/peer/index.ts +1 -1
- package/src/protocol/DeviceAdvertiser.ts +4 -4
- package/src/protocol/ExchangeManager.ts +161 -181
- package/src/protocol/ExchangeProvider.ts +31 -40
- package/src/protocol/MessageChannel.ts +29 -18
- package/src/protocol/MessageCounter.ts +8 -8
- package/src/protocol/MessageExchange.ts +181 -144
- package/src/protocol/ProtocolMocks.ts +302 -0
- package/src/protocol/errors.ts +44 -0
- package/src/protocol/index.ts +2 -1
- package/src/securechannel/SecureChannelMessenger.ts +4 -0
- package/src/securechannel/SecureChannelProtocol.ts +2 -2
- package/src/session/GroupSession.ts +67 -23
- package/src/session/NodeSession.ts +140 -136
- package/src/session/SecureSession.ts +6 -5
- package/src/session/Session.ts +234 -101
- package/src/session/SessionManager.ts +148 -187
- package/src/session/SessionParameters.ts +108 -0
- package/src/session/{InsecureSession.ts → UnsecuredSession.ts} +28 -26
- package/src/session/case/CaseClient.ts +6 -3
- package/src/session/case/CaseServer.ts +15 -11
- package/src/session/index.ts +2 -1
- package/src/session/pase/PaseClient.ts +12 -5
- package/src/session/pase/PaseServer.ts +14 -13
- package/dist/cjs/peer/OperationalPeer.d.ts.map +0 -1
- package/dist/cjs/peer/OperationalPeer.js.map +0 -6
- package/dist/cjs/protocol/ChannelManager.d.ts +0 -29
- package/dist/cjs/protocol/ChannelManager.d.ts.map +0 -1
- package/dist/cjs/protocol/ChannelManager.js +0 -178
- package/dist/cjs/protocol/ChannelManager.js.map +0 -6
- package/dist/cjs/session/InsecureSession.d.ts.map +0 -1
- package/dist/cjs/session/InsecureSession.js.map +0 -6
- package/dist/esm/peer/OperationalPeer.d.ts +0 -38
- package/dist/esm/peer/OperationalPeer.d.ts.map +0 -1
- package/dist/esm/peer/OperationalPeer.js +0 -6
- package/dist/esm/peer/OperationalPeer.js.map +0 -6
- package/dist/esm/protocol/ChannelManager.d.ts +0 -29
- package/dist/esm/protocol/ChannelManager.d.ts.map +0 -1
- package/dist/esm/protocol/ChannelManager.js +0 -158
- package/dist/esm/protocol/ChannelManager.js.map +0 -6
- package/dist/esm/session/InsecureSession.d.ts.map +0 -1
- package/dist/esm/session/InsecureSession.js.map +0 -6
- package/src/protocol/ChannelManager.ts +0 -180
package/src/peer/index.ts
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
export * from "./ControllerCommissioner.js";
|
|
8
8
|
export * from "./ControllerCommissioningFlow.js";
|
|
9
9
|
export * from "./ControllerDiscovery.js";
|
|
10
|
-
export * from "./OperationalPeer.js";
|
|
11
10
|
export * from "./PeerAddress.js";
|
|
12
11
|
export * from "./PeerAddressStore.js";
|
|
12
|
+
export * from "./PeerDescriptor.js";
|
|
13
13
|
export * from "./PeerSet.js";
|
|
14
14
|
export * from "./PhysicalDeviceProperties.js";
|
|
@@ -48,7 +48,7 @@ export class DeviceAdvertiser {
|
|
|
48
48
|
});
|
|
49
49
|
|
|
50
50
|
// When a fabric is updated we might need to adjust announcements
|
|
51
|
-
this.#observers.on(fabrics.events.
|
|
51
|
+
this.#observers.on(fabrics.events.replaced, async fabric => {
|
|
52
52
|
if (!this.#isOperational) {
|
|
53
53
|
return;
|
|
54
54
|
}
|
|
@@ -78,7 +78,7 @@ export class DeviceAdvertiser {
|
|
|
78
78
|
});
|
|
79
79
|
|
|
80
80
|
// When a fabric is deleted, cancel any active advertisement
|
|
81
|
-
this.#observers.on(fabrics.events.
|
|
81
|
+
this.#observers.on(fabrics.events.deleting, fabric => {
|
|
82
82
|
Advertisement.cancelAll(this.#advertisements(ad => ad.isOperational() && ad.description.fabric === fabric));
|
|
83
83
|
});
|
|
84
84
|
|
|
@@ -86,7 +86,7 @@ export class DeviceAdvertiser {
|
|
|
86
86
|
// configured
|
|
87
87
|
this.#observers.on(sessions.sessions.added, session => {
|
|
88
88
|
const fabricIndex = session.fabric?.fabricIndex;
|
|
89
|
-
const fabric = fabricIndex ? fabrics.
|
|
89
|
+
const fabric = fabricIndex ? fabrics.maybeForIndex(fabricIndex) : undefined;
|
|
90
90
|
if (!fabric) {
|
|
91
91
|
return;
|
|
92
92
|
}
|
|
@@ -102,7 +102,7 @@ export class DeviceAdvertiser {
|
|
|
102
102
|
// When a session is closed, conditionally resume broadcast
|
|
103
103
|
this.#observers.on(sessions.sessions.deleted, session => {
|
|
104
104
|
const fabricIndex = session.fabric?.fabricIndex;
|
|
105
|
-
const fabric = fabricIndex ? fabrics.
|
|
105
|
+
const fabric = fabricIndex ? fabrics.maybeForIndex(fabricIndex) : undefined;
|
|
106
106
|
|
|
107
107
|
// If this was an operational connection, readvertise if we're no longer connected to the peer
|
|
108
108
|
if (fabric) {
|
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { DecodedMessage, MessageCodec, SessionType } from "#codec/MessageCodec.js";
|
|
8
|
+
import { Mark } from "#common/Mark.js";
|
|
8
9
|
import {
|
|
10
|
+
BasicMultiplex,
|
|
9
11
|
Bytes,
|
|
10
12
|
Channel,
|
|
11
13
|
ConnectionlessTransport,
|
|
@@ -14,94 +16,88 @@ import {
|
|
|
14
16
|
Entropy,
|
|
15
17
|
Environment,
|
|
16
18
|
Environmental,
|
|
19
|
+
hex,
|
|
17
20
|
ImplementationError,
|
|
21
|
+
Lifetime,
|
|
18
22
|
Logger,
|
|
19
|
-
MatterAggregateError,
|
|
20
|
-
MatterError,
|
|
21
23
|
MatterFlowError,
|
|
22
24
|
ObserverGroup,
|
|
23
25
|
UdpInterface,
|
|
24
26
|
UnexpectedDataError,
|
|
25
27
|
} from "#general";
|
|
26
28
|
import { PeerAddress } from "#peer/PeerAddress.js";
|
|
27
|
-
import {
|
|
28
|
-
ChannelNotConnectedError,
|
|
29
|
-
DEFAULT_EXPECTED_PROCESSING_TIME,
|
|
30
|
-
MessageChannel,
|
|
31
|
-
} from "#protocol/MessageChannel.js";
|
|
29
|
+
import { DEFAULT_EXPECTED_PROCESSING_TIME } from "#protocol/MessageChannel.js";
|
|
32
30
|
import { SecureChannelMessenger } from "#securechannel/SecureChannelMessenger.js";
|
|
33
|
-
import { UNICAST_UNSECURE_SESSION_ID } from "#session/InsecureSession.js";
|
|
34
31
|
import { NodeSession } from "#session/NodeSession.js";
|
|
35
32
|
import { Session } from "#session/Session.js";
|
|
36
33
|
import { SessionManager } from "#session/SessionManager.js";
|
|
34
|
+
import { UNICAST_UNSECURE_SESSION_ID } from "#session/UnsecuredSession.js";
|
|
37
35
|
import { NodeId, SECURE_CHANNEL_PROTOCOL_ID, SecureMessageType } from "#types";
|
|
38
|
-
import { ChannelManager } from "./ChannelManager.js";
|
|
39
36
|
import { MessageExchange, MessageExchangeContext } from "./MessageExchange.js";
|
|
40
37
|
import { DuplicateMessageError } from "./MessageReceptionState.js";
|
|
41
38
|
import { ProtocolHandler } from "./ProtocolHandler.js";
|
|
42
39
|
|
|
43
40
|
const logger = Logger.get("ExchangeManager");
|
|
44
41
|
|
|
45
|
-
|
|
42
|
+
/**
|
|
43
|
+
* Maximum number of concurrent outgoing exchanges per session.
|
|
44
|
+
* We chose 30 under the assumption that each exchange has one message in flight and the usual SecureSession message
|
|
45
|
+
* counter window tracks 32 messages. So we have "2 spare messages" if really someone uses that many parallel exchanges.
|
|
46
|
+
* TODO: Change this into an exchange creation queue instead of hard limiting it.
|
|
47
|
+
*/
|
|
48
|
+
const MAXIMUM_CONCURRENT_OUTGOING_EXCHANGES_PER_SESSION = 30;
|
|
46
49
|
|
|
47
50
|
/**
|
|
48
51
|
* Interfaces {@link ExchangeManager} with other components.
|
|
49
52
|
*/
|
|
50
53
|
export interface ExchangeManagerContext {
|
|
54
|
+
lifetime: Lifetime.Owner;
|
|
51
55
|
entropy: Entropy;
|
|
52
56
|
netInterface: ConnectionlessTransportSet;
|
|
53
|
-
|
|
54
|
-
channelManager: ChannelManager;
|
|
57
|
+
sessions: SessionManager;
|
|
55
58
|
}
|
|
56
59
|
|
|
57
60
|
export class ExchangeManager {
|
|
61
|
+
readonly #lifetime: Lifetime;
|
|
58
62
|
readonly #transports: ConnectionlessTransportSet;
|
|
59
|
-
readonly #
|
|
60
|
-
readonly #channelManager: ChannelManager;
|
|
63
|
+
readonly #sessions: SessionManager;
|
|
61
64
|
readonly #exchangeCounter: ExchangeCounter;
|
|
62
65
|
readonly #exchanges = new Map<number, MessageExchange>();
|
|
63
66
|
readonly #protocols = new Map<number, ProtocolHandler>();
|
|
64
67
|
readonly #listeners = new Map<ConnectionlessTransport, ConnectionlessTransport.Listener>();
|
|
65
|
-
readonly #
|
|
68
|
+
readonly #workers: BasicMultiplex;
|
|
66
69
|
readonly #observers = new ObserverGroup(this);
|
|
67
|
-
#
|
|
70
|
+
readonly #sessionObservers = new Map<Session, ObserverGroup>();
|
|
71
|
+
#isClosing = false;
|
|
68
72
|
|
|
69
73
|
constructor(context: ExchangeManagerContext) {
|
|
74
|
+
this.#lifetime = context.lifetime.join("exchanges");
|
|
75
|
+
this.#workers = new BasicMultiplex();
|
|
70
76
|
this.#transports = context.netInterface;
|
|
71
|
-
this.#
|
|
72
|
-
this.#channelManager = context.channelManager;
|
|
77
|
+
this.#sessions = context.sessions;
|
|
73
78
|
this.#exchangeCounter = new ExchangeCounter(context.entropy);
|
|
74
79
|
|
|
75
80
|
for (const netInterface of this.#transports) {
|
|
76
|
-
this.#
|
|
81
|
+
this.#addTransport(netInterface);
|
|
77
82
|
}
|
|
78
83
|
|
|
79
|
-
this.#observers.on(this.#transports.added, this.#
|
|
80
|
-
this.#observers.on(this.#transports.deleted, this.#
|
|
81
|
-
|
|
82
|
-
this.#observers.on(this.#
|
|
83
|
-
if (!session.closingAfterExchangeFinished) {
|
|
84
|
-
// Delayed closing is executed when exchange is closed
|
|
85
|
-
session.closer = this.#closeSession(session);
|
|
86
|
-
}
|
|
87
|
-
});
|
|
84
|
+
this.#observers.on(this.#transports.added, this.#addTransport);
|
|
85
|
+
this.#observers.on(this.#transports.deleted, this.#deleteTransport);
|
|
86
|
+
this.#observers.on(this.#sessions.sessions.added, this.#addSession);
|
|
87
|
+
this.#observers.on(this.#sessions.sessions.deleted, this.#deleteSession);
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
static [Environmental.create](env: Environment) {
|
|
91
91
|
const instance = new ExchangeManager({
|
|
92
|
+
lifetime: env,
|
|
92
93
|
entropy: env.get(Entropy),
|
|
93
94
|
netInterface: env.get(ConnectionlessTransportSet),
|
|
94
|
-
|
|
95
|
-
channelManager: env.get(ChannelManager),
|
|
95
|
+
sessions: env.get(SessionManager),
|
|
96
96
|
});
|
|
97
97
|
env.set(ExchangeManager, instance);
|
|
98
98
|
return instance;
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
get channels() {
|
|
102
|
-
return this.#channelManager;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
101
|
hasProtocolHandler(protocolId: number) {
|
|
106
102
|
return this.#protocols.has(protocolId);
|
|
107
103
|
}
|
|
@@ -118,36 +114,57 @@ export class ExchangeManager {
|
|
|
118
114
|
}
|
|
119
115
|
|
|
120
116
|
initiateExchange(address: PeerAddress, protocolId: number) {
|
|
121
|
-
return this.
|
|
117
|
+
return this.initiateExchangeForSession(this.#sessions.sessionFor(address), protocolId);
|
|
122
118
|
}
|
|
123
119
|
|
|
124
|
-
|
|
120
|
+
initiateExchangeForSession(session: Session, protocolId: number) {
|
|
125
121
|
const exchangeId = this.#exchangeCounter.getIncrementedCounter();
|
|
126
122
|
const exchangeIndex = exchangeId | 0x10000; // Ensure initiated and received exchange index are different, since the exchangeID can be the same
|
|
127
|
-
const exchange = MessageExchange.initiate(this.#messageExchangeContextFor(
|
|
123
|
+
const exchange = MessageExchange.initiate(this.#messageExchangeContextFor(session), exchangeId, protocolId);
|
|
128
124
|
this.#addExchange(exchangeIndex, exchange);
|
|
129
125
|
return exchange;
|
|
130
126
|
}
|
|
131
127
|
|
|
132
128
|
async close() {
|
|
133
|
-
this.#
|
|
129
|
+
if (this.#isClosing) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
using closing = this.#lifetime.closing();
|
|
134
|
+
|
|
135
|
+
this.#isClosing = true;
|
|
136
|
+
|
|
137
|
+
const exchangesClosed = new BasicMultiplex();
|
|
138
|
+
|
|
139
|
+
for (const exchange of this.#exchanges.values()) {
|
|
140
|
+
exchangesClosed.add(exchange.close(true));
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
{
|
|
144
|
+
using _closing = closing.join("exchanges");
|
|
145
|
+
await exchangesClosed;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
for (const listener of this.#listeners.keys()) {
|
|
149
|
+
this.#deleteTransport(listener);
|
|
150
|
+
}
|
|
151
|
+
|
|
134
152
|
for (const protocol of this.#protocols.values()) {
|
|
135
|
-
|
|
153
|
+
this.#workers.add(protocol.close());
|
|
136
154
|
}
|
|
137
|
-
|
|
138
|
-
|
|
155
|
+
|
|
156
|
+
{
|
|
157
|
+
using _closing = closing.join("workers");
|
|
158
|
+
await this.#workers;
|
|
139
159
|
}
|
|
140
|
-
|
|
141
|
-
logger.error(error),
|
|
142
|
-
);
|
|
143
|
-
await MatterAggregateError.allSettled(
|
|
144
|
-
Array.from(this.#exchanges.values()).map(exchange => exchange.close(true)),
|
|
145
|
-
"Error closing exchanges",
|
|
146
|
-
).catch(error => logger.error(error));
|
|
160
|
+
|
|
147
161
|
this.#exchanges.clear();
|
|
162
|
+
this.#observers.close();
|
|
148
163
|
}
|
|
149
164
|
|
|
150
|
-
|
|
165
|
+
async #onMessage(channel: Channel<Bytes>, messageBytes: Bytes) {
|
|
166
|
+
using _lifetime = this.#lifetime.join("receiving from", Diagnostic.strong(channel.name));
|
|
167
|
+
|
|
151
168
|
const packet = MessageCodec.decodePacket(messageBytes);
|
|
152
169
|
const bytes = Bytes.of(messageBytes);
|
|
153
170
|
const aad = bytes.slice(0, bytes.length - packet.applicationPayload.byteLength); // Header+Extensions
|
|
@@ -159,25 +176,27 @@ export class ExchangeManager {
|
|
|
159
176
|
let message: DecodedMessage | undefined;
|
|
160
177
|
if (packet.header.sessionType === SessionType.Unicast) {
|
|
161
178
|
if (packet.header.sessionId === UNICAST_UNSECURE_SESSION_ID) {
|
|
162
|
-
if (this.#
|
|
179
|
+
if (this.#isClosing) return;
|
|
163
180
|
const initiatorNodeId = packet.header.sourceNodeId ?? NodeId.UNSPECIFIED_NODE_ID;
|
|
164
181
|
session =
|
|
165
|
-
this.#
|
|
166
|
-
this.#
|
|
182
|
+
this.#sessions.getUnsecuredSession(initiatorNodeId) ??
|
|
183
|
+
this.#sessions.createUnsecuredSession({
|
|
184
|
+
channel,
|
|
167
185
|
initiatorNodeId,
|
|
168
186
|
});
|
|
169
187
|
} else {
|
|
170
|
-
session = this.#
|
|
188
|
+
session = this.#sessions.getSession(packet.header.sessionId);
|
|
171
189
|
}
|
|
172
190
|
|
|
173
191
|
if (session === undefined) {
|
|
174
|
-
|
|
175
|
-
`
|
|
192
|
+
logger.warn(
|
|
193
|
+
`Ignoring message for unknown session ${Session.idStrOf(packet)}${
|
|
176
194
|
packet.header.sourceNodeId !== undefined
|
|
177
|
-
? `
|
|
195
|
+
? ` from node ${hex.fixed(packet.header.sourceNodeId, 16)}`
|
|
178
196
|
: ""
|
|
179
197
|
}`,
|
|
180
198
|
);
|
|
199
|
+
return;
|
|
181
200
|
}
|
|
182
201
|
|
|
183
202
|
message = session.decode(packet, aad);
|
|
@@ -190,13 +209,13 @@ export class ExchangeManager {
|
|
|
190
209
|
isDuplicate = true;
|
|
191
210
|
}
|
|
192
211
|
} else if (packet.header.sessionType === SessionType.Group) {
|
|
193
|
-
if (this.#
|
|
212
|
+
if (this.#isClosing) return;
|
|
194
213
|
if (packet.header.sourceNodeId === undefined) {
|
|
195
214
|
throw new UnexpectedDataError("Group session message must include a source NodeId");
|
|
196
215
|
}
|
|
197
216
|
|
|
198
217
|
let key: Bytes;
|
|
199
|
-
({ session, message, key } = this.#
|
|
218
|
+
({ session, message, key } = this.#sessions.groupSessionFromPacket(packet, aad));
|
|
200
219
|
|
|
201
220
|
try {
|
|
202
221
|
session.updateMessageCounter(messageId, packet.header.sourceNodeId, key);
|
|
@@ -231,19 +250,18 @@ export class ExchangeManager {
|
|
|
231
250
|
exId: message.payloadHeader.exchangeId,
|
|
232
251
|
via: channel.name,
|
|
233
252
|
});
|
|
253
|
+
|
|
234
254
|
if (exchange !== undefined) {
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
exchange.session.id !== packet.header.sessionId ||
|
|
238
|
-
(exchange.isClosing && !isStandaloneAck)
|
|
239
|
-
) {
|
|
255
|
+
this.#lifetime.details.exchange = exchange.idStr;
|
|
256
|
+
if (exchange.session.id !== packet.header.sessionId || (exchange.isClosing && !isStandaloneAck)) {
|
|
240
257
|
logger.debug(
|
|
241
|
-
|
|
258
|
+
exchange.via,
|
|
259
|
+
"Ignore",
|
|
260
|
+
Mark.INBOUND,
|
|
261
|
+
"message because",
|
|
242
262
|
exchange.isClosing
|
|
243
263
|
? "exchange is closing"
|
|
244
|
-
:
|
|
245
|
-
? `session ID mismatch ${exchange.session.id} vs ${packet.header.sessionId}`
|
|
246
|
-
: `session security requirements (${exchange.requiresSecureSession}) not fulfilled`,
|
|
264
|
+
: `session ID mismatch (header session is ${Session.idStrOf(packet)}`,
|
|
247
265
|
messageDiagnostics,
|
|
248
266
|
);
|
|
249
267
|
|
|
@@ -257,10 +275,10 @@ export class ExchangeManager {
|
|
|
257
275
|
|
|
258
276
|
await exchange.onMessageReceived(message, isDuplicate);
|
|
259
277
|
} else {
|
|
260
|
-
if (this.#
|
|
261
|
-
if (session.
|
|
278
|
+
if (this.#isClosing) return;
|
|
279
|
+
if (session.isClosing) {
|
|
262
280
|
throw new MatterFlowError(
|
|
263
|
-
`
|
|
281
|
+
`Declining new exchange because session ${Session.idStrOf(packet)} is closing`,
|
|
264
282
|
);
|
|
265
283
|
}
|
|
266
284
|
|
|
@@ -273,7 +291,9 @@ export class ExchangeManager {
|
|
|
273
291
|
// TODO When adding Group sessions, we need to check how to adjust that handling
|
|
274
292
|
if (handlerSecurityMismatch) {
|
|
275
293
|
logger.debug(
|
|
276
|
-
|
|
294
|
+
"Ignore",
|
|
295
|
+
Mark.INBOUND,
|
|
296
|
+
`message because not matching the security requirements (${protocolHandler.requiresSecureSession} vs. ${session.isSecure})`,
|
|
277
297
|
messageDiagnostics,
|
|
278
298
|
);
|
|
279
299
|
}
|
|
@@ -285,29 +305,25 @@ export class ExchangeManager {
|
|
|
285
305
|
!handlerSecurityMismatch
|
|
286
306
|
) {
|
|
287
307
|
if (isStandaloneAck && !message.payloadHeader.requiresAck) {
|
|
288
|
-
logger.debug("Ignore
|
|
308
|
+
logger.debug("Ignore", Mark.INBOUND, "unsolicited standalone ack message", messageDiagnostics);
|
|
289
309
|
return;
|
|
290
310
|
}
|
|
291
311
|
|
|
292
|
-
const exchange = MessageExchange.fromInitialMessage(
|
|
293
|
-
|
|
294
|
-
message,
|
|
295
|
-
);
|
|
312
|
+
const exchange = MessageExchange.fromInitialMessage(this.#messageExchangeContextFor(session), message);
|
|
313
|
+
this.#lifetime.details.exchange = exchange.idStr;
|
|
296
314
|
this.#addExchange(exchangeIndex, exchange);
|
|
297
315
|
await exchange.onMessageReceived(message);
|
|
298
316
|
await protocolHandler.onNewExchange(exchange, message);
|
|
299
317
|
} else if (message.payloadHeader.requiresAck) {
|
|
300
|
-
const exchange = MessageExchange.fromInitialMessage(
|
|
301
|
-
|
|
302
|
-
message,
|
|
303
|
-
);
|
|
318
|
+
const exchange = MessageExchange.fromInitialMessage(this.#messageExchangeContextFor(session), message);
|
|
319
|
+
this.#lifetime.details.exchange = exchange.idStr;
|
|
304
320
|
this.#addExchange(exchangeIndex, exchange);
|
|
305
321
|
await exchange.send(SecureMessageType.StandaloneAck, new Uint8Array(0), {
|
|
306
322
|
includeAcknowledgeMessageId: message.packetHeader.messageId,
|
|
307
323
|
protocolId: SECURE_CHANNEL_PROTOCOL_ID,
|
|
308
324
|
});
|
|
309
325
|
await exchange.close();
|
|
310
|
-
logger.debug("Ignore
|
|
326
|
+
logger.debug("Ignore", Mark.INBOUND, "unsolicited message", messageDiagnostics);
|
|
311
327
|
} else {
|
|
312
328
|
if (protocolHandler === undefined) {
|
|
313
329
|
throw new MatterFlowError(`Unsupported protocol ${message.payloadHeader.protocolId}`);
|
|
@@ -315,82 +331,25 @@ export class ExchangeManager {
|
|
|
315
331
|
if (isDuplicate) {
|
|
316
332
|
if (message.packetHeader.destGroupId === undefined) {
|
|
317
333
|
// Duplicate Non-Group messages are still interesting to log to know them
|
|
318
|
-
logger.debug("Ignore
|
|
334
|
+
logger.debug("Ignore", Mark.INBOUND, "duplicate message", messageDiagnostics);
|
|
319
335
|
}
|
|
320
336
|
return;
|
|
321
337
|
}
|
|
322
338
|
if (!isStandaloneAck) {
|
|
323
|
-
logger.info(
|
|
339
|
+
logger.info(
|
|
340
|
+
"Discard",
|
|
341
|
+
Mark.INBOUND,
|
|
342
|
+
"unexpected message",
|
|
343
|
+
messageDiagnostics,
|
|
344
|
+
Diagnostic.json(message),
|
|
345
|
+
);
|
|
324
346
|
}
|
|
325
347
|
}
|
|
326
348
|
}
|
|
327
349
|
}
|
|
328
350
|
|
|
329
351
|
async deleteExchange(exchangeIndex: number) {
|
|
330
|
-
const exchange = this.#exchanges.get(exchangeIndex);
|
|
331
|
-
if (exchange === undefined) {
|
|
332
|
-
logger.info(`Exchange with index ${exchangeIndex} to delete not found or already deleted.`);
|
|
333
|
-
return;
|
|
334
|
-
}
|
|
335
|
-
const { session } = exchange;
|
|
336
352
|
this.#exchanges.delete(exchangeIndex);
|
|
337
|
-
if (NodeSession.is(session) && session.closingAfterExchangeFinished) {
|
|
338
|
-
logger.debug(
|
|
339
|
-
`Exchange index ${exchangeIndex} on Session ${session.name} is already marked for closure. Close session now.`,
|
|
340
|
-
);
|
|
341
|
-
try {
|
|
342
|
-
await this.#closeSession(session);
|
|
343
|
-
} catch (error) {
|
|
344
|
-
logger.error(`Error closing session ${session.name}. Ignoring.`, error);
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
async #closeSession(session: NodeSession) {
|
|
350
|
-
const sessionId = session.id;
|
|
351
|
-
const sessionName = session.name;
|
|
352
|
-
|
|
353
|
-
const asExchangeSession = session as { closedByExchange?: boolean };
|
|
354
|
-
if (asExchangeSession.closedByExchange) {
|
|
355
|
-
// Session already removed, so we do not need to close again
|
|
356
|
-
return;
|
|
357
|
-
}
|
|
358
|
-
asExchangeSession.closedByExchange = true;
|
|
359
|
-
|
|
360
|
-
for (const [_exchangeIndex, exchange] of this.#exchanges.entries()) {
|
|
361
|
-
if (exchange.session.id === sessionId) {
|
|
362
|
-
await exchange.destroy();
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
if (session.sendCloseMessageWhenClosing) {
|
|
366
|
-
let channel;
|
|
367
|
-
try {
|
|
368
|
-
channel = this.#channelManager.getChannelForSession(session);
|
|
369
|
-
} catch (e) {
|
|
370
|
-
logger.debug(`Not sending close for session ${sessionName}:`, e);
|
|
371
|
-
return;
|
|
372
|
-
}
|
|
373
|
-
logger.debug(`Channel for session ${sessionName} is ${channel?.name}`);
|
|
374
|
-
if (channel !== undefined) {
|
|
375
|
-
const exchange = this.initiateExchangeWithChannel(channel, SECURE_CHANNEL_PROTOCOL_ID);
|
|
376
|
-
logger.debug(`Initiated exchange ${exchange.id} to close session ${sessionName}`);
|
|
377
|
-
try {
|
|
378
|
-
const messenger = new SecureChannelMessenger(exchange);
|
|
379
|
-
await messenger.sendCloseSession();
|
|
380
|
-
await messenger.close();
|
|
381
|
-
} catch (error) {
|
|
382
|
-
if (error instanceof ChannelNotConnectedError) {
|
|
383
|
-
logger.debug("Session already closed because channel is disconnected.");
|
|
384
|
-
} else {
|
|
385
|
-
logger.error("Error closing session", error);
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
await exchange.destroy();
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
if (session.closingAfterExchangeFinished) {
|
|
392
|
-
await session.destroy(false, false);
|
|
393
|
-
}
|
|
394
353
|
}
|
|
395
354
|
|
|
396
355
|
#addExchange(exchangeIndex: number, exchange: MessageExchange) {
|
|
@@ -409,37 +368,39 @@ export class ExchangeManager {
|
|
|
409
368
|
return;
|
|
410
369
|
}
|
|
411
370
|
const sessionExchanges = Array.from(this.#exchanges.values()).filter(
|
|
412
|
-
exchange => exchange.session.id === sessionId && !exchange.isClosing,
|
|
371
|
+
exchange => exchange.session.id === sessionId && !exchange.isClosing && exchange.isInitiator,
|
|
413
372
|
);
|
|
414
|
-
if (sessionExchanges.length <=
|
|
373
|
+
if (sessionExchanges.length <= MAXIMUM_CONCURRENT_OUTGOING_EXCHANGES_PER_SESSION) {
|
|
415
374
|
return;
|
|
416
375
|
}
|
|
417
376
|
// let's use the first entry in the Map as the oldest exchange and close it
|
|
377
|
+
// TODO: Adjust this logic into a Exchange creation queue instead of hard closing
|
|
418
378
|
const exchangeToClose = sessionExchanges[0];
|
|
419
|
-
logger.
|
|
420
|
-
|
|
379
|
+
logger.info(
|
|
380
|
+
exchangeToClose.via,
|
|
381
|
+
`Closing oldest exchange for session because of too many concurrent outgoing exchanges. Ensure to not send that many parallel messages to one peer.`,
|
|
382
|
+
);
|
|
383
|
+
logger.debug(exchangeToClose.via, "Closing oldest exchange");
|
|
384
|
+
this.#workers.add(exchangeToClose.close());
|
|
421
385
|
}
|
|
422
386
|
|
|
423
|
-
calculateMaximumPeerResponseTimeMsFor(
|
|
424
|
-
channel
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
return channel.calculateMaximumPeerResponseTime(
|
|
428
|
-
channel.session.parameters,
|
|
429
|
-
this.#sessionManager.sessionParameters,
|
|
387
|
+
calculateMaximumPeerResponseTimeMsFor(session: Session, expectedProcessingTime = DEFAULT_EXPECTED_PROCESSING_TIME) {
|
|
388
|
+
return session.channel.calculateMaximumPeerResponseTime(
|
|
389
|
+
session.parameters,
|
|
390
|
+
this.#sessions.sessionParameters,
|
|
430
391
|
expectedProcessingTime,
|
|
431
392
|
);
|
|
432
393
|
}
|
|
433
394
|
|
|
434
|
-
#messageExchangeContextFor(
|
|
395
|
+
#messageExchangeContextFor(session: Session): MessageExchangeContext {
|
|
435
396
|
return {
|
|
436
|
-
|
|
437
|
-
localSessionParameters: this.#
|
|
438
|
-
retry: number => this.#
|
|
397
|
+
session,
|
|
398
|
+
localSessionParameters: this.#sessions.sessionParameters,
|
|
399
|
+
retry: number => this.#sessions.retry.emit(session, number),
|
|
439
400
|
};
|
|
440
401
|
}
|
|
441
402
|
|
|
442
|
-
#
|
|
403
|
+
#addTransport(netInterface: ConnectionlessTransport) {
|
|
443
404
|
const udpInterface = netInterface instanceof UdpInterface;
|
|
444
405
|
this.#listeners.set(
|
|
445
406
|
netInterface,
|
|
@@ -451,35 +412,54 @@ export class ExchangeManager {
|
|
|
451
412
|
return;
|
|
452
413
|
}
|
|
453
414
|
|
|
454
|
-
|
|
455
|
-
this.onMessage(socket, data).catch(error =>
|
|
456
|
-
logger.info(
|
|
457
|
-
`Error on channel ${socket.name}:`,
|
|
458
|
-
error instanceof MatterError ? error.message : error,
|
|
459
|
-
),
|
|
460
|
-
);
|
|
461
|
-
} catch (error) {
|
|
462
|
-
logger.info(
|
|
463
|
-
`Ignoring UDP message on channel ${socket.name} with error`,
|
|
464
|
-
error instanceof MatterError ? error.message : error,
|
|
465
|
-
);
|
|
466
|
-
}
|
|
415
|
+
this.#workers.add(this.#onMessage(socket, data));
|
|
467
416
|
}),
|
|
468
417
|
);
|
|
469
418
|
}
|
|
470
419
|
|
|
471
|
-
#
|
|
420
|
+
#deleteTransport(netInterface: ConnectionlessTransport) {
|
|
472
421
|
const listener = this.#listeners.get(netInterface);
|
|
473
422
|
if (listener === undefined) {
|
|
474
423
|
return;
|
|
475
424
|
}
|
|
476
425
|
this.#listeners.delete(netInterface);
|
|
477
426
|
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
427
|
+
this.#workers.add(listener.close());
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
#addSession(session: Session) {
|
|
431
|
+
if (!(session instanceof NodeSession)) {
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
let observers = this.#sessionObservers.get(session);
|
|
436
|
+
if (!observers) {
|
|
437
|
+
this.#sessionObservers.set(session, (observers = new ObserverGroup()));
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
observers.on(session.gracefulClose, () => this.#sendCloseSession(session));
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
#deleteSession(session: Session) {
|
|
444
|
+
const observers = this.#sessionObservers.get(session);
|
|
445
|
+
if (!observers) {
|
|
446
|
+
return;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
observers.close();
|
|
450
|
+
this.#sessionObservers.delete(session);
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
async #sendCloseSession(session: NodeSession) {
|
|
454
|
+
await using exchange = this.initiateExchangeForSession(session, SECURE_CHANNEL_PROTOCOL_ID);
|
|
455
|
+
logger.debug(exchange.via, "Closing session");
|
|
456
|
+
try {
|
|
457
|
+
const messenger = new SecureChannelMessenger(exchange);
|
|
458
|
+
await messenger.sendCloseSession();
|
|
459
|
+
await messenger.close();
|
|
460
|
+
} catch (error) {
|
|
461
|
+
logger.error(exchange.via, "Error closing session:", error);
|
|
462
|
+
}
|
|
483
463
|
}
|
|
484
464
|
}
|
|
485
465
|
|