@matter/node 0.16.0-alpha.0-20250817-1b000357c → 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/behavior/Behavior.d.ts +1 -1
- package/dist/cjs/behavior/Behavior.d.ts.map +1 -1
- package/dist/cjs/behavior/Events.js +1 -1
- package/dist/cjs/behavior/Events.js.map +1 -1
- package/dist/cjs/behavior/Transitions.d.ts +8 -8
- package/dist/cjs/behavior/Transitions.d.ts.map +1 -1
- package/dist/cjs/behavior/Transitions.js +8 -8
- package/dist/cjs/behavior/Transitions.js.map +1 -1
- package/dist/cjs/behavior/cluster/FabricScopedDataHandler.js +1 -1
- package/dist/cjs/behavior/cluster/FabricScopedDataHandler.js.map +1 -1
- package/dist/cjs/behavior/internal/BehaviorBacking.d.ts.map +1 -1
- package/dist/cjs/behavior/internal/BehaviorBacking.js +7 -2
- package/dist/cjs/behavior/internal/BehaviorBacking.js.map +1 -1
- package/dist/cjs/behavior/internal/Reactors.js +2 -2
- package/dist/cjs/behavior/internal/Reactors.js.map +1 -1
- package/dist/cjs/behavior/state/managed/values/PrimitiveManager.d.ts +3 -4
- package/dist/cjs/behavior/state/managed/values/PrimitiveManager.d.ts.map +1 -1
- package/dist/cjs/behavior/state/managed/values/PrimitiveManager.js.map +1 -1
- package/dist/cjs/behavior/state/managed/values/ValuePatcher.js.map +1 -1
- package/dist/cjs/behavior/state/migrations/Migration.d.ts +20 -0
- package/dist/cjs/behavior/state/migrations/Migration.d.ts.map +1 -0
- package/dist/cjs/behavior/state/migrations/Migration.js +43 -0
- package/dist/cjs/behavior/state/migrations/Migration.js.map +6 -0
- package/dist/cjs/behavior/{system/subscription → state/migrations}/index.d.ts +1 -1
- package/dist/cjs/behavior/state/migrations/index.d.ts.map +1 -0
- package/dist/{esm/behavior/system/subscription → cjs/behavior/state/migrations}/index.js +1 -1
- package/dist/cjs/behavior/state/migrations/index.js.map +6 -0
- package/dist/cjs/behavior/state/validation/ValueValidator.d.ts.map +1 -1
- package/dist/cjs/behavior/state/validation/ValueValidator.js +1 -0
- package/dist/cjs/behavior/state/validation/ValueValidator.js.map +1 -1
- package/dist/cjs/behavior/supervision/RootSupervisor.js +2 -2
- package/dist/cjs/behavior/supervision/RootSupervisor.js.map +1 -1
- package/dist/cjs/behavior/supervision/ValueSupervisor.d.ts +1 -1
- package/dist/cjs/behavior/supervision/ValueSupervisor.d.ts.map +1 -1
- package/dist/cjs/behavior/system/commissioning/CommissioningClient.d.ts +7 -7
- package/dist/cjs/behavior/system/commissioning/CommissioningClient.d.ts.map +1 -1
- package/dist/cjs/behavior/system/commissioning/CommissioningClient.js +6 -6
- package/dist/cjs/behavior/system/commissioning/CommissioningClient.js.map +1 -1
- package/dist/cjs/behavior/system/commissioning/RemoteDescriptor.d.ts.map +1 -1
- package/dist/cjs/behavior/system/commissioning/RemoteDescriptor.js +15 -14
- package/dist/cjs/behavior/system/commissioning/RemoteDescriptor.js.map +1 -1
- package/dist/cjs/behavior/system/controller/discovery/ContinuousDiscovery.js +1 -1
- package/dist/cjs/behavior/system/controller/discovery/ContinuousDiscovery.js.map +1 -1
- package/dist/cjs/behavior/system/controller/discovery/Discovery.d.ts +2 -2
- package/dist/cjs/behavior/system/controller/discovery/Discovery.d.ts.map +1 -1
- package/dist/cjs/behavior/system/controller/discovery/Discovery.js +2 -2
- package/dist/cjs/behavior/system/controller/discovery/Discovery.js.map +1 -1
- package/dist/cjs/behavior/system/network/NetworkClient.d.ts.map +1 -1
- package/dist/cjs/behavior/system/network/NetworkClient.js +2 -2
- package/dist/cjs/behavior/system/network/NetworkClient.js.map +1 -1
- package/dist/cjs/behavior/system/network/ServerNetworkRuntime.js +2 -2
- package/dist/cjs/behavior/system/network/ServerNetworkRuntime.js.map +1 -1
- package/dist/cjs/behavior/system/{subscription/SubscriptionBehavior.d.ts → subscriptions/SubscriptionsServer.d.ts} +6 -6
- package/dist/cjs/behavior/system/subscriptions/SubscriptionsServer.d.ts.map +1 -0
- package/dist/cjs/behavior/system/{subscription/SubscriptionBehavior.js → subscriptions/SubscriptionsServer.js} +22 -22
- package/dist/cjs/behavior/system/subscriptions/SubscriptionsServer.js.map +6 -0
- package/dist/{esm/behavior/system/subscription → cjs/behavior/system/subscriptions}/index.d.ts +1 -1
- package/dist/cjs/behavior/system/subscriptions/index.d.ts.map +1 -0
- package/dist/cjs/behavior/system/{subscription → subscriptions}/index.js +3 -3
- package/dist/cjs/behavior/system/subscriptions/index.js.map +6 -0
- package/dist/cjs/behaviors/administrator-commissioning/AdministratorCommissioningServer.d.ts +3 -3
- package/dist/cjs/behaviors/administrator-commissioning/AdministratorCommissioningServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/administrator-commissioning/AdministratorCommissioningServer.js +13 -11
- package/dist/cjs/behaviors/administrator-commissioning/AdministratorCommissioningServer.js.map +1 -1
- package/dist/cjs/behaviors/color-control/ColorControlServer.d.ts +2 -2
- package/dist/cjs/behaviors/color-control/ColorControlServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/color-control/ColorControlServer.js +4 -4
- package/dist/cjs/behaviors/color-control/ColorControlServer.js.map +1 -1
- package/dist/cjs/behaviors/general-commissioning/GeneralCommissioningServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/general-commissioning/GeneralCommissioningServer.js +3 -3
- package/dist/cjs/behaviors/general-commissioning/GeneralCommissioningServer.js.map +1 -1
- package/dist/cjs/behaviors/general-diagnostics/GeneralDiagnosticsServer.d.ts +4 -4
- package/dist/cjs/behaviors/general-diagnostics/GeneralDiagnosticsServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/general-diagnostics/GeneralDiagnosticsServer.js +17 -16
- package/dist/cjs/behaviors/general-diagnostics/GeneralDiagnosticsServer.js.map +1 -1
- package/dist/cjs/behaviors/identify/IdentifyServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/identify/IdentifyServer.js +1 -1
- package/dist/cjs/behaviors/identify/IdentifyServer.js.map +1 -1
- package/dist/cjs/behaviors/level-control/LevelControlServer.d.ts +1 -1
- package/dist/cjs/behaviors/level-control/LevelControlServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/level-control/LevelControlServer.js +3 -3
- package/dist/cjs/behaviors/level-control/LevelControlServer.js.map +1 -1
- package/dist/cjs/behaviors/on-off/OnOffServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/on-off/OnOffServer.js +2 -2
- package/dist/cjs/behaviors/on-off/OnOffServer.js.map +1 -1
- package/dist/cjs/behaviors/power-source/PowerSourceServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/power-source/PowerSourceServer.js +2 -1
- package/dist/cjs/behaviors/power-source/PowerSourceServer.js.map +1 -1
- package/dist/cjs/behaviors/switch/SwitchServer.d.ts +4 -4
- package/dist/cjs/behaviors/switch/SwitchServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/switch/SwitchServer.js +8 -6
- package/dist/cjs/behaviors/switch/SwitchServer.js.map +1 -1
- package/dist/cjs/endpoint/Endpoint.d.ts.map +1 -1
- package/dist/cjs/endpoint/Endpoint.js +11 -1
- package/dist/cjs/endpoint/Endpoint.js.map +1 -1
- package/dist/cjs/endpoint/properties/SupportedBehaviors.d.ts +1 -1
- package/dist/cjs/endpoint/properties/SupportedBehaviors.d.ts.map +1 -1
- package/dist/cjs/node/ServerNode.d.ts +2 -2
- package/dist/cjs/node/ServerNode.d.ts.map +1 -1
- package/dist/cjs/node/ServerNode.js +2 -2
- package/dist/cjs/node/ServerNode.js.map +1 -1
- package/dist/cjs/node/client/ClientNodes.js +4 -4
- package/dist/cjs/node/client/ClientNodes.js.map +1 -1
- package/dist/cjs/node/client/NodePeerAddressStore.d.ts.map +1 -1
- package/dist/cjs/node/client/NodePeerAddressStore.js +2 -1
- package/dist/cjs/node/client/NodePeerAddressStore.js.map +2 -2
- package/dist/cjs/node/server/InteractionServer.d.ts +6 -6
- package/dist/cjs/node/server/InteractionServer.d.ts.map +1 -1
- package/dist/cjs/node/server/InteractionServer.js +12 -11
- package/dist/cjs/node/server/InteractionServer.js.map +1 -1
- package/dist/cjs/node/server/ProtocolService.js +2 -2
- package/dist/cjs/node/server/ProtocolService.js.map +1 -1
- package/dist/cjs/node/server/ServerSubscription.d.ts +18 -17
- package/dist/cjs/node/server/ServerSubscription.d.ts.map +1 -1
- package/dist/cjs/node/server/ServerSubscription.js +61 -54
- package/dist/cjs/node/server/ServerSubscription.js.map +1 -1
- package/dist/esm/behavior/Behavior.d.ts +1 -1
- package/dist/esm/behavior/Behavior.d.ts.map +1 -1
- package/dist/esm/behavior/Events.js +1 -1
- package/dist/esm/behavior/Events.js.map +1 -1
- package/dist/esm/behavior/Transitions.d.ts +8 -8
- package/dist/esm/behavior/Transitions.d.ts.map +1 -1
- package/dist/esm/behavior/Transitions.js +12 -9
- package/dist/esm/behavior/Transitions.js.map +1 -1
- package/dist/esm/behavior/cluster/FabricScopedDataHandler.js +2 -2
- package/dist/esm/behavior/cluster/FabricScopedDataHandler.js.map +1 -1
- package/dist/esm/behavior/internal/BehaviorBacking.d.ts.map +1 -1
- package/dist/esm/behavior/internal/BehaviorBacking.js +7 -2
- package/dist/esm/behavior/internal/BehaviorBacking.js.map +1 -1
- package/dist/esm/behavior/internal/Reactors.js +2 -2
- package/dist/esm/behavior/internal/Reactors.js.map +1 -1
- package/dist/esm/behavior/state/managed/values/PrimitiveManager.d.ts +3 -4
- package/dist/esm/behavior/state/managed/values/PrimitiveManager.d.ts.map +1 -1
- package/dist/esm/behavior/state/managed/values/PrimitiveManager.js.map +1 -1
- package/dist/esm/behavior/state/managed/values/ValuePatcher.js.map +1 -1
- package/dist/esm/behavior/state/migrations/Migration.d.ts +20 -0
- package/dist/esm/behavior/state/migrations/Migration.d.ts.map +1 -0
- package/dist/esm/behavior/state/migrations/Migration.js +23 -0
- package/dist/esm/behavior/state/migrations/Migration.js.map +6 -0
- package/dist/esm/behavior/state/migrations/index.d.ts +7 -0
- package/dist/esm/behavior/state/migrations/index.d.ts.map +1 -0
- package/dist/esm/behavior/state/migrations/index.js +6 -0
- package/dist/esm/behavior/state/migrations/index.js.map +6 -0
- package/dist/esm/behavior/state/validation/ValueValidator.d.ts.map +1 -1
- package/dist/esm/behavior/state/validation/ValueValidator.js +1 -0
- package/dist/esm/behavior/state/validation/ValueValidator.js.map +1 -1
- package/dist/esm/behavior/supervision/RootSupervisor.js +2 -2
- package/dist/esm/behavior/supervision/RootSupervisor.js.map +1 -1
- package/dist/esm/behavior/supervision/ValueSupervisor.d.ts +1 -1
- package/dist/esm/behavior/supervision/ValueSupervisor.d.ts.map +1 -1
- package/dist/esm/behavior/system/commissioning/CommissioningClient.d.ts +7 -7
- package/dist/esm/behavior/system/commissioning/CommissioningClient.d.ts.map +1 -1
- package/dist/esm/behavior/system/commissioning/CommissioningClient.js +13 -7
- package/dist/esm/behavior/system/commissioning/CommissioningClient.js.map +1 -1
- package/dist/esm/behavior/system/commissioning/RemoteDescriptor.d.ts.map +1 -1
- package/dist/esm/behavior/system/commissioning/RemoteDescriptor.js +15 -14
- package/dist/esm/behavior/system/commissioning/RemoteDescriptor.js.map +1 -1
- package/dist/esm/behavior/system/controller/discovery/ContinuousDiscovery.js +1 -1
- package/dist/esm/behavior/system/controller/discovery/ContinuousDiscovery.js.map +1 -1
- package/dist/esm/behavior/system/controller/discovery/Discovery.d.ts +2 -2
- package/dist/esm/behavior/system/controller/discovery/Discovery.d.ts.map +1 -1
- package/dist/esm/behavior/system/controller/discovery/Discovery.js +2 -2
- package/dist/esm/behavior/system/controller/discovery/Discovery.js.map +1 -1
- package/dist/esm/behavior/system/network/NetworkClient.d.ts.map +1 -1
- package/dist/esm/behavior/system/network/NetworkClient.js +3 -3
- package/dist/esm/behavior/system/network/NetworkClient.js.map +1 -1
- package/dist/esm/behavior/system/network/ServerNetworkRuntime.js +2 -2
- package/dist/esm/behavior/system/network/ServerNetworkRuntime.js.map +1 -1
- package/dist/esm/behavior/system/{subscription/SubscriptionBehavior.d.ts → subscriptions/SubscriptionsServer.d.ts} +6 -6
- package/dist/esm/behavior/system/subscriptions/SubscriptionsServer.d.ts.map +1 -0
- package/dist/esm/behavior/system/{subscription/SubscriptionBehavior.js → subscriptions/SubscriptionsServer.js} +20 -20
- package/dist/esm/behavior/system/subscriptions/SubscriptionsServer.js.map +6 -0
- package/dist/esm/behavior/system/subscriptions/index.d.ts +7 -0
- package/dist/esm/behavior/system/subscriptions/index.d.ts.map +1 -0
- package/dist/esm/behavior/system/subscriptions/index.js +7 -0
- package/dist/esm/behavior/system/{subscription → subscriptions}/index.js.map +1 -1
- package/dist/esm/behaviors/administrator-commissioning/AdministratorCommissioningServer.d.ts +3 -3
- package/dist/esm/behaviors/administrator-commissioning/AdministratorCommissioningServer.d.ts.map +1 -1
- package/dist/esm/behaviors/administrator-commissioning/AdministratorCommissioningServer.js +16 -14
- package/dist/esm/behaviors/administrator-commissioning/AdministratorCommissioningServer.js.map +1 -1
- package/dist/esm/behaviors/color-control/ColorControlServer.d.ts +2 -2
- package/dist/esm/behaviors/color-control/ColorControlServer.d.ts.map +1 -1
- package/dist/esm/behaviors/color-control/ColorControlServer.js +6 -5
- package/dist/esm/behaviors/color-control/ColorControlServer.js.map +1 -1
- package/dist/esm/behaviors/general-commissioning/GeneralCommissioningServer.d.ts.map +1 -1
- package/dist/esm/behaviors/general-commissioning/GeneralCommissioningServer.js +4 -4
- package/dist/esm/behaviors/general-commissioning/GeneralCommissioningServer.js.map +1 -1
- package/dist/esm/behaviors/general-diagnostics/GeneralDiagnosticsServer.d.ts +4 -4
- package/dist/esm/behaviors/general-diagnostics/GeneralDiagnosticsServer.d.ts.map +1 -1
- package/dist/esm/behaviors/general-diagnostics/GeneralDiagnosticsServer.js +29 -17
- package/dist/esm/behaviors/general-diagnostics/GeneralDiagnosticsServer.js.map +1 -1
- package/dist/esm/behaviors/identify/IdentifyServer.d.ts.map +1 -1
- package/dist/esm/behaviors/identify/IdentifyServer.js +2 -2
- package/dist/esm/behaviors/identify/IdentifyServer.js.map +1 -1
- package/dist/esm/behaviors/level-control/LevelControlServer.d.ts +1 -1
- package/dist/esm/behaviors/level-control/LevelControlServer.d.ts.map +1 -1
- package/dist/esm/behaviors/level-control/LevelControlServer.js +4 -4
- package/dist/esm/behaviors/level-control/LevelControlServer.js.map +1 -1
- package/dist/esm/behaviors/on-off/OnOffServer.d.ts.map +1 -1
- package/dist/esm/behaviors/on-off/OnOffServer.js +3 -3
- package/dist/esm/behaviors/on-off/OnOffServer.js.map +1 -1
- package/dist/esm/behaviors/power-source/PowerSourceServer.d.ts.map +1 -1
- package/dist/esm/behaviors/power-source/PowerSourceServer.js +2 -1
- package/dist/esm/behaviors/power-source/PowerSourceServer.js.map +1 -1
- package/dist/esm/behaviors/switch/SwitchServer.d.ts +4 -4
- package/dist/esm/behaviors/switch/SwitchServer.d.ts.map +1 -1
- package/dist/esm/behaviors/switch/SwitchServer.js +9 -7
- package/dist/esm/behaviors/switch/SwitchServer.js.map +1 -1
- package/dist/esm/endpoint/Endpoint.d.ts.map +1 -1
- package/dist/esm/endpoint/Endpoint.js +11 -1
- package/dist/esm/endpoint/Endpoint.js.map +1 -1
- package/dist/esm/endpoint/properties/SupportedBehaviors.d.ts +1 -1
- package/dist/esm/endpoint/properties/SupportedBehaviors.d.ts.map +1 -1
- package/dist/esm/node/ServerNode.d.ts +2 -2
- package/dist/esm/node/ServerNode.d.ts.map +1 -1
- package/dist/esm/node/ServerNode.js +2 -2
- package/dist/esm/node/ServerNode.js.map +1 -1
- package/dist/esm/node/client/ClientNodes.js +5 -5
- package/dist/esm/node/client/ClientNodes.js.map +1 -1
- package/dist/esm/node/client/NodePeerAddressStore.d.ts.map +1 -1
- package/dist/esm/node/client/NodePeerAddressStore.js +3 -2
- package/dist/esm/node/client/NodePeerAddressStore.js.map +2 -2
- package/dist/esm/node/server/InteractionServer.d.ts +6 -6
- package/dist/esm/node/server/InteractionServer.d.ts.map +1 -1
- package/dist/esm/node/server/InteractionServer.js +16 -12
- package/dist/esm/node/server/InteractionServer.js.map +1 -1
- package/dist/esm/node/server/ProtocolService.js +2 -2
- package/dist/esm/node/server/ProtocolService.js.map +1 -1
- package/dist/esm/node/server/ServerSubscription.d.ts +18 -17
- package/dist/esm/node/server/ServerSubscription.d.ts.map +1 -1
- package/dist/esm/node/server/ServerSubscription.js +75 -55
- package/dist/esm/node/server/ServerSubscription.js.map +1 -1
- package/package.json +7 -7
- package/src/behavior/Behavior.ts +1 -1
- package/src/behavior/Events.ts +1 -1
- package/src/behavior/Transitions.ts +17 -13
- package/src/behavior/cluster/FabricScopedDataHandler.ts +2 -2
- package/src/behavior/internal/BehaviorBacking.ts +9 -2
- package/src/behavior/state/managed/values/PrimitiveManager.ts +3 -4
- package/src/behavior/state/managed/values/ValuePatcher.ts +2 -2
- package/src/behavior/state/migrations/Migration.ts +34 -0
- package/src/behavior/{system/subscription → state/migrations}/index.ts +1 -1
- package/src/behavior/state/validation/ValueValidator.ts +1 -0
- package/src/behavior/supervision/ValueSupervisor.ts +1 -1
- package/src/behavior/system/commissioning/CommissioningClient.ts +20 -12
- package/src/behavior/system/commissioning/RemoteDescriptor.ts +15 -15
- package/src/behavior/system/controller/discovery/ContinuousDiscovery.ts +1 -1
- package/src/behavior/system/controller/discovery/Discovery.ts +4 -4
- package/src/behavior/system/network/NetworkClient.ts +3 -3
- package/src/behavior/system/network/ServerNetworkRuntime.ts +2 -2
- package/src/behavior/system/sessions/SessionsBehavior.ts +1 -1
- package/src/behavior/system/{subscription/SubscriptionBehavior.ts → subscriptions/SubscriptionsServer.ts} +17 -17
- package/src/behavior/system/subscriptions/index.ts +7 -0
- package/src/behaviors/administrator-commissioning/AdministratorCommissioningServer.ts +20 -16
- package/src/behaviors/color-control/ColorControlServer.ts +5 -4
- package/src/behaviors/general-commissioning/GeneralCommissioningServer.ts +4 -4
- package/src/behaviors/general-diagnostics/GeneralDiagnosticsServer.ts +38 -21
- package/src/behaviors/identify/IdentifyServer.ts +2 -2
- package/src/behaviors/level-control/LevelControlServer.ts +4 -4
- package/src/behaviors/on-off/OnOffServer.ts +3 -3
- package/src/behaviors/power-source/PowerSourceServer.ts +2 -1
- package/src/behaviors/switch/SwitchServer.ts +10 -7
- package/src/endpoint/Endpoint.ts +13 -1
- package/src/endpoint/properties/SupportedBehaviors.ts +1 -1
- package/src/node/ServerNode.ts +2 -2
- package/src/node/client/ClientNodes.ts +8 -8
- package/src/node/client/NodePeerAddressStore.ts +4 -2
- package/src/node/server/InteractionServer.ts +21 -15
- package/src/node/server/ServerSubscription.ts +86 -64
- package/dist/cjs/behavior/system/subscription/SubscriptionBehavior.d.ts.map +0 -1
- package/dist/cjs/behavior/system/subscription/SubscriptionBehavior.js.map +0 -6
- package/dist/cjs/behavior/system/subscription/index.d.ts.map +0 -1
- package/dist/cjs/behavior/system/subscription/index.js.map +0 -6
- package/dist/esm/behavior/system/subscription/SubscriptionBehavior.d.ts.map +0 -1
- package/dist/esm/behavior/system/subscription/SubscriptionBehavior.js.map +0 -6
- package/dist/esm/behavior/system/subscription/index.d.ts.map +0 -1
|
@@ -10,12 +10,16 @@ import {
|
|
|
10
10
|
addValueWithOverflow,
|
|
11
11
|
cropValueRange,
|
|
12
12
|
Diagnostic,
|
|
13
|
+
Duration,
|
|
13
14
|
ImplementationError,
|
|
14
15
|
Logger,
|
|
15
16
|
MaybePromise,
|
|
17
|
+
Millis,
|
|
16
18
|
ObserverGroup,
|
|
17
19
|
Time,
|
|
18
20
|
Timer,
|
|
21
|
+
Timespan,
|
|
22
|
+
Timestamp,
|
|
19
23
|
} from "#general";
|
|
20
24
|
import { Behavior } from "./Behavior.js";
|
|
21
25
|
import { ClusterEvents } from "./cluster/ClusterEvents.js";
|
|
@@ -170,7 +174,7 @@ export class Transitions<B extends Behavior> {
|
|
|
170
174
|
configuration: transition,
|
|
171
175
|
currentValue,
|
|
172
176
|
changePerMs: changePerS / 1000,
|
|
173
|
-
prevStepAt: Time.nowMs
|
|
177
|
+
prevStepAt: Timestamp(Time.nowMs - (this.#config.stepInterval ?? Transitions.DEFAULT_STEP_INTERVAL)),
|
|
174
178
|
distanceLeft,
|
|
175
179
|
};
|
|
176
180
|
|
|
@@ -244,7 +248,7 @@ export class Transitions<B extends Behavior> {
|
|
|
244
248
|
if (this.#timer === undefined) {
|
|
245
249
|
this.#timer = Time.getPeriodicTimer(
|
|
246
250
|
`transition-${this.#endpoint}-${this.#config.type.name}`,
|
|
247
|
-
this.#config.
|
|
251
|
+
this.#config.stepInterval ?? Transitions.DEFAULT_STEP_INTERVAL,
|
|
248
252
|
this.#step.bind(this),
|
|
249
253
|
);
|
|
250
254
|
|
|
@@ -357,7 +361,7 @@ export class Transitions<B extends Behavior> {
|
|
|
357
361
|
get remainingTime() {
|
|
358
362
|
if (this.#config.manageTransitions === false) {
|
|
359
363
|
if (this.#config.transitionEndTimeMs !== undefined) {
|
|
360
|
-
const remaining = this.#config.transitionEndTimeMs
|
|
364
|
+
const remaining = Timespan(Time.nowMs, this.#config.transitionEndTimeMs).duration;
|
|
361
365
|
if (remaining < 0) {
|
|
362
366
|
return 0;
|
|
363
367
|
}
|
|
@@ -403,7 +407,7 @@ export class Transitions<B extends Behavior> {
|
|
|
403
407
|
* You may override this method if you want matter.js to run a timer, but you want to handle value updates yourself.
|
|
404
408
|
*/
|
|
405
409
|
protected async step(behavior: B) {
|
|
406
|
-
const now = Time.nowMs
|
|
410
|
+
const now = Time.nowMs;
|
|
407
411
|
|
|
408
412
|
// Compute updated values for all transitioning attributes
|
|
409
413
|
for (const prop of this) {
|
|
@@ -593,11 +597,11 @@ export class Transitions<B extends Behavior> {
|
|
|
593
597
|
}
|
|
594
598
|
|
|
595
599
|
#externalTimeOf(ms: number) {
|
|
596
|
-
return Math.round(ms / (this.#config.
|
|
600
|
+
return Math.round(ms / (this.#config.externalTimeUnit ?? Transitions.DEFAULT_EXTERNAL_TIME_UNIT));
|
|
597
601
|
}
|
|
598
602
|
|
|
599
603
|
#internalTimeOf(externalUnits: number) {
|
|
600
|
-
return externalUnits * (this.#config.
|
|
604
|
+
return Millis(externalUnits * (this.#config.externalTimeUnit ?? Transitions.DEFAULT_EXTERNAL_TIME_UNIT));
|
|
601
605
|
}
|
|
602
606
|
|
|
603
607
|
/**
|
|
@@ -644,8 +648,8 @@ export class Transitions<B extends Behavior> {
|
|
|
644
648
|
}
|
|
645
649
|
|
|
646
650
|
export namespace Transitions {
|
|
647
|
-
export const
|
|
648
|
-
export const
|
|
651
|
+
export const DEFAULT_STEP_INTERVAL = Millis(100);
|
|
652
|
+
export const DEFAULT_EXTERNAL_TIME_UNIT = Millis(100);
|
|
649
653
|
|
|
650
654
|
/**
|
|
651
655
|
* A valid transitionable attribute name for the specified type.
|
|
@@ -674,19 +678,19 @@ export namespace Transitions {
|
|
|
674
678
|
readonly manageTransitions?: boolean;
|
|
675
679
|
|
|
676
680
|
/**
|
|
677
|
-
*
|
|
681
|
+
* Interval per external time unit. Defaults to 100ms which is appropriate for CC & LVL "remaining time"
|
|
678
682
|
* attribute that is defined as 10ths of a second.
|
|
679
683
|
*/
|
|
680
|
-
readonly
|
|
684
|
+
readonly externalTimeUnit?: Duration;
|
|
681
685
|
|
|
682
686
|
/**
|
|
683
687
|
* The internal tick rate for transitions.
|
|
684
688
|
*
|
|
685
689
|
* This is the smallest time increment between value adjustments.
|
|
686
690
|
*
|
|
687
|
-
* Defaults to {@link
|
|
691
|
+
* Defaults to {@link DEFAULT_STEP_INTERVAL}.
|
|
688
692
|
*/
|
|
689
|
-
readonly
|
|
693
|
+
readonly stepInterval?: Duration;
|
|
690
694
|
|
|
691
695
|
/**
|
|
692
696
|
* The end time for a transition if transition management is disabled.
|
|
@@ -821,7 +825,7 @@ export namespace Transitions {
|
|
|
821
825
|
/**
|
|
822
826
|
* The time of the last step.
|
|
823
827
|
*/
|
|
824
|
-
prevStepAt:
|
|
828
|
+
prevStepAt: Timestamp;
|
|
825
829
|
|
|
826
830
|
/**
|
|
827
831
|
* Set to true when the reporting of remaining time should be suppressed when finishing the transition.
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import type { Behavior } from "#behavior/Behavior.js";
|
|
8
8
|
import type { Endpoint } from "#endpoint/Endpoint.js";
|
|
9
9
|
import type { SupportedElements } from "#endpoint/properties/Behaviors.js";
|
|
10
|
-
import { createPromise, deepCopy, isObject, Logger, MaybePromise, withTimeout } from "#general";
|
|
10
|
+
import { createPromise, deepCopy, isObject, Logger, MaybePromise, Seconds, withTimeout } from "#general";
|
|
11
11
|
import type { ServerNode } from "#node/ServerNode.js";
|
|
12
12
|
import { OccurrenceManager, Val } from "#protocol";
|
|
13
13
|
import type { ClusterType, FabricIndex, ObjectSchema } from "#types";
|
|
@@ -67,7 +67,7 @@ async function sanitizeAttributeData(
|
|
|
67
67
|
(endpoint.eventsOf(type) as Behavior.EventsOf<any>).stateChanged?.on(resolver);
|
|
68
68
|
try {
|
|
69
69
|
await endpoint.setStateOf(type, stateUpdate);
|
|
70
|
-
stateUpdatePromises.push(withTimeout(
|
|
70
|
+
stateUpdatePromises.push(withTimeout(Seconds(5), promise)); // 5s should be enough for state change
|
|
71
71
|
} catch (error) {
|
|
72
72
|
logger.warn(
|
|
73
73
|
`Could not sanitize fabric-scoped attributes for cluster ${cluster.name} on endpoint ${endpoint.id}`,
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import { Migration } from "#behavior/state/migrations/Migration.js";
|
|
7
8
|
import type { Agent } from "#endpoint/Agent.js";
|
|
8
9
|
import type { Endpoint } from "#endpoint/Endpoint.js";
|
|
9
10
|
import { BehaviorInitializationError } from "#endpoint/errors.js";
|
|
@@ -102,9 +103,15 @@ export abstract class BehaviorBacking {
|
|
|
102
103
|
}
|
|
103
104
|
|
|
104
105
|
initializeDataSource() {
|
|
105
|
-
if (
|
|
106
|
-
|
|
106
|
+
if (this.#datasource) {
|
|
107
|
+
return;
|
|
107
108
|
}
|
|
109
|
+
|
|
110
|
+
if (this.store.initialValues !== undefined) {
|
|
111
|
+
Migration.migrate(this.type, this.store.initialValues);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
this.#datasource = Datasource(this.datasourceOptions);
|
|
108
115
|
}
|
|
109
116
|
|
|
110
117
|
/**
|
|
@@ -7,10 +7,9 @@
|
|
|
7
7
|
import type { ValueSupervisor } from "../../../supervision/ValueSupervisor.js";
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
* If you invoke {@link ValueSupervisor.manage} on a non-collection value, this is
|
|
11
|
-
*
|
|
10
|
+
* If you invoke {@link ValueSupervisor.manage} on a non-collection value, this is the manage implementation you will
|
|
11
|
+
* receive.
|
|
12
12
|
*
|
|
13
|
-
* Struct and list manager implementations optimize by bypassing
|
|
14
|
-
* PrimitiveManager.
|
|
13
|
+
* Struct and list manager implementations optimize by bypassing PrimitiveManager.
|
|
15
14
|
*/
|
|
16
15
|
export const PrimitiveManager: ValueSupervisor.Manage = reference => reference;
|
|
@@ -105,13 +105,13 @@ function StructPatcher(schema: ValueModel, supervisor: RootSupervisor): ValueSup
|
|
|
105
105
|
throw new WriteError(path, `cannot patch ${target} because it is not an object`);
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
-
for (const key in changes) {
|
|
108
|
+
for (const key in changes as Val.Struct) {
|
|
109
109
|
// Validate the key
|
|
110
110
|
if (!(key in memberPatchers)) {
|
|
111
111
|
throw new WriteError(path, `${key} is not a property of ${schema.name}`);
|
|
112
112
|
}
|
|
113
113
|
|
|
114
|
-
let newValue = changes[key];
|
|
114
|
+
let newValue = (changes as Val.Struct)[key];
|
|
115
115
|
|
|
116
116
|
// If this is not a subcollection or the new value is not an object, just do direct set
|
|
117
117
|
const subpatch = memberPatchers[key];
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Behavior } from "#behavior/Behavior.js";
|
|
8
|
+
import { InternalError } from "#general";
|
|
9
|
+
import { Val } from "#protocol";
|
|
10
|
+
|
|
11
|
+
const migrations = new Map<string, Migration.Migrator>();
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Add a data migration.
|
|
15
|
+
*
|
|
16
|
+
* Migrations allow the server to adjust persisted data when the stored format is incompatible with current code.
|
|
17
|
+
*/
|
|
18
|
+
export function Migration(id: string, migrator: Migration.Migrator) {
|
|
19
|
+
if (migrations.has(id)) {
|
|
20
|
+
throw new InternalError(`Duplicate migration ${id}`);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
migrations.set(id, migrator);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export namespace Migration {
|
|
27
|
+
export function migrate(type: Behavior.Type, values: Val.Struct) {
|
|
28
|
+
migrations.get(type.id)?.(values, type);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface Migrator {
|
|
32
|
+
(values: Val.Struct, type: Behavior.Type): void;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -102,7 +102,7 @@ export namespace ValueSupervisor {
|
|
|
102
102
|
|
|
103
103
|
export type Manage = (reference: Val.Reference, session: Session) => Val;
|
|
104
104
|
|
|
105
|
-
export type Patch = (changes: Val.
|
|
105
|
+
export type Patch = (changes: Val.ReadonlyCollection, target: Val.Collection, path: DataModelPath) => Val;
|
|
106
106
|
|
|
107
107
|
export type Cast = (value: Val) => Val;
|
|
108
108
|
}
|
|
@@ -7,7 +7,15 @@
|
|
|
7
7
|
import { Behavior } from "#behavior/Behavior.js";
|
|
8
8
|
import { Events as BaseEvents } from "#behavior/Events.js";
|
|
9
9
|
import { OperationalCredentialsClient } from "#behaviors/operational-credentials";
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
Duration,
|
|
12
|
+
ImplementationError,
|
|
13
|
+
NotImplementedError,
|
|
14
|
+
Observable,
|
|
15
|
+
ServerAddress,
|
|
16
|
+
Time,
|
|
17
|
+
Timestamp,
|
|
18
|
+
} from "#general";
|
|
11
19
|
import { DatatypeModel, FieldElement } from "#model";
|
|
12
20
|
import type { ClientNode } from "#node/ClientNode.js";
|
|
13
21
|
import type { Node } from "#node/Node.js";
|
|
@@ -55,7 +63,7 @@ export class CommissioningClient extends Behavior {
|
|
|
55
63
|
}
|
|
56
64
|
|
|
57
65
|
if (this.state.discoveredAt === undefined) {
|
|
58
|
-
this.state.discoveredAt = Time.nowMs
|
|
66
|
+
this.state.discoveredAt = Time.nowMs;
|
|
59
67
|
}
|
|
60
68
|
|
|
61
69
|
this.reactTo((this.endpoint as Node).lifecycle.partsReady, this.#initializeNode);
|
|
@@ -120,7 +128,7 @@ export class CommissioningClient extends Behavior {
|
|
|
120
128
|
const address = identityService.assignNodeAddress(node, fabric.fabricIndex, opts.nodeId);
|
|
121
129
|
|
|
122
130
|
const commissioningOptions: LocatedNodeCommissioningOptions = {
|
|
123
|
-
addresses,
|
|
131
|
+
addresses: addresses.map(ServerAddress),
|
|
124
132
|
fabric,
|
|
125
133
|
nodeId: address.nodeId,
|
|
126
134
|
passcode,
|
|
@@ -259,9 +267,9 @@ export class CommissioningClient extends Behavior {
|
|
|
259
267
|
type: "struct",
|
|
260
268
|
quality: "N",
|
|
261
269
|
children: [
|
|
262
|
-
FieldElement({ name: "
|
|
263
|
-
FieldElement({ name: "
|
|
264
|
-
FieldElement({ name: "
|
|
270
|
+
FieldElement({ name: "idleInterval", type: "duration", constraint: "max 3600000" }),
|
|
271
|
+
FieldElement({ name: "activeInterval", type: "duration", constraint: "max 3600000" }),
|
|
272
|
+
FieldElement({ name: "activeThreshold", type: "duration", constraint: "max 65535" }),
|
|
265
273
|
],
|
|
266
274
|
}),
|
|
267
275
|
FieldElement({ name: "tcpSupport", type: "uint8", quality: "N" }),
|
|
@@ -281,27 +289,27 @@ export namespace CommissioningClient {
|
|
|
281
289
|
* Known network addresses for the device. If this is undefined the node has not been located on any network
|
|
282
290
|
* interface.
|
|
283
291
|
*/
|
|
284
|
-
addresses?: ServerAddress[];
|
|
292
|
+
addresses?: ServerAddress.Definition[];
|
|
285
293
|
|
|
286
294
|
/**
|
|
287
295
|
* Time at which the device was discovered.
|
|
288
296
|
*/
|
|
289
|
-
discoveredAt?:
|
|
297
|
+
discoveredAt?: Timestamp;
|
|
290
298
|
|
|
291
299
|
/**
|
|
292
300
|
* Time at which we discovered the device's current operational addresses.
|
|
293
301
|
*/
|
|
294
|
-
onlineAt?:
|
|
302
|
+
onlineAt?: Timestamp;
|
|
295
303
|
|
|
296
304
|
/**
|
|
297
305
|
* Time at which we concluded the device's current operational address is unreachable.
|
|
298
306
|
*/
|
|
299
|
-
offlineAt?:
|
|
307
|
+
offlineAt?: Timestamp;
|
|
300
308
|
|
|
301
309
|
/**
|
|
302
|
-
* The TTL of the discovery record if applicable.
|
|
310
|
+
* The TTL of the discovery record if applicable (in seconds).
|
|
303
311
|
*/
|
|
304
|
-
ttl?:
|
|
312
|
+
ttl?: Duration;
|
|
305
313
|
|
|
306
314
|
/**
|
|
307
315
|
* The canonical global ID of the device.
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { Immutable } from "#general";
|
|
7
|
+
import { Immutable, Seconds, ServerAddress } from "#general";
|
|
8
8
|
import { CommissionableDevice, OperationalDevice, PeerAddress, SessionParameters } from "#protocol";
|
|
9
9
|
import { DeviceTypeId, VendorId } from "#types";
|
|
10
10
|
import type { CommissioningClient } from "./CommissioningClient.js";
|
|
@@ -67,7 +67,7 @@ export namespace RemoteDescriptor {
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
if (ttl !== undefined) {
|
|
70
|
-
result.ttl = ttl;
|
|
70
|
+
result.ttl = Seconds(ttl);
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
if (deviceIdentifier !== undefined) {
|
|
@@ -103,18 +103,18 @@ export namespace RemoteDescriptor {
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
if (sessionParameters !== undefined) {
|
|
106
|
-
const {
|
|
106
|
+
const { idleInterval, activeInterval, activeThreshold } = sessionParameters;
|
|
107
107
|
|
|
108
|
-
if (
|
|
109
|
-
result.SII =
|
|
108
|
+
if (idleInterval !== undefined) {
|
|
109
|
+
result.SII = idleInterval;
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
-
if (
|
|
113
|
-
result.SAI =
|
|
112
|
+
if (activeInterval !== undefined) {
|
|
113
|
+
result.SAI = activeInterval;
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
-
if (
|
|
117
|
-
result.SAT =
|
|
116
|
+
if (activeThreshold !== undefined) {
|
|
117
|
+
result.SAT = activeThreshold;
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
120
|
|
|
@@ -129,11 +129,11 @@ export namespace RemoteDescriptor {
|
|
|
129
129
|
const isOperational = long.peerAddress !== undefined;
|
|
130
130
|
if (isOperational) {
|
|
131
131
|
if (addresses !== undefined) {
|
|
132
|
-
result.addresses = addresses?.filter(address => address.type === "udp");
|
|
132
|
+
result.addresses = addresses?.filter(address => address.type === "udp").map(ServerAddress);
|
|
133
133
|
}
|
|
134
134
|
} else {
|
|
135
135
|
if (addresses !== undefined) {
|
|
136
|
-
result.addresses = addresses.map(address => ({ ...address }));
|
|
136
|
+
result.addresses = addresses.map(address => ({ ...address })).map(ServerAddress);
|
|
137
137
|
}
|
|
138
138
|
|
|
139
139
|
if (discriminator !== undefined) {
|
|
@@ -165,7 +165,7 @@ export namespace RemoteDescriptor {
|
|
|
165
165
|
}
|
|
166
166
|
|
|
167
167
|
if (addresses?.length) {
|
|
168
|
-
long.addresses = addresses;
|
|
168
|
+
long.addresses = addresses.map(ServerAddress.definitionOf);
|
|
169
169
|
}
|
|
170
170
|
|
|
171
171
|
if (deviceIdentifier !== undefined) {
|
|
@@ -181,13 +181,13 @@ export namespace RemoteDescriptor {
|
|
|
181
181
|
|
|
182
182
|
let sessionParameters: Partial<SessionParameters> | undefined;
|
|
183
183
|
if (SII !== undefined) {
|
|
184
|
-
(sessionParameters ??= {}).
|
|
184
|
+
(sessionParameters ??= {}).idleInterval = SII;
|
|
185
185
|
}
|
|
186
186
|
if (SAI !== undefined) {
|
|
187
|
-
(sessionParameters ??= {}).
|
|
187
|
+
(sessionParameters ??= {}).activeInterval = SAI;
|
|
188
188
|
}
|
|
189
189
|
if (SAT !== undefined) {
|
|
190
|
-
(sessionParameters ??= {}).
|
|
190
|
+
(sessionParameters ??= {}).activeThreshold = SAT;
|
|
191
191
|
}
|
|
192
192
|
long.sessionParameters = sessionParameters;
|
|
193
193
|
|
|
@@ -22,7 +22,7 @@ export class ContinuousDiscovery extends Discovery<ClientNode[]> {
|
|
|
22
22
|
|
|
23
23
|
constructor(owner: ServerNode, options?: Discovery.Options) {
|
|
24
24
|
super(owner, options);
|
|
25
|
-
this.#bounded = options?.
|
|
25
|
+
this.#bounded = options?.timeout !== undefined;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
/**
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { CancelablePromise, Diagnostic, Logger, MaybePromise, withTimeout } from "#general";
|
|
7
|
+
import { CancelablePromise, Diagnostic, Duration, Logger, MaybePromise, withTimeout } from "#general";
|
|
8
8
|
import { ClientNodeFactory } from "#node/client/ClientNodeFactory.js";
|
|
9
9
|
import type { ClientNode } from "#node/ClientNode.js";
|
|
10
10
|
import type { ServerNode } from "#node/ServerNode.js";
|
|
@@ -224,8 +224,8 @@ export abstract class Discovery<T = unknown> extends CancelablePromise<T> {
|
|
|
224
224
|
|
|
225
225
|
let promise = DiscoveryAggregateError.allSettled(promises, `${this} failed`);
|
|
226
226
|
|
|
227
|
-
if (this.#options.
|
|
228
|
-
promise = withTimeout(this.#options.
|
|
227
|
+
if (this.#options.timeout !== undefined) {
|
|
228
|
+
promise = withTimeout(this.#options.timeout, promise, this.stop.bind(this));
|
|
229
229
|
}
|
|
230
230
|
|
|
231
231
|
promise.then(this.#afterDiscovery.bind(this)).catch(this.#reject);
|
|
@@ -260,7 +260,7 @@ export abstract class Discovery<T = unknown> extends CancelablePromise<T> {
|
|
|
260
260
|
|
|
261
261
|
export namespace Discovery {
|
|
262
262
|
export type Options = CommissionableDeviceIdentifiers & {
|
|
263
|
-
|
|
263
|
+
timeout?: Duration;
|
|
264
264
|
};
|
|
265
265
|
|
|
266
266
|
export type InstanceOptions = Options & {
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
import { DatatypeModel, FieldElement } from "#model";
|
|
8
8
|
import { Node } from "#node/Node.js";
|
|
9
|
-
import {
|
|
9
|
+
import { DEFAULT_MIN_INTERVAL_FLOOR, Subscribe } from "#protocol";
|
|
10
10
|
import { ClientNetworkRuntime } from "./ClientNetworkRuntime.js";
|
|
11
11
|
import { NetworkBehavior } from "./NetworkBehavior.js";
|
|
12
12
|
|
|
@@ -28,8 +28,8 @@ export class NetworkClient extends NetworkBehavior {
|
|
|
28
28
|
// TODO - configure subscription based on physical device properties
|
|
29
29
|
const subscribe = Subscribe({
|
|
30
30
|
fabricFilter: true,
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
minIntervalFloor: DEFAULT_MIN_INTERVAL_FLOOR,
|
|
32
|
+
maxIntervalCeiling: 0,
|
|
33
33
|
attributes: [{}],
|
|
34
34
|
...startupSubscription,
|
|
35
35
|
});
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import { SubscriptionsBehavior } from "#behavior/system/subscriptions/SubscriptionsServer.js";
|
|
8
8
|
import {
|
|
9
9
|
Construction,
|
|
10
10
|
Crypto,
|
|
@@ -355,7 +355,7 @@ export class ServerNetworkRuntime extends NetworkRuntime {
|
|
|
355
355
|
this.#formerSubscriptionsHandled = true;
|
|
356
356
|
|
|
357
357
|
await this.owner.act(agent =>
|
|
358
|
-
agent.get(
|
|
358
|
+
agent.get(SubscriptionsBehavior).reestablishFormerSubscriptions(env.get(InteractionServer)),
|
|
359
359
|
);
|
|
360
360
|
}
|
|
361
361
|
|
|
@@ -72,7 +72,7 @@ export class SessionsBehavior extends Behavior {
|
|
|
72
72
|
return;
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
// When subscription was added then inform
|
|
75
|
+
// When subscription was added then inform SubscriptionsBehavior
|
|
76
76
|
if (session.subscriptions.has(subscription)) {
|
|
77
77
|
this.events.subscriptionAdded.emit(subscription);
|
|
78
78
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { deepCopy, isIpNetworkChannel, Logger, MatterError, MaybePromise, ServerAddressIp } from "#general";
|
|
7
|
+
import { deepCopy, isIpNetworkChannel, Logger, MatterError, MaybePromise, Seconds, ServerAddressIp } from "#general";
|
|
8
8
|
import { DatatypeModel, FieldElement } from "#model";
|
|
9
9
|
import { InteractionServer, PeerSubscription } from "#node/server/InteractionServer.js";
|
|
10
10
|
import { ServerSubscription } from "#node/server/ServerSubscription.js";
|
|
@@ -21,10 +21,10 @@ import {
|
|
|
21
21
|
import { StatusCode, StatusResponseError } from "#types";
|
|
22
22
|
import { Behavior } from "../../Behavior.js";
|
|
23
23
|
import { SessionsBehavior } from "../sessions/SessionsBehavior.js";
|
|
24
|
-
const logger = Logger.get("
|
|
24
|
+
const logger = Logger.get("SubscriptionsBehavior");
|
|
25
25
|
|
|
26
26
|
/** Timeout in seconds to wait for responses or discovery of the peer node when trying to re-establish a subscription. */
|
|
27
|
-
const
|
|
27
|
+
const REESTABLISH_SUBSCRIPTIONS_TIMEOUT = Seconds(2);
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
30
|
* Subscriptions Persistence handling.
|
|
@@ -33,11 +33,11 @@ const REESTABLISH_SUBSCRIPTIONS_TIMEOUT_S = 2;
|
|
|
33
33
|
* speed up the controller reconnection process. This can mean a bit more memory usage on start of the device. To
|
|
34
34
|
* disable this feature set `persistenceEnabled` as state of the `subscription` behavior to `false`.
|
|
35
35
|
*/
|
|
36
|
-
export class
|
|
37
|
-
static override readonly id = "
|
|
36
|
+
export class SubscriptionsBehavior extends Behavior {
|
|
37
|
+
static override readonly id = "subscriptions";
|
|
38
38
|
|
|
39
|
-
declare state:
|
|
40
|
-
declare internal:
|
|
39
|
+
declare state: SubscriptionsBehavior.State;
|
|
40
|
+
declare internal: SubscriptionsBehavior.Internal;
|
|
41
41
|
|
|
42
42
|
override initialize() {
|
|
43
43
|
if (this.state.subscriptions !== undefined && this.state.persistenceEnabled !== false) {
|
|
@@ -115,10 +115,10 @@ export class SubscriptionBehavior extends Behavior {
|
|
|
115
115
|
),
|
|
116
116
|
),
|
|
117
117
|
FieldElement({ name: "isFabricFiltered", type: "bool" }),
|
|
118
|
-
FieldElement({ name: "
|
|
119
|
-
FieldElement({ name: "
|
|
120
|
-
FieldElement({ name: "maxInterval", type: "
|
|
121
|
-
FieldElement({ name: "sendInterval", type: "
|
|
118
|
+
FieldElement({ name: "maxIntervalCeiling", type: "duration" }),
|
|
119
|
+
FieldElement({ name: "minIntervalFloor", type: "duration" }),
|
|
120
|
+
FieldElement({ name: "maxInterval", type: "duration" }),
|
|
121
|
+
FieldElement({ name: "sendInterval", type: "duration" }),
|
|
122
122
|
FieldElement(
|
|
123
123
|
{
|
|
124
124
|
name: "operationalAddress",
|
|
@@ -142,8 +142,8 @@ export class SubscriptionBehavior extends Behavior {
|
|
|
142
142
|
maxInterval,
|
|
143
143
|
sendInterval,
|
|
144
144
|
id,
|
|
145
|
-
|
|
146
|
-
|
|
145
|
+
maxIntervalCeiling,
|
|
146
|
+
minIntervalFloor,
|
|
147
147
|
} = subscription;
|
|
148
148
|
const { peerAddress } = session;
|
|
149
149
|
const { fabricIndex, nodeId } = peerAddress;
|
|
@@ -160,8 +160,8 @@ export class SubscriptionBehavior extends Behavior {
|
|
|
160
160
|
const peerSubscription: PeerSubscription = {
|
|
161
161
|
subscriptionId: id,
|
|
162
162
|
peerAddress: { fabricIndex, nodeId },
|
|
163
|
-
|
|
164
|
-
|
|
163
|
+
maxIntervalCeiling,
|
|
164
|
+
minIntervalFloor,
|
|
165
165
|
attributeRequests,
|
|
166
166
|
eventRequests,
|
|
167
167
|
isFabricFiltered,
|
|
@@ -234,7 +234,7 @@ export class SubscriptionBehavior extends Behavior {
|
|
|
234
234
|
await peers.ensureConnection(peerAddress, {
|
|
235
235
|
discoveryOptions: {
|
|
236
236
|
discoveryType: NodeDiscoveryType.TimedDiscovery,
|
|
237
|
-
|
|
237
|
+
timeout: REESTABLISH_SUBSCRIPTIONS_TIMEOUT,
|
|
238
238
|
},
|
|
239
239
|
allowUnknownPeer: true,
|
|
240
240
|
operationalAddress,
|
|
@@ -282,7 +282,7 @@ export class SubscriptionBehavior extends Behavior {
|
|
|
282
282
|
}
|
|
283
283
|
}
|
|
284
284
|
|
|
285
|
-
export namespace
|
|
285
|
+
export namespace SubscriptionsBehavior {
|
|
286
286
|
export class State {
|
|
287
287
|
/** Set to false if persistence of subscriptions should be disabled */
|
|
288
288
|
persistenceEnabled = true;
|