@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
|
@@ -18,8 +18,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var ControllerCommissioningFlow_exports = {};
|
|
20
20
|
__export(ControllerCommissioningFlow_exports, {
|
|
21
|
-
CommissionableDeviceDiscoveryFailedError: () => CommissionableDeviceDiscoveryFailedError,
|
|
22
|
-
CommissioningError: () => CommissioningError,
|
|
23
21
|
CommissioningTimeoutError: () => CommissioningTimeoutError,
|
|
24
22
|
ControllerCommissioningFlow: () => ControllerCommissioningFlow,
|
|
25
23
|
DeviceAlreadyCommissionedToThisFabricError: () => DeviceAlreadyCommissionedToThisFabricError,
|
|
@@ -32,6 +30,8 @@ __export(ControllerCommissioningFlow_exports, {
|
|
|
32
30
|
WifiOrThreadNetworkCredentialsNotConfiguredError: () => WifiOrThreadNetworkCredentialsNotConfiguredError
|
|
33
31
|
});
|
|
34
32
|
module.exports = __toCommonJS(ControllerCommissioningFlow_exports);
|
|
33
|
+
var import_Invoke = require("#action/request/Invoke.js");
|
|
34
|
+
var import_Read = require("#action/request/Read.js");
|
|
35
35
|
var import_Certificate = require("#certificate/kinds/Certificate.js");
|
|
36
36
|
var import_basic_information = require("#clusters/basic-information");
|
|
37
37
|
var import_descriptor = require("#clusters/descriptor");
|
|
@@ -41,8 +41,8 @@ var import_operational_credentials = require("#clusters/operational-credentials"
|
|
|
41
41
|
var import_time_synchronization = require("#clusters/time-synchronization");
|
|
42
42
|
var import_general = require("#general");
|
|
43
43
|
var import_types = require("#types");
|
|
44
|
-
var import_ClusterClient = require("../cluster/client/ClusterClient.js");
|
|
45
44
|
var import_OperationalCredentialsTypes = require("../common/OperationalCredentialsTypes.js");
|
|
45
|
+
var import_CommissioningError = require("./CommissioningError.js");
|
|
46
46
|
/**
|
|
47
47
|
* @license
|
|
48
48
|
* Copyright 2022-2025 Matter.js Authors
|
|
@@ -56,33 +56,30 @@ var CommissioningStepResultCode = /* @__PURE__ */ ((CommissioningStepResultCode2
|
|
|
56
56
|
CommissioningStepResultCode2[CommissioningStepResultCode2["Stop"] = 3] = "Stop";
|
|
57
57
|
return CommissioningStepResultCode2;
|
|
58
58
|
})(CommissioningStepResultCode || {});
|
|
59
|
-
class
|
|
59
|
+
class MaximumCommissionedFabricsReachedError extends import_CommissioningError.CommissioningError {
|
|
60
60
|
}
|
|
61
|
-
class
|
|
61
|
+
class CommissioningTimeoutError extends import_CommissioningError.CommissioningError {
|
|
62
62
|
}
|
|
63
|
-
class
|
|
63
|
+
class DeviceAlreadyCommissionedToThisFabricError extends import_CommissioningError.CommissioningError {
|
|
64
64
|
}
|
|
65
|
-
class
|
|
65
|
+
class FabricLabelConflictError extends import_CommissioningError.CommissioningError {
|
|
66
66
|
}
|
|
67
|
-
class
|
|
67
|
+
class WifiOrThreadNetworkCredentialsNotConfiguredError extends import_CommissioningError.CommissioningError {
|
|
68
68
|
}
|
|
69
|
-
class
|
|
69
|
+
class WifiNetworkSetupFailedError extends import_CommissioningError.CommissioningError {
|
|
70
70
|
}
|
|
71
|
-
class
|
|
71
|
+
class ThreadNetworkSetupFailedError extends import_CommissioningError.CommissioningError {
|
|
72
72
|
}
|
|
73
|
-
class
|
|
73
|
+
class NodeIdConflictError extends import_CommissioningError.CommissioningError {
|
|
74
74
|
}
|
|
75
|
-
class
|
|
75
|
+
class OperativeConnectionFailedError extends import_CommissioningError.CommissioningError {
|
|
76
76
|
}
|
|
77
|
-
class
|
|
78
|
-
}
|
|
79
|
-
class OperativeConnectionFailedError extends CommissioningError {
|
|
80
|
-
}
|
|
81
|
-
class RecoverableCommissioningError extends CommissioningError {
|
|
77
|
+
class RecoverableCommissioningError extends import_CommissioningError.CommissioningError {
|
|
82
78
|
}
|
|
83
79
|
const DEFAULT_FAILSAFE_TIME = import_general.Minutes.one;
|
|
80
|
+
const RootEndpointNumber = (0, import_types.EndpointNumber)(0);
|
|
84
81
|
class ControllerCommissioningFlow {
|
|
85
|
-
|
|
82
|
+
interaction;
|
|
86
83
|
ca;
|
|
87
84
|
fabric;
|
|
88
85
|
transitionToCase;
|
|
@@ -96,8 +93,8 @@ class ControllerCommissioningFlow {
|
|
|
96
93
|
lastBreadcrumb = 1;
|
|
97
94
|
collectedCommissioningData = {};
|
|
98
95
|
#defaultFailSafeTime = DEFAULT_FAILSAFE_TIME;
|
|
99
|
-
constructor(
|
|
100
|
-
this.
|
|
96
|
+
constructor(interaction, ca, fabric, commissioningOptions, transitionToCase) {
|
|
97
|
+
this.interaction = interaction;
|
|
101
98
|
this.ca = ca;
|
|
102
99
|
this.fabric = fabric;
|
|
103
100
|
this.transitionToCase = transitionToCase;
|
|
@@ -151,13 +148,13 @@ class ControllerCommissioningFlow {
|
|
|
151
148
|
logger.warn(
|
|
152
149
|
`Commissioning step ${step.stepNumber}.${step.subStepNumber}: ${step.name} failed with recoverable error: ${error.message} ... Continuing with process`
|
|
153
150
|
);
|
|
154
|
-
} else if (error instanceof CommissioningError || error instanceof import_types.StatusResponseError) {
|
|
151
|
+
} else if (error instanceof import_CommissioningError.CommissioningError || error instanceof import_types.StatusResponseError) {
|
|
155
152
|
logger.error(
|
|
156
153
|
`Commissioning step ${step.stepNumber}.${step.subStepNumber}: ${step.name} failed with error: ${error.message} ... Aborting commissioning`
|
|
157
154
|
);
|
|
158
155
|
await this.#resetFailsafeTimer();
|
|
159
156
|
import_types.StatusResponseError.accept(error);
|
|
160
|
-
throw (0, import_general.repackErrorAs)(error, CommissioningError);
|
|
157
|
+
throw (0, import_general.repackErrorAs)(error, import_CommissioningError.CommissioningError);
|
|
161
158
|
} else {
|
|
162
159
|
throw error;
|
|
163
160
|
}
|
|
@@ -165,24 +162,58 @@ class ControllerCommissioningFlow {
|
|
|
165
162
|
}
|
|
166
163
|
}
|
|
167
164
|
/**
|
|
168
|
-
*
|
|
165
|
+
* Convenience method to get a number of attributes in a read and return exactly these values in the order as
|
|
166
|
+
* defined in the request
|
|
169
167
|
*/
|
|
170
|
-
#
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
168
|
+
async #readConcreteAttributeValues(request) {
|
|
169
|
+
const attributeMap = /* @__PURE__ */ new Map();
|
|
170
|
+
if (request.attributeRequests === void 0) {
|
|
171
|
+
throw new import_general.ImplementationError("Can only handle Attribute reads");
|
|
172
|
+
}
|
|
173
|
+
for (const { endpointId, clusterId, attributeId } of request.attributeRequests) {
|
|
174
|
+
if (endpointId === void 0 || clusterId === void 0) {
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
attributeMap.set(`${endpointId}-${clusterId}-${attributeId}`, void 0);
|
|
178
|
+
}
|
|
179
|
+
for await (const data of this.interaction.read(request)) {
|
|
180
|
+
for (const entry of data) {
|
|
181
|
+
if (entry.kind !== "attr-value") {
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
const {
|
|
185
|
+
path: { endpointId, clusterId, attributeId },
|
|
186
|
+
value
|
|
187
|
+
} = entry;
|
|
188
|
+
const key = `${endpointId}-${clusterId}-${attributeId}`;
|
|
189
|
+
if (!attributeMap.has(key)) {
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
attributeMap.set(key, value);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return [...attributeMap.values()];
|
|
196
|
+
}
|
|
197
|
+
// TODO improve response typing
|
|
198
|
+
async #invokeCommand(request, options = {}) {
|
|
199
|
+
for await (const data of this.interaction.invoke(
|
|
200
|
+
(0, import_Invoke.Invoke)({
|
|
201
|
+
commands: [request],
|
|
202
|
+
...options
|
|
203
|
+
})
|
|
204
|
+
)) {
|
|
205
|
+
for (const entry of data) {
|
|
206
|
+
switch (entry.kind) {
|
|
207
|
+
case "cmd-status":
|
|
208
|
+
if (entry.status !== import_types.Status.Success) {
|
|
209
|
+
throw import_types.StatusResponseError.create(entry.status, void 0, entry.clusterStatus);
|
|
210
|
+
}
|
|
211
|
+
return;
|
|
212
|
+
case "cmd-response":
|
|
213
|
+
return entry.data;
|
|
214
|
+
}
|
|
178
215
|
}
|
|
179
216
|
}
|
|
180
|
-
logger.debug(
|
|
181
|
-
`Creating new cluster client for cluster ${cluster.name} (endpoint ${endpointId}, isFeatureSpecific ${isFeatureSpecific})`
|
|
182
|
-
);
|
|
183
|
-
const client = (0, import_ClusterClient.ClusterClient)(cluster, endpointId, this.interactionClient);
|
|
184
|
-
this.#clusterClients.set(cluster.id, client);
|
|
185
|
-
return client;
|
|
186
217
|
}
|
|
187
218
|
/**
|
|
188
219
|
* Initialize commissioning steps and add them in the default order as defined by
|
|
@@ -233,7 +264,7 @@ class ControllerCommissioningFlow {
|
|
|
233
264
|
name: "AccessControl",
|
|
234
265
|
stepLogic: () => this.#configureAccessControlLists()
|
|
235
266
|
});
|
|
236
|
-
if (this.
|
|
267
|
+
if (this.interaction.channelType === import_general.ChannelType.BLE) {
|
|
237
268
|
this.commissioningSteps.push({
|
|
238
269
|
stepNumber: 16,
|
|
239
270
|
subStepNumber: 1,
|
|
@@ -262,7 +293,7 @@ class ControllerCommissioningFlow {
|
|
|
262
293
|
}
|
|
263
294
|
} else {
|
|
264
295
|
logger.info(
|
|
265
|
-
`Skipping NetworkCommissioning steps because the device is already on IP network (${this.
|
|
296
|
+
`Skipping NetworkCommissioning steps because the device is already on IP network (${this.interaction.channelType})`
|
|
266
297
|
);
|
|
267
298
|
}
|
|
268
299
|
this.commissioningSteps.push({
|
|
@@ -320,7 +351,7 @@ class ControllerCommissioningFlow {
|
|
|
320
351
|
);
|
|
321
352
|
}
|
|
322
353
|
}
|
|
323
|
-
throw new CommissioningError(
|
|
354
|
+
throw new import_CommissioningError.CommissioningError(
|
|
324
355
|
`Commission error for "${context}": ${import_operational_credentials.OperationalCredentials.NodeOperationalCertStatus[statusCode]} (${statusCode}), ${debugText}${fabricIndex !== void 0 ? `, fabricIndex: ${fabricIndex}` : ""}`
|
|
325
356
|
);
|
|
326
357
|
}
|
|
@@ -328,7 +359,7 @@ class ControllerCommissioningFlow {
|
|
|
328
359
|
#ensureGeneralCommissioningSuccess(context, { errorCode, debugText }) {
|
|
329
360
|
logger.debug(`Commissioning step ${context} returned ${errorCode}, ${debugText}`);
|
|
330
361
|
if (errorCode === import_general_commissioning.GeneralCommissioning.CommissioningError.Ok) return;
|
|
331
|
-
throw new CommissioningError(
|
|
362
|
+
throw new import_CommissioningError.CommissioningError(
|
|
332
363
|
`Commission error for "${context}": ${import_general_commissioning.GeneralCommissioning.CommissioningError[errorCode]} (${errorCode})${debugText ? `, ${debugText}` : ""}`
|
|
333
364
|
);
|
|
334
365
|
}
|
|
@@ -336,49 +367,84 @@ class ControllerCommissioningFlow {
|
|
|
336
367
|
* Initial Step to receive some common data used by other steps
|
|
337
368
|
*/
|
|
338
369
|
async #getInitialData() {
|
|
339
|
-
const
|
|
340
|
-
|
|
341
|
-
|
|
370
|
+
const [
|
|
371
|
+
supportedFabrics,
|
|
372
|
+
commissionedFabrics,
|
|
373
|
+
rootPartsList,
|
|
374
|
+
rootServerList,
|
|
375
|
+
vendorId,
|
|
376
|
+
productId,
|
|
377
|
+
productName,
|
|
378
|
+
supportsConcurrentConnection
|
|
379
|
+
] = await this.#readConcreteAttributeValues(
|
|
380
|
+
(0, import_Read.Read)(
|
|
381
|
+
import_Read.Read.Attribute({
|
|
382
|
+
endpoint: RootEndpointNumber,
|
|
383
|
+
cluster: import_operational_credentials.OperationalCredentials.Complete,
|
|
384
|
+
attributes: ["supportedFabrics", "commissionedFabrics"]
|
|
385
|
+
}),
|
|
386
|
+
import_Read.Read.Attribute({
|
|
387
|
+
endpoint: RootEndpointNumber,
|
|
388
|
+
cluster: import_descriptor.Descriptor.Complete,
|
|
389
|
+
attributes: ["partsList", "serverList"]
|
|
390
|
+
}),
|
|
391
|
+
import_Read.Read.Attribute({
|
|
392
|
+
endpoint: RootEndpointNumber,
|
|
393
|
+
cluster: import_basic_information.BasicInformation.Complete,
|
|
394
|
+
attributes: ["vendorId", "productId", "productName"]
|
|
395
|
+
}),
|
|
396
|
+
import_Read.Read.Attribute({
|
|
397
|
+
endpoint: RootEndpointNumber,
|
|
398
|
+
cluster: import_general_commissioning.GeneralCommissioning.Complete,
|
|
399
|
+
attributes: ["supportsConcurrentConnection"]
|
|
400
|
+
})
|
|
401
|
+
)
|
|
402
|
+
);
|
|
342
403
|
if (commissionedFabrics >= supportedFabrics) {
|
|
343
404
|
throw new MaximumCommissionedFabricsReachedError(
|
|
344
405
|
`Commissioned fabrics (${commissionedFabrics}) exceed supported fabrics (${supportedFabrics}). Please remove some fabrics before commissioning.`
|
|
345
406
|
);
|
|
346
407
|
}
|
|
347
|
-
|
|
348
|
-
this.collectedCommissioningData.
|
|
349
|
-
this.collectedCommissioningData.
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
});
|
|
408
|
+
this.collectedCommissioningData.rootPartsList = rootPartsList;
|
|
409
|
+
this.collectedCommissioningData.rootServerList = rootServerList;
|
|
410
|
+
this.collectedCommissioningData.vendorId = vendorId;
|
|
411
|
+
this.collectedCommissioningData.productId = productId;
|
|
412
|
+
this.collectedCommissioningData.productName = productName;
|
|
413
|
+
this.collectedCommissioningData.supportsConcurrentConnection = supportsConcurrentConnection;
|
|
414
|
+
const networkData = this.interaction.read(
|
|
415
|
+
(0, import_Read.Read)(
|
|
416
|
+
import_Read.Read.Attribute({
|
|
417
|
+
cluster: import_network_commissioning.NetworkCommissioning.Complete,
|
|
418
|
+
attributes: ["featureMap", "networks"]
|
|
419
|
+
})
|
|
420
|
+
)
|
|
421
|
+
);
|
|
362
422
|
const networkFeatures = new Array();
|
|
363
423
|
const networkStatus = new Array();
|
|
364
|
-
for (const {
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
424
|
+
for await (const data of networkData) {
|
|
425
|
+
for (const entry of data) {
|
|
426
|
+
if (entry.kind !== "attr-value") {
|
|
427
|
+
continue;
|
|
428
|
+
}
|
|
429
|
+
const {
|
|
430
|
+
path: { endpointId, attributeId },
|
|
431
|
+
value
|
|
432
|
+
} = entry;
|
|
433
|
+
if (attributeId === import_network_commissioning.NetworkCommissioning.Complete.attributes.featureMap.id) {
|
|
434
|
+
networkFeatures.push({
|
|
435
|
+
endpointId,
|
|
436
|
+
value
|
|
437
|
+
});
|
|
438
|
+
} else if (attributeId === import_network_commissioning.NetworkCommissioning.Complete.attributes.networks.id) {
|
|
439
|
+
networkStatus.push({
|
|
440
|
+
endpointId,
|
|
441
|
+
value
|
|
442
|
+
});
|
|
443
|
+
}
|
|
372
444
|
}
|
|
373
445
|
}
|
|
374
446
|
this.collectedCommissioningData.networkFeatures = networkFeatures;
|
|
375
447
|
this.collectedCommissioningData.networkStatus = networkStatus;
|
|
376
|
-
const basicInfoClient = this.#getClusterClient(import_basic_information.BasicInformation.Cluster);
|
|
377
|
-
this.collectedCommissioningData.vendorId = await basicInfoClient.getVendorIdAttribute();
|
|
378
|
-
this.collectedCommissioningData.productId = await basicInfoClient.getProductIdAttribute();
|
|
379
|
-
this.collectedCommissioningData.productName = await basicInfoClient.getProductNameAttribute();
|
|
380
|
-
const generalCommissioningClient = this.#getClusterClient(import_general_commissioning.GeneralCommissioning.Cluster);
|
|
381
|
-
this.collectedCommissioningData.supportsConcurrentConnection = await generalCommissioningClient.getSupportsConcurrentConnectionAttribute();
|
|
382
448
|
return {
|
|
383
449
|
code: 0 /* Success */,
|
|
384
450
|
breadcrumb: this.lastBreadcrumb
|
|
@@ -394,9 +460,16 @@ class ControllerCommissioningFlow {
|
|
|
394
460
|
* Attribute”) prior to invoking the ArmFailSafe command.
|
|
395
461
|
*/
|
|
396
462
|
async #armFailsafe(time) {
|
|
397
|
-
const client = this.#getClusterClient(import_general_commissioning.GeneralCommissioning.Cluster);
|
|
398
463
|
if (this.collectedCommissioningData.basicCommissioningInfo === void 0) {
|
|
399
|
-
const basicCommissioningInfo = await
|
|
464
|
+
const [basicCommissioningInfo] = await this.#readConcreteAttributeValues(
|
|
465
|
+
(0, import_Read.Read)(
|
|
466
|
+
import_Read.Read.Attribute({
|
|
467
|
+
endpoint: RootEndpointNumber,
|
|
468
|
+
cluster: import_general_commissioning.GeneralCommissioning.Complete,
|
|
469
|
+
attributes: ["basicCommissioningInfo"]
|
|
470
|
+
})
|
|
471
|
+
)
|
|
472
|
+
);
|
|
400
473
|
this.collectedCommissioningData.basicCommissioningInfo = basicCommissioningInfo;
|
|
401
474
|
this.#defaultFailSafeTime = (0, import_general.Seconds)(basicCommissioningInfo.failSafeExpiryLengthSeconds);
|
|
402
475
|
this.#commissioningStartedTime = import_general.Time.nowMs;
|
|
@@ -407,9 +480,14 @@ class ControllerCommissioningFlow {
|
|
|
407
480
|
const expiryLength = time ?? this.#defaultFailSafeTime;
|
|
408
481
|
this.#ensureGeneralCommissioningSuccess(
|
|
409
482
|
"armFailSafe",
|
|
410
|
-
await
|
|
411
|
-
|
|
412
|
-
|
|
483
|
+
await this.#invokeCommand({
|
|
484
|
+
endpoint: RootEndpointNumber,
|
|
485
|
+
cluster: import_general_commissioning.GeneralCommissioning.Complete,
|
|
486
|
+
command: "armFailSafe",
|
|
487
|
+
fields: {
|
|
488
|
+
breadcrumb: this.lastBreadcrumb,
|
|
489
|
+
expiryLengthSeconds: import_general.Seconds.of(expiryLength)
|
|
490
|
+
}
|
|
413
491
|
})
|
|
414
492
|
);
|
|
415
493
|
this.#currentFailSafeEndTime = (0, import_general.Timestamp)(import_general.Time.nowMs + expiryLength);
|
|
@@ -425,22 +503,26 @@ class ControllerCommissioningFlow {
|
|
|
425
503
|
return import_general.Duration.max((0, import_general.Timespan)(import_general.Time.nowMs, this.#currentFailSafeEndTime).duration, 0);
|
|
426
504
|
}
|
|
427
505
|
async #ensureFailsafeTimerFor(maxProcessingTime) {
|
|
428
|
-
const minFailsafeTime = this.
|
|
506
|
+
const minFailsafeTime = this.interaction.maximumPeerResponseTime(maxProcessingTime);
|
|
429
507
|
const timeLeft = this.#failSafeTimeLeft;
|
|
430
508
|
if (timeLeft < minFailsafeTime) {
|
|
431
509
|
logger.debug(`Failsafe timer has only ${timeLeft}s left, re-arming for at least ${minFailsafeTime}`);
|
|
432
510
|
await this.#armFailsafe(import_general.Duration.max(minFailsafeTime, this.#defaultFailSafeTime));
|
|
433
511
|
} else {
|
|
434
|
-
logger.debug(`Failsafe timer is already set for at least ${timeLeft}s`);
|
|
512
|
+
logger.debug(`Failsafe timer is already set for at least ${import_general.Seconds.of(timeLeft)}s`);
|
|
435
513
|
}
|
|
436
514
|
}
|
|
437
515
|
async #resetFailsafeTimer() {
|
|
438
516
|
if (this.#currentFailSafeEndTime === void 0) return;
|
|
439
517
|
try {
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
518
|
+
await this.#invokeCommand({
|
|
519
|
+
endpoint: RootEndpointNumber,
|
|
520
|
+
cluster: import_general_commissioning.GeneralCommissioning.Complete,
|
|
521
|
+
command: "armFailSafe",
|
|
522
|
+
fields: {
|
|
523
|
+
breadcrumb: this.lastBreadcrumb,
|
|
524
|
+
expiryLengthSeconds: 0
|
|
525
|
+
}
|
|
444
526
|
});
|
|
445
527
|
this.#currentFailSafeEndTime = void 0;
|
|
446
528
|
} catch (error) {
|
|
@@ -456,7 +538,7 @@ class ControllerCommissioningFlow {
|
|
|
456
538
|
*/
|
|
457
539
|
async #configureRegulatoryInformation() {
|
|
458
540
|
if (this.collectedCommissioningData.networkFeatures === void 0) {
|
|
459
|
-
throw new CommissioningError(
|
|
541
|
+
throw new import_CommissioningError.CommissioningError(
|
|
460
542
|
"Initial information collection failed. No network features collected. This should never happen."
|
|
461
543
|
);
|
|
462
544
|
}
|
|
@@ -464,8 +546,15 @@ class ControllerCommissioningFlow {
|
|
|
464
546
|
({ value: { wiFiNetworkInterface, threadNetworkInterface } }) => wiFiNetworkInterface || threadNetworkInterface
|
|
465
547
|
);
|
|
466
548
|
if (hasRadioNetwork) {
|
|
467
|
-
|
|
468
|
-
|
|
549
|
+
let [locationCapability] = await this.#readConcreteAttributeValues(
|
|
550
|
+
(0, import_Read.Read)(
|
|
551
|
+
import_Read.Read.Attribute({
|
|
552
|
+
endpoint: RootEndpointNumber,
|
|
553
|
+
cluster: import_general_commissioning.GeneralCommissioning.Complete,
|
|
554
|
+
attributes: ["locationCapability"]
|
|
555
|
+
})
|
|
556
|
+
)
|
|
557
|
+
);
|
|
469
558
|
if (locationCapability === import_general_commissioning.GeneralCommissioning.RegulatoryLocationType.IndoorOutdoor) {
|
|
470
559
|
locationCapability = this.commissioningOptions.regulatoryLocation;
|
|
471
560
|
} else {
|
|
@@ -474,13 +563,20 @@ class ControllerCommissioningFlow {
|
|
|
474
563
|
);
|
|
475
564
|
}
|
|
476
565
|
let countryCode = this.commissioningOptions.regulatoryCountryCode;
|
|
477
|
-
const regulatoryResult = await
|
|
566
|
+
const regulatoryResult = await this.#invokeCommand(
|
|
478
567
|
{
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
568
|
+
endpoint: RootEndpointNumber,
|
|
569
|
+
cluster: import_general_commissioning.GeneralCommissioning.Complete,
|
|
570
|
+
command: "setRegulatoryConfig",
|
|
571
|
+
fields: {
|
|
572
|
+
breadcrumb: this.lastBreadcrumb++,
|
|
573
|
+
newRegulatoryConfig: locationCapability,
|
|
574
|
+
countryCode
|
|
575
|
+
}
|
|
482
576
|
},
|
|
483
|
-
{
|
|
577
|
+
{
|
|
578
|
+
useExtendedFailSafeMessageResponseTimeout: true
|
|
579
|
+
}
|
|
484
580
|
);
|
|
485
581
|
if (regulatoryResult.errorCode === import_general_commissioning.GeneralCommissioning.CommissioningError.ValueOutsideRange && countryCode !== "XX") {
|
|
486
582
|
logger.debug(
|
|
@@ -489,13 +585,20 @@ class ControllerCommissioningFlow {
|
|
|
489
585
|
countryCode = "XX";
|
|
490
586
|
this.#ensureGeneralCommissioningSuccess(
|
|
491
587
|
"setRegulatoryConfig",
|
|
492
|
-
await
|
|
588
|
+
await this.#invokeCommand(
|
|
493
589
|
{
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
590
|
+
endpoint: RootEndpointNumber,
|
|
591
|
+
cluster: import_general_commissioning.GeneralCommissioning.Complete,
|
|
592
|
+
command: "setRegulatoryConfig",
|
|
593
|
+
fields: {
|
|
594
|
+
breadcrumb: this.lastBreadcrumb,
|
|
595
|
+
newRegulatoryConfig: locationCapability,
|
|
596
|
+
countryCode
|
|
597
|
+
}
|
|
497
598
|
},
|
|
498
|
-
{
|
|
599
|
+
{
|
|
600
|
+
useExtendedFailSafeMessageResponseTimeout: true
|
|
601
|
+
}
|
|
499
602
|
)
|
|
500
603
|
);
|
|
501
604
|
} else {
|
|
@@ -537,27 +640,47 @@ class ControllerCommissioningFlow {
|
|
|
537
640
|
* (see Section 6.2.3, “Device Attestation Procedure”).
|
|
538
641
|
*/
|
|
539
642
|
async #deviceAttestation() {
|
|
540
|
-
const
|
|
541
|
-
const { certificate: deviceAttestation } = await operationalCredentialsClusterClient.certificateChainRequest(
|
|
643
|
+
const { certificate: deviceAttestation } = await this.#invokeCommand(
|
|
542
644
|
{
|
|
543
|
-
|
|
645
|
+
endpoint: RootEndpointNumber,
|
|
646
|
+
cluster: import_operational_credentials.OperationalCredentials.Complete,
|
|
647
|
+
command: "certificateChainRequest",
|
|
648
|
+
fields: {
|
|
649
|
+
certificateType: import_operational_credentials.OperationalCredentials.CertificateChainType.DacCertificate
|
|
650
|
+
}
|
|
544
651
|
},
|
|
545
|
-
{
|
|
652
|
+
{
|
|
653
|
+
useExtendedFailSafeMessageResponseTimeout: true
|
|
654
|
+
}
|
|
546
655
|
);
|
|
547
|
-
const { certificate: productAttestation } = await
|
|
656
|
+
const { certificate: productAttestation } = await this.#invokeCommand(
|
|
548
657
|
{
|
|
549
|
-
|
|
658
|
+
endpoint: RootEndpointNumber,
|
|
659
|
+
cluster: import_operational_credentials.OperationalCredentials.Complete,
|
|
660
|
+
command: "certificateChainRequest",
|
|
661
|
+
fields: {
|
|
662
|
+
certificateType: import_operational_credentials.OperationalCredentials.CertificateChainType.PaiCertificate
|
|
663
|
+
}
|
|
550
664
|
},
|
|
551
|
-
{
|
|
665
|
+
{
|
|
666
|
+
useExtendedFailSafeMessageResponseTimeout: true
|
|
667
|
+
}
|
|
552
668
|
);
|
|
553
|
-
const { attestationElements, attestationSignature } = await
|
|
669
|
+
const { attestationElements, attestationSignature } = await this.#invokeCommand(
|
|
554
670
|
{
|
|
555
|
-
|
|
671
|
+
endpoint: RootEndpointNumber,
|
|
672
|
+
cluster: import_operational_credentials.OperationalCredentials.Complete,
|
|
673
|
+
command: "attestationRequest",
|
|
674
|
+
fields: {
|
|
675
|
+
attestationNonce: this.fabric.crypto.randomBytes(32)
|
|
676
|
+
}
|
|
556
677
|
},
|
|
557
|
-
{
|
|
678
|
+
{
|
|
679
|
+
useExtendedFailSafeMessageResponseTimeout: true
|
|
680
|
+
}
|
|
558
681
|
);
|
|
559
682
|
if (deviceAttestation.byteLength === 0 || productAttestation.byteLength === 0 || attestationElements.byteLength === 0 || attestationSignature.byteLength === 0) {
|
|
560
|
-
throw new CommissioningError("Device Attestation data missing from device");
|
|
683
|
+
throw new import_CommissioningError.CommissioningError("Device Attestation data missing from device");
|
|
561
684
|
}
|
|
562
685
|
return {
|
|
563
686
|
code: 0 /* Success */,
|
|
@@ -581,36 +704,56 @@ class ControllerCommissioningFlow {
|
|
|
581
704
|
* DCL contains the name and other information of the Commissioner’s manufacturer.
|
|
582
705
|
*/
|
|
583
706
|
async #certificates() {
|
|
584
|
-
const
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
707
|
+
const { nocsrElements, attestationSignature: csrSignature } = await this.#invokeCommand(
|
|
708
|
+
{
|
|
709
|
+
endpoint: RootEndpointNumber,
|
|
710
|
+
cluster: import_operational_credentials.OperationalCredentials.Complete,
|
|
711
|
+
command: "csrRequest",
|
|
712
|
+
fields: { csrNonce: this.fabric.crypto.randomBytes(32) }
|
|
713
|
+
},
|
|
714
|
+
{
|
|
715
|
+
useExtendedFailSafeMessageResponseTimeout: true
|
|
716
|
+
}
|
|
588
717
|
);
|
|
589
718
|
if (nocsrElements.byteLength === 0 || csrSignature.byteLength === 0) {
|
|
590
719
|
throw new import_general.UnexpectedDataError("Invalid response from device");
|
|
591
720
|
}
|
|
592
721
|
const { certSigningRequest } = import_OperationalCredentialsTypes.TlvCertSigningRequest.decode(nocsrElements);
|
|
593
722
|
const operationalPublicKey = await import_Certificate.Certificate.getPublicKeyFromCsr(this.ca.crypto, certSigningRequest);
|
|
594
|
-
await
|
|
723
|
+
await this.#invokeCommand(
|
|
595
724
|
{
|
|
596
|
-
|
|
725
|
+
endpoint: RootEndpointNumber,
|
|
726
|
+
cluster: import_operational_credentials.OperationalCredentials.Complete,
|
|
727
|
+
command: "addTrustedRootCertificate",
|
|
728
|
+
fields: {
|
|
729
|
+
rootCaCertificate: this.ca.rootCert
|
|
730
|
+
}
|
|
597
731
|
},
|
|
598
|
-
{
|
|
732
|
+
{
|
|
733
|
+
useExtendedFailSafeMessageResponseTimeout: true
|
|
734
|
+
}
|
|
599
735
|
);
|
|
600
736
|
const peerOperationalCert = await this.ca.generateNoc(
|
|
601
737
|
operationalPublicKey,
|
|
602
738
|
this.fabric.fabricId,
|
|
603
|
-
this.
|
|
739
|
+
this.interaction.address.nodeId
|
|
604
740
|
);
|
|
605
|
-
const addNocResponse = await
|
|
741
|
+
const addNocResponse = await this.#invokeCommand(
|
|
606
742
|
{
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
743
|
+
endpoint: RootEndpointNumber,
|
|
744
|
+
cluster: import_operational_credentials.OperationalCredentials.Complete,
|
|
745
|
+
command: "addNoc",
|
|
746
|
+
fields: {
|
|
747
|
+
nocValue: peerOperationalCert,
|
|
748
|
+
icacValue: this.ca.icacCert ?? new Uint8Array(0),
|
|
749
|
+
ipkValue: this.fabric.identityProtectionKey,
|
|
750
|
+
adminVendorId: this.fabric.rootVendorId,
|
|
751
|
+
caseAdminSubject: this.fabric.rootNodeId
|
|
752
|
+
}
|
|
612
753
|
},
|
|
613
|
-
{
|
|
754
|
+
{
|
|
755
|
+
useExtendedFailSafeMessageResponseTimeout: true
|
|
756
|
+
}
|
|
614
757
|
);
|
|
615
758
|
this.#ensureOperationalCredentialsSuccess("addNoc", addNocResponse);
|
|
616
759
|
const { fabricIndex } = addNocResponse;
|
|
@@ -636,13 +779,17 @@ class ControllerCommissioningFlow {
|
|
|
636
779
|
breadcrumb: this.lastBreadcrumb
|
|
637
780
|
};
|
|
638
781
|
}
|
|
639
|
-
const operationalCredentialCluster = this.#getClusterClient(import_operational_credentials.OperationalCredentials.Cluster);
|
|
640
782
|
try {
|
|
641
783
|
this.#ensureOperationalCredentialsSuccess(
|
|
642
784
|
"updateFabricLabel",
|
|
643
|
-
await
|
|
644
|
-
|
|
645
|
-
|
|
785
|
+
await this.#invokeCommand({
|
|
786
|
+
endpoint: RootEndpointNumber,
|
|
787
|
+
cluster: import_operational_credentials.OperationalCredentials.Complete,
|
|
788
|
+
command: "updateFabricLabel",
|
|
789
|
+
fields: {
|
|
790
|
+
label: this.fabric.label,
|
|
791
|
+
fabricIndex
|
|
792
|
+
}
|
|
646
793
|
})
|
|
647
794
|
);
|
|
648
795
|
} catch (error) {
|
|
@@ -681,7 +828,7 @@ class ControllerCommissioningFlow {
|
|
|
681
828
|
*/
|
|
682
829
|
async #validateNetwork() {
|
|
683
830
|
if (this.collectedCommissioningData.networkFeatures === void 0 || this.collectedCommissioningData.networkStatus === void 0) {
|
|
684
|
-
throw new CommissioningError(
|
|
831
|
+
throw new import_CommissioningError.CommissioningError(
|
|
685
832
|
"Initial information collection failed. No network features or status collected. This should never happen."
|
|
686
833
|
);
|
|
687
834
|
}
|
|
@@ -738,22 +885,32 @@ class ControllerCommissioningFlow {
|
|
|
738
885
|
}
|
|
739
886
|
}
|
|
740
887
|
logger.debug("Configuring WiFi network ...");
|
|
741
|
-
const networkCommissioningClusterClient = this.#getClusterClient(
|
|
742
|
-
import_network_commissioning.NetworkCommissioning.Cluster.with("WiFiNetworkInterface"),
|
|
743
|
-
(0, import_types.EndpointNumber)(0),
|
|
744
|
-
true
|
|
745
|
-
);
|
|
746
888
|
const ssid = import_general.Bytes.fromString(this.commissioningOptions.wifiNetwork.wifiSsid);
|
|
747
889
|
const credentials = import_general.Bytes.fromString(this.commissioningOptions.wifiNetwork.wifiCredentials);
|
|
890
|
+
const [scanMaxTimeSeconds, connectMaxTimeSeconds] = await this.#readConcreteAttributeValues(
|
|
891
|
+
(0, import_Read.Read)(
|
|
892
|
+
import_Read.Read.Attribute({
|
|
893
|
+
endpoint: RootEndpointNumber,
|
|
894
|
+
cluster: import_network_commissioning.NetworkCommissioning.Complete,
|
|
895
|
+
attributes: ["scanMaxTimeSeconds", "connectMaxTimeSeconds"]
|
|
896
|
+
})
|
|
897
|
+
)
|
|
898
|
+
);
|
|
748
899
|
if (this.collectedCommissioningData.supportsConcurrentConnection !== false) {
|
|
749
|
-
|
|
750
|
-
await this.#
|
|
751
|
-
const { networkingStatus, wiFiScanResults, debugText } = await networkCommissioningClusterClient.scanNetworks(
|
|
900
|
+
await this.#ensureFailsafeTimerFor((0, import_general.Seconds)(scanMaxTimeSeconds));
|
|
901
|
+
const { networkingStatus, wiFiScanResults, debugText } = await this.#invokeCommand(
|
|
752
902
|
{
|
|
753
|
-
|
|
754
|
-
|
|
903
|
+
endpoint: RootEndpointNumber,
|
|
904
|
+
cluster: import_network_commissioning.NetworkCommissioning.Complete,
|
|
905
|
+
command: "scanNetworks",
|
|
906
|
+
fields: {
|
|
907
|
+
ssid,
|
|
908
|
+
breadcrumb: this.lastBreadcrumb++
|
|
909
|
+
}
|
|
755
910
|
},
|
|
756
|
-
{
|
|
911
|
+
{
|
|
912
|
+
expectedProcessingTime: (0, import_general.Seconds)(scanMaxTimeSeconds)
|
|
913
|
+
}
|
|
757
914
|
);
|
|
758
915
|
if (networkingStatus !== import_network_commissioning.NetworkCommissioning.NetworkCommissioningStatus.Success) {
|
|
759
916
|
throw new WifiNetworkSetupFailedError(`Commissionee failed to scan for WiFi networks: ${debugText}`);
|
|
@@ -768,13 +925,20 @@ class ControllerCommissioningFlow {
|
|
|
768
925
|
networkingStatus: addNetworkingStatus,
|
|
769
926
|
debugText: addDebugText,
|
|
770
927
|
networkIndex
|
|
771
|
-
} = await
|
|
928
|
+
} = await this.#invokeCommand(
|
|
772
929
|
{
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
930
|
+
endpoint: RootEndpointNumber,
|
|
931
|
+
cluster: import_network_commissioning.NetworkCommissioning.Complete,
|
|
932
|
+
command: "addOrUpdateWiFiNetwork",
|
|
933
|
+
fields: {
|
|
934
|
+
ssid,
|
|
935
|
+
credentials,
|
|
936
|
+
breadcrumb: this.lastBreadcrumb++
|
|
937
|
+
}
|
|
776
938
|
},
|
|
777
|
-
{
|
|
939
|
+
{
|
|
940
|
+
useExtendedFailSafeMessageResponseTimeout: true
|
|
941
|
+
}
|
|
778
942
|
);
|
|
779
943
|
if (addNetworkingStatus !== import_network_commissioning.NetworkCommissioning.NetworkCommissioningStatus.Success) {
|
|
780
944
|
throw new WifiNetworkSetupFailedError(`Commissionee failed to add WiFi network: ${addDebugText}`);
|
|
@@ -785,7 +949,15 @@ class ControllerCommissioningFlow {
|
|
|
785
949
|
logger.debug(
|
|
786
950
|
`Commissionee added WiFi network ${this.commissioningOptions.wifiNetwork.wifiSsid} with network index ${networkIndex}`
|
|
787
951
|
);
|
|
788
|
-
const updatedNetworks = await
|
|
952
|
+
const [updatedNetworks] = await this.#readConcreteAttributeValues(
|
|
953
|
+
(0, import_Read.Read)(
|
|
954
|
+
import_Read.Read.Attribute({
|
|
955
|
+
endpoint: RootEndpointNumber,
|
|
956
|
+
cluster: import_network_commissioning.NetworkCommissioning.Complete,
|
|
957
|
+
attributes: ["networks"]
|
|
958
|
+
})
|
|
959
|
+
)
|
|
960
|
+
);
|
|
789
961
|
if (updatedNetworks[networkIndex] === void 0) {
|
|
790
962
|
throw new WifiNetworkSetupFailedError(`Commissionee did not return network with index ${networkIndex}`);
|
|
791
963
|
}
|
|
@@ -800,14 +972,20 @@ class ControllerCommissioningFlow {
|
|
|
800
972
|
breadcrumb: this.lastBreadcrumb
|
|
801
973
|
};
|
|
802
974
|
}
|
|
803
|
-
|
|
804
|
-
await this.#
|
|
805
|
-
const connectResult = await networkCommissioningClusterClient.connectNetwork(
|
|
975
|
+
await this.#ensureFailsafeTimerFor((0, import_general.Seconds)(connectMaxTimeSeconds));
|
|
976
|
+
const connectResult = await this.#invokeCommand(
|
|
806
977
|
{
|
|
807
|
-
|
|
808
|
-
|
|
978
|
+
endpoint: RootEndpointNumber,
|
|
979
|
+
cluster: import_network_commissioning.NetworkCommissioning.Complete,
|
|
980
|
+
command: "connectNetwork",
|
|
981
|
+
fields: {
|
|
982
|
+
networkId,
|
|
983
|
+
breadcrumb: this.lastBreadcrumb++
|
|
984
|
+
}
|
|
809
985
|
},
|
|
810
|
-
{
|
|
986
|
+
{
|
|
987
|
+
expectedProcessingTime: (0, import_general.Seconds)(connectMaxTimeSeconds)
|
|
988
|
+
}
|
|
811
989
|
);
|
|
812
990
|
if (connectResult.networkingStatus !== import_network_commissioning.NetworkCommissioning.NetworkCommissioningStatus.Success) {
|
|
813
991
|
throw new WifiNetworkSetupFailedError(
|
|
@@ -864,17 +1042,29 @@ class ControllerCommissioningFlow {
|
|
|
864
1042
|
}
|
|
865
1043
|
}
|
|
866
1044
|
logger.debug("Configuring Thread network ...");
|
|
867
|
-
const
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
1045
|
+
const [scanMaxTimeSeconds, connectMaxTimeSeconds] = await this.#readConcreteAttributeValues(
|
|
1046
|
+
(0, import_Read.Read)(
|
|
1047
|
+
import_Read.Read.Attribute({
|
|
1048
|
+
endpoint: RootEndpointNumber,
|
|
1049
|
+
cluster: import_network_commissioning.NetworkCommissioning.Complete,
|
|
1050
|
+
attributes: ["scanMaxTimeSeconds", "connectMaxTimeSeconds"]
|
|
1051
|
+
})
|
|
1052
|
+
)
|
|
871
1053
|
);
|
|
872
|
-
if (this.
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
{
|
|
1054
|
+
if (!this.commissioningOptions.threadNetwork?.networkName) {
|
|
1055
|
+
logger.info("Thread network name is not configured. Skip scanning for it.");
|
|
1056
|
+
} else if (this.collectedCommissioningData.supportsConcurrentConnection !== false) {
|
|
1057
|
+
await this.#ensureFailsafeTimerFor((0, import_general.Seconds)(scanMaxTimeSeconds));
|
|
1058
|
+
const { networkingStatus, threadScanResults, debugText } = await this.#invokeCommand(
|
|
1059
|
+
{
|
|
1060
|
+
endpoint: RootEndpointNumber,
|
|
1061
|
+
cluster: import_network_commissioning.NetworkCommissioning.Complete,
|
|
1062
|
+
command: "scanNetworks",
|
|
1063
|
+
fields: { breadcrumb: this.lastBreadcrumb++ }
|
|
1064
|
+
},
|
|
1065
|
+
{
|
|
1066
|
+
expectedProcessingTime: (0, import_general.Seconds)(scanMaxTimeSeconds)
|
|
1067
|
+
}
|
|
878
1068
|
);
|
|
879
1069
|
if (networkingStatus !== import_network_commissioning.NetworkCommissioning.NetworkCommissioningStatus.Success) {
|
|
880
1070
|
throw new ThreadNetworkSetupFailedError(
|
|
@@ -902,12 +1092,19 @@ class ControllerCommissioningFlow {
|
|
|
902
1092
|
networkingStatus: addNetworkingStatus,
|
|
903
1093
|
debugText: addDebugText,
|
|
904
1094
|
networkIndex
|
|
905
|
-
} = await
|
|
1095
|
+
} = await this.#invokeCommand(
|
|
906
1096
|
{
|
|
907
|
-
|
|
908
|
-
|
|
1097
|
+
endpoint: RootEndpointNumber,
|
|
1098
|
+
cluster: import_network_commissioning.NetworkCommissioning.Complete,
|
|
1099
|
+
command: "addOrUpdateThreadNetwork",
|
|
1100
|
+
fields: {
|
|
1101
|
+
operationalDataset: import_general.Bytes.fromHex(this.commissioningOptions.threadNetwork.operationalDataset),
|
|
1102
|
+
breadcrumb: this.lastBreadcrumb++
|
|
1103
|
+
}
|
|
909
1104
|
},
|
|
910
|
-
{
|
|
1105
|
+
{
|
|
1106
|
+
useExtendedFailSafeMessageResponseTimeout: true
|
|
1107
|
+
}
|
|
911
1108
|
);
|
|
912
1109
|
if (addNetworkingStatus !== import_network_commissioning.NetworkCommissioning.NetworkCommissioningStatus.Success) {
|
|
913
1110
|
throw new ThreadNetworkSetupFailedError(`Commissionee failed to add Thread network: ${addDebugText}`);
|
|
@@ -918,7 +1115,15 @@ class ControllerCommissioningFlow {
|
|
|
918
1115
|
logger.debug(
|
|
919
1116
|
`Commissionee added Thread network ${this.commissioningOptions.threadNetwork.networkName} with network index ${networkIndex}`
|
|
920
1117
|
);
|
|
921
|
-
const updatedNetworks = await
|
|
1118
|
+
const updatedNetworks = await this.#readConcreteAttributeValues(
|
|
1119
|
+
(0, import_Read.Read)(
|
|
1120
|
+
import_Read.Read.Attribute({
|
|
1121
|
+
endpoint: RootEndpointNumber,
|
|
1122
|
+
cluster: import_network_commissioning.NetworkCommissioning.Complete,
|
|
1123
|
+
attributes: ["networks"]
|
|
1124
|
+
})
|
|
1125
|
+
)
|
|
1126
|
+
);
|
|
922
1127
|
if (updatedNetworks[networkIndex] === void 0) {
|
|
923
1128
|
throw new ThreadNetworkSetupFailedError(`Commissionee did not return network with index ${networkIndex}`);
|
|
924
1129
|
}
|
|
@@ -932,14 +1137,20 @@ class ControllerCommissioningFlow {
|
|
|
932
1137
|
breadcrumb: this.lastBreadcrumb
|
|
933
1138
|
};
|
|
934
1139
|
}
|
|
935
|
-
|
|
936
|
-
await this.#
|
|
937
|
-
const connectResult = await networkCommissioningClusterClient.connectNetwork(
|
|
1140
|
+
await this.#ensureFailsafeTimerFor((0, import_general.Seconds)(connectMaxTimeSeconds));
|
|
1141
|
+
const connectResult = await this.#invokeCommand(
|
|
938
1142
|
{
|
|
939
|
-
|
|
940
|
-
|
|
1143
|
+
endpoint: RootEndpointNumber,
|
|
1144
|
+
cluster: import_network_commissioning.NetworkCommissioning.Complete,
|
|
1145
|
+
command: "connectNetwork",
|
|
1146
|
+
fields: {
|
|
1147
|
+
networkId,
|
|
1148
|
+
breadcrumb: this.lastBreadcrumb++
|
|
1149
|
+
}
|
|
941
1150
|
},
|
|
942
|
-
{
|
|
1151
|
+
{
|
|
1152
|
+
expectedProcessingTime: (0, import_general.Seconds)(connectMaxTimeSeconds)
|
|
1153
|
+
}
|
|
943
1154
|
);
|
|
944
1155
|
if (connectResult.networkingStatus !== import_network_commissioning.NetworkCommissioning.NetworkCommissioningStatus.Success) {
|
|
945
1156
|
throw new ThreadNetworkSetupFailedError(
|
|
@@ -989,7 +1200,7 @@ class ControllerCommissioningFlow {
|
|
|
989
1200
|
let transitionResult;
|
|
990
1201
|
try {
|
|
991
1202
|
transitionResult = await this.transitionToCase(
|
|
992
|
-
this.
|
|
1203
|
+
this.interaction.address,
|
|
993
1204
|
// Assume concurrent connections are supported if not know (which should not be the case when we came here)
|
|
994
1205
|
isConcurrentFlow
|
|
995
1206
|
);
|
|
@@ -1004,7 +1215,7 @@ class ControllerCommissioningFlow {
|
|
|
1004
1215
|
breadcrumb: this.lastBreadcrumb
|
|
1005
1216
|
};
|
|
1006
1217
|
}
|
|
1007
|
-
this.
|
|
1218
|
+
this.interaction = transitionResult;
|
|
1008
1219
|
this.#clusterClients.clear();
|
|
1009
1220
|
logger.debug("Successfully reconnected with device ...");
|
|
1010
1221
|
return {
|
|
@@ -1020,12 +1231,18 @@ class ControllerCommissioningFlow {
|
|
|
1020
1231
|
* the commissioning process.
|
|
1021
1232
|
*/
|
|
1022
1233
|
async #completeCommissioning() {
|
|
1023
|
-
const generalCommissioningClusterClient = this.#getClusterClient(import_general_commissioning.GeneralCommissioning.Cluster);
|
|
1024
1234
|
this.#ensureGeneralCommissioningSuccess(
|
|
1025
1235
|
"commissioningComplete",
|
|
1026
|
-
await
|
|
1027
|
-
|
|
1028
|
-
|
|
1236
|
+
await this.#invokeCommand(
|
|
1237
|
+
{
|
|
1238
|
+
endpoint: RootEndpointNumber,
|
|
1239
|
+
cluster: import_general_commissioning.GeneralCommissioning.Complete,
|
|
1240
|
+
command: "commissioningComplete"
|
|
1241
|
+
},
|
|
1242
|
+
{
|
|
1243
|
+
useExtendedFailSafeMessageResponseTimeout: true
|
|
1244
|
+
}
|
|
1245
|
+
)
|
|
1029
1246
|
);
|
|
1030
1247
|
this.#currentFailSafeEndTime = void 0;
|
|
1031
1248
|
return {
|