"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
  for (var name in all)
    __defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
  if (from && typeof from === "object" || typeof from === "function") {
    for (let key of __getOwnPropNames(from))
      if (!__hasOwnProp.call(to, key) && key !== except)
        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  }
  return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var general_commissioning_exports = {};
__export(general_commissioning_exports, {
  GeneralCommissioning: () => GeneralCommissioning,
  GeneralCommissioningCluster: () => GeneralCommissioningCluster
});
module.exports = __toCommonJS(general_commissioning_exports);
var import_MutableCluster = require("../cluster/mutation/MutableCluster.js");
var import_Cluster = require("../cluster/Cluster.js");
var import_TlvNumber = require("../tlv/TlvNumber.js");
var import_model = require("@matter/model");
var import_TlvBoolean = require("../tlv/TlvBoolean.js");
var import_TlvNullable = require("../tlv/TlvNullable.js");
var import_TlvObject = require("../tlv/TlvObject.js");
var import_BitmapSchema = require("../schema/BitmapSchema.js");
var import_TlvString = require("../tlv/TlvString.js");
var import_TlvNoArguments = require("../tlv/TlvNoArguments.js");
var import_ClusterRegistry = require("../cluster/ClusterRegistry.js");
/**
 * @license
 * Copyright 2022-2026 Matter.js Authors
 * SPDX-License-Identifier: Apache-2.0
 */
var GeneralCommissioning;
((GeneralCommissioning2) => {
  let Feature;
  ((Feature2) => {
    Feature2["TermsAndConditions"] = "TermsAndConditions";
  })(Feature = GeneralCommissioning2.Feature || (GeneralCommissioning2.Feature = {}));
  GeneralCommissioning2.TlvSetTcAcknowledgementsRequest = (0, import_TlvObject.TlvObject)({
    /**
     * This field shall contain the version of the Enhanced Setup Flow Terms & Conditions that were presented to the
     * user.
     *
     * @see {@link MatterSpecification.v142.Core} § 11.10.7.8.1
     */
    tcVersion: (0, import_TlvObject.TlvField)(0, import_TlvNumber.TlvUInt16),
    /**
     * This field shall contain the user responses to the Enhanced Setup Flow Terms & Conditions as a map where each
     * bit set in the bitmap corresponds to an accepted term in the file located at EnhancedSetupFlowTCUrl.
     *
     * ### Effect on Receipt
     *
     * This command shall copy the user responses and accepted version to the presented Enhanced Setup Flow Terms &
     * Conditions from the values provided in the TCUserResponse and TCVersion fields to the TCAcknowledgements
     * Attribute and the TCAcceptedVersion Attribute fields respectively.
     *
     * This command shall result in success with an ErrorCode value of OK in the SetTCAcknowledgementsResponse if
     * all required terms were accepted by the user. Specifically, all bits have a value of 1 in TCAcknowledgements
     * whose ordinal is marked as required in the file located at EnhancedSetupFlowTCUrl.
     *
     * If the TCVersion field is less than the TCMinRequiredVersion, then the ErrorCode of TCMinVersionNotMet shall
     * be returned and TCAcknowledgements shall remain unchanged.
     *
     * If TCVersion is greater than or equal to TCMinRequiredVersion, but the TCUserResponse value indicates that
     * not all required terms were accepted by the user, then the ErrorCode of RequiredTCNotAccepted shall be
     * returned and TCAcknowledgements shall remain unchanged.
     *
     * @see {@link MatterSpecification.v142.Core} § 11.10.7.8.2
     */
    tcUserResponse: (0, import_TlvObject.TlvField)(1, import_TlvNumber.TlvUInt16)
  });
  let CommissioningError;
  ((CommissioningError2) => {
    CommissioningError2[CommissioningError2["Ok"] = 0] = "Ok";
    CommissioningError2[CommissioningError2["ValueOutsideRange"] = 1] = "ValueOutsideRange";
    CommissioningError2[CommissioningError2["InvalidAuthentication"] = 2] = "InvalidAuthentication";
    CommissioningError2[CommissioningError2["NoFailSafe"] = 3] = "NoFailSafe";
    CommissioningError2[CommissioningError2["BusyWithOtherAdmin"] = 4] = "BusyWithOtherAdmin";
    CommissioningError2[CommissioningError2["RequiredTcNotAccepted"] = 5] = "RequiredTcNotAccepted";
    CommissioningError2[CommissioningError2["TcAcknowledgementsNotReceived"] = 6] = "TcAcknowledgementsNotReceived";
    CommissioningError2[CommissioningError2["TcMinVersionNotMet"] = 7] = "TcMinVersionNotMet";
  })(CommissioningError = GeneralCommissioning2.CommissioningError || (GeneralCommissioning2.CommissioningError = {}));
  GeneralCommissioning2.TlvSetTcAcknowledgementsResponse = (0, import_TlvObject.TlvObject)({
    /**
     * This field shall contain the result of the operation, based on the behavior specified in the functional
     * description of the SetTCAcknowledgements command.
     *
     * @see {@link MatterSpecification.v142.Core} § 11.10.7.9.1
     */
    errorCode: (0, import_TlvObject.TlvField)(0, (0, import_TlvNumber.TlvEnum)())
  });
  GeneralCommissioning2.TlvBasicCommissioningInfo = (0, import_TlvObject.TlvObject)({
    /**
     * This field shall contain a conservative initial duration (in seconds) to set in the FailSafe for the
     * commissioning flow to complete successfully. This may vary depending on the speed or sleepiness of the
     * Commissionee. This value, if used in the ArmFailSafe command’s ExpiryLengthSeconds field SHOULD allow a
     * Commissioner to proceed with a nominal commissioning without having to-rearm the fail-safe, with some margin.
     *
     * @see {@link MatterSpecification.v142.Core} § 11.10.5.3.1
     */
    failSafeExpiryLengthSeconds: (0, import_TlvObject.TlvField)(0, import_TlvNumber.TlvUInt16),
    /**
     * This field shall contain a conservative value in seconds denoting the maximum total duration for which a fail
     * safe timer can be re-armed. See Section 11.10.7.2.1, “Fail Safe Context”.
     *
     * The value of this field shall be greater than or equal to the FailSafeExpiryLengthSeconds. Absent additional
     * guidelines, it is recommended that the value of this field be aligned with the initial Announcement Duration
     * and default to 900 seconds.
     *
     * @see {@link MatterSpecification.v142.Core} § 11.10.5.3.2
     */
    maxCumulativeFailsafeSeconds: (0, import_TlvObject.TlvField)(1, import_TlvNumber.TlvUInt16)
  });
  let RegulatoryLocationType;
  ((RegulatoryLocationType2) => {
    RegulatoryLocationType2[RegulatoryLocationType2["Indoor"] = 0] = "Indoor";
    RegulatoryLocationType2[RegulatoryLocationType2["Outdoor"] = 1] = "Outdoor";
    RegulatoryLocationType2[RegulatoryLocationType2["IndoorOutdoor"] = 2] = "IndoorOutdoor";
  })(RegulatoryLocationType = GeneralCommissioning2.RegulatoryLocationType || (GeneralCommissioning2.RegulatoryLocationType = {}));
  GeneralCommissioning2.TlvArmFailSafeRequest = (0, import_TlvObject.TlvObject)({
    expiryLengthSeconds: (0, import_TlvObject.TlvField)(0, import_TlvNumber.TlvUInt16),
    breadcrumb: (0, import_TlvObject.TlvField)(1, import_TlvNumber.TlvUInt64)
  });
  GeneralCommissioning2.TlvArmFailSafeResponse = (0, import_TlvObject.TlvObject)({
    /**
     * This field shall contain the result of the operation, based on the behavior specified in the functional
     * description of the ArmFailSafe command.
     *
     * @see {@link MatterSpecification.v142.Core} § 11.10.7.3.1
     */
    errorCode: (0, import_TlvObject.TlvField)(0, (0, import_TlvNumber.TlvEnum)()),
    /**
     * See Section 11.10.7.1, “Common fields in General Commissioning cluster responses”.
     *
     * @see {@link MatterSpecification.v142.Core} § 11.10.7.3.2
     */
    debugText: (0, import_TlvObject.TlvField)(1, import_TlvString.TlvString.bound({ maxLength: 128 }))
  });
  GeneralCommissioning2.TlvSetRegulatoryConfigRequest = (0, import_TlvObject.TlvObject)({
    newRegulatoryConfig: (0, import_TlvObject.TlvField)(0, (0, import_TlvNumber.TlvEnum)()),
    countryCode: (0, import_TlvObject.TlvField)(1, import_TlvString.TlvString.bound({ length: 2 })),
    breadcrumb: (0, import_TlvObject.TlvField)(2, import_TlvNumber.TlvUInt64)
  });
  GeneralCommissioning2.TlvSetRegulatoryConfigResponse = (0, import_TlvObject.TlvObject)({
    /**
     * This field shall contain the result of the operation, based on the behavior specified in the functional
     * description of the SetRegulatoryConfig command.
     *
     * @see {@link MatterSpecification.v142.Core} § 11.10.7.5.1
     */
    errorCode: (0, import_TlvObject.TlvField)(0, (0, import_TlvNumber.TlvEnum)()),
    /**
     * See Section 11.10.7.1, “Common fields in General Commissioning cluster responses”.
     *
     * @see {@link MatterSpecification.v142.Core} § 11.10.7.5.2
     */
    debugText: (0, import_TlvObject.TlvField)(1, import_TlvString.TlvString)
  });
  GeneralCommissioning2.TlvCommissioningCompleteResponse = (0, import_TlvObject.TlvObject)({
    /**
     * This field shall contain the result of the operation, based on the behavior specified in the functional
     * description of the CommissioningComplete command.
     *
     * @see {@link MatterSpecification.v142.Core} § 11.10.7.7.1
     */
    errorCode: (0, import_TlvObject.TlvField)(0, (0, import_TlvNumber.TlvEnum)()),
    /**
     * See Section 11.10.7.1, “Common fields in General Commissioning cluster responses”.
     *
     * @see {@link MatterSpecification.v142.Core} § 11.10.7.7.2
     */
    debugText: (0, import_TlvObject.TlvField)(1, import_TlvString.TlvString)
  });
  GeneralCommissioning2.TermsAndConditionsComponent = import_MutableCluster.MutableCluster.Component({
    attributes: {
      /**
       * Indicates the last version of the T&Cs for which the device received user acknowledgements. On factory
       * reset this field shall be reset to 0.
       *
       * When Custom Commissioning Flow is used to obtain user consent (e. g. because the Commissioner does not
       * support the TC feature), the manufacturer-provided means for obtaining user consent shall ensure that
       * this attribute is set to a value which is greater than or equal to TCMinRequiredVersion before returning
       * the user back to the originating Commissioner (see Section 5.7.4, “Enhanced Setup Flow (ESF)”).
       *
       * @see {@link MatterSpecification.v142.Core} § 11.10.6.6
       */
      tcAcceptedVersion: (0, import_Cluster.Attribute)(
        5,
        import_TlvNumber.TlvUInt16,
        { persistent: true, readAcl: import_model.AccessLevel.Administer, writeAcl: import_model.AccessLevel.Administer }
      ),
      /**
       * Indicates the minimum version of the texts presented by the Enhanced Setup Flow that need to be accepted
       * by the user for this device. This attribute may change as the result of an OTA update.
       *
       * If an event such as a software update causes TCAcceptedVersion to become less than TCMinRequiredVersion,
       * then the device shall update TCAcknowledgementsRequired to True so that an administrator can detect that
       * a newer version of the texts needs to be presented to the user.
       *
       * @see {@link MatterSpecification.v142.Core} § 11.10.6.7
       */
      tcMinRequiredVersion: (0, import_Cluster.Attribute)(
        6,
        import_TlvNumber.TlvUInt16,
        { persistent: true, readAcl: import_model.AccessLevel.Administer, writeAcl: import_model.AccessLevel.Administer }
      ),
      /**
       * Indicates the user’s response to the presented terms. Each bit position corresponds to a user response
       * for the associated index of matching text, such that bit 0 (bit value 1) is for text index 0. Bit 15 (bit
       * value 0x8000) is for text index 15. A bit value of 1 indicates acceptance and a value of 0 indicates
       * non-acceptance. For example, if there are two texts that were presented where the first (bit 0, value 1)
       * was declined and the second accepted (bit 1, value 2), we would expect the resulting value of the map to
       * be 2.
       *
       * Whenever a user provides responses to newly presented terms and conditions, this attribute shall be
       * updated with the latest responses. This may happen in response to updated terms that were presented to
       * the user. On a factory reset this field shall be reset with all bits set to 0.
       *
       * @see {@link MatterSpecification.v142.Core} § 11.10.6.8
       */
      tcAcknowledgements: (0, import_Cluster.Attribute)(
        7,
        import_TlvNumber.TlvUInt16,
        { persistent: true, readAcl: import_model.AccessLevel.Administer, writeAcl: import_model.AccessLevel.Administer }
      ),
      /**
       * Indicates whether SetTCAcknowledgements is currently required to be called with the inclusion of
       * mandatory terms accepted.
       *
       * This attribute may be present and False in the case where no terms and conditions are currently mandatory
       * to accept for CommissioningComplete command to succeed.
       *
       * This attribute may appear, or become True after commissioning (e.g. due to a firmware update) to indicate
       * that new Terms & Conditions are available that the user must accept.
       *
       * Upon Factory Data Reset, this attribute shall be set to a value of True.
       *
       * When Custom Commissioning Flow is used to obtain user consent (e.g. because the Commissioner does not
       * support the TC feature), the manufacturer-provided means for obtaining user consent shall ensure that
       * this attribute is set to False before returning the user back to the original Commissioner (see Section
       * 5.7.4, “Enhanced Setup Flow (ESF)”).
       *
       * @see {@link MatterSpecification.v142.Core} § 11.10.6.9
       */
      tcAcknowledgementsRequired: (0, import_Cluster.Attribute)(
        8,
        import_TlvBoolean.TlvBoolean,
        { persistent: true, default: true, readAcl: import_model.AccessLevel.Administer, writeAcl: import_model.AccessLevel.Administer }
      ),
      /**
       * Indicates the System Time in seconds when any functionality limitations will begin due to a lack of
       * acceptance of updated Terms and Conditions, as described in Section 5.7.4.6, “Presenting Updated Terms
       * and Conditions”.
       *
       * A null value indicates that there is no pending deadline for updated TC acceptance.
       *
       * @see {@link MatterSpecification.v142.Core} § 11.10.6.10
       */
      tcUpdateDeadline: (0, import_Cluster.Attribute)(
        9,
        (0, import_TlvNullable.TlvNullable)(import_TlvNumber.TlvUInt32),
        { persistent: true, readAcl: import_model.AccessLevel.Administer, writeAcl: import_model.AccessLevel.Administer }
      )
    },
    commands: {
      /**
       * This command is used to set the user acknowledgements received in the Enhanced Setup Flow Terms &
       * Conditions into the node.
       *
       * @see {@link MatterSpecification.v142.Core} § 11.10.7.8
       */
      setTcAcknowledgements: (0, import_Cluster.Command)(
        6,
        GeneralCommissioning2.TlvSetTcAcknowledgementsRequest,
        7,
        GeneralCommissioning2.TlvSetTcAcknowledgementsResponse,
        { invokeAcl: import_model.AccessLevel.Administer }
      )
    }
  });
  GeneralCommissioning2.Base = import_MutableCluster.MutableCluster.Component({
    id: 48,
    name: "GeneralCommissioning",
    revision: 2,
    features: {
      /**
       * Supports Terms & Conditions acknowledgement
       */
      termsAndConditions: (0, import_BitmapSchema.BitFlag)(0)
    },
    attributes: {
      /**
       * This attribute allows for the storage of a client-provided small payload which Administrators and
       * Commissioners may write and then subsequently read, to keep track of their own progress. This may be used
       * by the Commissioner to avoid repeating already-executed actions upon re-establishing a commissioning link
       * after an error.
       *
       * On start/restart of the server, such as when a device is power-cycled, this attribute shall be reset to
       * zero.
       *
       * Some commands related to commissioning also have a side-effect of updating or resetting this attribute
       * and this is specified in their respective functional descriptions.
       *
       * The format of the value within this attribute is unspecified and its value is not otherwise used by the
       * functioning of any cluster, other than being set as a side-effect of commands where this behavior is
       * described.
       *
       * @see {@link MatterSpecification.v142.Core} § 11.10.6.1
       */
      breadcrumb: (0, import_Cluster.WritableAttribute)(0, import_TlvNumber.TlvUInt64, { default: 0, writeAcl: import_model.AccessLevel.Administer }),
      /**
       * This attribute shall describe critical parameters needed at the beginning of commissioning flow. See
       * Section 11.10.5.3, “BasicCommissioningInfo Type” for more information.
       *
       * @see {@link MatterSpecification.v142.Core} § 11.10.6.2
       */
      basicCommissioningInfo: (0, import_Cluster.FixedAttribute)(1, GeneralCommissioning2.TlvBasicCommissioningInfo),
      /**
       * Indicates the regulatory configuration for the product.
       *
       * Note that the country code is part of Basic Information Cluster and therefore NOT listed on the
       * RegulatoryConfig attribute.
       *
       * @see {@link MatterSpecification.v142.Core} § 11.10.6.3
       */
      regulatoryConfig: (0, import_Cluster.Attribute)(2, (0, import_TlvNumber.TlvEnum)()),
      /**
       * LocationCapability is statically set by the manufacturer and indicates if this Node needs to be told an
       * exact RegulatoryLocation. For example a Node which is "Indoor Only" would not be certified for outdoor
       * use at all, and thus there is no need for a commissioner to set or ask the user about whether the device
       * will be used inside or outside. However a device which states its capability is "Indoor/Outdoor" means it
       * would like clarification if possible.
       *
       * For Nodes without radio network interfaces (e.g. Ethernet-only devices), the value IndoorOutdoor shall
       * always be used.
       *
       * The default value of the RegulatoryConfig attribute is the value of LocationCapability attribute. This
       * means devices always have a safe default value, and Commissioners which choose to implement smarter
       * handling can.
       *
       * @see {@link MatterSpecification.v142.Core} § 11.10.6.4
       */
      locationCapability: (0, import_Cluster.FixedAttribute)(
        3,
        (0, import_TlvNumber.TlvEnum)(),
        { default: 2 /* IndoorOutdoor */ }
      ),
      /**
       * Indicates whether this device supports "concurrent connection flow" commissioning mode (see Section 5.5,
       * “Commissioning Flows”). If false, the device only supports "non-concurrent connection flow" mode.
       *
       * @see {@link MatterSpecification.v142.Core} § 11.10.6.5
       */
      supportsConcurrentConnection: (0, import_Cluster.FixedAttribute)(4, import_TlvBoolean.TlvBoolean, { default: true })
    },
    commands: {
      /**
       * This command is used to arm or disarm the fail-safe timer.
       *
       * Success or failure of this command shall be communicated by the ArmFailSafeResponse command, unless some
       * data model validations caused a failure status code to be issued during the processing of the command.
       *
       * If the fail-safe timer is not currently armed, the commissioning window is open, and the command was
       * received over a CASE session, the command shall leave the current fail-safe state unchanged and
       * immediately respond with an ArmFailSafeResponse containing an ErrorCode value of BusyWithOtherAdmin. This
       * is done to allow commissioners, which use PASE connections, the opportunity to use the failsafe during
       * the relatively short commissioning window.
       *
       * Otherwise, the command shall arm or re-arm the "fail-safe timer" with an expiry time set for a duration
       * of ExpiryLengthSeconds, or disarm it, depending on the situation:
       *
       *   - If ExpiryLengthSeconds is 0 and the fail-safe timer was already armed and the accessing fabric
       *     matches the Fabric currently associated with the fail-safe context, then the fail-safe timer shall be
       *     immediately expired (see further below for side-effects of expiration).
       *
       *   - If ExpiryLengthSeconds is 0 and the fail-safe timer was not armed, then this command invocation shall
       *     lead to a success response with no side-effects against the fail-safe context.
       *
       *   - If ExpiryLengthSeconds is non-zero and the fail-safe timer was not currently armed, then the
       *     fail-safe timer shall be armed for that duration.
       *
       *   - If ExpiryLengthSeconds is non-zero and the fail-safe timer was currently armed, and the accessing
       *     Fabric matches the fail-safe context’s associated Fabric, then the fail-safe timer shall be re-armed
       *     to expire in ExpiryLengthSeconds.
       *
       *   - Otherwise, the command shall leave the current fail-safe state unchanged and immediately respond with
       *     ArmFailSafeResponse containing an ErrorCode value of BusyWithOtherAdmin, indicating a likely conflict
       *     between commissioners.
       *
       * The value of the Breadcrumb field shall be written to the Breadcrumb on successful execution of the
       * command.
       *
       * If the receiver restarts unexpectedly (e.g., power interruption, software crash, or other reset) the
       * receiver shall behave as if the fail-safe timer expired and perform the sequence of clean-up steps listed
       * below.
       *
       * On successful execution of the command, the ErrorCode field of the ArmFailSafeResponse shall be set to
       * OK.
       *
       * ### Fail Safe Context
       *
       * When first arming the fail-safe timer, a 'Fail Safe Context' shall be created on the receiver, to track
       * the following state information while the fail-safe is armed:
       *
       *   - The fail-safe timer duration.
       *
       *   - The state of all Network Commissioning Networks attribute configurations, to allow recovery of
       *     connectivity after Fail-Safe expiry.
       *
       *   - Whether an AddNOC command or UpdateNOC command has taken place.
       *
       *   - A fabric-index for the fabric-scoping of the context, starting at the accessing fabric index for the
       *     ArmFailSafe command, and updated with the Fabric Index associated with an AddNOC or an UpdateNOC
       *     command being invoked successfully during the ongoing Fail-Safe timer period.
       *
       *   - The operational credentials associated with any Fabric whose configuration is affected by the
       *     UpdateNOC command.
       *
       *   - Optionally: the previous state of non-fabric-scoped data that is mutated during the fail-safe period.
       *
       * Note the following to assist in understanding the above state-keeping, which summarizes other normative
       * requirements in the respective sections:
       *
       *   - The AddNOC command can only be invoked once per contiguous non-expiring fail-safe timer period, and
       *     only if no UpdateNOC command was previously processed within the same fail-safe timer period.
       *
       *   - The UpdateNOC command can only be invoked once per contiguous non-expiring fail-safe timer period,
       *     can only be invoked over a CASE session, and only if no AddNOC command was previously processed in
       *     the same fail-safe timer period.
       *
       * On creation of the Fail Safe Context a second timer shall be created to expire at
       * MaxCumulativeFailsafeSeconds as specified in BasicCommissioningInfo. This Cumulative Fail Safe Context
       * timer (CFSC timer) serves to limit the lifetime of any particular Fail Safe Context; it shall NOT be
       * extended or modified on subsequent invocations of ArmFailSafe associated with this Fail Safe Context.
       * Upon expiry of the CFSC timer, the receiver shall execute cleanup behavior equivalent to that of
       * fail-safe timer expiration as detailed in Section 11.10.7.2.2, “Behavior on expiry of Fail-Safe timer”.
       * Termination of the session prior to the expiration of that timer for any reason (including a successful
       * end of commissioning or an expiry of a fail-safe timer) shall also delete the CFSC timer.
       *
       * ### Behavior on expiry of Fail-Safe timer
       *
       * If the fail-safe timer expires before the CommissioningComplete command is successfully invoked, the
       * following sequence of clean-up steps shall be executed, in order, by the receiver:
       *
       *   1. Terminate any open PASE secure session by clearing any associated Secure Session Context at the
       *      Server.
       *
       *   2. Revoke the temporary administrative privileges granted to any open PASE session (see Section
       *      6.6.2.9, “Bootstrapping of the Access Control Cluster”) at the Server.
       *
       *   3. If an AddNOC or UpdateNOC command has been successfully invoked, terminate all CASE sessions
       *      associated with the Fabric whose Fabric Index is recorded in the Fail-Safe context (see Section
       *      11.10.7.2, “ArmFailSafe Command”) by clearing any associated Secure Session Context at the Server.
       *
       *   4. Reset the configuration of all Network Commissioning Networks attribute to their state prior to the
       *      Fail-Safe being armed.
       *
       *   5. If an UpdateNOC command had been successfully invoked, revert the state of operational key pair, NOC
       *      and ICAC for that Fabric to the state prior to the Fail-Safe timer being armed, for the Fabric Index
       *      that was the subject of the UpdateNOC command.
       *
       *   6. If an AddNOC command had been successfully invoked, achieve the equivalent effect of invoking the
       *      RemoveFabric command against the fabric-index stored in the Fail-Safe Context for the Fabric Index
       *      that was the subject of the AddNOC command. This shall remove all associations to that Fabric
       *      including all fabric-scoped data, and may possibly factory-reset the device depending on current
       *      device state. This shall only apply to Fabrics added during the fail-safe period as the result of
       *      the AddNOC command.
       *
       *   7. If the CSRRequest command had been successfully invoked, but no AddNOC or UpdateNOC command had been
       *      successfully invoked, then the new operational key pair temporarily generated for the purposes of
       *      NOC addition or update (see Section 6.4.6.1, “Node Operational Certificate Signing Request (NOCSR)
       *      Procedure”) shall be removed as it is no longer needed.
       *
       *   8. Remove any RCACs added by the AddTrustedRootCertificate command that are not currently referenced by
       *      any entry in the Fabrics attribute.
       *
       *   9. Reset the Breadcrumb attribute to zero.
       *
       *   10. Optionally: if no factory-reset resulted from the previous steps, it is recommended that the Node
       *       rollback the state of all non fabric-scoped data present in the Fail-Safe context.
       *
       * @see {@link MatterSpecification.v142.Core} § 11.10.7.2
       */
      armFailSafe: (0, import_Cluster.Command)(
        0,
        GeneralCommissioning2.TlvArmFailSafeRequest,
        1,
        GeneralCommissioning2.TlvArmFailSafeResponse,
        { invokeAcl: import_model.AccessLevel.Administer }
      ),
      /**
       * This command is used to set the regulatory configuration for the device.
       *
       * This shall add or update the regulatory configuration in the RegulatoryConfig Attribute to the value
       * provided in the NewRegulatoryConfig field.
       *
       * Success or failure of this command shall be communicated by the SetRegulatoryConfigResponse command,
       * unless some data model validations caused a failure status code to be issued during the processing of the
       * command.
       *
       * The CountryCode field shall conforms to ISO 3166-1 alpha-2 and shall be used to set the Location
       * attribute reflected by the Basic Information Cluster.
       *
       * If the server limits some of the values (e.g. locked to a particular country, with no regulatory data for
       * others), then setting regulatory information outside a valid country or location shall still set the
       * Location attribute reflected by the Basic Information Cluster configuration, but the
       * SetRegulatoryConfigResponse replied shall have the ErrorCode field set to ValueOutsideRange error.
       *
       * If the LocationCapability attribute is not Indoor/Outdoor and the NewRegulatoryConfig value received does
       * not match either the Indoor or Outdoor fixed value in LocationCapability, then the
       * SetRegulatoryConfigResponse replied shall have the ErrorCode field set to ValueOutsideRange error and the
       * RegulatoryConfig attribute and associated internal radio configuration shall remain unchanged.
       *
       * If the LocationCapability attribute is set to Indoor/Outdoor, then the RegulatoryConfig attribute shall
       * be set to match the NewRegulatoryConfig field.
       *
       * On successful execution of the command, the ErrorCode field of the SetRegulatoryConfigResponse shall be
       * set to OK.
       *
       * The Breadcrumb field shall be used to atomically set the Breadcrumb attribute on success of this command,
       * when SetRegulatoryConfigResponse has the ErrorCode field set to OK. If the command fails, the Breadcrumb
       * attribute shall be left unchanged.
       *
       * @see {@link MatterSpecification.v142.Core} § 11.10.7.4
       */
      setRegulatoryConfig: (0, import_Cluster.Command)(
        2,
        GeneralCommissioning2.TlvSetRegulatoryConfigRequest,
        3,
        GeneralCommissioning2.TlvSetRegulatoryConfigResponse,
        { invokeAcl: import_model.AccessLevel.Administer }
      ),
      /**
       * This command is used to indicate that the commissioning process is complete.
       *
       * Success or failure of this command shall be communicated by the CommissioningCompleteResponse command,
       * unless some data model validations caused a failure status code to be issued during the processing of the
       * command.
       *
       * This command signals the Server that the Commissioner or Administrator has successfully completed all
       * steps needed during the Fail-Safe period, such as commissioning (see Section 5.5, “Commissioning Flows”)
       * or other Administrator operations requiring usage of the Fail Safe timer. It ensures that the Server is
       * configured in a state such that it still has all necessary elements to be fully operable within a Fabric,
       * such as ACL entries (see Section 9.10, “Access Control Cluster”) and operational credentials (see Section
       * 6.4, “Node Operational Credentials Specification”), and that the Node is reachable using CASE (see
       * Section 4.14.2, “Certificate Authenticated Session Establishment (CASE)”) over an operational network.
       *
       * An ErrorCode of NoFailSafe shall be responded to the invoker if the CommissioningComplete command was
       * received when no Fail-Safe context exists.
       *
       * If Terms and Conditions are required, then an ErrorCode of TCAcknowledgementsNotReceived shall be
       * responded to the invoker if the user acknowledgements to the required Terms and Conditions have not been
       * provided.
       *
       * This command is fabric-scoped, so cannot be issued over a session that does not have an associated
       * fabric, i.e. over PASE session prior to an AddNOC command. In addition, this command is only permitted
       * over CASE and must be issued by a node associated with the ongoing Fail-Safe context. An ErrorCode of
       * InvalidAuthentication shall be responded to the invoker if the CommissioningComplete command was received
       * outside a CASE session (e.g., over Group messaging, or PASE session after AddNOC), or if the accessing
       * fabric is not the one associated with the ongoing Fail-Safe context.
       *
       * This command shall only result in success with an ErrorCode value of OK in the
       * CommissioningCompleteResponse if received over a CASE session and the accessing fabric index matches the
       * Fabric Index associated with the current Fail-Safe context. In other words:
       *
       *   - If no AddNOC command had been successfully invoked, the CommissioningComplete command must originate
       *     from the Fabric that initiated the Fail-Safe context.
       *
       *   - After an AddNOC command has been successfully invoked, the CommissioningComplete command must
       *     originate from the Fabric which was joined through the execution of that command, which updated the
       *     Fail-Safe context’s Fabric Index.
       *
       * On successful execution of the CommissioningComplete command, where the CommissioningCompleteResponse has
       * an ErrorCode of OK, the following actions shall be undertaken on the Server:
       *
       *   1. The Fail-Safe timer associated with the current Fail-Safe context shall be disarmed.
       *
       *   2. The commissioning window at the Server shall be closed.
       *
       *   3. Any temporary administrative privileges automatically granted to any open PASE session shall be
       *      revoked (see Section 6.6.2.9, “Bootstrapping of the Access Control Cluster”).
       *
       *   4. The Secure Session Context of any PASE session still established at the Server shall be cleared.
       *
       *   5. The Breadcrumb attribute shall be reset to zero.
       *
       * After receipt of a CommissioningCompleteResponse with an ErrorCode value of OK, a client cannot expect
       * any previously established PASE session to still be usable, due to the server having cleared such
       * sessions.
       *
       * @see {@link MatterSpecification.v142.Core} § 11.10.7.6
       */
      commissioningComplete: (0, import_Cluster.Command)(
        4,
        import_TlvNoArguments.TlvNoArguments,
        5,
        GeneralCommissioning2.TlvCommissioningCompleteResponse,
        { invokeAcl: import_model.AccessLevel.Administer }
      )
    },
    /**
     * This metadata controls which GeneralCommissioningCluster elements matter.js activates for specific feature
     * combinations.
     */
    extensions: import_MutableCluster.MutableCluster.Extensions(
      { flags: { termsAndConditions: true }, component: GeneralCommissioning2.TermsAndConditionsComponent }
    )
  });
  GeneralCommissioning2.ClusterInstance = (0, import_MutableCluster.MutableCluster)(GeneralCommissioning2.Base);
  GeneralCommissioning2.Cluster = GeneralCommissioning2.ClusterInstance;
  const TC = { termsAndConditions: true };
  GeneralCommissioning2.CompleteInstance = (0, import_MutableCluster.MutableCluster)({
    id: GeneralCommissioning2.Cluster.id,
    name: GeneralCommissioning2.Cluster.name,
    revision: GeneralCommissioning2.Cluster.revision,
    features: GeneralCommissioning2.Cluster.features,
    attributes: {
      ...GeneralCommissioning2.Cluster.attributes,
      tcAcceptedVersion: import_MutableCluster.MutableCluster.AsConditional(
        GeneralCommissioning2.TermsAndConditionsComponent.attributes.tcAcceptedVersion,
        { mandatoryIf: [TC] }
      ),
      tcMinRequiredVersion: import_MutableCluster.MutableCluster.AsConditional(
        GeneralCommissioning2.TermsAndConditionsComponent.attributes.tcMinRequiredVersion,
        { mandatoryIf: [TC] }
      ),
      tcAcknowledgements: import_MutableCluster.MutableCluster.AsConditional(
        GeneralCommissioning2.TermsAndConditionsComponent.attributes.tcAcknowledgements,
        { mandatoryIf: [TC] }
      ),
      tcAcknowledgementsRequired: import_MutableCluster.MutableCluster.AsConditional(
        GeneralCommissioning2.TermsAndConditionsComponent.attributes.tcAcknowledgementsRequired,
        { mandatoryIf: [TC] }
      ),
      tcUpdateDeadline: import_MutableCluster.MutableCluster.AsConditional(
        GeneralCommissioning2.TermsAndConditionsComponent.attributes.tcUpdateDeadline,
        { mandatoryIf: [TC] }
      )
    },
    commands: {
      ...GeneralCommissioning2.Cluster.commands,
      setTcAcknowledgements: import_MutableCluster.MutableCluster.AsConditional(
        GeneralCommissioning2.TermsAndConditionsComponent.commands.setTcAcknowledgements,
        { mandatoryIf: [TC] }
      )
    }
  });
  GeneralCommissioning2.Complete = GeneralCommissioning2.CompleteInstance;
})(GeneralCommissioning || (GeneralCommissioning = {}));
const GeneralCommissioningCluster = GeneralCommissioning.Cluster;
import_ClusterRegistry.ClusterRegistry.register(GeneralCommissioning.Complete);
//# sourceMappingURL=general-commissioning.js.map
