@matter/protocol 0.16.0-alpha.0-20250816-d22ad240d → 0.16.0-alpha.0-20250819-0a388db8b
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/Val.d.ts +6 -0
- package/dist/cjs/action/Val.d.ts.map +1 -1
- package/dist/cjs/action/Val.js.map +1 -1
- package/dist/cjs/action/client/ClientInteraction.d.ts +1 -1
- package/dist/cjs/action/client/ClientInteraction.d.ts.map +1 -1
- package/dist/cjs/action/client/ClientInteraction.js +4 -4
- package/dist/cjs/action/client/ClientInteraction.js.map +1 -1
- package/dist/cjs/action/client/ClientSubscription.d.ts +2 -1
- package/dist/cjs/action/client/ClientSubscription.d.ts.map +1 -1
- package/dist/cjs/action/client/ClientSubscriptionHandler.js +2 -2
- package/dist/cjs/action/client/ClientSubscriptionHandler.js.map +1 -1
- package/dist/cjs/action/client/ClientSubscriptions.d.ts.map +1 -1
- package/dist/cjs/action/client/ClientSubscriptions.js +11 -7
- package/dist/cjs/action/client/ClientSubscriptions.js.map +1 -1
- package/dist/cjs/action/request/Subscribe.d.ts +6 -6
- package/dist/cjs/action/request/Subscribe.d.ts.map +1 -1
- package/dist/cjs/action/request/Subscribe.js +11 -9
- package/dist/cjs/action/request/Subscribe.js.map +1 -1
- package/dist/cjs/advertisement/Advertisement.d.ts +3 -3
- package/dist/cjs/advertisement/Advertisement.d.ts.map +1 -1
- package/dist/cjs/advertisement/Advertisement.js +5 -5
- package/dist/cjs/advertisement/Advertisement.js.map +1 -1
- package/dist/cjs/advertisement/ble/BleAdvertisement.d.ts.map +1 -1
- package/dist/cjs/advertisement/ble/BleAdvertisement.js +7 -6
- package/dist/cjs/advertisement/ble/BleAdvertisement.js.map +1 -1
- package/dist/cjs/advertisement/ble/BleAdvertiser.d.ts +11 -10
- package/dist/cjs/advertisement/ble/BleAdvertiser.d.ts.map +1 -1
- package/dist/cjs/advertisement/ble/BleAdvertiser.js +4 -4
- package/dist/cjs/advertisement/ble/BleAdvertiser.js.map +1 -1
- package/dist/cjs/advertisement/mdns/MdnsAdvertisement.d.ts.map +1 -1
- package/dist/cjs/advertisement/mdns/MdnsAdvertisement.js +7 -7
- package/dist/cjs/advertisement/mdns/MdnsAdvertisement.js.map +1 -1
- package/dist/cjs/advertisement/mdns/MdnsAdvertiser.d.ts +2 -2
- package/dist/cjs/advertisement/mdns/MdnsAdvertiser.d.ts.map +1 -1
- package/dist/cjs/advertisement/mdns/MdnsAdvertiser.js +4 -4
- package/dist/cjs/advertisement/mdns/MdnsAdvertiser.js.map +1 -1
- package/dist/cjs/ble/Ble.d.ts +2 -2
- package/dist/cjs/ble/Ble.d.ts.map +1 -1
- package/dist/cjs/ble/Ble.js.map +1 -1
- package/dist/cjs/ble/BleConsts.d.ts +4 -4
- package/dist/cjs/ble/BleConsts.d.ts.map +1 -1
- package/dist/cjs/ble/BleConsts.js +7 -7
- package/dist/cjs/ble/BleConsts.js.map +1 -1
- package/dist/cjs/ble/BtpSessionHandler.js +2 -2
- package/dist/cjs/ble/BtpSessionHandler.js.map +1 -1
- package/dist/cjs/certificate/AttestationCertificateManager.js +3 -3
- package/dist/cjs/certificate/AttestationCertificateManager.js.map +1 -1
- package/dist/cjs/certificate/CertificateAuthority.js +2 -2
- package/dist/cjs/certificate/CertificateAuthority.js.map +1 -1
- package/dist/cjs/certificate/kinds/OperationalBase.js +2 -2
- package/dist/cjs/certificate/kinds/OperationalBase.js.map +1 -1
- package/dist/cjs/cluster/client/ClusterClient.js +5 -5
- package/dist/cjs/cluster/client/ClusterClient.js.map +1 -1
- package/dist/cjs/cluster/client/ClusterClientTypes.d.ts +3 -3
- package/dist/cjs/cluster/client/ClusterClientTypes.d.ts.map +1 -1
- package/dist/cjs/cluster/client/EventClient.d.ts +2 -1
- package/dist/cjs/cluster/client/EventClient.d.ts.map +1 -1
- package/dist/cjs/cluster/client/EventClient.js +3 -3
- package/dist/cjs/cluster/client/EventClient.js.map +1 -1
- package/dist/cjs/common/FailsafeContext.d.ts +4 -4
- package/dist/cjs/common/FailsafeContext.d.ts.map +1 -1
- package/dist/cjs/common/FailsafeContext.js +8 -8
- package/dist/cjs/common/FailsafeContext.js.map +1 -1
- package/dist/cjs/common/FailsafeTimer.d.ts +3 -3
- package/dist/cjs/common/FailsafeTimer.d.ts.map +1 -1
- package/dist/cjs/common/FailsafeTimer.js +8 -8
- package/dist/cjs/common/FailsafeTimer.js.map +1 -1
- package/dist/cjs/common/Scanner.d.ts +7 -7
- package/dist/cjs/common/Scanner.d.ts.map +1 -1
- package/dist/cjs/common/Scanner.js.map +1 -1
- package/dist/cjs/events/OccurrenceManager.js +1 -1
- package/dist/cjs/events/OccurrenceManager.js.map +1 -1
- package/dist/cjs/groups/FabricGroups.d.ts +1 -1
- package/dist/cjs/groups/FabricGroups.js +1 -1
- package/dist/cjs/groups/Groups.d.ts +1 -1
- package/dist/cjs/groups/KeySets.d.ts +3 -3
- package/dist/cjs/groups/KeySets.d.ts.map +1 -1
- package/dist/cjs/groups/KeySets.js +12 -4
- package/dist/cjs/groups/KeySets.js.map +1 -1
- package/dist/cjs/interaction/InteractionClient.d.ts +9 -9
- package/dist/cjs/interaction/InteractionClient.d.ts.map +1 -1
- package/dist/cjs/interaction/InteractionClient.js +33 -33
- package/dist/cjs/interaction/InteractionClient.js.map +1 -1
- package/dist/cjs/interaction/InteractionMessenger.d.ts +10 -10
- package/dist/cjs/interaction/InteractionMessenger.d.ts.map +1 -1
- package/dist/cjs/interaction/InteractionMessenger.js +15 -15
- package/dist/cjs/interaction/InteractionMessenger.js.map +1 -1
- package/dist/cjs/interaction/Subscription.d.ts +3 -4
- package/dist/cjs/interaction/Subscription.d.ts.map +1 -1
- package/dist/cjs/interaction/Subscription.js +9 -12
- package/dist/cjs/interaction/Subscription.js.map +1 -1
- package/dist/cjs/interaction/SubscriptionClient.d.ts +3 -3
- package/dist/cjs/interaction/SubscriptionClient.d.ts.map +1 -1
- package/dist/cjs/interaction/SubscriptionClient.js +3 -3
- package/dist/cjs/interaction/SubscriptionClient.js.map +1 -1
- package/dist/cjs/mdns/MdnsClient.d.ts +9 -9
- package/dist/cjs/mdns/MdnsClient.d.ts.map +1 -1
- package/dist/cjs/mdns/MdnsClient.js +86 -82
- package/dist/cjs/mdns/MdnsClient.js.map +1 -1
- package/dist/cjs/mdns/MdnsServer.d.ts.map +1 -1
- package/dist/cjs/mdns/MdnsServer.js +11 -9
- package/dist/cjs/mdns/MdnsServer.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 +7 -7
- package/dist/cjs/peer/ControllerCommissioner.js.map +1 -1
- package/dist/cjs/peer/ControllerCommissioningFlow.d.ts.map +1 -1
- package/dist/cjs/peer/ControllerCommissioningFlow.js +37 -35
- package/dist/cjs/peer/ControllerCommissioningFlow.js.map +1 -1
- package/dist/cjs/peer/ControllerDiscovery.d.ts +4 -4
- package/dist/cjs/peer/ControllerDiscovery.d.ts.map +1 -1
- package/dist/cjs/peer/ControllerDiscovery.js +12 -17
- package/dist/cjs/peer/ControllerDiscovery.js.map +1 -1
- package/dist/cjs/peer/InteractionQueue.d.ts.map +1 -1
- package/dist/cjs/peer/InteractionQueue.js +2 -2
- package/dist/cjs/peer/InteractionQueue.js.map +1 -1
- package/dist/cjs/peer/PeerSet.d.ts +2 -2
- package/dist/cjs/peer/PeerSet.d.ts.map +1 -1
- package/dist/cjs/peer/PeerSet.js +25 -25
- package/dist/cjs/peer/PeerSet.js.map +1 -1
- package/dist/cjs/protocol/DeviceCommissioner.d.ts.map +1 -1
- package/dist/cjs/protocol/DeviceCommissioner.js +1 -1
- package/dist/cjs/protocol/DeviceCommissioner.js.map +1 -1
- package/dist/cjs/protocol/ExchangeManager.d.ts +1 -1
- package/dist/cjs/protocol/ExchangeManager.d.ts.map +1 -1
- package/dist/cjs/protocol/ExchangeManager.js +2 -5
- package/dist/cjs/protocol/ExchangeManager.js.map +1 -1
- package/dist/cjs/protocol/ExchangeProvider.d.ts +4 -4
- package/dist/cjs/protocol/ExchangeProvider.d.ts.map +1 -1
- package/dist/cjs/protocol/ExchangeProvider.js +3 -3
- package/dist/cjs/protocol/ExchangeProvider.js.map +1 -1
- package/dist/cjs/protocol/MessageChannel.d.ts +5 -5
- package/dist/cjs/protocol/MessageChannel.d.ts.map +1 -1
- package/dist/cjs/protocol/MessageChannel.js +19 -15
- package/dist/cjs/protocol/MessageChannel.js.map +1 -1
- package/dist/cjs/protocol/MessageExchange.d.ts +6 -6
- package/dist/cjs/protocol/MessageExchange.d.ts.map +1 -1
- package/dist/cjs/protocol/MessageExchange.js +35 -33
- package/dist/cjs/protocol/MessageExchange.js.map +1 -1
- package/dist/cjs/securechannel/SecureChannelMessenger.d.ts +8 -8
- package/dist/cjs/securechannel/SecureChannelMessenger.d.ts.map +1 -1
- package/dist/cjs/securechannel/SecureChannelMessenger.js +17 -17
- package/dist/cjs/securechannel/SecureChannelMessenger.js.map +1 -1
- package/dist/cjs/session/InsecureSession.d.ts +2 -2
- package/dist/cjs/session/InsecureSession.d.ts.map +1 -1
- package/dist/cjs/session/InsecureSession.js.map +1 -1
- package/dist/cjs/session/NodeSession.js +3 -3
- package/dist/cjs/session/Session.d.ts +7 -7
- package/dist/cjs/session/Session.d.ts.map +1 -1
- package/dist/cjs/session/Session.js +19 -19
- package/dist/cjs/session/Session.js.map +1 -1
- package/dist/cjs/session/SessionIntervals.d.ts +7 -6
- package/dist/cjs/session/SessionIntervals.d.ts.map +1 -1
- package/dist/cjs/session/SessionIntervals.js +8 -8
- package/dist/cjs/session/SessionIntervals.js.map +1 -1
- package/dist/cjs/session/SessionManager.d.ts +2 -2
- package/dist/cjs/session/SessionManager.d.ts.map +1 -1
- package/dist/cjs/session/SessionManager.js +6 -6
- package/dist/cjs/session/SessionManager.js.map +1 -1
- package/dist/cjs/session/case/CaseClient.d.ts +2 -1
- package/dist/cjs/session/case/CaseClient.d.ts.map +1 -1
- package/dist/cjs/session/case/CaseClient.js +2 -2
- package/dist/cjs/session/case/CaseClient.js.map +1 -1
- package/dist/cjs/session/pase/PaseMessenger.d.ts.map +1 -1
- package/dist/cjs/session/pase/PaseMessenger.js +4 -7
- package/dist/cjs/session/pase/PaseMessenger.js.map +1 -1
- package/dist/cjs/session/pase/PaseServer.d.ts.map +1 -1
- package/dist/cjs/session/pase/PaseServer.js +1 -1
- package/dist/cjs/session/pase/PaseServer.js.map +1 -1
- package/dist/esm/action/Val.d.ts +6 -0
- package/dist/esm/action/Val.d.ts.map +1 -1
- package/dist/esm/action/Val.js.map +1 -1
- package/dist/esm/action/client/ClientInteraction.d.ts +1 -1
- package/dist/esm/action/client/ClientInteraction.d.ts.map +1 -1
- package/dist/esm/action/client/ClientInteraction.js +5 -5
- package/dist/esm/action/client/ClientInteraction.js.map +1 -1
- package/dist/esm/action/client/ClientSubscription.d.ts +2 -1
- package/dist/esm/action/client/ClientSubscription.d.ts.map +1 -1
- package/dist/esm/action/client/ClientSubscriptionHandler.js +2 -2
- package/dist/esm/action/client/ClientSubscriptionHandler.js.map +1 -1
- package/dist/esm/action/client/ClientSubscriptions.d.ts.map +1 -1
- package/dist/esm/action/client/ClientSubscriptions.js +14 -8
- package/dist/esm/action/client/ClientSubscriptions.js.map +1 -1
- package/dist/esm/action/request/Subscribe.d.ts +6 -6
- package/dist/esm/action/request/Subscribe.d.ts.map +1 -1
- package/dist/esm/action/request/Subscribe.js +12 -10
- package/dist/esm/action/request/Subscribe.js.map +1 -1
- package/dist/esm/advertisement/Advertisement.d.ts +3 -3
- package/dist/esm/advertisement/Advertisement.d.ts.map +1 -1
- package/dist/esm/advertisement/Advertisement.js +16 -7
- package/dist/esm/advertisement/Advertisement.js.map +1 -1
- package/dist/esm/advertisement/ble/BleAdvertisement.d.ts.map +1 -1
- package/dist/esm/advertisement/ble/BleAdvertisement.js +7 -6
- package/dist/esm/advertisement/ble/BleAdvertisement.js.map +1 -1
- package/dist/esm/advertisement/ble/BleAdvertiser.d.ts +11 -10
- package/dist/esm/advertisement/ble/BleAdvertiser.d.ts.map +1 -1
- package/dist/esm/advertisement/ble/BleAdvertiser.js +6 -6
- package/dist/esm/advertisement/ble/BleAdvertiser.js.map +1 -1
- package/dist/esm/advertisement/mdns/MdnsAdvertisement.d.ts.map +1 -1
- package/dist/esm/advertisement/mdns/MdnsAdvertisement.js +17 -8
- package/dist/esm/advertisement/mdns/MdnsAdvertisement.js.map +1 -1
- package/dist/esm/advertisement/mdns/MdnsAdvertiser.d.ts +2 -2
- package/dist/esm/advertisement/mdns/MdnsAdvertiser.d.ts.map +1 -1
- package/dist/esm/advertisement/mdns/MdnsAdvertiser.js +14 -6
- package/dist/esm/advertisement/mdns/MdnsAdvertiser.js.map +1 -1
- package/dist/esm/ble/Ble.d.ts +2 -2
- package/dist/esm/ble/Ble.d.ts.map +1 -1
- package/dist/esm/ble/Ble.js +5 -1
- package/dist/esm/ble/Ble.js.map +1 -1
- package/dist/esm/ble/BleConsts.d.ts +4 -4
- package/dist/esm/ble/BleConsts.d.ts.map +1 -1
- package/dist/esm/ble/BleConsts.js +8 -8
- package/dist/esm/ble/BleConsts.js.map +1 -1
- package/dist/esm/ble/BtpSessionHandler.js +4 -4
- package/dist/esm/ble/BtpSessionHandler.js.map +1 -1
- package/dist/esm/certificate/AttestationCertificateManager.js +3 -3
- package/dist/esm/certificate/AttestationCertificateManager.js.map +1 -1
- package/dist/esm/certificate/CertificateAuthority.js +2 -2
- package/dist/esm/certificate/CertificateAuthority.js.map +1 -1
- package/dist/esm/certificate/kinds/OperationalBase.js +2 -2
- package/dist/esm/certificate/kinds/OperationalBase.js.map +1 -1
- package/dist/esm/cluster/client/ClusterClient.js +5 -5
- package/dist/esm/cluster/client/ClusterClient.js.map +1 -1
- package/dist/esm/cluster/client/ClusterClientTypes.d.ts +3 -3
- package/dist/esm/cluster/client/ClusterClientTypes.d.ts.map +1 -1
- package/dist/esm/cluster/client/EventClient.d.ts +2 -1
- package/dist/esm/cluster/client/EventClient.d.ts.map +1 -1
- package/dist/esm/cluster/client/EventClient.js +3 -3
- package/dist/esm/cluster/client/EventClient.js.map +1 -1
- package/dist/esm/common/FailsafeContext.d.ts +4 -4
- package/dist/esm/common/FailsafeContext.d.ts.map +1 -1
- package/dist/esm/common/FailsafeContext.js +9 -8
- package/dist/esm/common/FailsafeContext.js.map +1 -1
- package/dist/esm/common/FailsafeTimer.d.ts +3 -3
- package/dist/esm/common/FailsafeTimer.d.ts.map +1 -1
- package/dist/esm/common/FailsafeTimer.js +8 -8
- package/dist/esm/common/FailsafeTimer.js.map +1 -1
- package/dist/esm/common/Scanner.d.ts +7 -7
- package/dist/esm/common/Scanner.d.ts.map +1 -1
- package/dist/esm/common/Scanner.js +5 -1
- package/dist/esm/common/Scanner.js.map +1 -1
- package/dist/esm/events/OccurrenceManager.js +1 -1
- package/dist/esm/events/OccurrenceManager.js.map +1 -1
- package/dist/esm/groups/FabricGroups.d.ts +1 -1
- package/dist/esm/groups/FabricGroups.js +1 -1
- package/dist/esm/groups/Groups.d.ts +1 -1
- package/dist/esm/groups/KeySets.d.ts +3 -3
- package/dist/esm/groups/KeySets.d.ts.map +1 -1
- package/dist/esm/groups/KeySets.js +13 -5
- package/dist/esm/groups/KeySets.js.map +1 -1
- package/dist/esm/interaction/InteractionClient.d.ts +9 -9
- package/dist/esm/interaction/InteractionClient.d.ts.map +1 -1
- package/dist/esm/interaction/InteractionClient.js +34 -33
- package/dist/esm/interaction/InteractionClient.js.map +1 -1
- package/dist/esm/interaction/InteractionMessenger.d.ts +10 -10
- package/dist/esm/interaction/InteractionMessenger.d.ts.map +1 -1
- package/dist/esm/interaction/InteractionMessenger.js +16 -15
- package/dist/esm/interaction/InteractionMessenger.js.map +1 -1
- package/dist/esm/interaction/Subscription.d.ts +3 -4
- package/dist/esm/interaction/Subscription.d.ts.map +1 -1
- package/dist/esm/interaction/Subscription.js +9 -12
- package/dist/esm/interaction/Subscription.js.map +1 -1
- package/dist/esm/interaction/SubscriptionClient.d.ts +3 -3
- package/dist/esm/interaction/SubscriptionClient.d.ts.map +1 -1
- package/dist/esm/interaction/SubscriptionClient.js +4 -4
- package/dist/esm/interaction/SubscriptionClient.js.map +1 -1
- package/dist/esm/mdns/MdnsClient.d.ts +9 -9
- package/dist/esm/mdns/MdnsClient.d.ts.map +1 -1
- package/dist/esm/mdns/MdnsClient.js +94 -82
- package/dist/esm/mdns/MdnsClient.js.map +1 -1
- package/dist/esm/mdns/MdnsServer.d.ts.map +1 -1
- package/dist/esm/mdns/MdnsServer.js +14 -9
- package/dist/esm/mdns/MdnsServer.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 +11 -8
- package/dist/esm/peer/ControllerCommissioner.js.map +1 -1
- package/dist/esm/peer/ControllerCommissioningFlow.d.ts.map +1 -1
- package/dist/esm/peer/ControllerCommissioningFlow.js +44 -35
- package/dist/esm/peer/ControllerCommissioningFlow.js.map +1 -1
- package/dist/esm/peer/ControllerDiscovery.d.ts +4 -4
- package/dist/esm/peer/ControllerDiscovery.d.ts.map +1 -1
- package/dist/esm/peer/ControllerDiscovery.js +20 -18
- package/dist/esm/peer/ControllerDiscovery.js.map +1 -1
- package/dist/esm/peer/InteractionQueue.d.ts.map +1 -1
- package/dist/esm/peer/InteractionQueue.js +3 -3
- package/dist/esm/peer/InteractionQueue.js.map +1 -1
- package/dist/esm/peer/PeerSet.d.ts +2 -2
- package/dist/esm/peer/PeerSet.d.ts.map +1 -1
- package/dist/esm/peer/PeerSet.js +29 -26
- package/dist/esm/peer/PeerSet.js.map +1 -1
- package/dist/esm/protocol/DeviceCommissioner.d.ts.map +1 -1
- package/dist/esm/protocol/DeviceCommissioner.js +2 -2
- package/dist/esm/protocol/DeviceCommissioner.js.map +1 -1
- package/dist/esm/protocol/ExchangeManager.d.ts +1 -1
- package/dist/esm/protocol/ExchangeManager.d.ts.map +1 -1
- package/dist/esm/protocol/ExchangeManager.js +3 -6
- package/dist/esm/protocol/ExchangeManager.js.map +1 -1
- package/dist/esm/protocol/ExchangeProvider.d.ts +4 -4
- package/dist/esm/protocol/ExchangeProvider.d.ts.map +1 -1
- package/dist/esm/protocol/ExchangeProvider.js +4 -4
- package/dist/esm/protocol/ExchangeProvider.js.map +1 -1
- package/dist/esm/protocol/MessageChannel.d.ts +5 -5
- package/dist/esm/protocol/MessageChannel.d.ts.map +1 -1
- package/dist/esm/protocol/MessageChannel.js +20 -16
- package/dist/esm/protocol/MessageChannel.js.map +1 -1
- package/dist/esm/protocol/MessageExchange.d.ts +6 -6
- package/dist/esm/protocol/MessageExchange.d.ts.map +1 -1
- package/dist/esm/protocol/MessageExchange.js +39 -34
- package/dist/esm/protocol/MessageExchange.js.map +1 -1
- package/dist/esm/securechannel/SecureChannelMessenger.d.ts +8 -8
- package/dist/esm/securechannel/SecureChannelMessenger.d.ts.map +1 -1
- package/dist/esm/securechannel/SecureChannelMessenger.js +18 -18
- package/dist/esm/securechannel/SecureChannelMessenger.js.map +1 -1
- package/dist/esm/session/InsecureSession.d.ts +2 -2
- package/dist/esm/session/InsecureSession.d.ts.map +1 -1
- package/dist/esm/session/InsecureSession.js.map +1 -1
- package/dist/esm/session/NodeSession.js +3 -3
- package/dist/esm/session/Session.d.ts +7 -7
- package/dist/esm/session/Session.d.ts.map +1 -1
- package/dist/esm/session/Session.js +27 -20
- package/dist/esm/session/Session.js.map +1 -1
- package/dist/esm/session/SessionIntervals.d.ts +7 -6
- package/dist/esm/session/SessionIntervals.d.ts.map +1 -1
- package/dist/esm/session/SessionIntervals.js +8 -8
- package/dist/esm/session/SessionIntervals.js.map +1 -1
- package/dist/esm/session/SessionManager.d.ts +2 -2
- package/dist/esm/session/SessionManager.d.ts.map +1 -1
- package/dist/esm/session/SessionManager.js +6 -6
- package/dist/esm/session/SessionManager.js.map +1 -1
- package/dist/esm/session/case/CaseClient.d.ts +2 -1
- package/dist/esm/session/case/CaseClient.d.ts.map +1 -1
- package/dist/esm/session/case/CaseClient.js +2 -2
- package/dist/esm/session/case/CaseClient.js.map +1 -1
- package/dist/esm/session/pase/PaseMessenger.d.ts.map +1 -1
- package/dist/esm/session/pase/PaseMessenger.js +5 -11
- package/dist/esm/session/pase/PaseMessenger.js.map +1 -1
- package/dist/esm/session/pase/PaseServer.d.ts.map +1 -1
- package/dist/esm/session/pase/PaseServer.js +2 -1
- package/dist/esm/session/pase/PaseServer.js.map +1 -1
- package/package.json +6 -6
- package/src/action/Val.ts +5 -0
- package/src/action/client/ClientInteraction.ts +4 -4
- package/src/action/client/ClientSubscription.ts +2 -1
- package/src/action/client/ClientSubscriptionHandler.ts +2 -2
- package/src/action/client/ClientSubscriptions.ts +14 -8
- package/src/action/request/Subscribe.ts +17 -15
- package/src/advertisement/Advertisement.ts +18 -8
- package/src/advertisement/ble/BleAdvertisement.ts +7 -6
- package/src/advertisement/ble/BleAdvertiser.ts +11 -11
- package/src/advertisement/mdns/MdnsAdvertisement.ts +20 -9
- package/src/advertisement/mdns/MdnsAdvertiser.ts +17 -7
- package/src/ble/Ble.ts +11 -2
- package/src/ble/BleConsts.ts +5 -5
- package/src/ble/BtpSessionHandler.ts +4 -4
- package/src/certificate/AttestationCertificateManager.ts +3 -3
- package/src/certificate/CertificateAuthority.ts +2 -2
- package/src/certificate/kinds/OperationalBase.ts +3 -3
- package/src/cluster/client/ClusterClient.ts +8 -8
- package/src/cluster/client/ClusterClientTypes.ts +3 -3
- package/src/cluster/client/EventClient.ts +5 -5
- package/src/common/FailsafeContext.ts +11 -13
- package/src/common/FailsafeTimer.ts +11 -13
- package/src/common/Scanner.ts +16 -7
- package/src/events/OccurrenceManager.ts +1 -1
- package/src/groups/FabricGroups.ts +1 -1
- package/src/groups/KeySets.ts +14 -6
- package/src/interaction/InteractionClient.ts +46 -44
- package/src/interaction/InteractionMessenger.ts +24 -22
- package/src/interaction/Subscription.ts +10 -14
- package/src/interaction/SubscriptionClient.ts +6 -6
- package/src/mdns/MdnsClient.ts +105 -82
- package/src/mdns/MdnsServer.ts +14 -9
- package/src/peer/ControllerCommissioner.ts +12 -9
- package/src/peer/ControllerCommissioningFlow.ts +48 -39
- package/src/peer/ControllerDiscovery.ts +22 -18
- package/src/peer/InteractionQueue.ts +3 -3
- package/src/peer/PeerSet.ts +34 -28
- package/src/protocol/DeviceCommissioner.ts +2 -2
- package/src/protocol/ExchangeManager.ts +3 -6
- package/src/protocol/ExchangeProvider.ts +6 -6
- package/src/protocol/MessageChannel.ts +26 -21
- package/src/protocol/MessageExchange.ts +42 -38
- package/src/securechannel/SecureChannelMessenger.ts +16 -22
- package/src/session/InsecureSession.ts +2 -2
- package/src/session/NodeSession.ts +3 -3
- package/src/session/Session.ts +31 -21
- package/src/session/SessionIntervals.ts +11 -11
- package/src/session/SessionManager.ts +10 -9
- package/src/session/case/CaseClient.ts +3 -3
- package/src/session/pase/PaseMessenger.ts +5 -11
- package/src/session/pase/PaseServer.ts +2 -1
|
@@ -15,10 +15,17 @@ import {
|
|
|
15
15
|
Bytes,
|
|
16
16
|
ChannelType,
|
|
17
17
|
Diagnostic,
|
|
18
|
+
Duration,
|
|
19
|
+
Instant,
|
|
18
20
|
Logger,
|
|
19
21
|
MatterError,
|
|
22
|
+
Millis,
|
|
23
|
+
Minutes,
|
|
20
24
|
repackErrorAs,
|
|
25
|
+
Seconds,
|
|
21
26
|
Time,
|
|
27
|
+
Timespan,
|
|
28
|
+
Timestamp,
|
|
22
29
|
UnexpectedDataError,
|
|
23
30
|
} from "#general";
|
|
24
31
|
import {
|
|
@@ -178,7 +185,7 @@ export class OperativeConnectionFailedError extends CommissioningError {}
|
|
|
178
185
|
/** Error that throws when Commissioning fails but a process can be continued. */
|
|
179
186
|
class RecoverableCommissioningError extends CommissioningError {}
|
|
180
187
|
|
|
181
|
-
const
|
|
188
|
+
const DEFAULT_FAILSAFE_TIME = Minutes.one;
|
|
182
189
|
|
|
183
190
|
/**
|
|
184
191
|
* Class to abstract the Device commission flow in a step wise way as defined in Specs. The specs are not 100%
|
|
@@ -195,12 +202,12 @@ export class ControllerCommissioningFlow {
|
|
|
195
202
|
protected readonly commissioningSteps = new Array<CommissioningStep>();
|
|
196
203
|
protected readonly commissioningStepResults = new Map<string, CommissioningStepResult>();
|
|
197
204
|
readonly #clusterClients = new Map<ClusterId, ClusterClientObj>();
|
|
198
|
-
#commissioningStartedTime:
|
|
199
|
-
#commissioningExpiryTime:
|
|
200
|
-
#currentFailSafeEndTime:
|
|
205
|
+
#commissioningStartedTime: Timestamp | undefined;
|
|
206
|
+
#commissioningExpiryTime: Timestamp | undefined;
|
|
207
|
+
#currentFailSafeEndTime: Timestamp | undefined;
|
|
201
208
|
protected lastBreadcrumb = 1;
|
|
202
209
|
protected collectedCommissioningData: CollectedCommissioningData = {};
|
|
203
|
-
#
|
|
210
|
+
#defaultFailSafeTime = DEFAULT_FAILSAFE_TIME;
|
|
204
211
|
|
|
205
212
|
constructor(
|
|
206
213
|
/** InteractionClient for the initiated PASE session */
|
|
@@ -252,7 +259,7 @@ export class ControllerCommissioningFlow {
|
|
|
252
259
|
this.#setCommissioningStepResult(step, result);
|
|
253
260
|
|
|
254
261
|
if (this.#currentFailSafeEndTime !== undefined) {
|
|
255
|
-
if (this.#commissioningExpiryTime !== undefined && Time.nowMs
|
|
262
|
+
if (this.#commissioningExpiryTime !== undefined && Time.nowMs > this.#commissioningExpiryTime) {
|
|
256
263
|
logger.error(
|
|
257
264
|
`Commissioning step ${step.stepNumber}.${step.subStepNumber}: ${step.name} succeeded, but commissioning took too long in general!`,
|
|
258
265
|
);
|
|
@@ -262,13 +269,14 @@ export class ControllerCommissioningFlow {
|
|
|
262
269
|
`Commissioning time exceeds the maximum timeframe${maxTimeS ? ` of ${maxTimeS}s` : ""}`,
|
|
263
270
|
);
|
|
264
271
|
}
|
|
272
|
+
|
|
265
273
|
/**
|
|
266
274
|
* Commissioner SHALL re-arm the Fail-safe timer on the Commissionee to the desired commissioning
|
|
267
275
|
* timeout within 60 seconds of the completion of PASE session establishment, using the ArmFailSafe
|
|
268
276
|
* command (see Section 11.9.6.2, “ArmFailSafe Command”)
|
|
269
277
|
*/
|
|
270
|
-
const timeLeft =
|
|
271
|
-
if (timeLeft < this.#
|
|
278
|
+
const timeLeft = Timespan(Time.nowMs, this.#currentFailSafeEndTime).duration;
|
|
279
|
+
if (timeLeft < this.#defaultFailSafeTime / 2) {
|
|
272
280
|
logger.info(
|
|
273
281
|
`After Commissioning step ${step.stepNumber}.${step.subStepNumber}: ${
|
|
274
282
|
step.name
|
|
@@ -595,45 +603,46 @@ export class ControllerCommissioningFlow {
|
|
|
595
603
|
* reading BasicCommissioningInfo attribute (see Section 11.10.5.2, “BasicCommissioningInfo
|
|
596
604
|
* Attribute”) prior to invoking the ArmFailSafe command.
|
|
597
605
|
*/
|
|
598
|
-
async #armFailsafe(
|
|
606
|
+
async #armFailsafe(time?: Duration) {
|
|
599
607
|
const client = this.#getClusterClient(GeneralCommissioning.Cluster);
|
|
600
608
|
if (this.collectedCommissioningData.basicCommissioningInfo === undefined) {
|
|
601
609
|
const basicCommissioningInfo = await client.getBasicCommissioningInfoAttribute();
|
|
602
610
|
this.collectedCommissioningData.basicCommissioningInfo = basicCommissioningInfo;
|
|
603
|
-
this.#
|
|
604
|
-
this.#commissioningStartedTime = Time.nowMs
|
|
605
|
-
this.#commissioningExpiryTime =
|
|
606
|
-
this.#commissioningStartedTime + basicCommissioningInfo.maxCumulativeFailsafeSeconds
|
|
611
|
+
this.#defaultFailSafeTime = Seconds(basicCommissioningInfo.failSafeExpiryLengthSeconds);
|
|
612
|
+
this.#commissioningStartedTime = Time.nowMs;
|
|
613
|
+
this.#commissioningExpiryTime = Timestamp(
|
|
614
|
+
this.#commissioningStartedTime + Seconds(basicCommissioningInfo.maxCumulativeFailsafeSeconds),
|
|
615
|
+
);
|
|
607
616
|
}
|
|
608
|
-
const
|
|
617
|
+
const expiryLength = time ?? this.#defaultFailSafeTime;
|
|
609
618
|
this.#ensureGeneralCommissioningSuccess(
|
|
610
619
|
"armFailSafe",
|
|
611
620
|
await client.armFailSafe({
|
|
612
621
|
breadcrumb: this.lastBreadcrumb,
|
|
613
|
-
expiryLengthSeconds,
|
|
622
|
+
expiryLengthSeconds: Seconds.of(expiryLength),
|
|
614
623
|
}),
|
|
615
624
|
);
|
|
616
|
-
this.#currentFailSafeEndTime = Time.nowMs
|
|
625
|
+
this.#currentFailSafeEndTime = Timestamp(Time.nowMs + expiryLength);
|
|
617
626
|
return {
|
|
618
627
|
code: CommissioningStepResultCode.Success,
|
|
619
628
|
breadcrumb: this.lastBreadcrumb,
|
|
620
629
|
};
|
|
621
630
|
}
|
|
622
631
|
|
|
623
|
-
get #
|
|
632
|
+
get #failSafeTimeLeft() {
|
|
624
633
|
if (this.#currentFailSafeEndTime === undefined) {
|
|
625
|
-
return
|
|
634
|
+
return Instant;
|
|
626
635
|
}
|
|
627
|
-
return
|
|
636
|
+
return Duration.max(Timespan(Time.nowMs, this.#currentFailSafeEndTime).duration, 0);
|
|
628
637
|
}
|
|
629
638
|
|
|
630
|
-
async #
|
|
631
|
-
const
|
|
639
|
+
async #ensureFailsafeTimerFor(maxProcessingTime: Duration) {
|
|
640
|
+
const minFailsafeTime = this.interactionClient.maximumPeerResponseTime(maxProcessingTime);
|
|
632
641
|
|
|
633
|
-
const timeLeft = this.#
|
|
634
|
-
if (timeLeft <
|
|
635
|
-
logger.debug(`Failsafe timer has only ${timeLeft}s left, re-arming for at least ${
|
|
636
|
-
await this.#armFailsafe(
|
|
642
|
+
const timeLeft = this.#failSafeTimeLeft;
|
|
643
|
+
if (timeLeft < minFailsafeTime) {
|
|
644
|
+
logger.debug(`Failsafe timer has only ${timeLeft}s left, re-arming for at least ${minFailsafeTime}`);
|
|
645
|
+
await this.#armFailsafe(Duration.max(minFailsafeTime, this.#defaultFailSafeTime));
|
|
637
646
|
} else {
|
|
638
647
|
logger.debug(`Failsafe timer is already set for at least ${timeLeft}s`);
|
|
639
648
|
}
|
|
@@ -1019,8 +1028,8 @@ export class ControllerCommissioningFlow {
|
|
|
1019
1028
|
|
|
1020
1029
|
// Only Scan when the device supports concurrent connections
|
|
1021
1030
|
if (this.collectedCommissioningData.supportsConcurrentConnection !== false) {
|
|
1022
|
-
const
|
|
1023
|
-
await this.#
|
|
1031
|
+
const scanMaxTime = Seconds(await networkCommissioningClusterClient.getScanMaxTimeSecondsAttribute());
|
|
1032
|
+
await this.#ensureFailsafeTimerFor(scanMaxTime);
|
|
1024
1033
|
|
|
1025
1034
|
const { networkingStatus, wiFiScanResults, debugText } =
|
|
1026
1035
|
await networkCommissioningClusterClient.scanNetworks(
|
|
@@ -1028,7 +1037,7 @@ export class ControllerCommissioningFlow {
|
|
|
1028
1037
|
ssid,
|
|
1029
1038
|
breadcrumb: this.lastBreadcrumb++,
|
|
1030
1039
|
},
|
|
1031
|
-
{
|
|
1040
|
+
{ expectedProcessingTime: scanMaxTime },
|
|
1032
1041
|
);
|
|
1033
1042
|
if (networkingStatus !== NetworkCommissioning.NetworkCommissioningStatus.Success) {
|
|
1034
1043
|
throw new WifiNetworkSetupFailedError(`Commissionee failed to scan for WiFi networks: ${debugText}`);
|
|
@@ -1080,15 +1089,15 @@ export class ControllerCommissioningFlow {
|
|
|
1080
1089
|
};
|
|
1081
1090
|
}
|
|
1082
1091
|
|
|
1083
|
-
const
|
|
1084
|
-
await this.#
|
|
1092
|
+
const connectMaxTime = Seconds(await networkCommissioningClusterClient.getConnectMaxTimeSecondsAttribute());
|
|
1093
|
+
await this.#ensureFailsafeTimerFor(connectMaxTime);
|
|
1085
1094
|
|
|
1086
1095
|
const connectResult = await networkCommissioningClusterClient.connectNetwork(
|
|
1087
1096
|
{
|
|
1088
1097
|
networkId: networkId,
|
|
1089
1098
|
breadcrumb: this.lastBreadcrumb++,
|
|
1090
1099
|
},
|
|
1091
|
-
{
|
|
1100
|
+
{ expectedProcessingTime: connectMaxTime },
|
|
1092
1101
|
);
|
|
1093
1102
|
|
|
1094
1103
|
if (connectResult.networkingStatus !== NetworkCommissioning.NetworkCommissioningStatus.Success) {
|
|
@@ -1164,13 +1173,13 @@ export class ControllerCommissioningFlow {
|
|
|
1164
1173
|
|
|
1165
1174
|
// Only Scan when the device supports concurrent connections
|
|
1166
1175
|
if (this.collectedCommissioningData.supportsConcurrentConnection !== false) {
|
|
1167
|
-
const
|
|
1168
|
-
await this.#
|
|
1176
|
+
const scanMaxTime = Seconds(await networkCommissioningClusterClient.getScanMaxTimeSecondsAttribute());
|
|
1177
|
+
await this.#ensureFailsafeTimerFor(scanMaxTime);
|
|
1169
1178
|
|
|
1170
1179
|
const { networkingStatus, threadScanResults, debugText } =
|
|
1171
1180
|
await networkCommissioningClusterClient.scanNetworks(
|
|
1172
1181
|
{ breadcrumb: this.lastBreadcrumb++ },
|
|
1173
|
-
{
|
|
1182
|
+
{ expectedProcessingTime: scanMaxTime },
|
|
1174
1183
|
);
|
|
1175
1184
|
if (networkingStatus !== NetworkCommissioning.NetworkCommissioningStatus.Success) {
|
|
1176
1185
|
throw new ThreadNetworkSetupFailedError(
|
|
@@ -1237,15 +1246,15 @@ export class ControllerCommissioningFlow {
|
|
|
1237
1246
|
};
|
|
1238
1247
|
}
|
|
1239
1248
|
|
|
1240
|
-
const
|
|
1241
|
-
await this.#
|
|
1249
|
+
const connectMaxTime = Seconds(await networkCommissioningClusterClient.getConnectMaxTimeSecondsAttribute());
|
|
1250
|
+
await this.#ensureFailsafeTimerFor(connectMaxTime);
|
|
1242
1251
|
|
|
1243
1252
|
const connectResult = await networkCommissioningClusterClient.connectNetwork(
|
|
1244
1253
|
{
|
|
1245
1254
|
networkId: networkId,
|
|
1246
1255
|
breadcrumb: this.lastBreadcrumb++,
|
|
1247
1256
|
},
|
|
1248
|
-
{
|
|
1257
|
+
{ expectedProcessingTime: connectMaxTime },
|
|
1249
1258
|
);
|
|
1250
1259
|
|
|
1251
1260
|
if (connectResult.networkingStatus !== NetworkCommissioning.NetworkCommissioningStatus.Success) {
|
|
@@ -1284,9 +1293,9 @@ export class ControllerCommissioningFlow {
|
|
|
1284
1293
|
// TODO: Check whats needed for non-concurrent commissioning flows (maybe arm initially longer?)
|
|
1285
1294
|
const reArmFailsafeInterval = Time.getPeriodicTimer(
|
|
1286
1295
|
"Re-Arm Failsafe during reconnect",
|
|
1287
|
-
(this.#
|
|
1296
|
+
Millis(this.#defaultFailSafeTime / 2),
|
|
1288
1297
|
() => {
|
|
1289
|
-
const now = Time.nowMs
|
|
1298
|
+
const now = Time.nowMs;
|
|
1290
1299
|
if (this.#commissioningExpiryTime !== undefined && now < this.#commissioningExpiryTime) {
|
|
1291
1300
|
logger.error(
|
|
1292
1301
|
`Re-Arm Failsafe Timer during reconnect with device. Time left: ${Math.round((this.#commissioningExpiryTime - now) / 1000)}s`,
|
|
@@ -4,7 +4,16 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
anyPromise,
|
|
9
|
+
ClassExtends,
|
|
10
|
+
Diagnostic,
|
|
11
|
+
Duration,
|
|
12
|
+
Logger,
|
|
13
|
+
NoResponseTimeoutError,
|
|
14
|
+
Seconds,
|
|
15
|
+
ServerAddress,
|
|
16
|
+
} from "#general";
|
|
8
17
|
import { CommissionableDeviceDiscoveryFailedError } from "#peer/ControllerCommissioningFlow.js";
|
|
9
18
|
import { NodeId } from "#types";
|
|
10
19
|
import {
|
|
@@ -38,14 +47,14 @@ export class ControllerDiscovery {
|
|
|
38
47
|
static async discoverDeviceAddressesByIdentifier(
|
|
39
48
|
scanners: Array<Scanner>,
|
|
40
49
|
identifier: CommissionableDeviceIdentifiers,
|
|
41
|
-
|
|
50
|
+
timeout = Seconds(30),
|
|
42
51
|
): Promise<CommissionableDevice[]> {
|
|
43
52
|
logger.info(`Start Discovering devices using identifier ${Diagnostic.json(identifier)} ...`);
|
|
44
53
|
|
|
45
54
|
const scanResults = scanners.map(async scanner => {
|
|
46
55
|
const foundDevices = await scanner.findCommissionableDevices(
|
|
47
56
|
identifier,
|
|
48
|
-
|
|
57
|
+
timeout,
|
|
49
58
|
scanner.type === "ble", // Force rediscovery for BLE
|
|
50
59
|
);
|
|
51
60
|
logger.info(`Found ${foundDevices.length} devices using identifier ${Diagnostic.json(identifier)}`);
|
|
@@ -73,7 +82,7 @@ export class ControllerDiscovery {
|
|
|
73
82
|
|
|
74
83
|
static async discoverCommissionableDevices(
|
|
75
84
|
scanners: Array<Scanner>,
|
|
76
|
-
|
|
85
|
+
timeout: Duration,
|
|
77
86
|
identifier: CommissionableDeviceIdentifiers = {},
|
|
78
87
|
discoveredCallback?: (device: CommissionableDevice) => void,
|
|
79
88
|
): Promise<CommissionableDevice[]> {
|
|
@@ -90,7 +99,7 @@ export class ControllerDiscovery {
|
|
|
90
99
|
discoveredCallback?.(device);
|
|
91
100
|
}
|
|
92
101
|
},
|
|
93
|
-
|
|
102
|
+
timeout,
|
|
94
103
|
);
|
|
95
104
|
}),
|
|
96
105
|
);
|
|
@@ -118,15 +127,10 @@ export class ControllerDiscovery {
|
|
|
118
127
|
fabric: Fabric,
|
|
119
128
|
peerNodeId: NodeId,
|
|
120
129
|
scanner: MdnsClient,
|
|
121
|
-
|
|
130
|
+
timeout?: Duration,
|
|
122
131
|
ignoreExistingRecords?: boolean,
|
|
123
132
|
): Promise<OperationalDevice> {
|
|
124
|
-
const foundDevice = await scanner.findOperationalDevice(
|
|
125
|
-
fabric,
|
|
126
|
-
peerNodeId,
|
|
127
|
-
timeoutSeconds,
|
|
128
|
-
ignoreExistingRecords,
|
|
129
|
-
);
|
|
133
|
+
const foundDevice = await scanner.findOperationalDevice(fabric, peerNodeId, timeout, ignoreExistingRecords);
|
|
130
134
|
if (foundDevice === undefined) {
|
|
131
135
|
throw new DiscoveryError(
|
|
132
136
|
"The operational device cannot be found on the network. Please make sure it is online.",
|
|
@@ -160,7 +164,7 @@ export class ControllerDiscovery {
|
|
|
160
164
|
address: AddressTypeFromDevice<DD>,
|
|
161
165
|
device?: DD,
|
|
162
166
|
): Promise<{ result: T; resultAddress: AddressTypeFromDevice<DD>; resultDevice?: DD } | undefined> => {
|
|
163
|
-
const serverKey =
|
|
167
|
+
const serverKey = ServerAddress.urlFor(address);
|
|
164
168
|
|
|
165
169
|
logger.debug(`Try to communicate with ${serverKey} ...`);
|
|
166
170
|
try {
|
|
@@ -177,13 +181,13 @@ export class ControllerDiscovery {
|
|
|
177
181
|
const addresses = new Map<string, { address: AddressTypeFromDevice<DD>; device?: DD }>();
|
|
178
182
|
|
|
179
183
|
devices.forEach(device =>
|
|
180
|
-
device.addresses.forEach(address => addresses.set(
|
|
184
|
+
device.addresses.forEach(address => addresses.set(ServerAddress.urlFor(address), { address, device })),
|
|
181
185
|
);
|
|
182
186
|
const triedAddresses = new Set<string>();
|
|
183
187
|
|
|
184
188
|
if (lastKnownAddress !== undefined) {
|
|
185
|
-
const knownKey =
|
|
186
|
-
const knownDevice = addresses.has(
|
|
189
|
+
const knownKey = ServerAddress.urlFor(lastKnownAddress);
|
|
190
|
+
const knownDevice = addresses.has(ServerAddress.urlFor(lastKnownAddress))
|
|
187
191
|
? addresses.get(knownKey)?.device
|
|
188
192
|
: undefined;
|
|
189
193
|
addresses.delete(knownKey);
|
|
@@ -203,7 +207,7 @@ export class ControllerDiscovery {
|
|
|
203
207
|
|
|
204
208
|
let triedOne = false;
|
|
205
209
|
for (const { address, device } of addresses.values()) {
|
|
206
|
-
const serverKey =
|
|
210
|
+
const serverKey = ServerAddress.urlFor(address);
|
|
207
211
|
if (triedAddresses.has(serverKey)) continue;
|
|
208
212
|
triedAddresses.add(serverKey);
|
|
209
213
|
|
|
@@ -224,7 +228,7 @@ export class ControllerDiscovery {
|
|
|
224
228
|
if (triedOne) {
|
|
225
229
|
(await updateDevicesFunc()).forEach(device =>
|
|
226
230
|
device.addresses.forEach(address =>
|
|
227
|
-
addresses.set(
|
|
231
|
+
addresses.set(ServerAddress.urlFor(address), { address, device }),
|
|
228
232
|
),
|
|
229
233
|
); // Update list and add new
|
|
230
234
|
} else {
|
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { Environment, Environmental, PromiseQueue } from "#general";
|
|
7
|
+
import { Environment, Environmental, Millis, PromiseQueue } from "#general";
|
|
8
8
|
|
|
9
9
|
const CONCURRENT_QUEUED_INTERACTIONS = 4;
|
|
10
|
-
const
|
|
10
|
+
const INTERACTION_QUEUE_DELAY = Millis(100);
|
|
11
11
|
|
|
12
12
|
export class InteractionQueue extends PromiseQueue {
|
|
13
13
|
constructor() {
|
|
14
|
-
super(CONCURRENT_QUEUED_INTERACTIONS,
|
|
14
|
+
super(CONCURRENT_QUEUED_INTERACTIONS, INTERACTION_QUEUE_DELAY);
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
static [Environmental.create](env: Environment) {
|
package/src/peer/PeerSet.ts
CHANGED
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
ChannelType,
|
|
13
13
|
Construction,
|
|
14
14
|
createPromise,
|
|
15
|
+
Duration,
|
|
15
16
|
Environment,
|
|
16
17
|
Environmental,
|
|
17
18
|
ImmutableSet,
|
|
@@ -20,11 +21,13 @@ import {
|
|
|
20
21
|
isIPv6,
|
|
21
22
|
Logger,
|
|
22
23
|
MatterError,
|
|
24
|
+
Minutes,
|
|
23
25
|
NetInterfaceSet,
|
|
24
26
|
NoResponseTimeoutError,
|
|
25
27
|
ObservableSet,
|
|
28
|
+
Seconds,
|
|
29
|
+
ServerAddress,
|
|
26
30
|
ServerAddressIp,
|
|
27
|
-
serverAddressToString,
|
|
28
31
|
STANDARD_MATTER_PORT,
|
|
29
32
|
Time,
|
|
30
33
|
Timer,
|
|
@@ -50,8 +53,8 @@ import { PeerAddressStore, PeerDataStore } from "./PeerAddressStore.js";
|
|
|
50
53
|
|
|
51
54
|
const logger = Logger.get("PeerSet");
|
|
52
55
|
|
|
53
|
-
const
|
|
54
|
-
const
|
|
56
|
+
const RECONNECTION_POLLING_INTERVAL = Minutes(10);
|
|
57
|
+
const RETRANSMISSION_DISCOVERY_TIMEOUT = Seconds(5);
|
|
55
58
|
|
|
56
59
|
/**
|
|
57
60
|
* Types of discovery that may be performed when connecting operationally.
|
|
@@ -78,7 +81,7 @@ export class UnknownNodeError extends MatterError {}
|
|
|
78
81
|
*/
|
|
79
82
|
export interface DiscoveryOptions {
|
|
80
83
|
discoveryType?: NodeDiscoveryType;
|
|
81
|
-
|
|
84
|
+
timeout?: Duration;
|
|
82
85
|
discoveryData?: DiscoveryData;
|
|
83
86
|
}
|
|
84
87
|
|
|
@@ -333,7 +336,10 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
|
|
|
333
336
|
await this.#sessions.removeAllSessionsForNode(address);
|
|
334
337
|
throw new RetransmissionLimitReachedError(`No operational address found for ${PeerAddress(address)}`);
|
|
335
338
|
}
|
|
336
|
-
if (
|
|
339
|
+
if (
|
|
340
|
+
(await this.#reconnectKnownAddress(address, operationalAddress, discoveryData, Seconds(2))) ===
|
|
341
|
+
undefined
|
|
342
|
+
) {
|
|
337
343
|
throw new RetransmissionLimitReachedError(`${PeerAddress(address)} is not reachable.`);
|
|
338
344
|
}
|
|
339
345
|
});
|
|
@@ -438,10 +444,10 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
|
|
|
438
444
|
address = PeerAddress(address);
|
|
439
445
|
const {
|
|
440
446
|
discoveryType: requestedDiscoveryType = NodeDiscoveryType.FullDiscovery,
|
|
441
|
-
|
|
447
|
+
timeout,
|
|
442
448
|
discoveryData = this.#peersByAddress.get(address)?.discoveryData,
|
|
443
449
|
} = discoveryOptions;
|
|
444
|
-
if (
|
|
450
|
+
if (timeout !== undefined && requestedDiscoveryType !== NodeDiscoveryType.TimedDiscovery) {
|
|
445
451
|
throw new ImplementationError("Cannot set timeout without timed discovery.");
|
|
446
452
|
}
|
|
447
453
|
if (requestedDiscoveryType === NodeDiscoveryType.RetransmissionDiscovery) {
|
|
@@ -480,7 +486,7 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
|
|
|
480
486
|
operationalAddress,
|
|
481
487
|
discoveryData,
|
|
482
488
|
// When we use a timeout for discovery also use this for reconnecting to the node
|
|
483
|
-
|
|
489
|
+
timeout,
|
|
484
490
|
);
|
|
485
491
|
if (directReconnection !== undefined) {
|
|
486
492
|
return directReconnection;
|
|
@@ -515,14 +521,14 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
|
|
|
515
521
|
const { promise, resolver, rejecter } = createPromise<MessageChannel>();
|
|
516
522
|
|
|
517
523
|
logger.debug(
|
|
518
|
-
`Starting reconnection polling for ${
|
|
524
|
+
`Starting reconnection polling for ${ServerAddress.urlFor(lastOperationalAddress)} (interval ${Duration.format(RECONNECTION_POLLING_INTERVAL)})`,
|
|
519
525
|
);
|
|
520
526
|
reconnectionPollingTimer = Time.getPeriodicTimer(
|
|
521
527
|
"Controller reconnect",
|
|
522
|
-
|
|
528
|
+
RECONNECTION_POLLING_INTERVAL,
|
|
523
529
|
async () => {
|
|
524
530
|
try {
|
|
525
|
-
logger.debug(`Polling for device at ${
|
|
531
|
+
logger.debug(`Polling for device at ${ServerAddress.urlFor(lastOperationalAddress)} ...`);
|
|
526
532
|
const result = await this.#reconnectKnownAddress(
|
|
527
533
|
address,
|
|
528
534
|
lastOperationalAddress,
|
|
@@ -565,8 +571,8 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
|
|
|
565
571
|
this.#sessions.fabricFor(address),
|
|
566
572
|
address.nodeId,
|
|
567
573
|
mdnsScanner,
|
|
568
|
-
|
|
569
|
-
|
|
574
|
+
timeout,
|
|
575
|
+
timeout === undefined,
|
|
570
576
|
);
|
|
571
577
|
const { stopTimerFunc } = this.#runningPeerDiscoveries.get(address) ?? {};
|
|
572
578
|
stopTimerFunc?.();
|
|
@@ -611,21 +617,21 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
|
|
|
611
617
|
address: PeerAddress,
|
|
612
618
|
operationalAddress: ServerAddressIp,
|
|
613
619
|
discoveryData?: DiscoveryData,
|
|
614
|
-
|
|
620
|
+
expectedProcessingTime?: Duration,
|
|
615
621
|
): Promise<MessageChannel | undefined> {
|
|
616
622
|
address = PeerAddress(address);
|
|
617
623
|
|
|
618
624
|
const { ip, port } = operationalAddress;
|
|
619
|
-
const startTime = Time.nowMs
|
|
625
|
+
const startTime = Time.nowMs;
|
|
620
626
|
try {
|
|
621
627
|
logger.debug(
|
|
622
628
|
`Resuming connection to ${PeerAddress(address)} at ${ip}:${port}${
|
|
623
|
-
|
|
624
|
-
? ` with expected processing time of ${
|
|
629
|
+
expectedProcessingTime !== undefined
|
|
630
|
+
? ` with expected processing time of ${Duration.format(expectedProcessingTime)}`
|
|
625
631
|
: ""
|
|
626
632
|
}`,
|
|
627
633
|
);
|
|
628
|
-
const channel = await this.#pair(address, operationalAddress, discoveryData,
|
|
634
|
+
const channel = await this.#pair(address, operationalAddress, discoveryData, expectedProcessingTime);
|
|
629
635
|
await this.#addOrUpdatePeer(address, operationalAddress);
|
|
630
636
|
return channel;
|
|
631
637
|
} catch (error) {
|
|
@@ -669,9 +675,9 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
|
|
|
669
675
|
address: PeerAddress,
|
|
670
676
|
operationalServerAddress: ServerAddressIp,
|
|
671
677
|
discoveryData?: DiscoveryData,
|
|
672
|
-
|
|
678
|
+
expectedProcessingTime?: Duration,
|
|
673
679
|
) {
|
|
674
|
-
logger.debug(`Pair with ${address} at ${
|
|
680
|
+
logger.debug(`Pair with ${address} at ${ServerAddress.urlFor(operationalServerAddress)}`);
|
|
675
681
|
const { ip, port } = operationalServerAddress;
|
|
676
682
|
// Do CASE pairing
|
|
677
683
|
const isIpv6Address = isIPv6(ip);
|
|
@@ -693,9 +699,9 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
|
|
|
693
699
|
const unsecureSession = this.#sessions.createInsecureSession({
|
|
694
700
|
// Use the session parameters from MDNS announcements when available and rest is assumed to be fallbacks
|
|
695
701
|
sessionParameters: {
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
702
|
+
idleInterval: discoveryData?.SII ?? sessionParameters?.idleInterval,
|
|
703
|
+
activeInterval: discoveryData?.SAI ?? sessionParameters?.activeInterval,
|
|
704
|
+
activeThreshold: discoveryData?.SAT ?? sessionParameters?.activeThreshold,
|
|
699
705
|
},
|
|
700
706
|
isInitiator: true,
|
|
701
707
|
});
|
|
@@ -704,7 +710,7 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
|
|
|
704
710
|
const operationalSecureSession = await this.#doCasePair(
|
|
705
711
|
new MessageChannel(operationalChannel, unsecureSession),
|
|
706
712
|
address,
|
|
707
|
-
|
|
713
|
+
expectedProcessingTime,
|
|
708
714
|
);
|
|
709
715
|
|
|
710
716
|
const channel = new MessageChannel(operationalChannel, operationalSecureSession);
|
|
@@ -723,7 +729,7 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
|
|
|
723
729
|
async #doCasePair(
|
|
724
730
|
unsecureMessageChannel: MessageChannel,
|
|
725
731
|
address: PeerAddress,
|
|
726
|
-
|
|
732
|
+
expectedProcessingTime?: Duration,
|
|
727
733
|
): Promise<SecureSession> {
|
|
728
734
|
const fabric = this.#sessions.fabricFor(address);
|
|
729
735
|
let exchange: MessageExchange | undefined;
|
|
@@ -734,7 +740,7 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
|
|
|
734
740
|
exchange,
|
|
735
741
|
fabric,
|
|
736
742
|
address.nodeId,
|
|
737
|
-
|
|
743
|
+
expectedProcessingTime,
|
|
738
744
|
);
|
|
739
745
|
|
|
740
746
|
if (!resumed) {
|
|
@@ -755,7 +761,7 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
|
|
|
755
761
|
`Case client: Resumption record seems outdated for Fabric ${NodeId.toHexString(fabric.nodeId)} (index ${fabric.fabricIndex}) and PeerNode ${NodeId.toHexString(address.nodeId)}. Retrying pairing without resumption...`,
|
|
756
762
|
);
|
|
757
763
|
// An endless loop should not happen here, as the resumption record is deleted in the next step
|
|
758
|
-
return await this.#doCasePair(unsecureMessageChannel, address,
|
|
764
|
+
return await this.#doCasePair(unsecureMessageChannel, address, expectedProcessingTime);
|
|
759
765
|
}
|
|
760
766
|
}
|
|
761
767
|
throw error;
|
|
@@ -844,7 +850,7 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
|
|
|
844
850
|
this.#runningPeerDiscoveries.set(address, { type: NodeDiscoveryType.RetransmissionDiscovery });
|
|
845
851
|
this.#scanners
|
|
846
852
|
.scannerFor(ChannelType.UDP)
|
|
847
|
-
?.findOperationalDevice(fabric, nodeId,
|
|
853
|
+
?.findOperationalDevice(fabric, nodeId, RETRANSMISSION_DISCOVERY_TIMEOUT, true)
|
|
848
854
|
.catch(error => {
|
|
849
855
|
logger.error(`Failed to discover ${address} after resubmission started.`, error);
|
|
850
856
|
})
|
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
import { SecureChannelProtocol } from "#securechannel/SecureChannelProtocol.js";
|
|
25
25
|
import { PaseServer } from "#session/pase/PaseServer.js";
|
|
26
26
|
import { SessionManager } from "#session/SessionManager.js";
|
|
27
|
-
import { CommissioningOptions,
|
|
27
|
+
import { CommissioningOptions, STANDARD_COMMISSIONING_TIMEOUT, StatusCode, StatusResponseError } from "#types";
|
|
28
28
|
import type { ControllerCommissioner } from "../peer/ControllerCommissioner.js";
|
|
29
29
|
import { DeviceAdvertiser } from "./DeviceAdvertiser.js";
|
|
30
30
|
|
|
@@ -161,7 +161,7 @@ export class DeviceCommissioner {
|
|
|
161
161
|
|
|
162
162
|
this.#windowStatus = windowStatus;
|
|
163
163
|
const commissioningConfig = this.#context.commissioningConfig.values;
|
|
164
|
-
const advertisementWindowS = commissioningConfig.
|
|
164
|
+
const advertisementWindowS = commissioningConfig.advertisementWindow ?? STANDARD_COMMISSIONING_TIMEOUT;
|
|
165
165
|
|
|
166
166
|
const mode =
|
|
167
167
|
windowStatus === AdministratorCommissioning.CommissioningWindowStatus.EnhancedWindowOpen
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
import { PeerAddress } from "#peer/PeerAddress.js";
|
|
27
27
|
import {
|
|
28
28
|
ChannelNotConnectedError,
|
|
29
|
-
|
|
29
|
+
DEFAULT_EXPECTED_PROCESSING_TIME,
|
|
30
30
|
MessageChannel,
|
|
31
31
|
} from "#protocol/MessageChannel.js";
|
|
32
32
|
import { SecureChannelMessenger } from "#securechannel/SecureChannelMessenger.js";
|
|
@@ -412,12 +412,9 @@ export class ExchangeManager {
|
|
|
412
412
|
|
|
413
413
|
calculateMaximumPeerResponseTimeMsFor(
|
|
414
414
|
channel: MessageChannel,
|
|
415
|
-
|
|
415
|
+
expectedProcessingTime = DEFAULT_EXPECTED_PROCESSING_TIME,
|
|
416
416
|
) {
|
|
417
|
-
return channel.
|
|
418
|
-
this.#sessionManager.sessionParameters,
|
|
419
|
-
expectedProcessingTimeMs,
|
|
420
|
-
);
|
|
417
|
+
return channel.calculateMaximumPeerResponseTime(this.#sessionManager.sessionParameters, expectedProcessingTime);
|
|
421
418
|
}
|
|
422
419
|
|
|
423
420
|
#messageExchangeContextFor(channel: MessageChannel): MessageExchangeContext {
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { ChannelType, Observable } from "#general";
|
|
6
|
+
import { ChannelType, Duration, Observable } from "#general";
|
|
7
7
|
import { PeerAddress } from "#peer/PeerAddress.js";
|
|
8
8
|
import { ChannelManager } from "#protocol/ChannelManager.js";
|
|
9
9
|
import { ExchangeManager } from "#protocol/ExchangeManager.js";
|
|
10
10
|
import {
|
|
11
11
|
ChannelNotConnectedError,
|
|
12
|
-
|
|
12
|
+
DEFAULT_EXPECTED_PROCESSING_TIME,
|
|
13
13
|
MessageChannel,
|
|
14
14
|
} from "#protocol/MessageChannel.js";
|
|
15
15
|
import { MessageExchange } from "#protocol/MessageExchange.js";
|
|
@@ -37,7 +37,7 @@ export abstract class ExchangeProvider {
|
|
|
37
37
|
this.exchangeManager.addProtocolHandler(handler);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
abstract
|
|
40
|
+
abstract maximumPeerResponseTime(expectedProcessingTime?: Duration): Duration;
|
|
41
41
|
abstract initiateExchange(): Promise<MessageExchange>;
|
|
42
42
|
abstract reconnectChannel(): Promise<boolean>;
|
|
43
43
|
abstract session: Session;
|
|
@@ -72,8 +72,8 @@ export class DedicatedChannelExchangeProvider extends ExchangeProvider {
|
|
|
72
72
|
return this.#channel.type;
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
|
|
76
|
-
return this.exchangeManager.calculateMaximumPeerResponseTimeMsFor(this.#channel,
|
|
75
|
+
maximumPeerResponseTime(expectedProcessingTime = DEFAULT_EXPECTED_PROCESSING_TIME) {
|
|
76
|
+
return this.exchangeManager.calculateMaximumPeerResponseTimeMsFor(this.#channel, expectedProcessingTime);
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
|
|
@@ -136,7 +136,7 @@ export class ReconnectableExchangeProvider extends ExchangeProvider {
|
|
|
136
136
|
return this.channelManager.getChannel(this.#address).type;
|
|
137
137
|
}
|
|
138
138
|
|
|
139
|
-
|
|
139
|
+
maximumPeerResponseTime(expectedProcessingTimeMs = DEFAULT_EXPECTED_PROCESSING_TIME) {
|
|
140
140
|
const channel = this.channelManager.getChannel(this.#address);
|
|
141
141
|
if (!channel) {
|
|
142
142
|
throw new ChannelNotConnectedError("Channel not connected");
|