@matter/protocol 0.16.0-alpha.0-20251213-e83db3732 → 0.16.0-alpha.0-20251217-038f88085
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/dist/cjs/action/client/ClientInteraction.d.ts +12 -5
- package/dist/cjs/action/client/ClientInteraction.d.ts.map +1 -1
- package/dist/cjs/action/client/ClientInteraction.js +39 -15
- package/dist/cjs/action/client/ClientInteraction.js.map +1 -1
- package/dist/cjs/action/client/ClientRead.d.ts +10 -0
- package/dist/cjs/action/client/ClientRead.d.ts.map +1 -0
- package/dist/cjs/action/client/ClientRead.js +22 -0
- package/dist/cjs/action/client/ClientRead.js.map +6 -0
- package/dist/cjs/action/client/ClientRequest.d.ts +20 -0
- package/dist/cjs/action/client/ClientRequest.d.ts.map +1 -0
- package/dist/cjs/action/client/ClientRequest.js +22 -0
- package/dist/cjs/action/client/ClientRequest.js.map +6 -0
- package/dist/cjs/action/client/ClientWrite.d.ts +10 -0
- package/dist/cjs/action/client/ClientWrite.d.ts.map +1 -0
- package/dist/cjs/action/client/ClientWrite.js +22 -0
- package/dist/cjs/action/client/ClientWrite.js.map +6 -0
- package/dist/cjs/action/client/QueuedClientInteraction.d.ts +49 -0
- package/dist/cjs/action/client/QueuedClientInteraction.d.ts.map +1 -0
- package/dist/cjs/action/client/QueuedClientInteraction.js +160 -0
- package/dist/cjs/action/client/QueuedClientInteraction.js.map +6 -0
- package/dist/cjs/action/client/index.d.ts +4 -0
- package/dist/cjs/action/client/index.d.ts.map +1 -1
- package/dist/cjs/action/client/index.js +4 -0
- package/dist/cjs/action/client/index.js.map +1 -1
- package/dist/cjs/action/client/subscription/ClientSubscribe.d.ts +2 -1
- package/dist/cjs/action/client/subscription/ClientSubscribe.d.ts.map +1 -1
- package/dist/cjs/action/client/subscription/ClientSubscriptionHandler.d.ts.map +1 -1
- package/dist/cjs/action/client/subscription/ClientSubscriptionHandler.js +14 -3
- package/dist/cjs/action/client/subscription/ClientSubscriptionHandler.js.map +1 -1
- package/dist/cjs/action/client/subscription/SustainedSubscription.d.ts +1 -1
- package/dist/cjs/action/client/subscription/SustainedSubscription.d.ts.map +1 -1
- package/dist/cjs/action/client/subscription/SustainedSubscription.js +1 -4
- package/dist/cjs/action/client/subscription/SustainedSubscription.js.map +1 -1
- package/dist/cjs/action/request/Invoke.d.ts +7 -1
- package/dist/cjs/action/request/Invoke.d.ts.map +1 -1
- package/dist/cjs/action/request/Invoke.js +0 -3
- package/dist/cjs/action/request/Invoke.js.map +1 -1
- package/dist/cjs/action/request/Read.d.ts.map +1 -1
- package/dist/cjs/action/request/Read.js +3 -2
- package/dist/cjs/action/request/Read.js.map +1 -1
- package/dist/cjs/action/request/Specifier.d.ts +1 -1
- package/dist/cjs/action/request/Specifier.d.ts.map +1 -1
- package/dist/cjs/action/request/Specifier.js +3 -0
- package/dist/cjs/action/request/Specifier.js.map +1 -1
- package/dist/cjs/action/request/Write.d.ts +1 -0
- package/dist/cjs/action/request/Write.d.ts.map +1 -1
- package/dist/cjs/action/request/Write.js +10 -2
- package/dist/cjs/action/request/Write.js.map +1 -1
- package/dist/cjs/action/response/ReadResult.d.ts +1 -1
- package/dist/cjs/action/response/ReadResult.d.ts.map +1 -1
- package/dist/cjs/cluster/client/ClusterClientTypes.d.ts +37 -8
- package/dist/cjs/cluster/client/ClusterClientTypes.d.ts.map +1 -1
- package/dist/cjs/cluster/client/index.d.ts +0 -3
- package/dist/cjs/cluster/client/index.d.ts.map +1 -1
- package/dist/cjs/cluster/client/index.js +0 -3
- package/dist/cjs/cluster/client/index.js.map +1 -1
- package/dist/cjs/interaction/InteractionMessenger.d.ts.map +1 -1
- package/dist/cjs/interaction/InteractionMessenger.js +3 -2
- package/dist/cjs/interaction/InteractionMessenger.js.map +1 -1
- package/dist/cjs/interaction/SubscriptionClient.d.ts.map +1 -1
- package/dist/cjs/interaction/SubscriptionClient.js +2 -1
- package/dist/cjs/interaction/SubscriptionClient.js.map +1 -1
- package/dist/cjs/interaction/index.d.ts +1 -1
- package/dist/cjs/interaction/index.d.ts.map +1 -1
- package/dist/cjs/interaction/index.js +1 -1
- package/dist/cjs/interaction/index.js.map +1 -1
- package/dist/cjs/peer/CommissioningError.d.ts +13 -0
- package/dist/cjs/peer/CommissioningError.d.ts.map +1 -0
- package/dist/cjs/peer/CommissioningError.js +32 -0
- package/dist/cjs/peer/CommissioningError.js.map +6 -0
- package/dist/cjs/peer/ControllerCommissioner.d.ts +2 -3
- package/dist/cjs/peer/ControllerCommissioner.d.ts.map +1 -1
- package/dist/cjs/peer/ControllerCommissioner.js +20 -13
- package/dist/cjs/peer/ControllerCommissioner.js.map +2 -2
- package/dist/cjs/peer/ControllerCommissioningFlow.d.ts +7 -16
- package/dist/cjs/peer/ControllerCommissioningFlow.d.ts.map +1 -1
- package/dist/cjs/peer/ControllerCommissioningFlow.js +395 -178
- package/dist/cjs/peer/ControllerCommissioningFlow.js.map +1 -1
- package/dist/cjs/peer/ControllerDiscovery.d.ts +4 -0
- package/dist/cjs/peer/ControllerDiscovery.d.ts.map +1 -1
- package/dist/cjs/peer/ControllerDiscovery.js +6 -3
- package/dist/cjs/peer/ControllerDiscovery.js.map +1 -1
- package/dist/cjs/peer/InteractionQueue.d.ts +2 -2
- package/dist/cjs/peer/InteractionQueue.d.ts.map +1 -1
- package/dist/cjs/peer/InteractionQueue.js +1 -1
- package/dist/cjs/peer/InteractionQueue.js.map +1 -1
- package/dist/cjs/peer/PeerAddressStore.d.ts +0 -9
- package/dist/cjs/peer/PeerAddressStore.d.ts.map +1 -1
- package/dist/cjs/peer/PeerAddressStore.js.map +1 -1
- package/dist/cjs/peer/PeerSet.d.ts +0 -2
- package/dist/cjs/peer/PeerSet.d.ts.map +1 -1
- package/dist/cjs/peer/PeerSet.js +32 -18
- package/dist/cjs/peer/PeerSet.js.map +1 -1
- package/dist/cjs/peer/PhysicalDeviceProperties.js +1 -1
- package/dist/cjs/peer/PhysicalDeviceProperties.js.map +1 -1
- package/dist/cjs/peer/index.d.ts +1 -0
- package/dist/cjs/peer/index.d.ts.map +1 -1
- package/dist/cjs/peer/index.js +1 -0
- package/dist/cjs/peer/index.js.map +1 -1
- package/dist/cjs/protocol/DeviceCommissioner.d.ts.map +1 -1
- package/dist/cjs/protocol/DeviceCommissioner.js.map +1 -1
- package/dist/cjs/protocol/ExchangeManager.js +2 -2
- package/dist/cjs/protocol/ExchangeManager.js.map +1 -1
- package/dist/cjs/protocol/ExchangeProvider.d.ts +13 -4
- package/dist/cjs/protocol/ExchangeProvider.d.ts.map +1 -1
- package/dist/cjs/protocol/ExchangeProvider.js +5 -3
- package/dist/cjs/protocol/ExchangeProvider.js.map +1 -1
- package/dist/cjs/session/NodeSession.d.ts +5 -2
- package/dist/cjs/session/NodeSession.d.ts.map +1 -1
- package/dist/cjs/session/NodeSession.js +5 -4
- package/dist/cjs/session/NodeSession.js.map +1 -1
- package/dist/cjs/session/Session.d.ts +5 -3
- package/dist/cjs/session/Session.d.ts.map +1 -1
- package/dist/cjs/session/Session.js +8 -4
- package/dist/cjs/session/Session.js.map +1 -1
- package/dist/cjs/session/SessionManager.d.ts +8 -0
- package/dist/cjs/session/SessionManager.d.ts.map +1 -1
- package/dist/cjs/session/SessionManager.js +16 -2
- package/dist/cjs/session/SessionManager.js.map +1 -1
- package/dist/esm/action/client/ClientInteraction.d.ts +12 -5
- package/dist/esm/action/client/ClientInteraction.d.ts.map +1 -1
- package/dist/esm/action/client/ClientInteraction.js +42 -16
- package/dist/esm/action/client/ClientInteraction.js.map +1 -1
- package/dist/esm/action/client/ClientRead.d.ts +10 -0
- package/dist/esm/action/client/ClientRead.d.ts.map +1 -0
- package/dist/esm/action/client/ClientRead.js +6 -0
- package/dist/esm/action/client/ClientRead.js.map +6 -0
- package/dist/esm/action/client/ClientRequest.d.ts +20 -0
- package/dist/esm/action/client/ClientRequest.d.ts.map +1 -0
- package/dist/esm/action/client/ClientRequest.js +6 -0
- package/dist/esm/action/client/ClientRequest.js.map +6 -0
- package/dist/esm/action/client/ClientWrite.d.ts +10 -0
- package/dist/esm/action/client/ClientWrite.d.ts.map +1 -0
- package/dist/esm/action/client/ClientWrite.js +6 -0
- package/dist/esm/action/client/ClientWrite.js.map +6 -0
- package/dist/esm/action/client/QueuedClientInteraction.d.ts +49 -0
- package/dist/esm/action/client/QueuedClientInteraction.d.ts.map +1 -0
- package/dist/esm/action/client/QueuedClientInteraction.js +140 -0
- package/dist/esm/action/client/QueuedClientInteraction.js.map +6 -0
- package/dist/esm/action/client/index.d.ts +4 -0
- package/dist/esm/action/client/index.d.ts.map +1 -1
- package/dist/esm/action/client/index.js +4 -0
- package/dist/esm/action/client/index.js.map +1 -1
- package/dist/esm/action/client/subscription/ClientSubscribe.d.ts +2 -1
- package/dist/esm/action/client/subscription/ClientSubscribe.d.ts.map +1 -1
- package/dist/esm/action/client/subscription/ClientSubscriptionHandler.d.ts.map +1 -1
- package/dist/esm/action/client/subscription/ClientSubscriptionHandler.js +14 -3
- package/dist/esm/action/client/subscription/ClientSubscriptionHandler.js.map +1 -1
- package/dist/esm/action/client/subscription/SustainedSubscription.d.ts +1 -1
- package/dist/esm/action/client/subscription/SustainedSubscription.d.ts.map +1 -1
- package/dist/esm/action/client/subscription/SustainedSubscription.js +1 -4
- package/dist/esm/action/client/subscription/SustainedSubscription.js.map +1 -1
- package/dist/esm/action/request/Invoke.d.ts +7 -1
- package/dist/esm/action/request/Invoke.d.ts.map +1 -1
- package/dist/esm/action/request/Invoke.js +0 -3
- package/dist/esm/action/request/Invoke.js.map +1 -1
- package/dist/esm/action/request/Read.d.ts.map +1 -1
- package/dist/esm/action/request/Read.js +3 -2
- package/dist/esm/action/request/Read.js.map +1 -1
- package/dist/esm/action/request/Specifier.d.ts +1 -1
- package/dist/esm/action/request/Specifier.d.ts.map +1 -1
- package/dist/esm/action/request/Specifier.js +3 -0
- package/dist/esm/action/request/Specifier.js.map +1 -1
- package/dist/esm/action/request/Write.d.ts +1 -0
- package/dist/esm/action/request/Write.d.ts.map +1 -1
- package/dist/esm/action/request/Write.js +10 -2
- package/dist/esm/action/request/Write.js.map +1 -1
- package/dist/esm/action/response/ReadResult.d.ts +1 -1
- package/dist/esm/action/response/ReadResult.d.ts.map +1 -1
- package/dist/esm/cluster/client/ClusterClientTypes.d.ts +37 -8
- package/dist/esm/cluster/client/ClusterClientTypes.d.ts.map +1 -1
- package/dist/esm/cluster/client/index.d.ts +0 -3
- package/dist/esm/cluster/client/index.d.ts.map +1 -1
- package/dist/esm/cluster/client/index.js +0 -3
- package/dist/esm/cluster/client/index.js.map +1 -1
- package/dist/esm/interaction/InteractionMessenger.d.ts.map +1 -1
- package/dist/esm/interaction/InteractionMessenger.js +4 -3
- package/dist/esm/interaction/InteractionMessenger.js.map +1 -1
- package/dist/esm/interaction/SubscriptionClient.d.ts.map +1 -1
- package/dist/esm/interaction/SubscriptionClient.js +2 -1
- package/dist/esm/interaction/SubscriptionClient.js.map +1 -1
- package/dist/esm/interaction/index.d.ts +1 -1
- package/dist/esm/interaction/index.d.ts.map +1 -1
- package/dist/esm/interaction/index.js +1 -1
- package/dist/esm/peer/CommissioningError.d.ts +13 -0
- package/dist/esm/peer/CommissioningError.d.ts.map +1 -0
- package/dist/esm/peer/CommissioningError.js +12 -0
- package/dist/esm/peer/CommissioningError.js.map +6 -0
- package/dist/esm/peer/ControllerCommissioner.d.ts +2 -3
- package/dist/esm/peer/ControllerCommissioner.d.ts.map +1 -1
- package/dist/esm/peer/ControllerCommissioner.js +19 -13
- package/dist/esm/peer/ControllerCommissioner.js.map +2 -2
- package/dist/esm/peer/ControllerCommissioningFlow.d.ts +7 -16
- package/dist/esm/peer/ControllerCommissioningFlow.d.ts.map +1 -1
- package/dist/esm/peer/ControllerCommissioningFlow.js +380 -162
- package/dist/esm/peer/ControllerCommissioningFlow.js.map +1 -1
- package/dist/esm/peer/ControllerDiscovery.d.ts +4 -0
- package/dist/esm/peer/ControllerDiscovery.d.ts.map +1 -1
- package/dist/esm/peer/ControllerDiscovery.js +4 -1
- package/dist/esm/peer/ControllerDiscovery.js.map +1 -1
- package/dist/esm/peer/InteractionQueue.d.ts +2 -2
- package/dist/esm/peer/InteractionQueue.d.ts.map +1 -1
- package/dist/esm/peer/InteractionQueue.js +2 -2
- package/dist/esm/peer/InteractionQueue.js.map +1 -1
- package/dist/esm/peer/PeerAddressStore.d.ts +0 -9
- package/dist/esm/peer/PeerAddressStore.d.ts.map +1 -1
- package/dist/esm/peer/PeerAddressStore.js.map +1 -1
- package/dist/esm/peer/PeerSet.d.ts +0 -2
- package/dist/esm/peer/PeerSet.d.ts.map +1 -1
- package/dist/esm/peer/PeerSet.js +32 -18
- package/dist/esm/peer/PeerSet.js.map +1 -1
- package/dist/esm/peer/PhysicalDeviceProperties.js +1 -1
- package/dist/esm/peer/PhysicalDeviceProperties.js.map +1 -1
- package/dist/esm/peer/index.d.ts +1 -0
- package/dist/esm/peer/index.d.ts.map +1 -1
- package/dist/esm/peer/index.js +1 -0
- package/dist/esm/peer/index.js.map +1 -1
- package/dist/esm/protocol/DeviceCommissioner.d.ts.map +1 -1
- package/dist/esm/protocol/DeviceCommissioner.js.map +1 -1
- package/dist/esm/protocol/ExchangeManager.js +2 -2
- package/dist/esm/protocol/ExchangeManager.js.map +1 -1
- package/dist/esm/protocol/ExchangeProvider.d.ts +13 -4
- package/dist/esm/protocol/ExchangeProvider.d.ts.map +1 -1
- package/dist/esm/protocol/ExchangeProvider.js +5 -3
- package/dist/esm/protocol/ExchangeProvider.js.map +1 -1
- package/dist/esm/session/NodeSession.d.ts +5 -2
- package/dist/esm/session/NodeSession.d.ts.map +1 -1
- package/dist/esm/session/NodeSession.js +5 -4
- package/dist/esm/session/NodeSession.js.map +1 -1
- package/dist/esm/session/Session.d.ts +5 -3
- package/dist/esm/session/Session.d.ts.map +1 -1
- package/dist/esm/session/Session.js +8 -4
- package/dist/esm/session/Session.js.map +1 -1
- package/dist/esm/session/SessionManager.d.ts +8 -0
- package/dist/esm/session/SessionManager.d.ts.map +1 -1
- package/dist/esm/session/SessionManager.js +17 -2
- package/dist/esm/session/SessionManager.js.map +1 -1
- package/package.json +6 -6
- package/src/action/client/ClientInteraction.ts +58 -19
- package/src/action/client/ClientRead.ts +10 -0
- package/src/action/client/ClientRequest.ts +20 -0
- package/src/action/client/ClientWrite.ts +10 -0
- package/src/action/client/QueuedClientInteraction.ts +91 -0
- package/src/action/client/index.ts +4 -0
- package/src/action/client/subscription/ClientSubscribe.ts +2 -1
- package/src/action/client/subscription/ClientSubscriptionHandler.ts +14 -3
- package/src/action/client/subscription/SustainedSubscription.ts +6 -9
- package/src/action/request/Invoke.ts +11 -4
- package/src/action/request/Read.ts +3 -2
- package/src/action/request/Specifier.ts +4 -1
- package/src/action/request/Write.ts +11 -2
- package/src/action/response/ReadResult.ts +1 -1
- package/src/cluster/client/ClusterClientTypes.ts +47 -7
- package/src/cluster/client/index.ts +0 -3
- package/src/interaction/InteractionMessenger.ts +5 -4
- package/src/interaction/SubscriptionClient.ts +2 -1
- package/src/interaction/index.ts +1 -1
- package/src/peer/CommissioningError.ts +13 -0
- package/src/peer/ControllerCommissioner.ts +21 -13
- package/src/peer/ControllerCommissioningFlow.ts +418 -186
- package/src/peer/ControllerDiscovery.ts +4 -1
- package/src/peer/InteractionQueue.ts +2 -2
- package/src/peer/PeerAddressStore.ts +0 -9
- package/src/peer/PeerSet.ts +56 -23
- package/src/peer/PhysicalDeviceProperties.ts +1 -1
- package/src/peer/index.ts +1 -0
- package/src/protocol/DeviceCommissioner.ts +0 -1
- package/src/protocol/ExchangeManager.ts +2 -2
- package/src/protocol/ExchangeProvider.ts +9 -7
- package/src/session/NodeSession.ts +5 -4
- package/src/session/Session.ts +8 -4
- package/src/session/SessionManager.ts +19 -2
- package/dist/cjs/cluster/client/AttributeClient.d.ts +0 -75
- package/dist/cjs/cluster/client/AttributeClient.d.ts.map +0 -1
- package/dist/cjs/cluster/client/AttributeClient.js +0 -209
- package/dist/cjs/cluster/client/AttributeClient.js.map +0 -6
- package/dist/cjs/cluster/client/ClusterClient.d.ts +0 -11
- package/dist/cjs/cluster/client/ClusterClient.d.ts.map +0 -1
- package/dist/cjs/cluster/client/ClusterClient.js +0 -335
- package/dist/cjs/cluster/client/ClusterClient.js.map +0 -6
- package/dist/cjs/cluster/client/EventClient.d.ts +0 -33
- package/dist/cjs/cluster/client/EventClient.d.ts.map +0 -1
- package/dist/cjs/cluster/client/EventClient.js +0 -89
- package/dist/cjs/cluster/client/EventClient.js.map +0 -6
- package/dist/cjs/interaction/InteractionClient.d.ts +0 -375
- package/dist/cjs/interaction/InteractionClient.d.ts.map +0 -1
- package/dist/cjs/interaction/InteractionClient.js +0 -1046
- package/dist/cjs/interaction/InteractionClient.js.map +0 -6
- package/dist/esm/cluster/client/AttributeClient.d.ts +0 -75
- package/dist/esm/cluster/client/AttributeClient.d.ts.map +0 -1
- package/dist/esm/cluster/client/AttributeClient.js +0 -189
- package/dist/esm/cluster/client/AttributeClient.js.map +0 -6
- package/dist/esm/cluster/client/ClusterClient.d.ts +0 -11
- package/dist/esm/cluster/client/ClusterClient.d.ts.map +0 -1
- package/dist/esm/cluster/client/ClusterClient.js +0 -320
- package/dist/esm/cluster/client/ClusterClient.js.map +0 -6
- package/dist/esm/cluster/client/EventClient.d.ts +0 -33
- package/dist/esm/cluster/client/EventClient.d.ts.map +0 -1
- package/dist/esm/cluster/client/EventClient.js +0 -69
- package/dist/esm/cluster/client/EventClient.js.map +0 -6
- package/dist/esm/interaction/InteractionClient.d.ts +0 -375
- package/dist/esm/interaction/InteractionClient.d.ts.map +0 -1
- package/dist/esm/interaction/InteractionClient.js +0 -1047
- package/dist/esm/interaction/InteractionClient.js.map +0 -6
- package/src/cluster/client/AttributeClient.ts +0 -230
- package/src/cluster/client/ClusterClient.ts +0 -433
- package/src/cluster/client/EventClient.ts +0 -99
- package/src/interaction/InteractionClient.ts +0 -1614
|
@@ -14,7 +14,6 @@ import {
|
|
|
14
14
|
Seconds,
|
|
15
15
|
ServerAddress,
|
|
16
16
|
} from "#general";
|
|
17
|
-
import { CommissionableDeviceDiscoveryFailedError } from "#peer/ControllerCommissioningFlow.js";
|
|
18
17
|
import { RetransmissionLimitReachedError } from "#protocol/errors.js";
|
|
19
18
|
import { NodeId } from "#types";
|
|
20
19
|
import {
|
|
@@ -27,9 +26,13 @@ import {
|
|
|
27
26
|
} from "../common/Scanner.js";
|
|
28
27
|
import { Fabric } from "../fabric/Fabric.js";
|
|
29
28
|
import { MdnsClient } from "../mdns/MdnsClient.js";
|
|
29
|
+
import { CommissioningError } from "./CommissioningError.js";
|
|
30
30
|
|
|
31
31
|
const logger = Logger.get("ControllerDiscovery");
|
|
32
32
|
|
|
33
|
+
/** Error that throws when the device could not be discovered using the provided details. */
|
|
34
|
+
export class CommissionableDeviceDiscoveryFailedError extends CommissioningError {}
|
|
35
|
+
|
|
33
36
|
export class DiscoveryError extends RetransmissionLimitReachedError {}
|
|
34
37
|
|
|
35
38
|
/**
|
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { Environment, Environmental, Millis,
|
|
7
|
+
import { Environment, Environmental, Millis, Semaphore } from "#general";
|
|
8
8
|
|
|
9
9
|
const CONCURRENT_QUEUED_INTERACTIONS = 4;
|
|
10
10
|
const INTERACTION_QUEUE_DELAY = Millis(100);
|
|
11
11
|
|
|
12
|
-
export class InteractionQueue extends
|
|
12
|
+
export class InteractionQueue extends Semaphore {
|
|
13
13
|
constructor() {
|
|
14
14
|
super(CONCURRENT_QUEUED_INTERACTIONS, INTERACTION_QUEUE_DELAY);
|
|
15
15
|
}
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { ReadScope } from "#action/client/ReadScope.js";
|
|
8
7
|
import { Construction, MaybePromise } from "#general";
|
|
9
8
|
import { DecodedAttributeReportValue } from "#interaction/AttributeDataDecoder.js";
|
|
10
9
|
import { AttributeId, ClusterId, EndpointNumber, EventNumber } from "#types";
|
|
@@ -28,8 +27,6 @@ export abstract class PeerDataStore {
|
|
|
28
27
|
abstract maxEventNumber: EventNumber;
|
|
29
28
|
abstract updateLastEventNumber(eventNumber: EventNumber): MaybePromise<void>;
|
|
30
29
|
|
|
31
|
-
abstract persistAttributes(attributes: DecodedAttributeReportValue<any>[], scope: ReadScope): MaybePromise<void>;
|
|
32
|
-
|
|
33
30
|
// TODO: Find a maybe better way to achieve this without functions
|
|
34
31
|
abstract retrieveAttribute(
|
|
35
32
|
endpointId: EndpointNumber,
|
|
@@ -37,10 +34,4 @@ export abstract class PeerDataStore {
|
|
|
37
34
|
attributeId: AttributeId,
|
|
38
35
|
): DecodedAttributeReportValue<any> | undefined;
|
|
39
36
|
abstract retrieveAttributes(endpointId: EndpointNumber, clusterId: ClusterId): DecodedAttributeReportValue<any>[];
|
|
40
|
-
abstract getClusterDataVersion(endpointId: EndpointNumber, clusterId: ClusterId): number | undefined;
|
|
41
|
-
abstract getClusterDataVersions(
|
|
42
|
-
filterEndpointId?: EndpointNumber,
|
|
43
|
-
filterClusterId?: ClusterId,
|
|
44
|
-
): { endpointId: EndpointNumber; clusterId: ClusterId; dataVersion: number }[];
|
|
45
|
-
abstract cleanupAttributeData(endpointId: EndpointNumber, clusterIds?: ClusterId[]): MaybePromise<void>;
|
|
46
37
|
}
|
package/src/peer/PeerSet.ts
CHANGED
|
@@ -44,7 +44,6 @@ import { Session } from "#session/Session.js";
|
|
|
44
44
|
import { SessionManager } from "#session/SessionManager.js";
|
|
45
45
|
import { CaseAuthenticatedTag, NodeId, SECURE_CHANNEL_PROTOCOL_ID, SecureChannelStatusCode } from "#types";
|
|
46
46
|
import { ControllerDiscovery, DiscoveryError, PairRetransmissionLimitReachedError } from "./ControllerDiscovery.js";
|
|
47
|
-
import { InteractionQueue } from "./InteractionQueue.js";
|
|
48
47
|
import { Peer } from "./Peer.js";
|
|
49
48
|
import { PeerAddressStore, PeerDataStore } from "./PeerAddressStore.js";
|
|
50
49
|
import { PeerDescriptor } from "./PeerDescriptor.js";
|
|
@@ -116,7 +115,6 @@ export class PeerSet implements ImmutableSet<Peer>, ObservableSet<Peer> {
|
|
|
116
115
|
readonly #peers = new BasicSet<Peer>();
|
|
117
116
|
readonly #construction: Construction<PeerSet>;
|
|
118
117
|
readonly #store: PeerAddressStore;
|
|
119
|
-
readonly #interactionQueue = new InteractionQueue();
|
|
120
118
|
readonly #nodeCachedData = new PeerAddressMap<PeerDataStore>(); // Temporarily until we store it in new API
|
|
121
119
|
readonly #disconnected = AsyncObservable<[peer: Peer]>();
|
|
122
120
|
readonly #peerContext: Peer.Context;
|
|
@@ -241,10 +239,6 @@ export class PeerSet implements ImmutableSet<Peer>, ObservableSet<Peer> {
|
|
|
241
239
|
return this.#peers;
|
|
242
240
|
}
|
|
243
241
|
|
|
244
|
-
get interactionQueue() {
|
|
245
|
-
return this.#interactionQueue;
|
|
246
|
-
}
|
|
247
|
-
|
|
248
242
|
async connect(address: PeerAddress, options: PeerConnectionOptions & { operationalAddress?: ServerAddressUdp }) {
|
|
249
243
|
await this.#ensureConnection(address, { ...options, allowUnknownPeer: true });
|
|
250
244
|
}
|
|
@@ -272,13 +266,26 @@ export class PeerSet implements ImmutableSet<Peer>, ObservableSet<Peer> {
|
|
|
272
266
|
|
|
273
267
|
const peer = this.for(address);
|
|
274
268
|
|
|
275
|
-
|
|
269
|
+
// We have a session, so we assume we have connection
|
|
270
|
+
if (this.#sessions.maybeSessionFor(address)) {
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// There is an active discovery running for Full discovery, we can not do more than that, do not block the call
|
|
275
|
+
// because it will error in the next step
|
|
276
|
+
if (peer.activeDiscovery?.type === NodeDiscoveryType.FullDiscovery) {
|
|
276
277
|
return;
|
|
277
278
|
}
|
|
278
279
|
|
|
279
280
|
const { promise: existingReconnectPromise } = peer.activeReconnection ?? {};
|
|
280
281
|
if (existingReconnectPromise !== undefined) {
|
|
281
|
-
return
|
|
282
|
+
// There is an active timed reconnection running and we also do not want a Full discovery here, so return
|
|
283
|
+
// the existing promise
|
|
284
|
+
if (options.discoveryOptions?.discoveryType !== NodeDiscoveryType.FullDiscovery) {
|
|
285
|
+
return existingReconnectPromise;
|
|
286
|
+
} else {
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
282
289
|
}
|
|
283
290
|
|
|
284
291
|
const { promise, resolver, rejecter } = createPromise<SecureSession>();
|
|
@@ -294,9 +301,7 @@ export class PeerSet implements ImmutableSet<Peer>, ObservableSet<Peer> {
|
|
|
294
301
|
rejecter(error);
|
|
295
302
|
});
|
|
296
303
|
|
|
297
|
-
|
|
298
|
-
return promise;
|
|
299
|
-
}
|
|
304
|
+
return promise;
|
|
300
305
|
}
|
|
301
306
|
|
|
302
307
|
/**
|
|
@@ -312,34 +317,62 @@ export class PeerSet implements ImmutableSet<Peer>, ObservableSet<Peer> {
|
|
|
312
317
|
const session = await this.#sessions.groupSessionForAddress(address, this.#transports);
|
|
313
318
|
return new DedicatedChannelExchangeProvider(this.#exchanges, session);
|
|
314
319
|
}
|
|
320
|
+
const peer = this.for(address);
|
|
315
321
|
let initiallyConnected = !!this.#sessions.maybeSessionFor(address);
|
|
316
|
-
return new ReconnectableExchangeProvider(this.#exchanges, this.#sessions, address, async
|
|
322
|
+
return new ReconnectableExchangeProvider(this.#exchanges, this.#sessions, address, async reconnOptions => {
|
|
323
|
+
const { asOf, resetInitialState } = reconnOptions ?? {};
|
|
317
324
|
const { caseAuthenticatedTags, discoveryOptions } = options;
|
|
318
325
|
|
|
319
|
-
|
|
326
|
+
const fullDiscoveryRunning = peer.activeDiscovery?.type === NodeDiscoveryType.FullDiscovery;
|
|
327
|
+
|
|
328
|
+
if (resetInitialState && !fullDiscoveryRunning) {
|
|
329
|
+
initiallyConnected = !!this.#sessions.maybeSessionFor(address);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
if (!initiallyConnected && !this.#sessions.maybeSessionFor(address) && !fullDiscoveryRunning) {
|
|
333
|
+
// When we know that we have no operational address, do a 10s discovery initially, else we use the last known address
|
|
334
|
+
const discoveryType =
|
|
335
|
+
this.#getLastOperationalAddress(address) === undefined
|
|
336
|
+
? NodeDiscoveryType.TimedDiscovery
|
|
337
|
+
: NodeDiscoveryType.None;
|
|
320
338
|
// We got an uninitialized node, so do the first connection as usual
|
|
321
339
|
await this.#ensureConnection(address, {
|
|
322
|
-
discoveryOptions: {
|
|
340
|
+
discoveryOptions: {
|
|
341
|
+
discoveryType,
|
|
342
|
+
timeout:
|
|
343
|
+
discoveryType === NodeDiscoveryType.TimedDiscovery
|
|
344
|
+
? RETRANSMISSION_DISCOVERY_TIMEOUT
|
|
345
|
+
: undefined,
|
|
346
|
+
},
|
|
323
347
|
caseAuthenticatedTags,
|
|
324
348
|
});
|
|
325
|
-
initiallyConnected = true; // We only do this connection once, rest is handled in following code
|
|
349
|
+
initiallyConnected = true; // We only do this connection once, the rest is handled in the following code
|
|
326
350
|
if (this.#sessions.maybeSessionFor(address)) {
|
|
327
351
|
return;
|
|
328
352
|
}
|
|
329
353
|
}
|
|
330
354
|
|
|
331
|
-
if (
|
|
355
|
+
if (
|
|
356
|
+
!this.#sessions.maybeSessionFor(address) &&
|
|
357
|
+
discoveryOptions?.discoveryType !== NodeDiscoveryType.FullDiscovery &&
|
|
358
|
+
(!peer.activeDiscovery || peer.activeDiscovery.type === NodeDiscoveryType.FullDiscovery) // The above value might be outdated
|
|
359
|
+
) {
|
|
332
360
|
throw new RetransmissionLimitReachedError(`Device ${PeerAddress(address)} is unreachable`);
|
|
333
361
|
}
|
|
334
362
|
|
|
335
363
|
// Close all sessions
|
|
336
|
-
await this.#sessions.handlePeerLoss(address);
|
|
364
|
+
await this.#sessions.handlePeerLoss(address, asOf);
|
|
365
|
+
|
|
366
|
+
if (this.#sessions.maybeSessionFor(address)) {
|
|
367
|
+
// Ok, it seems we got a new session after provided Timestamp, so use this
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
337
370
|
|
|
338
371
|
// Enrich discoveryData with data from the node store when not provided
|
|
339
372
|
const { discoveryData } = discoveryOptions ?? {
|
|
340
|
-
discoveryData:
|
|
373
|
+
discoveryData: peer.descriptor.discoveryData,
|
|
341
374
|
};
|
|
342
|
-
// Try to use first result for one last try before we need to reconnect
|
|
375
|
+
// Try to use the first result for one last try before we need to reconnect
|
|
343
376
|
const operationalAddress = this.#knownOperationalAddressFor(address, true);
|
|
344
377
|
if (operationalAddress === undefined) {
|
|
345
378
|
logger.info(
|
|
@@ -349,7 +382,7 @@ export class PeerSet implements ImmutableSet<Peer>, ObservableSet<Peer> {
|
|
|
349
382
|
throw new RetransmissionLimitReachedError(`No operational address found for ${PeerAddress(address)}`);
|
|
350
383
|
}
|
|
351
384
|
|
|
352
|
-
// Try to reconnect to last known address
|
|
385
|
+
// Try to reconnect to the last known address
|
|
353
386
|
if (
|
|
354
387
|
(await this.#reconnectKnownAddress(address, operationalAddress, discoveryData, {
|
|
355
388
|
expectedProcessingTime: Seconds(2),
|
|
@@ -376,8 +409,6 @@ export class PeerSet implements ImmutableSet<Peer>, ObservableSet<Peer> {
|
|
|
376
409
|
for (const peer of this.#peers) {
|
|
377
410
|
await peer.close();
|
|
378
411
|
}
|
|
379
|
-
|
|
380
|
-
this.#interactionQueue.close();
|
|
381
412
|
}
|
|
382
413
|
|
|
383
414
|
/**
|
|
@@ -755,7 +786,9 @@ export class PeerSet implements ImmutableSet<Peer>, ObservableSet<Peer> {
|
|
|
755
786
|
peer = new Peer({ address, dataStore: await this.#store.createNodeStore(address) }, this.#peerContext);
|
|
756
787
|
this.#peers.add(peer);
|
|
757
788
|
}
|
|
758
|
-
|
|
789
|
+
if (operationalServerAddress !== undefined) {
|
|
790
|
+
peer.descriptor.operationalAddress = operationalServerAddress;
|
|
791
|
+
}
|
|
759
792
|
if (discoveryData !== undefined) {
|
|
760
793
|
peer.descriptor.discoveryData = {
|
|
761
794
|
...peer.descriptor.discoveryData,
|
|
@@ -78,7 +78,7 @@ export namespace PhysicalDeviceProperties {
|
|
|
78
78
|
}
|
|
79
79
|
if (maxIntervalCeiling < defaultCeiling) {
|
|
80
80
|
logger.debug(
|
|
81
|
-
`${description}: maxIntervalCeilingSeconds ideally is ${defaultCeiling}
|
|
81
|
+
`${description}: maxIntervalCeilingSeconds ideally is ${Duration.format(defaultCeiling)} instead of ${Duration.format(maxIntervalCeiling)} due to device type`,
|
|
82
82
|
);
|
|
83
83
|
}
|
|
84
84
|
|
package/src/peer/index.ts
CHANGED
|
@@ -25,7 +25,6 @@ import { SecureChannelProtocol } from "#securechannel/SecureChannelProtocol.js";
|
|
|
25
25
|
import { PaseServer } from "#session/pase/PaseServer.js";
|
|
26
26
|
import { SessionManager } from "#session/SessionManager.js";
|
|
27
27
|
import { CommissioningOptions, STANDARD_COMMISSIONING_TIMEOUT, StatusCode, StatusResponseError } from "#types";
|
|
28
|
-
import type { ControllerCommissioner } from "../peer/ControllerCommissioner.js";
|
|
29
28
|
import { DeviceAdvertiser } from "./DeviceAdvertiser.js";
|
|
30
29
|
|
|
31
30
|
const logger = Logger.get("DeviceCommissioner");
|
|
@@ -245,9 +245,9 @@ export class ExchangeManager {
|
|
|
245
245
|
message.payloadHeader.messageType,
|
|
246
246
|
);
|
|
247
247
|
const messageDiagnostics = Diagnostic.dict({
|
|
248
|
-
message: messageId,
|
|
248
|
+
message: hex.fixed(messageId, 8),
|
|
249
249
|
protocol: message.payloadHeader.protocolId,
|
|
250
|
-
exId: message.payloadHeader.exchangeId,
|
|
250
|
+
exId: hex.word(message.payloadHeader.exchangeId),
|
|
251
251
|
via: channel.name,
|
|
252
252
|
});
|
|
253
253
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { Diagnostic, Duration, Observable } from "#general";
|
|
6
|
+
import { Diagnostic, Duration, Observable, Timestamp } from "#general";
|
|
7
7
|
import { PeerAddress } from "#peer/PeerAddress.js";
|
|
8
8
|
import { ExchangeManager } from "#protocol/ExchangeManager.js";
|
|
9
9
|
import { DEFAULT_EXPECTED_PROCESSING_TIME } from "#protocol/MessageChannel.js";
|
|
@@ -37,7 +37,7 @@ export abstract class ExchangeProvider {
|
|
|
37
37
|
|
|
38
38
|
abstract maximumPeerResponseTime(expectedProcessingTime?: Duration): Duration;
|
|
39
39
|
abstract initiateExchange(): Promise<MessageExchange>;
|
|
40
|
-
abstract reconnectChannel(): Promise<boolean>;
|
|
40
|
+
abstract reconnectChannel(options: { asOf?: Timestamp; resetInitialState?: boolean }): Promise<boolean>;
|
|
41
41
|
abstract session: Session;
|
|
42
42
|
|
|
43
43
|
get channelType() {
|
|
@@ -80,14 +80,14 @@ export class DedicatedChannelExchangeProvider extends ExchangeProvider {
|
|
|
80
80
|
export class ReconnectableExchangeProvider extends ExchangeProvider {
|
|
81
81
|
readonly supportsReconnect = true;
|
|
82
82
|
readonly #address: PeerAddress;
|
|
83
|
-
readonly #reconnectChannelFunc: () => Promise<void>;
|
|
83
|
+
readonly #reconnectChannelFunc: (options?: { asOf?: Timestamp; resetInitialState?: boolean }) => Promise<void>;
|
|
84
84
|
readonly #channelUpdated = Observable<[void]>();
|
|
85
85
|
|
|
86
86
|
constructor(
|
|
87
87
|
exchangeManager: ExchangeManager,
|
|
88
88
|
protected readonly sessions: SessionManager,
|
|
89
89
|
address: PeerAddress,
|
|
90
|
-
reconnectChannelFunc: () => Promise<void>,
|
|
90
|
+
reconnectChannelFunc: (options?: { asOf?: Timestamp; resetInitialState?: boolean }) => Promise<void>,
|
|
91
91
|
) {
|
|
92
92
|
super(exchangeManager);
|
|
93
93
|
this.#address = address;
|
|
@@ -118,9 +118,11 @@ export class ReconnectableExchangeProvider extends ExchangeProvider {
|
|
|
118
118
|
return this.exchangeManager.initiateExchange(this.#address, INTERACTION_PROTOCOL_ID);
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
-
async reconnectChannel() {
|
|
122
|
-
if (this.#reconnectChannelFunc === undefined)
|
|
123
|
-
|
|
121
|
+
async reconnectChannel(options: { asOf?: Timestamp; resetInitialState?: boolean } = {}) {
|
|
122
|
+
if (this.#reconnectChannelFunc === undefined) {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
await this.#reconnectChannelFunc(options);
|
|
124
126
|
return true;
|
|
125
127
|
}
|
|
126
128
|
|
|
@@ -277,9 +277,10 @@ export class NodeSession extends SecureSession {
|
|
|
277
277
|
await this.handlePeerLoss();
|
|
278
278
|
}
|
|
279
279
|
|
|
280
|
-
async handlePeerLoss(currentExchange?: MessageExchange) {
|
|
280
|
+
async handlePeerLoss(data: { currentExchange?: MessageExchange; keepSubscriptions?: boolean } = {}) {
|
|
281
281
|
this.#isPeerLost = true;
|
|
282
|
-
|
|
282
|
+
const { currentExchange, keepSubscriptions } = data;
|
|
283
|
+
await this.initiateForceClose(currentExchange, keepSubscriptions);
|
|
283
284
|
}
|
|
284
285
|
|
|
285
286
|
get isPeerLost() {
|
|
@@ -311,9 +312,9 @@ export class NodeSession extends SecureSession {
|
|
|
311
312
|
});
|
|
312
313
|
}
|
|
313
314
|
|
|
314
|
-
override async initiateForceClose(currentExchange?: MessageExchange) {
|
|
315
|
+
override async initiateForceClose(currentExchange?: MessageExchange, keepSubscriptions = false) {
|
|
315
316
|
this.#isPeerLost = true;
|
|
316
|
-
await super.initiateForceClose(currentExchange);
|
|
317
|
+
await super.initiateForceClose(currentExchange, keepSubscriptions);
|
|
317
318
|
}
|
|
318
319
|
|
|
319
320
|
override addExchange(exchange: MessageExchange) {
|
package/src/session/Session.ts
CHANGED
|
@@ -254,14 +254,18 @@ export abstract class Session {
|
|
|
254
254
|
/**
|
|
255
255
|
* Force-close the session.
|
|
256
256
|
*
|
|
257
|
-
* This terminates subscriptions and exchanges without notifying peers. It places the session in a
|
|
258
|
-
* so no further exchanges are accepted.
|
|
257
|
+
* This terminates (potentially) subscriptions and exchanges without notifying peers. It places the session in a
|
|
258
|
+
* closing state so no further exchanges are accepted.
|
|
259
259
|
*
|
|
260
260
|
* @param except an exchange that should not be forced close; this allows the current exchange to remain open
|
|
261
|
+
* @param keepSubscriptions whether to keep the subscriptions open after force-closing the session.
|
|
262
|
+
* TODO refactor when moving subscriptions away from sessions
|
|
261
263
|
*/
|
|
262
|
-
async initiateForceClose(except?: MessageExchange) {
|
|
264
|
+
async initiateForceClose(except?: MessageExchange, keepSubscriptions = false) {
|
|
263
265
|
await this.initiateClose(async () => {
|
|
264
|
-
|
|
266
|
+
if (!keepSubscriptions) {
|
|
267
|
+
await this.closeSubscriptions();
|
|
268
|
+
}
|
|
265
269
|
for (const exchange of this.#exchanges) {
|
|
266
270
|
if (exchange === except) {
|
|
267
271
|
continue;
|
|
@@ -26,6 +26,7 @@ import {
|
|
|
26
26
|
ObserverGroup,
|
|
27
27
|
StorageContext,
|
|
28
28
|
StorageManager,
|
|
29
|
+
Time,
|
|
29
30
|
Timestamp,
|
|
30
31
|
toHex,
|
|
31
32
|
} from "#general";
|
|
@@ -424,9 +425,25 @@ export class SessionManager {
|
|
|
424
425
|
return this.#sessions.filter(session => session.fabric?.fabricIndex === fabricIndex);
|
|
425
426
|
}
|
|
426
427
|
|
|
427
|
-
|
|
428
|
+
/**
|
|
429
|
+
* Removes all Peer sessions but keeps subscriptions intact because they could be refreshed on restart when the
|
|
430
|
+
* device supports persistent subscriptions.
|
|
431
|
+
*/
|
|
432
|
+
handlePeerShutdown(address: PeerAddress, asOf?: Timestamp) {
|
|
433
|
+
return this.#handlePeerLoss({ address, asOf: asOf ?? Time.nowMs, keepSubscriptions: true });
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
/**
|
|
437
|
+
* Removes all Peer sessions and closes subscriptions.
|
|
438
|
+
*/
|
|
439
|
+
handlePeerLoss(address: PeerAddress, asOf?: Timestamp) {
|
|
440
|
+
return this.#handlePeerLoss({ address, asOf: asOf ?? Time.nowMs });
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
async #handlePeerLoss(options: { address: PeerAddress; asOf?: Timestamp; keepSubscriptions?: boolean }) {
|
|
428
444
|
await this.#construction;
|
|
429
445
|
|
|
446
|
+
const { address, asOf, keepSubscriptions } = options;
|
|
430
447
|
for (const session of this.#sessions) {
|
|
431
448
|
if (!session.peerIs(address)) {
|
|
432
449
|
continue;
|
|
@@ -436,7 +453,7 @@ export class SessionManager {
|
|
|
436
453
|
continue;
|
|
437
454
|
}
|
|
438
455
|
|
|
439
|
-
await session.handlePeerLoss();
|
|
456
|
+
await session.handlePeerLoss({ keepSubscriptions });
|
|
440
457
|
}
|
|
441
458
|
}
|
|
442
459
|
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
import { Attribute, AttributeId, ClusterId, EndpointNumber, TlvSchema } from "#types";
|
|
7
|
-
import { InteractionClient } from "../../interaction/InteractionClient.js";
|
|
8
|
-
/**
|
|
9
|
-
* Factory function to create an AttributeClient for a given attribute.
|
|
10
|
-
*/
|
|
11
|
-
export declare function createAttributeClient<T>(attribute: Attribute<T, any>, name: string, endpointId: EndpointNumber | undefined, clusterId: ClusterId, interactionClient: InteractionClient, present?: boolean): AttributeClient<T>;
|
|
12
|
-
/**
|
|
13
|
-
* General class for AttributeClients
|
|
14
|
-
*/
|
|
15
|
-
export declare class AttributeClient<T = any> {
|
|
16
|
-
#private;
|
|
17
|
-
readonly attribute: Attribute<T, any>;
|
|
18
|
-
readonly name: string;
|
|
19
|
-
readonly endpointId: EndpointNumber | undefined;
|
|
20
|
-
readonly clusterId: ClusterId;
|
|
21
|
-
protected readonly schema: TlvSchema<any>;
|
|
22
|
-
readonly id: AttributeId;
|
|
23
|
-
constructor(attribute: Attribute<T, any>, name: string, endpointId: EndpointNumber | undefined, clusterId: ClusterId, interactionClient: InteractionClient);
|
|
24
|
-
/**
|
|
25
|
-
* Set the value of the attribute. When dataVersion parameter is provided the value is only set when the
|
|
26
|
-
* cluster dataVersion of the server matches. If it does not match it is rejected with an Error.
|
|
27
|
-
*/
|
|
28
|
-
set(value: T, dataVersion?: number): Promise<void>;
|
|
29
|
-
get fabricScoped(): boolean;
|
|
30
|
-
getLocal(): T | undefined;
|
|
31
|
-
/**
|
|
32
|
-
* Get the value of the attribute. Fabric scoped reads are always done with the remote.
|
|
33
|
-
* The `requestFromRemote` parameter allowed to force or prevent remote reads:
|
|
34
|
-
* - `true` forces a remote read
|
|
35
|
-
* - `false` forces a local read, return undefined if no value is available
|
|
36
|
-
* - `undefined` returns local values if available or if the read is fabric filtered, otherwise remote read
|
|
37
|
-
*/
|
|
38
|
-
get(requestFromRemote?: boolean, isFabricFiltered?: boolean): Promise<T | undefined>;
|
|
39
|
-
/**
|
|
40
|
-
* Get the value with version of the attribute. Fabric scoped reads are always done with the remote.
|
|
41
|
-
* The `requestFromRemote` parameter allowed to force or prevent remote reads:
|
|
42
|
-
* - `true` forces a remote read
|
|
43
|
-
* - `false` forces a local read, return undefined if no value is available
|
|
44
|
-
* - `undefined` returns local values if available or if the read is fabric filtered, otherwise remote read
|
|
45
|
-
*/
|
|
46
|
-
getWithVersion(requestFromRemote?: boolean, isFabricFiltered?: boolean): Promise<{
|
|
47
|
-
value: T;
|
|
48
|
-
version: number;
|
|
49
|
-
} | undefined>;
|
|
50
|
-
/** Subscribe to the attribute. */
|
|
51
|
-
subscribe(minIntervalFloorSeconds: number, maxIntervalCeilingSeconds: number, knownDataVersion?: number, isFabricFiltered?: boolean): Promise<{
|
|
52
|
-
maxInterval: number;
|
|
53
|
-
}>;
|
|
54
|
-
/**
|
|
55
|
-
* Update the value of the attribute. Just internally used!
|
|
56
|
-
* @private
|
|
57
|
-
*/
|
|
58
|
-
update(value: T): void;
|
|
59
|
-
/** Add a listener to the attribute. */
|
|
60
|
-
addListener(listener: (newValue: T) => void): void;
|
|
61
|
-
/** Remove a listener from the attribute. */
|
|
62
|
-
removeListener(listener: (newValue: T) => void): void;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Special AttributeClient class to allow identifying attributes that are supported because reported by the Devices.
|
|
66
|
-
*/
|
|
67
|
-
export declare class SupportedAttributeClient<T> extends AttributeClient<T> {
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Special AttributeClient class to allow identifying attributes that are supported because reported by the Devices,
|
|
71
|
-
* but the contained attribute is unknown.
|
|
72
|
-
*/
|
|
73
|
-
export declare class UnknownSupportedAttributeClient extends SupportedAttributeClient<any> {
|
|
74
|
-
}
|
|
75
|
-
//# sourceMappingURL=AttributeClient.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AttributeClient.d.ts","sourceRoot":"","sources":["../../../../src/cluster/client/AttributeClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,SAAS,EAAkB,WAAW,EAAE,SAAS,EAAE,cAAc,EAAe,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAE3E;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EACnC,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAC5B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,cAAc,GAAG,SAAS,EACtC,SAAS,EAAE,SAAS,EACpB,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,UAAQ,GAChB,eAAe,CAAC,CAAC,CAAC,CAQpB;AAED;;GAEG;AACH,qBAAa,eAAe,CAAC,CAAC,GAAG,GAAG;;IAU5B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,UAAU,EAAE,cAAc,GAAG,SAAS;IAC/C,QAAQ,CAAC,SAAS,EAAE,SAAS;IATjC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;IAE1C,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;gBAIZ,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAC5B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,cAAc,GAAG,SAAS,EACtC,SAAS,EAAE,SAAS,EAC7B,iBAAiB,EAAE,iBAAiB;IAWxC;;;OAGG;IACG,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,WAAW,CAAC,EAAE,MAAM;IA4CxC,IAAI,YAAY,YAEf;IAED,QAAQ;IAWR;;;;;;OAMG;IACG,GAAG,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,gBAAgB,UAAO;IAkB9D;;;;;;OAMG;IACG,cAAc,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,gBAAgB,UAAO;;;;IAkBzE,kCAAkC;IAC5B,SAAS,CACX,uBAAuB,EAAE,MAAM,EAC/B,yBAAyB,EAAE,MAAM,EACjC,gBAAgB,CAAC,EAAE,MAAM,EACzB,gBAAgB,UAAO;;;IAoB3B;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,CAAC;IAIf,uCAAuC;IACvC,WAAW,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI;IAI3C,4CAA4C;IAC5C,cAAc,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI;CAMjD;AAED;;GAEG;AACH,qBAAa,wBAAwB,CAAC,CAAC,CAAE,SAAQ,eAAe,CAAC,CAAC,CAAC;CAAG;AAEtE;;;GAGG;AACH,qBAAa,+BAAgC,SAAQ,wBAAwB,CAAC,GAAG,CAAC;CAAG"}
|