@matter/protocol 0.13.0-alpha.0-20250318-c1aa38b08 → 0.13.0-alpha.0-20250323-770919c6a
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/ble/BtpSessionHandler.js +2 -2
- package/dist/cjs/ble/BtpSessionHandler.js.map +1 -1
- package/dist/cjs/certificate/CertificateAuthority.d.ts +1 -0
- package/dist/cjs/certificate/CertificateAuthority.d.ts.map +1 -1
- package/dist/cjs/certificate/CertificateAuthority.js.map +1 -1
- package/dist/cjs/certificate/CertificateManager.d.ts.map +1 -1
- package/dist/cjs/certificate/CertificateManager.js +21 -19
- package/dist/cjs/certificate/CertificateManager.js.map +1 -1
- package/dist/cjs/cluster/client/ClusterClient.d.ts.map +1 -1
- package/dist/cjs/cluster/client/ClusterClient.js +3 -0
- package/dist/cjs/cluster/client/ClusterClient.js.map +1 -1
- package/dist/cjs/cluster/server/AttributeServer.d.ts.map +1 -1
- package/dist/cjs/cluster/server/AttributeServer.js +5 -5
- package/dist/cjs/cluster/server/AttributeServer.js.map +1 -1
- package/dist/cjs/cluster/server/CommandServer.js +2 -2
- package/dist/cjs/cluster/server/CommandServer.js.map +1 -1
- package/dist/cjs/common/FailsafeContext.js +1 -1
- package/dist/cjs/common/FailsafeContext.js.map +1 -1
- package/dist/cjs/endpoint/EndpointStructureLogger.js +1 -1
- package/dist/cjs/endpoint/EndpointStructureLogger.js.map +1 -1
- package/dist/cjs/events/OccurrenceManager.d.ts.map +1 -1
- package/dist/cjs/events/OccurrenceManager.js +2 -2
- package/dist/cjs/events/OccurrenceManager.js.map +1 -1
- package/dist/cjs/interaction/AttributeDataDecoder.d.ts +21 -4
- package/dist/cjs/interaction/AttributeDataDecoder.d.ts.map +1 -1
- package/dist/cjs/interaction/AttributeDataDecoder.js +41 -2
- package/dist/cjs/interaction/AttributeDataDecoder.js.map +1 -1
- package/dist/cjs/interaction/AttributeDataEncoder.d.ts.map +1 -1
- package/dist/cjs/interaction/AttributeDataEncoder.js +3 -3
- package/dist/cjs/interaction/AttributeDataEncoder.js.map +1 -1
- package/dist/cjs/interaction/DecodedDataReport.d.ts +4 -2
- package/dist/cjs/interaction/DecodedDataReport.d.ts.map +1 -1
- package/dist/cjs/interaction/DecodedDataReport.js +6 -2
- package/dist/cjs/interaction/DecodedDataReport.js.map +1 -1
- package/dist/cjs/interaction/EventDataDecoder.d.ts +15 -3
- package/dist/cjs/interaction/EventDataDecoder.d.ts.map +1 -1
- package/dist/cjs/interaction/EventDataDecoder.js +39 -2
- package/dist/cjs/interaction/EventDataDecoder.js.map +1 -1
- package/dist/cjs/interaction/InteractionClient.d.ts +44 -4
- package/dist/cjs/interaction/InteractionClient.d.ts.map +1 -1
- package/dist/cjs/interaction/InteractionClient.js +71 -18
- package/dist/cjs/interaction/InteractionClient.js.map +1 -1
- package/dist/cjs/interaction/InteractionMessenger.d.ts.map +1 -1
- package/dist/cjs/interaction/InteractionMessenger.js +7 -4
- package/dist/cjs/interaction/InteractionMessenger.js.map +1 -1
- package/dist/cjs/interaction/InteractionServer.d.ts.map +1 -1
- package/dist/cjs/interaction/InteractionServer.js +7 -7
- package/dist/cjs/interaction/InteractionServer.js.map +1 -1
- package/dist/cjs/interaction/ServerSubscription.d.ts.map +1 -1
- package/dist/cjs/interaction/ServerSubscription.js +1 -1
- package/dist/cjs/interaction/ServerSubscription.js.map +1 -1
- package/dist/cjs/mdns/MdnsScanner.js +2 -2
- package/dist/cjs/mdns/MdnsScanner.js.map +1 -1
- package/dist/cjs/peer/ControllerCommissioner.d.ts +15 -3
- package/dist/cjs/peer/ControllerCommissioner.d.ts.map +1 -1
- package/dist/cjs/peer/ControllerCommissioner.js +17 -6
- package/dist/cjs/peer/ControllerCommissioner.js.map +1 -1
- package/dist/cjs/peer/ControllerCommissioningFlow.d.ts +47 -1
- package/dist/cjs/peer/ControllerCommissioningFlow.d.ts.map +1 -1
- package/dist/cjs/peer/ControllerCommissioningFlow.js +136 -136
- package/dist/cjs/peer/ControllerCommissioningFlow.js.map +1 -1
- package/dist/cjs/peer/ControllerDiscovery.d.ts.map +1 -1
- package/dist/cjs/peer/ControllerDiscovery.js +4 -4
- package/dist/cjs/peer/ControllerDiscovery.js.map +1 -1
- package/dist/cjs/peer/PeerSet.d.ts +2 -2
- package/dist/cjs/peer/PeerSet.d.ts.map +1 -1
- package/dist/cjs/peer/PeerSet.js +6 -1
- package/dist/cjs/peer/PeerSet.js.map +1 -1
- package/dist/cjs/protocol/ChannelManager.d.ts.map +1 -1
- package/dist/cjs/protocol/ChannelManager.js +11 -4
- package/dist/cjs/protocol/ChannelManager.js.map +1 -1
- package/dist/cjs/protocol/ExchangeManager.d.ts.map +1 -1
- package/dist/cjs/protocol/ExchangeManager.js +1 -2
- package/dist/cjs/protocol/ExchangeManager.js.map +1 -1
- package/dist/esm/ble/BtpSessionHandler.js +2 -2
- package/dist/esm/ble/BtpSessionHandler.js.map +1 -1
- package/dist/esm/certificate/CertificateAuthority.d.ts +1 -0
- package/dist/esm/certificate/CertificateAuthority.d.ts.map +1 -1
- package/dist/esm/certificate/CertificateAuthority.js.map +1 -1
- package/dist/esm/certificate/CertificateManager.d.ts.map +1 -1
- package/dist/esm/certificate/CertificateManager.js +22 -19
- package/dist/esm/certificate/CertificateManager.js.map +1 -1
- package/dist/esm/cluster/client/ClusterClient.d.ts.map +1 -1
- package/dist/esm/cluster/client/ClusterClient.js +3 -0
- package/dist/esm/cluster/client/ClusterClient.js.map +1 -1
- package/dist/esm/cluster/server/AttributeServer.d.ts.map +1 -1
- package/dist/esm/cluster/server/AttributeServer.js +15 -6
- package/dist/esm/cluster/server/AttributeServer.js.map +1 -1
- package/dist/esm/cluster/server/CommandServer.js +3 -3
- package/dist/esm/cluster/server/CommandServer.js.map +1 -1
- package/dist/esm/common/FailsafeContext.js +1 -1
- package/dist/esm/common/FailsafeContext.js.map +1 -1
- package/dist/esm/endpoint/EndpointStructureLogger.js +1 -1
- package/dist/esm/endpoint/EndpointStructureLogger.js.map +1 -1
- package/dist/esm/events/OccurrenceManager.d.ts.map +1 -1
- package/dist/esm/events/OccurrenceManager.js +3 -2
- package/dist/esm/events/OccurrenceManager.js.map +1 -1
- package/dist/esm/interaction/AttributeDataDecoder.d.ts +21 -4
- package/dist/esm/interaction/AttributeDataDecoder.d.ts.map +1 -1
- package/dist/esm/interaction/AttributeDataDecoder.js +41 -2
- package/dist/esm/interaction/AttributeDataDecoder.js.map +1 -1
- package/dist/esm/interaction/AttributeDataEncoder.d.ts.map +1 -1
- package/dist/esm/interaction/AttributeDataEncoder.js +4 -4
- package/dist/esm/interaction/AttributeDataEncoder.js.map +1 -1
- package/dist/esm/interaction/DecodedDataReport.d.ts +4 -2
- package/dist/esm/interaction/DecodedDataReport.d.ts.map +1 -1
- package/dist/esm/interaction/DecodedDataReport.js +12 -4
- package/dist/esm/interaction/DecodedDataReport.js.map +1 -1
- package/dist/esm/interaction/EventDataDecoder.d.ts +15 -3
- package/dist/esm/interaction/EventDataDecoder.d.ts.map +1 -1
- package/dist/esm/interaction/EventDataDecoder.js +39 -2
- package/dist/esm/interaction/EventDataDecoder.js.map +1 -1
- package/dist/esm/interaction/InteractionClient.d.ts +44 -4
- package/dist/esm/interaction/InteractionClient.d.ts.map +1 -1
- package/dist/esm/interaction/InteractionClient.js +74 -18
- package/dist/esm/interaction/InteractionClient.js.map +1 -1
- package/dist/esm/interaction/InteractionMessenger.d.ts.map +1 -1
- package/dist/esm/interaction/InteractionMessenger.js +8 -4
- package/dist/esm/interaction/InteractionMessenger.js.map +1 -1
- package/dist/esm/interaction/InteractionServer.d.ts.map +1 -1
- package/dist/esm/interaction/InteractionServer.js +17 -8
- package/dist/esm/interaction/InteractionServer.js.map +1 -1
- package/dist/esm/interaction/ServerSubscription.d.ts.map +1 -1
- package/dist/esm/interaction/ServerSubscription.js +2 -1
- package/dist/esm/interaction/ServerSubscription.js.map +1 -1
- package/dist/esm/mdns/MdnsScanner.js +2 -2
- package/dist/esm/mdns/MdnsScanner.js.map +1 -1
- package/dist/esm/peer/ControllerCommissioner.d.ts +15 -3
- package/dist/esm/peer/ControllerCommissioner.d.ts.map +1 -1
- package/dist/esm/peer/ControllerCommissioner.js +18 -6
- package/dist/esm/peer/ControllerCommissioner.js.map +1 -1
- package/dist/esm/peer/ControllerCommissioningFlow.d.ts +47 -1
- package/dist/esm/peer/ControllerCommissioningFlow.d.ts.map +1 -1
- package/dist/esm/peer/ControllerCommissioningFlow.js +147 -137
- package/dist/esm/peer/ControllerCommissioningFlow.js.map +1 -1
- package/dist/esm/peer/ControllerDiscovery.d.ts.map +1 -1
- package/dist/esm/peer/ControllerDiscovery.js +5 -5
- package/dist/esm/peer/ControllerDiscovery.js.map +1 -1
- package/dist/esm/peer/PeerSet.d.ts +2 -2
- package/dist/esm/peer/PeerSet.d.ts.map +1 -1
- package/dist/esm/peer/PeerSet.js +7 -2
- package/dist/esm/peer/PeerSet.js.map +1 -1
- package/dist/esm/protocol/ChannelManager.d.ts.map +1 -1
- package/dist/esm/protocol/ChannelManager.js +11 -4
- package/dist/esm/protocol/ChannelManager.js.map +1 -1
- package/dist/esm/protocol/ExchangeManager.d.ts.map +1 -1
- package/dist/esm/protocol/ExchangeManager.js +2 -2
- package/dist/esm/protocol/ExchangeManager.js.map +1 -1
- package/package.json +6 -6
- package/src/ble/BtpSessionHandler.ts +2 -2
- package/src/certificate/CertificateAuthority.ts +1 -0
- package/src/certificate/CertificateManager.ts +22 -19
- package/src/cluster/client/ClusterClient.ts +3 -0
- package/src/cluster/server/AttributeServer.ts +15 -6
- package/src/cluster/server/CommandServer.ts +3 -3
- package/src/common/FailsafeContext.ts +1 -1
- package/src/endpoint/EndpointStructureLogger.ts +1 -1
- package/src/events/OccurrenceManager.ts +3 -2
- package/src/interaction/AttributeDataDecoder.ts +67 -7
- package/src/interaction/AttributeDataEncoder.ts +4 -4
- package/src/interaction/DecodedDataReport.ts +24 -5
- package/src/interaction/EventDataDecoder.ts +57 -5
- package/src/interaction/InteractionClient.ts +112 -18
- package/src/interaction/InteractionMessenger.ts +8 -4
- package/src/interaction/InteractionServer.ts +19 -9
- package/src/interaction/ServerSubscription.ts +2 -1
- package/src/mdns/MdnsScanner.ts +2 -2
- package/src/peer/ControllerCommissioner.ts +32 -7
- package/src/peer/ControllerCommissioningFlow.ts +160 -146
- package/src/peer/ControllerDiscovery.ts +5 -5
- package/src/peer/PeerSet.ts +7 -2
- package/src/protocol/ChannelManager.ts +11 -4
- package/src/protocol/ExchangeManager.ts +2 -2
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { GeneralCommissioning } from "#clusters/general-commissioning";
|
|
7
|
+
import { NetworkCommissioning } from "#clusters/network-commissioning";
|
|
7
8
|
import { MatterError } from "#general";
|
|
8
|
-
import { VendorId } from "#types";
|
|
9
|
+
import { ClusterId, EndpointNumber, FabricIndex, TypeFromPartialBitSchema, TypeFromSchema, VendorId } from "#types";
|
|
9
10
|
import { CertificateAuthority } from "../certificate/CertificateAuthority.js";
|
|
10
11
|
import { Fabric } from "../fabric/Fabric.js";
|
|
11
12
|
import { InteractionClient } from "../interaction/InteractionClient.js";
|
|
@@ -56,6 +57,42 @@ type CommissioningStepResult = {
|
|
|
56
57
|
code: CommissioningStepResultCode;
|
|
57
58
|
breadcrumb: number;
|
|
58
59
|
};
|
|
60
|
+
/**
|
|
61
|
+
* Definition of one commissioning step
|
|
62
|
+
* All steps are for execution sorted by stepNumber and subStepNumber
|
|
63
|
+
*/
|
|
64
|
+
type CommissioningStep = {
|
|
65
|
+
/** Step Number according to the specs */
|
|
66
|
+
stepNumber: number;
|
|
67
|
+
/** Order of actions within a step */
|
|
68
|
+
subStepNumber: number;
|
|
69
|
+
/** Name of the action or step */
|
|
70
|
+
name: string;
|
|
71
|
+
/** Logic function to execute */
|
|
72
|
+
stepLogic: () => Promise<CommissioningStepResult>;
|
|
73
|
+
/** Optional flag to indicate that the failsafe timer should be rearmed in any case before this step. */
|
|
74
|
+
reArmFailsafe?: boolean;
|
|
75
|
+
};
|
|
76
|
+
/** Data that are collected initially or through the commissioning process and can be used also by other steps. */
|
|
77
|
+
type CollectedCommissioningData = {
|
|
78
|
+
basicCommissioningInfo?: TypeFromSchema<typeof GeneralCommissioning.TlvBasicCommissioningInfo>;
|
|
79
|
+
productName?: string;
|
|
80
|
+
networkFeatures?: {
|
|
81
|
+
endpointId: number;
|
|
82
|
+
value: TypeFromPartialBitSchema<typeof NetworkCommissioning.Complete.features>;
|
|
83
|
+
}[];
|
|
84
|
+
networkStatus?: {
|
|
85
|
+
endpointId: number;
|
|
86
|
+
value: TypeFromSchema<typeof NetworkCommissioning.TlvNetworkInfo>[];
|
|
87
|
+
}[];
|
|
88
|
+
rootPartsList?: EndpointNumber[];
|
|
89
|
+
rootServerList?: ClusterId[];
|
|
90
|
+
vendorId?: VendorId;
|
|
91
|
+
productId?: number;
|
|
92
|
+
supportsConcurrentConnection?: boolean;
|
|
93
|
+
successfullyConnectedToNetwork?: boolean;
|
|
94
|
+
fabricIndex?: FabricIndex;
|
|
95
|
+
};
|
|
59
96
|
/** Error that throws when Commissioning fails and process cannot be continued. */
|
|
60
97
|
export declare class CommissioningError extends MatterError {
|
|
61
98
|
}
|
|
@@ -64,6 +101,15 @@ export declare class CommissioningError extends MatterError {
|
|
|
64
101
|
*/
|
|
65
102
|
export declare class ControllerCommissioningFlow {
|
|
66
103
|
#private;
|
|
104
|
+
protected interactionClient: InteractionClient;
|
|
105
|
+
protected readonly ca: CertificateAuthority;
|
|
106
|
+
protected readonly fabric: Fabric;
|
|
107
|
+
protected readonly transitionToCase: (peerAddress: PeerAddress, supportsConcurrentConnections: boolean) => Promise<InteractionClient | undefined>;
|
|
108
|
+
protected readonly commissioningOptions: ControllerCommissioningFlowOptions;
|
|
109
|
+
protected readonly commissioningSteps: CommissioningStep[];
|
|
110
|
+
protected readonly commissioningStepResults: Map<string, CommissioningStepResult>;
|
|
111
|
+
protected lastBreadcrumb: number;
|
|
112
|
+
protected collectedCommissioningData: CollectedCommissioningData;
|
|
67
113
|
constructor(
|
|
68
114
|
/** InteractionClient for the initiated PASE session */
|
|
69
115
|
interactionClient: InteractionClient,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ControllerCommissioningFlow.d.ts","sourceRoot":"","sources":["../../../src/peer/ControllerCommissioningFlow.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"ControllerCommissioningFlow.d.ts","sourceRoot":"","sources":["../../../src/peer/ControllerCommissioningFlow.ts"],"names":[],"mappings":"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"}
|