/** * @license * Copyright 2022-2026 Matter.js Authors * SPDX-License-Identifier: Apache-2.0 */ /*** THIS FILE IS GENERATED, DO NOT EDIT ***/ import type { ClusterType, ClusterTyping } from "../cluster/ClusterType.js"; import type { ClusterId } from "../datatype/ClusterId.js"; import type { ClusterModel } from "@matter/model"; import type { Bytes, MaybePromise } from "@matter/general"; import type { NodeId } from "../datatype/NodeId.js"; import type { VendorId } from "../datatype/VendorId.js"; import type { Status } from "../globals/Status.js"; import type { EndpointNumber } from "../datatype/EndpointNumber.js"; import type { GroupId } from "../datatype/GroupId.js"; import type { DeviceTypeId } from "../datatype/DeviceTypeId.js"; import type { SubjectId } from "../datatype/SubjectId.js"; /** * Definitions for the JointFabricDatastore cluster. * * The Joint Fabric Datastore Cluster is a cluster that provides a mechanism for the Joint Fabric Administrators to * manage the set of Nodes, Groups, and Group membership among Nodes in the Joint Fabric. * * When an Ecosystem Administrator Node is commissioned onto the Joint Fabric, the Ecosystem Administrator Node has no * knowledge of what Nodes and Groups are present, or what set-up information related to the Joint Fabric is provided by * the user. To address lack of knowledge, the Joint Fabric Datastore provides the information required for all * Ecosystem Administrators to maintain a consistent view of the Joint Fabric including Nodes, Groups, settings and * privileges. * * The Joint Fabric Datastore contains the access control configuration for the Joint Fabric - the groups, the group * keys, the group membership (expressed in terms of binding and ACL entries), as well as the CAT value and version for * each group. This section describes how all changes to the Joint Fabric access control configuration are made via the * Joint Fabric Datastore: a change is first made to the Datastore where the impacted configuration of individual nodes * is marked as pending; the Datastore is then responsible for propagating the change to all impacted nodes and then * updating its per-node (and sometimes per-endpoint) pending state to committed. * * The Joint Fabric Datastore cluster server shall only be accessible on a Node which is acting as the Joint Fabric * Anchor Administrator. When not acting as the Joint Fabric Anchor Administrator, the Joint Fabric Datastore cluster * shall NOT be accessible. * * The Admin level of access to the Joint Fabric Datastore cluster server shall be limited to JF Administrator Nodes * identified using the Administrator CAT. * * > [!NOTE] * * > NOTE: Support for Joint Fabric Datastore cluster is provisional. * * @see {@link MatterSpecification.v151.Core} § 11.24 */ export declare namespace JointFabricDatastore { /** * The Matter protocol cluster identifier. */ export const id: ClusterId & 0x0752; /** * Textual cluster identifier. */ export const name: "JointFabricDatastore"; /** * The cluster revision assigned by {@link MatterSpecification.v151.Cluster}. */ export const revision: 1; /** * Canonical metadata for the JointFabricDatastore cluster. * * This is the exhaustive runtime metadata source that matter.js considers canonical. */ export const schema: ClusterModel; /** * {@link JointFabricDatastore} always supports these elements. */ export interface BaseAttributes { /** * This shall indicate the Anchor Root CA used to sign all NOC Issuers in the Joint Fabric for the accessing * fabric. A null value indicates that the Joint Fabric is not yet formed. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.1 */ anchorRootCa: Bytes; /** * This shall indicate the Node identifier of the Joint Fabric Anchor Root CA for the accessing fabric. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.2 */ anchorNodeId: NodeId; /** * This shall indicate the Vendor identifier of the Joint Fabric Anchor Root CA for the accessing fabric. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.3 */ anchorVendorId: VendorId; /** * Friendly name for the accessing fabric which can be propagated to nodes. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.4 */ friendlyName: string; /** * This shall indicate the list of DatastoreGroupKeySetStruct used in the Joint Fabric for the accessing fabric. * * This attribute shall contain at least one entry, the IPK, which has GroupKeySetID of 0. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.5 */ groupKeySetList: DatastoreGroupKeySet[]; /** * This shall indicate the list of groups in the Joint Fabric for the accessing fabric. * * This list must include, at a minimum, one group with GroupCAT value set to Administrator CAT and one group * with GroupCAT value set to Anchor CAT. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.6 */ groupList: DatastoreGroupInformationEntry[]; /** * This shall indicate the list of nodes in the Joint Fabric for the accessing fabric. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.7 */ nodeList: DatastoreNodeInformationEntry[]; /** * This shall indicate the list of administrators in the Joint Fabric for the accessing fabric. * * Only one Administrator may serve as the Anchor Root CA and Anchor Fabric Administrator and shall have index * value 0. All other Joint Fabric Administrators shall be referenced at index 1 or greater. * * A null value or empty list indicates that the Joint Fabric is not yet formed. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.8 */ adminList: DatastoreAdministratorInformationEntry[]; /** * This shall indicate the current state of the Joint Fabric Datastore Cluster for the accessing fabric. * * The Committed status indicates the DataStore is ready for use. The Pending status indicates that the * DataStore is not yet ready for use. The DeletePending status indicates that the DataStore is in the process * of being transferred to another Joint Fabric Anchor Administrator. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.9 */ status: DatastoreStatusEntry; /** * This shall indicate the group membership of endpoints in the accessing fabric. * * Any changes to this List (add/remove entry) must follow the pending->committed workflow with current state * reflected in the Status Entry. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.10 */ endpointGroupIdList: DatastoreEndpointGroupIdEntry[]; /** * This shall indicate the binding list for endpoints in the accessing fabric. * * Any changes to this List (add/remove entry) must follow the pending->committed workflow with current state * reflected in the Status Entry. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.11 */ endpointBindingList: DatastoreEndpointBindingEntry[]; /** * This shall indicate the KeySet entries for nodes in the accessing fabric. * * Any changes to this List (add/remove entry) must follow the pending->committed workflow with current state * reflected in the Status Entry. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.12 */ nodeKeySetList: DatastoreNodeKeySetEntry[]; /** * This shall indicate the ACL entries for nodes in the accessing fabric. * * Any changes to this List (add/remove entry) must follow the pending->committed workflow with current state * reflected in the Status Entry. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.13 */ nodeAclList: DatastoreAclEntry[]; /** * This shall indicate the Endpoint entries for nodes in the accessing fabric. * * Any changes to this List (add/remove entry) must follow the pending->committed workflow with current state * reflected in the Status Entry. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.14 */ nodeEndpointList: DatastoreEndpointEntry[]; } /** * Attributes that may appear in {@link JointFabricDatastore}. */ export interface Attributes { /** * This shall indicate the Anchor Root CA used to sign all NOC Issuers in the Joint Fabric for the accessing * fabric. A null value indicates that the Joint Fabric is not yet formed. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.1 */ anchorRootCa: Bytes; /** * This shall indicate the Node identifier of the Joint Fabric Anchor Root CA for the accessing fabric. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.2 */ anchorNodeId: NodeId; /** * This shall indicate the Vendor identifier of the Joint Fabric Anchor Root CA for the accessing fabric. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.3 */ anchorVendorId: VendorId; /** * Friendly name for the accessing fabric which can be propagated to nodes. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.4 */ friendlyName: string; /** * This shall indicate the list of DatastoreGroupKeySetStruct used in the Joint Fabric for the accessing fabric. * * This attribute shall contain at least one entry, the IPK, which has GroupKeySetID of 0. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.5 */ groupKeySetList: DatastoreGroupKeySet[]; /** * This shall indicate the list of groups in the Joint Fabric for the accessing fabric. * * This list must include, at a minimum, one group with GroupCAT value set to Administrator CAT and one group * with GroupCAT value set to Anchor CAT. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.6 */ groupList: DatastoreGroupInformationEntry[]; /** * This shall indicate the list of nodes in the Joint Fabric for the accessing fabric. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.7 */ nodeList: DatastoreNodeInformationEntry[]; /** * This shall indicate the list of administrators in the Joint Fabric for the accessing fabric. * * Only one Administrator may serve as the Anchor Root CA and Anchor Fabric Administrator and shall have index * value 0. All other Joint Fabric Administrators shall be referenced at index 1 or greater. * * A null value or empty list indicates that the Joint Fabric is not yet formed. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.8 */ adminList: DatastoreAdministratorInformationEntry[]; /** * This shall indicate the current state of the Joint Fabric Datastore Cluster for the accessing fabric. * * The Committed status indicates the DataStore is ready for use. The Pending status indicates that the * DataStore is not yet ready for use. The DeletePending status indicates that the DataStore is in the process * of being transferred to another Joint Fabric Anchor Administrator. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.9 */ status: DatastoreStatusEntry; /** * This shall indicate the group membership of endpoints in the accessing fabric. * * Any changes to this List (add/remove entry) must follow the pending->committed workflow with current state * reflected in the Status Entry. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.10 */ endpointGroupIdList: DatastoreEndpointGroupIdEntry[]; /** * This shall indicate the binding list for endpoints in the accessing fabric. * * Any changes to this List (add/remove entry) must follow the pending->committed workflow with current state * reflected in the Status Entry. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.11 */ endpointBindingList: DatastoreEndpointBindingEntry[]; /** * This shall indicate the KeySet entries for nodes in the accessing fabric. * * Any changes to this List (add/remove entry) must follow the pending->committed workflow with current state * reflected in the Status Entry. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.12 */ nodeKeySetList: DatastoreNodeKeySetEntry[]; /** * This shall indicate the ACL entries for nodes in the accessing fabric. * * Any changes to this List (add/remove entry) must follow the pending->committed workflow with current state * reflected in the Status Entry. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.13 */ nodeAclList: DatastoreAclEntry[]; /** * This shall indicate the Endpoint entries for nodes in the accessing fabric. * * Any changes to this List (add/remove entry) must follow the pending->committed workflow with current state * reflected in the Status Entry. * * @see {@link MatterSpecification.v151.Core} § 11.24.6.14 */ nodeEndpointList: DatastoreEndpointEntry[]; } /** * {@link JointFabricDatastore} always supports these elements. */ export interface BaseCommands { /** * This command shall be used to add a KeySet to the Joint Fabric Datastore Cluster of the accessing fabric. * * GroupKeySet represents the KeySet to be added to the Joint Fabric Datastore Cluster. * * Upon receipt of this command, the Datastore shall: * * 1. Ensure there are no KeySets in the KeySetList attribute with the given GroupKeySetID. * * 2. If a match is found, then this command shall fail with a CONSTRAINT_ERROR status code. * * 3. Add the Epoch Key Entry for the KeySet to the KeySetList attribute. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.1 */ addKeySet(request: AddKeySetRequest): MaybePromise; /** * This command shall be used to update a KeySet in the Joint Fabric Datastore Cluster of the accessing fabric. * * GroupKeySet represents the KeySet to be updated in the Joint Fabric Datastore Cluster. * * Upon receipt of this command, the Datastore shall: * * 1. Find the Epoch Key Entry for the KeySet in the KeySetList attribute with the given GroupKeySetID, and * update any changed fields. * * 2. If entry is not found, then this command shall fail with a NOT_FOUND status code. * * 3. If any fields are changed as a result of this command: * * 1. Iterate through each Node Information Entry: * * 1. If the NodeKeySetList contains an entry with the given GroupKeySetID: * * 1. Update the Status on the given DatastoreNodeKeySetEntryStruct tp Pending. * * 2. Update the GroupKeySet on the given Node with the new values. * * 1. If successful, update the Status on this DatastoreNodeKeySetEntryStruct to Committed. * * 2. If not successful, update the State field of the StatusEntry on this DatastoreNodeKeySetEntryStruct to * CommitFailed and FailureCode code to the returned error. The pending change shall be applied in a * subsequent Node Refresh. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.2 */ updateKeySet(request: UpdateKeySetRequest): MaybePromise; /** * This command shall be used to remove a KeySet from the Joint Fabric Datastore Cluster of the accessing * fabric. * * GroupKeySetID represents the unique identifier for the KeySet to be removed from the Joint Fabric Datastore * Cluster. * * Attempt to remove the IPK, which has GroupKeySetID of 0, shall fail with response CONSTRAINT_ERROR. * * Upon receipt of this command, the Datastore shall: * * 1. If entry is not found, then this command shall fail with a NOT_FOUND status code. * * 2. Ensure there are no Nodes using this KeySet. To do this: * * 1. Iterate through each Node Information Entry: * * 1. If the NodeKeySetList list contains an entry with the given GroupKeySetID, and the entry does NOT have * Status DeletePending, then this command shall fail with a CONSTRAINT_ERROR status code. * * 3. Remove the DatastoreGroupKeySetStruct for the given GroupKeySetID from the GroupKeySetList attribute. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.3 */ removeKeySet(request: RemoveKeySetRequest): MaybePromise; /** * This command shall be used to add a group to the Joint Fabric Datastore Cluster of the accessing fabric. * * GroupInformationEntry represents the group to be added to the Joint Fabric Datastore Cluster. * * GroupCAT values shall fall within the range 1 to 65534. Attempts to add a group with a GroupCAT value of * Administrator CAT or Anchor CAT shall fail with CONSTRAINT_ERROR. * * Upon receipt of this command, the Datastore shall: * * 1. Ensure there are no Groups in the GroupList attribute with the given GroupID. If a match is found, then * this command shall fail with a CONSTRAINT_ERROR status code. * * 2. Add the DatastoreGroupInformationEntryStruct for the Group with the given GroupID to the GroupList * attribute. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.4 */ addGroup(request: AddGroupRequest): MaybePromise; /** * This command shall be used to update a group in the Joint Fabric Datastore Cluster of the accessing fabric. * * GroupID represents the group to be updated in the Joint Fabric Datastore Cluster. NULL values for the * additional parameters will be ignored (not updated). * * GroupCAT values shall fall within the range 1 to 65534. Attempts to update the GroupCAT on an existing group * which has a GroupCAT value of Administrator CAT or Anchor CAT shall fail with CONSTRAINT_ERROR. * * Attempts to set the GroupCAT to Administrator CAT or Anchor CAT shall fail with CONSTRAINT_ERROR. * * Upon receipt of this command, the Datastore shall: * * 1. If entry is not found, then this command shall fail with a NOT_FOUND status code. * * 2. Update the DatastoreGroupInformationEntryStruct for the Group with the given GroupID to match the * non-NULL fields passed in. * * 3. If any fields are changed as a result of this command: * * 1. Iterate through each Node Information Entry: * * 1. If the GroupKeySetID changed: * * 1. Add a DatastoreNodeKeySetEntryStruct with the new GroupKeySetID, and Status set to Pending. * * 2. Add this KeySet to the Node. * * 1. If successful, Set the Status to Committed for this entry in the NodeKeySetList. * * 2. If not successful, Set the Status to CommitFailed and the FailureCode to the returned error. The pending * change shall be applied in a subsequent Node Refresh. * * 1. If the NodeKeySetList list contains an entry with the previous GroupKeySetID: * * 3. Set the Status set to DeletePending. * * 4. Remove this KeySet from the Node. * * 1. If successful, Remove this entry from the NodeKeySetList. * * 2. If not successful, the pending change shall be applied in a subsequent Node Refresh. * * 2. If the GroupCAT, GroupCATVersion or GroupPermission changed: * * 1. If the ACLList contains an entry for this Group, update the ACL List Entry in the Datastore with the new * values and Status Pending, update the ACL attribute on the given Node with the new values. If the update * succeeds, set the Status to Committed on the ACLList Entry in the Datastore. * * 3. If the FriendlyName changed: * * 1. Iterate through each Endpoint Information Entry: * * 1. If the GroupIDList contains an entry with the given GroupID: * * 1. Update the GroupIDList Entry in the Datastore with the new values and Status Pending * * 2. Update the Groups on the given Node with the new values. * * 1. If the update succeeds, set the Status to Committed on the GroupIDList Entry in the Datastore. * * 2. If not successful, the pending change shall be applied in a subsequent Node Refresh. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.5 */ updateGroup(request: UpdateGroupRequest): MaybePromise; /** * This command shall be used to remove a group from the Joint Fabric Datastore Cluster of the accessing fabric. * * GroupID represents the unique identifier for the group to be removed from the Joint Fabric Datastore Cluster. * * Attempts to remove a group with GroupCAT value set to Administrator CAT or Anchor CAT shall fail with * CONSTRAINT_ERROR. * * Upon receipt of this command, the Datastore shall: * * 1. If entry is not found, then this command shall fail with a NOT_FOUND status code. * * 2. Ensure there are no Nodes in this group. To do this: * * 1. Iterate through each Node Information Entry: * * 1. If the GroupIDList contains an entry with the given GroupID, and the entry does NOT have Status * DeletePending, then this command shall fail with a CONSTRAINT_ERROR status code. * * 3. Remove the DatastoreGroupInformationEntryStruct for the Group with the given GroupID from the GroupList * attribute. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.6 */ removeGroup(request: RemoveGroupRequest): MaybePromise; /** * This command shall be used to add an admin to the Joint Fabric Datastore Cluster of the accessing fabric. * * NodeID, FriendlyName, VendorID and ICAC represent the admin to be added to the Joint Fabric Datastore * Cluster. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.7 */ addAdmin(request: AddAdminRequest): MaybePromise; /** * This command shall be used to update an admin in the Joint Fabric Datastore Cluster of the accessing fabric. * * NodeID represents the admin to be updated in the Joint Fabric Datastore Cluster. NULL values for the * additional parameters will be ignored (not updated). * * If entry is not found, then this command shall fail with a NOT_FOUND status code. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.8 */ updateAdmin(request: UpdateAdminRequest): MaybePromise; /** * This command shall be used to remove an admin from the Joint Fabric Datastore Cluster of the accessing * fabric. * * NodeID represents the unique identifier for the admin to be removed from the Joint Fabric Datastore Cluster. * * If entry is not found, then this command shall fail with a NOT_FOUND status code. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.9 */ removeAdmin(request: RemoveAdminRequest): MaybePromise; /** * The command shall be used to add a node to the Joint Fabric Datastore Cluster of the accessing fabric. * * NodeID represents the node to be added to the Joint Fabric Datastore Cluster. * * Upon receipt of this command, the Datastore shall: * * 1. Update CommissioningStatusEntry of the Node Information Entry with the given NodeID to Pending. * * If a Node Information Entry exists for the given NodeID, then this command shall fail with a * INVALID_CONSTRAINT status code. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.10 */ addPendingNode(request: AddPendingNodeRequest): MaybePromise; /** * The command shall be used to request that Datastore information relating to a Node of the accessing fabric is * refreshed. * * Upon receipt of this command, the Datastore shall: * * 1. Confirm that a Node Information Entry exists for the given NodeID, and if not, then this command shall * fail with a NOT_FOUND status code. * * 2. Update the CommissioningStatusEntry for the Node Information Entry to Pending. * * 3. Ensure the Endpoint List for the Node Information Entry with the given NodeID matches Endpoint list on * the given Node. This involves the following steps: * * 1. Read the PartsList of the Descriptor cluster from the Node. * * 2. For each Endpoint Information Entry in the Endpoint List of the Node Information Entry that does not * match an Endpoint ID in the PartsList, remove the Endpoint Information Entry. * * 3. For each Endpoint Information Entry in the Endpoint List of the Node Information Entry that matches an * Endpoint ID in the PartsList: * * 1. Check that each entry in Node's Group List occurs in the GroupIDList of the Endpoint Information Entry. * * 1. Add any missing entries to the GroupIDList of the Endpoint Information Entry. * * 2. For any entries in the GroupIDList with Status of Pending: * * 1. Add the corresponding change to the Node's Group List. * * 1. If successful, mark the Status to Committed. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The * error shall be handled in a subsequent Node Refresh. * * 3. For any entries in the GroupIDList with Status of DeletePending: * * 1. If successful, remove the corresponding entry from the Node's Group List. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The * error shall be handled in a subsequent Node Refresh. * * 4. For any entries in the GroupIDList with Status of CommitFailure: * * 1. A CommitFailure with an unrecoverable FailureCode shall be handled by removing the entry from the * GroupIDList. * * 2. A CommitFailure with a recoverable FailureCode (i.e. TIMEOUT, BUSY) shall be handle in a subsequent Node * Refresh. * * 2. Check that each entry in Node's Binding List occurs in the BindingList of the Endpoint Information * Entry. * * 1. Add any missing entries to the BindingList of the Endpoint Information Entry. * * 2. For any entries in the BindingList with Status of Pending: * * 1. Add the corresponding change to the Node's Binding List. * * 1. If successful, mark the Status to Committed. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The * error shall be handled in a subsequent Node Refresh. * * 3. For any entries in the BindingList with Status of DeletePending: * * 1. If successful, remove the corresponding entry from the Node's BindingList. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The * error shall be handled in a subsequent Node Refresh. * * 4. For any entries in the BindingList with Status of CommitFailure: * * 1. A CommitFailure with an unrecoverable FailureCode shall be handled by removing the entry from the * BindingList. * * 2. A CommitFailure with a recoverable FailureCode (i.e. TIMEOUT, BUSY) shall be handle in a subsequent Node * Refresh. * * 4. Ensure the GroupKeySetList for the Node Information Entry with the given NodeID matches the Group Keys * on the given Node. This involves the following steps: * * 1. Read the Group Keys from the Node. * * 2. For each GroupKeySetEntry in the GroupKeySetList of the Node Information Entry with a Pending Status: * * 1. Add the corresponding DatastoreGroupKeySetStruct to the Node's Group Key list. * * 1. If successful, mark the Status to Committed. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The * error shall be handled in a subsequent Node Refresh. * * 3. For each GroupKeySetEntry in the GroupKeySetList of the Node Information Entry with a CommitFailure * Status: * * 1. A CommitFailure with an unrecoverable FailureCode shall be handled by removing the entry from the * GroupKeySetList. * * 2. A CommitFailure with a recoverable FailureCode (i.e. TIMEOUT, BUSY) shall be handle in a subsequent Node * Refresh. * * 4. All remaining entries in the GroupKeySetList should be replaced by the remaining entries on the Node. * * 5. Ensure the ACLList for the Node Information Entry with the given NodeID matches the ACL attribute on the * given Node. This involves the following steps: * * 1. Read the ACL attribute on the Node. * * 2. For each DatastoreACLEntryStruct in the ACLList of the Node Information Entry with a Pending Status: * * 1. Add the corresponding DatastoreACLEntryStruct to the Node's ACL attribute. * * 1. If successful, mark the Status to Committed. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The * error shall be handled in a subsequent Node Refresh. * * 3. For each DatastoreACLEntryStruct in the ACLList of the Node Information Entry with a CommitFailure * Status: * * 1. A CommitFailure with an unrecoverable FailureCode (i.e. RESOURCE_EXHAUSTED, CONSTRAINT_ERROR) shall be * handled by removing the entry from the ACLList. * * 2. A CommitFailure with a recoverable FailureCode (i.e. TIMEOUT, BUSY) shall be handle in a subsequent Node * Refresh. * * 4. All remaining entries in the ACLList should be replaced by the remaining entries on the Node. * * 6. Update the CommissioningStatusEntry for the Node Information Entry to Committed. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.11 */ refreshNode(request: RefreshNodeRequest): MaybePromise; /** * The command shall be used to update the friendly name for a node in the Joint Fabric Datastore Cluster of the * accessing fabric. * * NodeID represents the node to be updated in the Joint Fabric Datastore Cluster. * * If a Node Information Entry does not exist for the given NodeID, then this command shall fail with a * NOT_FOUND status code. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.12 */ updateNode(request: UpdateNodeRequest): MaybePromise; /** * This command shall be used to remove a node from the Joint Fabric Datastore Cluster of the accessing fabric. * * NodeID represents the unique identifier for the node to be removed from the Joint Fabric Datastore Cluster. * * If a Node Information Entry does not exist for the given NodeID, then this command shall fail with a * NOT_FOUND status code. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.13 */ removeNode(request: RemoveNodeRequest): MaybePromise; /** * This command shall be used to update the state of an endpoint for a node in the Joint Fabric Datastore * Cluster of the accessing fabric. * * EndpointID represents the unique identifier for the endpoint to be updated in the Joint Fabric Datastore * Cluster. * * NodeID represents the unique identifier for the node to which the endpoint belongs. * * If an Endpoint Information Entry does not exist for the given NodeID and EndpointID, then this command shall * fail with a NOT_FOUND status code. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.14 */ updateEndpointForNode(request: UpdateEndpointForNodeRequest): MaybePromise; /** * This command shall be used to add a Group ID to an endpoint for a node in the Joint Fabric Datastore Cluster * of the accessing fabric. * * GroupID represents the unique identifier for the group to be added to the endpoint. * * EndpointID represents the unique identifier for the endpoint to be updated in the Joint Fabric Datastore * Cluster. * * NodeID represents the unique identifier for the node to which the endpoint belongs. * * Upon receipt of this command, the Datastore shall: * * 1. Confirm that an Endpoint Information Entry exists for the given NodeID and EndpointID, and if not, then * this command shall fail with a NOT_FOUND status code. * * 2. Ensure the Group Key List for the Node Information Entry with the given NodeID includes the KeySet for * the given Group ID. If it does not: * * 1. Add an entry for the KeySet of the given Group ID to the Group Key List for the Node. The new entry's * status shall be set to Pending. * * 2. Add a Group Key Entry for this KeySet to the given Node ID. * * 1. If this succeeds, update the new KeySet entry in the Datastore to Committed. * * 2. If not successful, the pending change shall be applied in a subsequent Node Refresh. * * 3. Ensure the Group List for the Endpoint Information Entry with the given NodeID and EndpointID includes * an entry for the given Group. If it does not: * * 1. Add a Group entry for the given Group ID to the Group List for the Endpoint and Node. The new entry's * status shall be set to Pending. * * 2. Add this Group entry to the given Endpoint ID on the given Node ID. * * 1. If this succeeds, update the new Group entry in the Datastore to Committed. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The * error shall be handled in a subsequent Node Refresh. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.15 */ addGroupIdToEndpointForNode(request: AddGroupIdToEndpointForNodeRequest): MaybePromise; /** * This command shall be used to remove a Group ID from an endpoint for a node in the Joint Fabric Datastore * Cluster of the accessing fabric. * * GroupID represents the unique identifier for the group to be removed from the endpoint. * * EndpointID represents the unique identifier for the endpoint to be updated in the Joint Fabric Datastore * Cluster. * * NodeID represents the unique identifier for the node to which the endpoint belongs. * * Upon receipt of this command, the Datastore shall: * * 1. Confirm that an Endpoint Information Entry exists for the given NodeID and EndpointID, and if not, then * this command shall fail with a NOT_FOUND status code. * * 2. Ensure the Group List for the Endpoint Information Entry with the given NodeID and EndpointID does not * include an entry for the given Group. If it does: * * 1. Update the status to DeletePending of the Group entry for the given Group ID in the Group List. * * 2. Remove this Group entry for the given Endpoint ID on the given Node ID. * * 1. If this succeeds, remove the Group entry for the given Group ID in the Group List for this NodeID and * EndpointID in the Datastore. * * 2. If not successful, the pending change shall be applied in a subsequent Node Refresh. * * 3. Ensure the Group Key List for the Node Information Entry with the given NodeID does not include the * KeySet for the given Group ID. If it does: * * 1. Update the status to DeletePending for the entry for the KeySet of the given Group ID in the Node Group * Key List. * * 2. Remove the Group Key Entry for this KeySet from the given Node ID. * * 1. If this succeeds, remove the KeySet entry for the given Node ID. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The * error shall be handled in a subsequent Node Refresh. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.16 */ removeGroupIdFromEndpointForNode(request: RemoveGroupIdFromEndpointForNodeRequest): MaybePromise; /** * This command shall be used to add a binding to an endpoint for a node in the Joint Fabric Datastore Cluster * of the accessing fabric. * * Binding represents the binding to be added to the endpoint. * * EndpointID represents the unique identifier for the endpoint to be updated in the Joint Fabric Datastore * Cluster. * * NodeID represents the unique identifier for the node to which the endpoint belongs. * * Upon receipt of this command, the Datastore shall: * * 1. Confirm that an Endpoint Information Entry exists for the given NodeID and EndpointID, and if not, then * this command shall fail with a NOT_FOUND status code. * * 2. Ensure the Binding List for the Node Information Entry with the given NodeID includes the given Binding. * If it does not: * * 1. Add the Binding to the Binding List for the Node Information Entry for the given NodeID. The new entry's * status shall be set to Pending. * * 2. Add this Binding to the given Node ID. * * 1. If this succeeds, update the new Binding in the Datastore to Committed. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The * error shall be handled in a subsequent Node Refresh. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.17 */ addBindingToEndpointForNode(request: AddBindingToEndpointForNodeRequest): MaybePromise; /** * This command shall be used to remove a binding from an endpoint for a node in the Joint Fabric Datastore * Cluster of the accessing fabric. * * ListID represents the unique identifier for the binding entry in the Datastore's EndpointBindingList * attribute to be removed from the endpoint. * * EndpointID represents the unique identifier for the endpoint to be updated in the Joint Fabric Datastore * Cluster. * * NodeID represents the unique identifier for the node to which the endpoint belongs. * * Upon receipt of this command, the Datastore shall: * * 1. Confirm that an Endpoint Information Entry exists for the given NodeID and EndpointID, and if not, then * this command shall fail with a NOT_FOUND status code. * * 2. Ensure the Binding List for the Node Information Entry with the given NodeID does not include an entry * with the given ListID. If it does: * * 1. Update the status to DeletePending for the given Binding in the Binding List. * * 2. Remove this Binding from the given Node ID. * * 1. If this succeeds, remove the given Binding from the Binding List. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The * error shall be handled in a subsequent Node Refresh. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.18 */ removeBindingFromEndpointForNode(request: RemoveBindingFromEndpointForNodeRequest): MaybePromise; /** * This command shall be used to add an ACL to a node in the Joint Fabric Datastore Cluster of the accessing * fabric. * * NodeID represents the unique identifier for the node to which the ACL is to be added. * * ACLEntry represents the ACL to be added to the Joint Fabric Datastore Cluster. * * Upon receipt of this command, the Datastore shall: * * 1. Confirm that a Node Information Entry exists for the given NodeID, and if not, then this command shall * fail with a NOT_FOUND status code. * * 2. Ensure the ACL List for the given NodeID includes the given ACLEntry. If it does not: * * 1. Add the ACLEntry to the ACL List for the given NodeID. The new entry's status shall be set to Pending. * * 2. Add this ACLEntry to the given Node ID. * * 1. If this succeeds, update the new ACLEntry in the Datastore to Committed. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The * error shall be handled in a subsequent Node Refresh. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.19 */ addAclToNode(request: AddAclToNodeRequest): MaybePromise; /** * This command shall be used to remove an ACL from a node in the Joint Fabric Datastore Cluster of the * accessing fabric. * * ListID represents the unique identifier for the DatastoreACLEntryStruct to be removed from the Datastore's * list of DatastoreACLEntry. * * NodeID represents the unique identifier for the node from which the ACL is to be removed. * * Upon receipt of this command, the Datastore shall: * * 1. Confirm that a Node Information Entry exists for the given NodeID, and if not, then this command shall * fail with a NOT_FOUND status code. * * 2. Ensure the ACL List for the given NodeID does not include the given ACLEntry. If it does: * * 1. Update the status to DeletePending for the given ACLEntry in the ACL List. * * 2. Remove this ACLEntry from the given Node ID. * * 1. If this succeeds, remove the given ACLEntry from the Node ACL List. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The * error shall be handled in a subsequent Node Refresh. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.20 */ removeAclFromNode(request: RemoveAclFromNodeRequest): MaybePromise; } /** * Commands that may appear in {@link JointFabricDatastore}. */ export interface Commands extends BaseCommands {} export type Components = [{ flags: {}, attributes: BaseAttributes, commands: BaseCommands }]; /** * @see {@link MatterSpecification.v151.Core} § 11.24.5.18 */ export class DatastoreGroupKeySet { constructor(values?: Partial); groupKeySetId: number; groupKeySecurityPolicy: DatastoreGroupKeySecurityPolicy; epochKey0: Bytes | null; epochStartTime0: number | bigint | null; epochKey1: Bytes | null; epochStartTime1: number | bigint | null; epochKey2: Bytes | null; epochStartTime2: number | bigint | null; groupKeyMulticastPolicy?: DatastoreGroupKeyMulticastPolicy; } /** * @see {@link MatterSpecification.v151.Core} § 11.24.5.5 */ export class DatastoreGroupInformationEntry { constructor(values?: Partial); /** * The unique identifier for the group. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.5.1 */ groupId: number | bigint; /** * The friendly name for the group. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.5.2 */ friendlyName: string; /** * The unique identifier for the group key set. * * This value may be null when multicast communication is not used for the group. When GroupPermission is Admin * or Manage, this value shall be null. * * A value of 0 is not allowed since this value is reserved for IPK and the group entry for this value is not * managed by the Datastore. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.5.3 */ groupKeySetId: number | null; /** * CAT value for this group. This is used for control of individual members of a group (non-broadcast commands). * * Allowable values include the range 0x0000 to 0xEFFF, and the Administrator CAT and Anchor CAT values. * * This value may be null when unicast communication is not used for the group. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.5.4 */ groupCat: number | null; /** * Current version number for this CAT. * * This value shall be null when GroupCAT value is null. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.5.5 */ groupCatVersion: number | null; /** * The permission level associated with ACL entries for this group. There should be only one Administrator group * per fabric, and at most one Manage group per Ecosystem (Vendor Entry). * * @see {@link MatterSpecification.v151.Core} § 11.24.5.5.6 */ groupPermission: DatastoreAccessControlEntryPrivilege; } /** * @see {@link MatterSpecification.v151.Core} § 11.24.5.14 */ export class DatastoreNodeInformationEntry { constructor(values?: Partial); /** * The unique identifier for the node. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.14.1 */ nodeId: NodeId; /** * Friendly name for this node which is not propagated to nodes. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.14.2 */ friendlyName: string; /** * Set to Pending prior to completing commissioning, set to Committed after commissioning complete is * successful, or set to CommitFailed if commissioning failed with the FailureCode Field set to the error. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.14.3 */ commissioningStatusEntry: DatastoreStatusEntry; } /** * @see {@link MatterSpecification.v151.Core} § 11.24.5.15 */ export class DatastoreAdministratorInformationEntry { constructor(values?: Partial); /** * The unique identifier for the node. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.15.1 */ nodeId: NodeId; /** * Friendly name for this node which is not propagated to nodes. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.15.2 */ friendlyName: string; /** * The Vendor ID for the node. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.15.3 */ vendorId: VendorId; /** * The ICAC used to issue the NOC. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.15.4 */ icac: Bytes; } /** * @see {@link MatterSpecification.v151.Core} § 11.24.5.2 */ export class DatastoreStatusEntry { constructor(values?: Partial); /** * This field shall contain the current state of the target device operation. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.2.1 */ state: DatastoreState; /** * This field shall contain the timestamp of the last update. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.2.2 */ updateTimestamp: number; /** * This field shall contain the StatusCode of the last failed operation where the State field is set to * CommitFailure. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.2.3 */ failureCode: Status; } /** * @see {@link MatterSpecification.v151.Core} § 11.24.5.8 */ export class DatastoreEndpointGroupIdEntry { constructor(values?: Partial); /** * The unique identifier for the node. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.8.1 */ nodeId: NodeId; /** * The unique identifier for the endpoint. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.8.2 */ endpointId: EndpointNumber; /** * The unique identifier for the group. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.8.3 */ groupId: GroupId; /** * Indicates whether entry in this list is pending, committed, delete-pending, or commit-failed. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.8.4 */ statusEntry: DatastoreStatusEntry; } /** * @see {@link MatterSpecification.v151.Core} § 11.24.5.7 */ export class DatastoreEndpointBindingEntry { constructor(values?: Partial); /** * The unique identifier for the node. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.7.1 */ nodeId: NodeId; /** * The unique identifier for the endpoint. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.7.2 */ endpointId: EndpointNumber; /** * The unique identifier for the entry in the Datastore's EndpointBindingList attribute, which is a list of * DatastoreEndpointBindingEntryStruct. * * This field is used to uniquely identify an entry in the EndpointBindingList attribute for the purpose of * deletion (RemoveBindingFromEndpointForNode Command). * * @see {@link MatterSpecification.v151.Core} § 11.24.5.7.3 */ listId: number; /** * The binding target structure. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.7.4 */ binding: DatastoreBindingTarget; /** * Indicates whether entry in this list is pending, committed, delete-pending, or commit-failed. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.7.5 */ statusEntry: DatastoreStatusEntry; } /** * @see {@link MatterSpecification.v151.Core} § 11.24.5.3 */ export class DatastoreNodeKeySetEntry { constructor(values?: Partial); /** * The unique identifier for the node. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.3.1 */ nodeId: NodeId; groupKeySetId: number; /** * Indicates whether entry in this list is pending, committed, delete-pending, or commit-failed. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.3.3 */ statusEntry: DatastoreStatusEntry; } /** * The DatastoreACLEntryStruct is a holder for an ACL (DatastoreAccessControlEntryStruct) on a specific Node which * is managed by the Datastore. Only ACLs on a specific Node that are fabric-scoped to the Joint Fabric are managed * by the Datastore. As a result, references to nodes and groups are specific to the Joint Fabric. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.13 */ export class DatastoreAclEntry { constructor(values?: Partial); /** * The unique identifier for the node. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.13.1 */ nodeId: NodeId; /** * The unique identifier for the ACL entry in the Datastore's list of DatastoreACLEntry. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.13.2 */ listId: number; /** * The Access Control Entry structure. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.13.3 */ aclEntry: DatastoreAccessControlEntry; /** * Indicates whether entry in this list is pending, committed, delete-pending, or commit-failed. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.13.4 */ statusEntry: DatastoreStatusEntry; } /** * The DatastoreEndpointEntryStruct represents an Endpoint on a specific Node which is managed by the Datastore. * Only Nodes on the Joint Fabric are managed by the Datastore. As a result, references to NodeID are specific to * the Joint Fabric. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.9 */ export class DatastoreEndpointEntry { constructor(values?: Partial); /** * The unique identifier for the endpoint. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.9.1 */ endpointId: EndpointNumber; /** * The unique identifier for the node. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.9.2 */ nodeId: NodeId; /** * Friendly name for this endpoint which is propagated to nodes. Any changes to Friendly Name or Group Id List * (add/remove entry) must follow the pending->committed workflow with current state reflected in the Status * Entry. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.9.3 */ friendlyName: string; /** * Indicates whether changes to Friendly Name are pending, committed, or commit-failed. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.9.4 */ statusEntry: DatastoreStatusEntry; } /** * This command shall be used to add a KeySet to the Joint Fabric Datastore Cluster of the accessing fabric. * * GroupKeySet represents the KeySet to be added to the Joint Fabric Datastore Cluster. * * Upon receipt of this command, the Datastore shall: * * 1. Ensure there are no KeySets in the KeySetList attribute with the given GroupKeySetID. * * 2. If a match is found, then this command shall fail with a CONSTRAINT_ERROR status code. * * 3. Add the Epoch Key Entry for the KeySet to the KeySetList attribute. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.1 */ export class AddKeySetRequest { constructor(values?: Partial); groupKeySet: DatastoreGroupKeySet; } /** * This command shall be used to update a KeySet in the Joint Fabric Datastore Cluster of the accessing fabric. * * GroupKeySet represents the KeySet to be updated in the Joint Fabric Datastore Cluster. * * Upon receipt of this command, the Datastore shall: * * 1. Find the Epoch Key Entry for the KeySet in the KeySetList attribute with the given GroupKeySetID, and update * any changed fields. * * 2. If entry is not found, then this command shall fail with a NOT_FOUND status code. * * 3. If any fields are changed as a result of this command: * * 1. Iterate through each Node Information Entry: * * 1. If the NodeKeySetList contains an entry with the given GroupKeySetID: * * 1. Update the Status on the given DatastoreNodeKeySetEntryStruct tp Pending. * * 2. Update the GroupKeySet on the given Node with the new values. * * 1. If successful, update the Status on this DatastoreNodeKeySetEntryStruct to Committed. * * 2. If not successful, update the State field of the StatusEntry on this DatastoreNodeKeySetEntryStruct to * CommitFailed and FailureCode code to the returned error. The pending change shall be applied in a subsequent * Node Refresh. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.2 */ export class UpdateKeySetRequest { constructor(values?: Partial); groupKeySet: DatastoreGroupKeySet; } /** * This command shall be used to remove a KeySet from the Joint Fabric Datastore Cluster of the accessing fabric. * * GroupKeySetID represents the unique identifier for the KeySet to be removed from the Joint Fabric Datastore * Cluster. * * Attempt to remove the IPK, which has GroupKeySetID of 0, shall fail with response CONSTRAINT_ERROR. * * Upon receipt of this command, the Datastore shall: * * 1. If entry is not found, then this command shall fail with a NOT_FOUND status code. * * 2. Ensure there are no Nodes using this KeySet. To do this: * * 1. Iterate through each Node Information Entry: * * 1. If the NodeKeySetList list contains an entry with the given GroupKeySetID, and the entry does NOT have * Status DeletePending, then this command shall fail with a CONSTRAINT_ERROR status code. * * 3. Remove the DatastoreGroupKeySetStruct for the given GroupKeySetID from the GroupKeySetList attribute. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.3 */ export class RemoveKeySetRequest { constructor(values?: Partial); groupKeySetId: number; } /** * This command shall be used to add a group to the Joint Fabric Datastore Cluster of the accessing fabric. * * GroupInformationEntry represents the group to be added to the Joint Fabric Datastore Cluster. * * GroupCAT values shall fall within the range 1 to 65534. Attempts to add a group with a GroupCAT value of * Administrator CAT or Anchor CAT shall fail with CONSTRAINT_ERROR. * * Upon receipt of this command, the Datastore shall: * * 1. Ensure there are no Groups in the GroupList attribute with the given GroupID. If a match is found, then this * command shall fail with a CONSTRAINT_ERROR status code. * * 2. Add the DatastoreGroupInformationEntryStruct for the Group with the given GroupID to the GroupList * attribute. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.4 */ export class AddGroupRequest { constructor(values?: Partial); groupId: GroupId; friendlyName: string; groupKeySetId: number | null; groupCat: number | null; groupCatVersion: number | null; groupPermission: DatastoreAccessControlEntryPrivilege; } /** * This command shall be used to update a group in the Joint Fabric Datastore Cluster of the accessing fabric. * * GroupID represents the group to be updated in the Joint Fabric Datastore Cluster. NULL values for the additional * parameters will be ignored (not updated). * * GroupCAT values shall fall within the range 1 to 65534. Attempts to update the GroupCAT on an existing group * which has a GroupCAT value of Administrator CAT or Anchor CAT shall fail with CONSTRAINT_ERROR. * * Attempts to set the GroupCAT to Administrator CAT or Anchor CAT shall fail with CONSTRAINT_ERROR. * * Upon receipt of this command, the Datastore shall: * * 1. If entry is not found, then this command shall fail with a NOT_FOUND status code. * * 2. Update the DatastoreGroupInformationEntryStruct for the Group with the given GroupID to match the non-NULL * fields passed in. * * 3. If any fields are changed as a result of this command: * * 1. Iterate through each Node Information Entry: * * 1. If the GroupKeySetID changed: * * 1. Add a DatastoreNodeKeySetEntryStruct with the new GroupKeySetID, and Status set to Pending. * * 2. Add this KeySet to the Node. * * 1. If successful, Set the Status to Committed for this entry in the NodeKeySetList. * * 2. If not successful, Set the Status to CommitFailed and the FailureCode to the returned error. The pending * change shall be applied in a subsequent Node Refresh. * * 1. If the NodeKeySetList list contains an entry with the previous GroupKeySetID: * * 3. Set the Status set to DeletePending. * * 4. Remove this KeySet from the Node. * * 1. If successful, Remove this entry from the NodeKeySetList. * * 2. If not successful, the pending change shall be applied in a subsequent Node Refresh. * * 2. If the GroupCAT, GroupCATVersion or GroupPermission changed: * * 1. If the ACLList contains an entry for this Group, update the ACL List Entry in the Datastore with the new * values and Status Pending, update the ACL attribute on the given Node with the new values. If the update * succeeds, set the Status to Committed on the ACLList Entry in the Datastore. * * 3. If the FriendlyName changed: * * 1. Iterate through each Endpoint Information Entry: * * 1. If the GroupIDList contains an entry with the given GroupID: * * 1. Update the GroupIDList Entry in the Datastore with the new values and Status Pending * * 2. Update the Groups on the given Node with the new values. * * 1. If the update succeeds, set the Status to Committed on the GroupIDList Entry in the Datastore. * * 2. If not successful, the pending change shall be applied in a subsequent Node Refresh. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.5 */ export class UpdateGroupRequest { constructor(values?: Partial); groupId: GroupId; friendlyName: string | null; groupKeySetId: number | null; groupCat: number | null; groupCatVersion: number | null; groupPermission: DatastoreAccessControlEntryPrivilege | null; } /** * This command shall be used to remove a group from the Joint Fabric Datastore Cluster of the accessing fabric. * * GroupID represents the unique identifier for the group to be removed from the Joint Fabric Datastore Cluster. * * Attempts to remove a group with GroupCAT value set to Administrator CAT or Anchor CAT shall fail with * CONSTRAINT_ERROR. * * Upon receipt of this command, the Datastore shall: * * 1. If entry is not found, then this command shall fail with a NOT_FOUND status code. * * 2. Ensure there are no Nodes in this group. To do this: * * 1. Iterate through each Node Information Entry: * * 1. If the GroupIDList contains an entry with the given GroupID, and the entry does NOT have Status * DeletePending, then this command shall fail with a CONSTRAINT_ERROR status code. * * 3. Remove the DatastoreGroupInformationEntryStruct for the Group with the given GroupID from the GroupList * attribute. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.6 */ export class RemoveGroupRequest { constructor(values?: Partial); groupId: GroupId; } /** * This command shall be used to add an admin to the Joint Fabric Datastore Cluster of the accessing fabric. * * NodeID, FriendlyName, VendorID and ICAC represent the admin to be added to the Joint Fabric Datastore Cluster. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.7 */ export class AddAdminRequest { constructor(values?: Partial); nodeId: NodeId; friendlyName: string; vendorId: VendorId; icac: Bytes; } /** * This command shall be used to update an admin in the Joint Fabric Datastore Cluster of the accessing fabric. * * NodeID represents the admin to be updated in the Joint Fabric Datastore Cluster. NULL values for the additional * parameters will be ignored (not updated). * * If entry is not found, then this command shall fail with a NOT_FOUND status code. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.8 */ export class UpdateAdminRequest { constructor(values?: Partial); nodeId: NodeId | null; friendlyName: string | null; icac: Bytes | null; } /** * This command shall be used to remove an admin from the Joint Fabric Datastore Cluster of the accessing fabric. * * NodeID represents the unique identifier for the admin to be removed from the Joint Fabric Datastore Cluster. * * If entry is not found, then this command shall fail with a NOT_FOUND status code. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.9 */ export class RemoveAdminRequest { constructor(values?: Partial); nodeId: NodeId; } /** * The command shall be used to add a node to the Joint Fabric Datastore Cluster of the accessing fabric. * * NodeID represents the node to be added to the Joint Fabric Datastore Cluster. * * Upon receipt of this command, the Datastore shall: * * 1. Update CommissioningStatusEntry of the Node Information Entry with the given NodeID to Pending. * * If a Node Information Entry exists for the given NodeID, then this command shall fail with a INVALID_CONSTRAINT * status code. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.10 */ export class AddPendingNodeRequest { constructor(values?: Partial); nodeId: NodeId; friendlyName: string; } /** * The command shall be used to request that Datastore information relating to a Node of the accessing fabric is * refreshed. * * Upon receipt of this command, the Datastore shall: * * 1. Confirm that a Node Information Entry exists for the given NodeID, and if not, then this command shall fail * with a NOT_FOUND status code. * * 2. Update the CommissioningStatusEntry for the Node Information Entry to Pending. * * 3. Ensure the Endpoint List for the Node Information Entry with the given NodeID matches Endpoint list on the * given Node. This involves the following steps: * * 1. Read the PartsList of the Descriptor cluster from the Node. * * 2. For each Endpoint Information Entry in the Endpoint List of the Node Information Entry that does not match * an Endpoint ID in the PartsList, remove the Endpoint Information Entry. * * 3. For each Endpoint Information Entry in the Endpoint List of the Node Information Entry that matches an * Endpoint ID in the PartsList: * * 1. Check that each entry in Node's Group List occurs in the GroupIDList of the Endpoint Information Entry. * * 1. Add any missing entries to the GroupIDList of the Endpoint Information Entry. * * 2. For any entries in the GroupIDList with Status of Pending: * * 1. Add the corresponding change to the Node's Group List. * * 1. If successful, mark the Status to Committed. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The error * shall be handled in a subsequent Node Refresh. * * 3. For any entries in the GroupIDList with Status of DeletePending: * * 1. If successful, remove the corresponding entry from the Node's Group List. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The error * shall be handled in a subsequent Node Refresh. * * 4. For any entries in the GroupIDList with Status of CommitFailure: * * 1. A CommitFailure with an unrecoverable FailureCode shall be handled by removing the entry from the * GroupIDList. * * 2. A CommitFailure with a recoverable FailureCode (i.e. TIMEOUT, BUSY) shall be handle in a subsequent Node * Refresh. * * 2. Check that each entry in Node's Binding List occurs in the BindingList of the Endpoint Information Entry. * * 1. Add any missing entries to the BindingList of the Endpoint Information Entry. * * 2. For any entries in the BindingList with Status of Pending: * * 1. Add the corresponding change to the Node's Binding List. * * 1. If successful, mark the Status to Committed. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The error * shall be handled in a subsequent Node Refresh. * * 3. For any entries in the BindingList with Status of DeletePending: * * 1. If successful, remove the corresponding entry from the Node's BindingList. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The error * shall be handled in a subsequent Node Refresh. * * 4. For any entries in the BindingList with Status of CommitFailure: * * 1. A CommitFailure with an unrecoverable FailureCode shall be handled by removing the entry from the * BindingList. * * 2. A CommitFailure with a recoverable FailureCode (i.e. TIMEOUT, BUSY) shall be handle in a subsequent Node * Refresh. * * 4. Ensure the GroupKeySetList for the Node Information Entry with the given NodeID matches the Group Keys on * the given Node. This involves the following steps: * * 1. Read the Group Keys from the Node. * * 2. For each GroupKeySetEntry in the GroupKeySetList of the Node Information Entry with a Pending Status: * * 1. Add the corresponding DatastoreGroupKeySetStruct to the Node's Group Key list. * * 1. If successful, mark the Status to Committed. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The error * shall be handled in a subsequent Node Refresh. * * 3. For each GroupKeySetEntry in the GroupKeySetList of the Node Information Entry with a CommitFailure Status: * * 1. A CommitFailure with an unrecoverable FailureCode shall be handled by removing the entry from the * GroupKeySetList. * * 2. A CommitFailure with a recoverable FailureCode (i.e. TIMEOUT, BUSY) shall be handle in a subsequent Node * Refresh. * * 4. All remaining entries in the GroupKeySetList should be replaced by the remaining entries on the Node. * * 5. Ensure the ACLList for the Node Information Entry with the given NodeID matches the ACL attribute on the * given Node. This involves the following steps: * * 1. Read the ACL attribute on the Node. * * 2. For each DatastoreACLEntryStruct in the ACLList of the Node Information Entry with a Pending Status: * * 1. Add the corresponding DatastoreACLEntryStruct to the Node's ACL attribute. * * 1. If successful, mark the Status to Committed. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The error * shall be handled in a subsequent Node Refresh. * * 3. For each DatastoreACLEntryStruct in the ACLList of the Node Information Entry with a CommitFailure Status: * * 1. A CommitFailure with an unrecoverable FailureCode (i.e. RESOURCE_EXHAUSTED, CONSTRAINT_ERROR) shall be * handled by removing the entry from the ACLList. * * 2. A CommitFailure with a recoverable FailureCode (i.e. TIMEOUT, BUSY) shall be handle in a subsequent Node * Refresh. * * 4. All remaining entries in the ACLList should be replaced by the remaining entries on the Node. * * 6. Update the CommissioningStatusEntry for the Node Information Entry to Committed. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.11 */ export class RefreshNodeRequest { constructor(values?: Partial); nodeId: NodeId; } /** * The command shall be used to update the friendly name for a node in the Joint Fabric Datastore Cluster of the * accessing fabric. * * NodeID represents the node to be updated in the Joint Fabric Datastore Cluster. * * If a Node Information Entry does not exist for the given NodeID, then this command shall fail with a NOT_FOUND * status code. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.12 */ export class UpdateNodeRequest { constructor(values?: Partial); nodeId: NodeId; friendlyName: string; } /** * This command shall be used to remove a node from the Joint Fabric Datastore Cluster of the accessing fabric. * * NodeID represents the unique identifier for the node to be removed from the Joint Fabric Datastore Cluster. * * If a Node Information Entry does not exist for the given NodeID, then this command shall fail with a NOT_FOUND * status code. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.13 */ export class RemoveNodeRequest { constructor(values?: Partial); nodeId: NodeId; } /** * This command shall be used to update the state of an endpoint for a node in the Joint Fabric Datastore Cluster of * the accessing fabric. * * EndpointID represents the unique identifier for the endpoint to be updated in the Joint Fabric Datastore Cluster. * * NodeID represents the unique identifier for the node to which the endpoint belongs. * * If an Endpoint Information Entry does not exist for the given NodeID and EndpointID, then this command shall fail * with a NOT_FOUND status code. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.14 */ export class UpdateEndpointForNodeRequest { constructor(values?: Partial); endpointId: EndpointNumber; nodeId: NodeId; friendlyName: string; } /** * This command shall be used to add a Group ID to an endpoint for a node in the Joint Fabric Datastore Cluster of * the accessing fabric. * * GroupID represents the unique identifier for the group to be added to the endpoint. * * EndpointID represents the unique identifier for the endpoint to be updated in the Joint Fabric Datastore Cluster. * * NodeID represents the unique identifier for the node to which the endpoint belongs. * * Upon receipt of this command, the Datastore shall: * * 1. Confirm that an Endpoint Information Entry exists for the given NodeID and EndpointID, and if not, then this * command shall fail with a NOT_FOUND status code. * * 2. Ensure the Group Key List for the Node Information Entry with the given NodeID includes the KeySet for the * given Group ID. If it does not: * * 1. Add an entry for the KeySet of the given Group ID to the Group Key List for the Node. The new entry's status * shall be set to Pending. * * 2. Add a Group Key Entry for this KeySet to the given Node ID. * * 1. If this succeeds, update the new KeySet entry in the Datastore to Committed. * * 2. If not successful, the pending change shall be applied in a subsequent Node Refresh. * * 3. Ensure the Group List for the Endpoint Information Entry with the given NodeID and EndpointID includes an * entry for the given Group. If it does not: * * 1. Add a Group entry for the given Group ID to the Group List for the Endpoint and Node. The new entry's status * shall be set to Pending. * * 2. Add this Group entry to the given Endpoint ID on the given Node ID. * * 1. If this succeeds, update the new Group entry in the Datastore to Committed. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The error * shall be handled in a subsequent Node Refresh. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.15 */ export class AddGroupIdToEndpointForNodeRequest { constructor(values?: Partial); nodeId: NodeId; endpointId: EndpointNumber; groupId: GroupId; } /** * This command shall be used to remove a Group ID from an endpoint for a node in the Joint Fabric Datastore Cluster * of the accessing fabric. * * GroupID represents the unique identifier for the group to be removed from the endpoint. * * EndpointID represents the unique identifier for the endpoint to be updated in the Joint Fabric Datastore Cluster. * * NodeID represents the unique identifier for the node to which the endpoint belongs. * * Upon receipt of this command, the Datastore shall: * * 1. Confirm that an Endpoint Information Entry exists for the given NodeID and EndpointID, and if not, then this * command shall fail with a NOT_FOUND status code. * * 2. Ensure the Group List for the Endpoint Information Entry with the given NodeID and EndpointID does not * include an entry for the given Group. If it does: * * 1. Update the status to DeletePending of the Group entry for the given Group ID in the Group List. * * 2. Remove this Group entry for the given Endpoint ID on the given Node ID. * * 1. If this succeeds, remove the Group entry for the given Group ID in the Group List for this NodeID and * EndpointID in the Datastore. * * 2. If not successful, the pending change shall be applied in a subsequent Node Refresh. * * 3. Ensure the Group Key List for the Node Information Entry with the given NodeID does not include the KeySet * for the given Group ID. If it does: * * 1. Update the status to DeletePending for the entry for the KeySet of the given Group ID in the Node Group Key * List. * * 2. Remove the Group Key Entry for this KeySet from the given Node ID. * * 1. If this succeeds, remove the KeySet entry for the given Node ID. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The error * shall be handled in a subsequent Node Refresh. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.16 */ export class RemoveGroupIdFromEndpointForNodeRequest { constructor(values?: Partial); nodeId: NodeId; endpointId: EndpointNumber; groupId: GroupId; } /** * This command shall be used to add a binding to an endpoint for a node in the Joint Fabric Datastore Cluster of * the accessing fabric. * * Binding represents the binding to be added to the endpoint. * * EndpointID represents the unique identifier for the endpoint to be updated in the Joint Fabric Datastore Cluster. * * NodeID represents the unique identifier for the node to which the endpoint belongs. * * Upon receipt of this command, the Datastore shall: * * 1. Confirm that an Endpoint Information Entry exists for the given NodeID and EndpointID, and if not, then this * command shall fail with a NOT_FOUND status code. * * 2. Ensure the Binding List for the Node Information Entry with the given NodeID includes the given Binding. If * it does not: * * 1. Add the Binding to the Binding List for the Node Information Entry for the given NodeID. The new entry's * status shall be set to Pending. * * 2. Add this Binding to the given Node ID. * * 1. If this succeeds, update the new Binding in the Datastore to Committed. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The error * shall be handled in a subsequent Node Refresh. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.17 */ export class AddBindingToEndpointForNodeRequest { constructor(values?: Partial); nodeId: NodeId; endpointId: EndpointNumber; binding: DatastoreBindingTarget; } /** * This command shall be used to remove a binding from an endpoint for a node in the Joint Fabric Datastore Cluster * of the accessing fabric. * * ListID represents the unique identifier for the binding entry in the Datastore's EndpointBindingList attribute to * be removed from the endpoint. * * EndpointID represents the unique identifier for the endpoint to be updated in the Joint Fabric Datastore Cluster. * * NodeID represents the unique identifier for the node to which the endpoint belongs. * * Upon receipt of this command, the Datastore shall: * * 1. Confirm that an Endpoint Information Entry exists for the given NodeID and EndpointID, and if not, then this * command shall fail with a NOT_FOUND status code. * * 2. Ensure the Binding List for the Node Information Entry with the given NodeID does not include an entry with * the given ListID. If it does: * * 1. Update the status to DeletePending for the given Binding in the Binding List. * * 2. Remove this Binding from the given Node ID. * * 1. If this succeeds, remove the given Binding from the Binding List. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The error * shall be handled in a subsequent Node Refresh. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.18 */ export class RemoveBindingFromEndpointForNodeRequest { constructor(values?: Partial); listId: number; endpointId: EndpointNumber; nodeId: NodeId; } /** * This command shall be used to add an ACL to a node in the Joint Fabric Datastore Cluster of the accessing fabric. * * NodeID represents the unique identifier for the node to which the ACL is to be added. * * ACLEntry represents the ACL to be added to the Joint Fabric Datastore Cluster. * * Upon receipt of this command, the Datastore shall: * * 1. Confirm that a Node Information Entry exists for the given NodeID, and if not, then this command shall fail * with a NOT_FOUND status code. * * 2. Ensure the ACL List for the given NodeID includes the given ACLEntry. If it does not: * * 1. Add the ACLEntry to the ACL List for the given NodeID. The new entry's status shall be set to Pending. * * 2. Add this ACLEntry to the given Node ID. * * 1. If this succeeds, update the new ACLEntry in the Datastore to Committed. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The error * shall be handled in a subsequent Node Refresh. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.19 */ export class AddAclToNodeRequest { constructor(values?: Partial); nodeId: NodeId; aclEntry: DatastoreAccessControlEntry; } /** * This command shall be used to remove an ACL from a node in the Joint Fabric Datastore Cluster of the accessing * fabric. * * ListID represents the unique identifier for the DatastoreACLEntryStruct to be removed from the Datastore's list * of DatastoreACLEntry. * * NodeID represents the unique identifier for the node from which the ACL is to be removed. * * Upon receipt of this command, the Datastore shall: * * 1. Confirm that a Node Information Entry exists for the given NodeID, and if not, then this command shall fail * with a NOT_FOUND status code. * * 2. Ensure the ACL List for the given NodeID does not include the given ACLEntry. If it does: * * 1. Update the status to DeletePending for the given ACLEntry in the ACL List. * * 2. Remove this ACLEntry from the given Node ID. * * 1. If this succeeds, remove the given ACLEntry from the Node ACL List. * * 2. If not successful, update the Status to CommitFailed and the FailureCode to the returned error. The error * shall be handled in a subsequent Node Refresh. * * @see {@link MatterSpecification.v151.Core} § 11.24.7.20 */ export class RemoveAclFromNodeRequest { constructor(values?: Partial); listId: number; nodeId: NodeId; } /** * @see {@link MatterSpecification.v151.Core} § 11.24.5.1 */ export enum DatastoreState { /** * Target device operation is pending */ Pending = 0, /** * Target device operation has been committed */ Committed = 1, /** * Target device delete operation is pending */ DeletePending = 2, /** * Target device operation has failed */ CommitFailed = 3 } /** * @see {@link MatterSpecification.v151.Core} § 11.24.5.4 */ export enum DatastoreAccessControlEntryPrivilege { /** * Can read and observe all (except Access Control Cluster) */ View = 1, /** * @deprecated */ ProxyView = 2, /** * View privileges, and can perform the primary function of this Node (except Access Control Cluster) */ Operate = 3, /** * Operate privileges, and can modify persistent configuration of this Node (except Access Control Cluster) */ Manage = 4, /** * Manage privileges, and can observe and modify the Access Control Cluster */ Administer = 5 } /** * The DatastoreBindingTargetStruct represents a Binding on a specific Node (identified by the * DatastoreEndpointBindingEntryStruct) which is managed by the Datastore. Only bindings on a specific Node that are * fabric-scoped to the Joint Fabric are managed by the Datastore. As a result, references to nodes and groups are * specific to the Joint Fabric. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.6 */ export class DatastoreBindingTarget { constructor(values?: Partial); /** * This field is the binding's remote target node ID. If the Endpoint field is present, this field shall be * present. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.6.1 */ node?: NodeId; /** * This field is the binding's target group ID that represents remote endpoints. If the Endpoint field is * present, this field shall NOT be present. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.6.2 */ group?: GroupId; /** * This field is the binding's remote endpoint that the local endpoint is bound to. If the Group field is * present, this field shall NOT be present. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.6.3 */ endpoint?: EndpointNumber; /** * This field is the binding's cluster ID (client & server) on the local and target endpoint(s). If this field * is present, the client cluster shall also exist on this endpoint (with this Binding cluster). If this field * is present, the target shall be this cluster on the target endpoint(s). * * @see {@link MatterSpecification.v151.Core} § 11.24.5.6.4 */ cluster?: ClusterId; } /** * @see {@link MatterSpecification.v151.Core} § 11.24.5.10 */ export enum DatastoreAccessControlEntryAuthMode { /** * Passcode authenticated session */ Pase = 1, /** * Certificate authenticated session */ Case = 2, /** * Group authenticated session */ Group = 3 } /** * @see {@link MatterSpecification.v151.Core} § 11.24.5.11 */ export class DatastoreAccessControlTarget { constructor(values?: Partial); cluster: ClusterId | null; endpoint: EndpointNumber | null; deviceType: DeviceTypeId | null; } /** * The DatastoreAccessControlEntryStruct represents an ACL on a specific Node (identified by the * DatastoreACLEntryStruct) which is managed by the Datastore. Only ACLs on a specific Node that are fabric-scoped * to the Joint Fabric are managed by the Datastore. As a result, references to nodes and groups are specific to the * Joint Fabric. * * @see {@link MatterSpecification.v151.Core} § 11.24.5.12 */ export class DatastoreAccessControlEntry { constructor(values?: Partial); privilege: DatastoreAccessControlEntryPrivilege; authMode: DatastoreAccessControlEntryAuthMode; subjects: SubjectId[] | null; targets: DatastoreAccessControlTarget[] | null; } /** * @see {@link MatterSpecification.v151.Core} § 11.24.5.16 */ export enum DatastoreGroupKeySecurityPolicy { /** * Message counter synchronization using trust-first */ TrustFirst = 0 } /** * @see {@link MatterSpecification.v151.Core} § 11.24.5.17 */ export enum DatastoreGroupKeyMulticastPolicy { /** * Indicates filtering of multicast messages for a specific Group ID */ PerGroupId = 0, /** * Indicates not filtering of multicast messages */ AllNodes = 1 } /** * Attribute metadata objects keyed by name. */ export const attributes: ClusterType.AttributeObjects; /** * Command metadata objects keyed by name. */ export const commands: ClusterType.CommandObjects; /** * @deprecated Use {@link JointFabricDatastore}. */ export const Cluster: typeof JointFabricDatastore; /** * @deprecated Use {@link JointFabricDatastore}. */ export const Complete: typeof JointFabricDatastore; export const Typing: JointFabricDatastore; } /** * @deprecated Use {@link JointFabricDatastore}. */ export declare const JointFabricDatastoreCluster: typeof JointFabricDatastore; export interface JointFabricDatastore extends ClusterTyping { Attributes: JointFabricDatastore.Attributes; Commands: JointFabricDatastore.Commands; Components: JointFabricDatastore.Components; }