/**
 * @license
 * Copyright 2022-2026 Matter.js Authors
 * SPDX-License-Identifier: Apache-2.0
 */
/*** THIS FILE IS GENERATED, DO NOT EDIT ***/
import { MutableCluster } from "../cluster/mutation/MutableCluster.js";
import { Attribute, Command, Event } from "../cluster/Cluster.js";
import { BitFlag } from "../schema/BitmapSchema.js";
import { TypeFromSchema } from "../tlv/TlvSchema.js";
import { Status } from "../globals/Status.js";
import { Identity } from "#general";
export declare namespace CommissionerControl {
    /**
     * @see {@link MatterSpecification.v142.Core} § 11.26.4.1
     */
    const SupportedDeviceCategory: {
        /**
         * Aggregators which support Fabric Synchronization may be commissioned.
         *
         * The FabricSynchronization bit shall be set to 1 if and only if the server supports commissioning nodes that
         * support Fabric Synchronization.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.26.4.1.1
         */
        fabricSynchronization: BitFlag;
    };
    /**
     * Input to the CommissionerControl requestCommissioningApproval command
     *
     * @see {@link MatterSpecification.v142.Core} § 11.26.6.1
     */
    const TlvRequestCommissioningApprovalRequest: import("../tlv/TlvObject.js").ObjectSchema<{
        requestId: import("../tlv/TlvObject.js").FieldType<number | bigint>;
        vendorId: import("../tlv/TlvObject.js").FieldType<import("../datatype/VendorId.js").VendorId>;
        productId: import("../tlv/TlvObject.js").FieldType<number>;
        label: import("../tlv/TlvObject.js").OptionalFieldType<string>;
    }>;
    /**
     * Input to the CommissionerControl requestCommissioningApproval command
     *
     * @see {@link MatterSpecification.v142.Core} § 11.26.6.1
     */
    interface RequestCommissioningApprovalRequest extends TypeFromSchema<typeof TlvRequestCommissioningApprovalRequest> {
    }
    /**
     * Input to the CommissionerControl commissionNode command
     *
     * @see {@link MatterSpecification.v142.Core} § 11.26.6.5
     */
    const TlvCommissionNodeRequest: import("../tlv/TlvObject.js").ObjectSchema<{
        requestId: import("../tlv/TlvObject.js").FieldType<number | bigint>;
        responseTimeoutSeconds: import("../tlv/TlvObject.js").FieldType<number>;
    }>;
    /**
     * Input to the CommissionerControl commissionNode command
     *
     * @see {@link MatterSpecification.v142.Core} § 11.26.6.5
     */
    interface CommissionNodeRequest extends TypeFromSchema<typeof TlvCommissionNodeRequest> {
    }
    /**
     * When received within the timeout specified by ResponseTimeoutSeconds in the CommissionNode command, the client
     * shall open a commissioning window on a node which matches the VendorID and ProductID provided in the associated
     * RequestCommissioningApproval command.
     *
     * When commissioning this node, the server shall check that the VendorID and ProductID fields provided in the
     * RequestCommissioningApproval command match the VendorID and ProductID attributes of the Basic Information Cluster
     * which have already been verified during the Device Attestation Procedure. If they do not match, the server shall
     * NOT complete commissioning and SHOULD indicate an error to the user.
     *
     * > [!NOTE]
     *
     * > This is an alias onto the OpenCommissioningWindow command within the Administrator Commissioning Cluster. Refer
     *   to the OpenCommissioningWindow command for a description of the command behavior and parameters.
     *
     * The parameters for ReverseOpenCommissioningWindow command are as follows:
     *
     * @see {@link MatterSpecification.v142.Core} § 11.26.6.8
     */
    const TlvReverseOpenCommissioningWindowResponse: import("../tlv/TlvObject.js").ObjectSchema<{
        commissioningTimeout: import("../tlv/TlvObject.js").FieldType<number>;
        pakePasscodeVerifier: import("../tlv/TlvObject.js").FieldType<AllowSharedBufferSource>;
        discriminator: import("../tlv/TlvObject.js").FieldType<number>;
        iterations: import("../tlv/TlvObject.js").FieldType<number>;
        salt: import("../tlv/TlvObject.js").FieldType<AllowSharedBufferSource>;
    }>;
    /**
     * When received within the timeout specified by ResponseTimeoutSeconds in the CommissionNode command, the client
     * shall open a commissioning window on a node which matches the VendorID and ProductID provided in the associated
     * RequestCommissioningApproval command.
     *
     * When commissioning this node, the server shall check that the VendorID and ProductID fields provided in the
     * RequestCommissioningApproval command match the VendorID and ProductID attributes of the Basic Information Cluster
     * which have already been verified during the Device Attestation Procedure. If they do not match, the server shall
     * NOT complete commissioning and SHOULD indicate an error to the user.
     *
     * > [!NOTE]
     *
     * > This is an alias onto the OpenCommissioningWindow command within the Administrator Commissioning Cluster. Refer
     *   to the OpenCommissioningWindow command for a description of the command behavior and parameters.
     *
     * The parameters for ReverseOpenCommissioningWindow command are as follows:
     *
     * @see {@link MatterSpecification.v142.Core} § 11.26.6.8
     */
    interface ReverseOpenCommissioningWindowResponse extends TypeFromSchema<typeof TlvReverseOpenCommissioningWindowResponse> {
    }
    /**
     * Body of the CommissionerControl commissioningRequestResult event
     *
     * @see {@link MatterSpecification.v142.Core} § 11.26.7.1
     */
    const TlvCommissioningRequestResultEvent: import("../tlv/TlvObject.js").ObjectSchema<{
        requestId: import("../tlv/TlvObject.js").FieldType<number | bigint>;
        clientNodeId: import("../tlv/TlvObject.js").FieldType<import("../datatype/NodeId.js").NodeId>;
        statusCode: import("../tlv/TlvObject.js").FieldType<Status>;
        fabricIndex: import("../tlv/TlvObject.js").FieldType<import("../datatype/FabricIndex.js").FabricIndex>;
    }>;
    /**
     * Body of the CommissionerControl commissioningRequestResult event
     *
     * @see {@link MatterSpecification.v142.Core} § 11.26.7.1
     */
    interface CommissioningRequestResultEvent extends TypeFromSchema<typeof TlvCommissioningRequestResultEvent> {
    }
    /**
     * @see {@link Cluster}
     */
    const ClusterInstance: MutableCluster<{
        readonly id: 1873;
        readonly name: "CommissionerControl";
        readonly revision: 1;
        readonly attributes: {
            /**
             * Indicates the device categories specified in SupportedDeviceCategoryBitmap that are supported by this
             * Commissioner Control Cluster server.
             *
             * A client shall NOT send the RequestCommissioningApproval command if the intended node to be commissioned
             * does not conform to any of the values specified in SupportedDeviceCategories.
             *
             * @see {@link MatterSpecification.v142.Core} § 11.26.5.1
             */
            readonly supportedDeviceCategories: Attribute<import("../schema/BitmapSchema.js").TypeFromPartialBitSchema<{
                /**
                 * Aggregators which support Fabric Synchronization may be commissioned.
                 *
                 * The FabricSynchronization bit shall be set to 1 if and only if the server supports commissioning nodes that
                 * support Fabric Synchronization.
                 *
                 * @see {@link MatterSpecification.v142.Core} § 11.26.4.1.1
                 */
                fabricSynchronization: BitFlag;
            }>, any>;
        };
        readonly commands: {
            /**
             * This command is sent by a client to request approval for a future CommissionNode call. This is required
             * to be a separate step in order to provide the server time for interacting with a user before informing
             * the client that the CommissionNode operation may be successful.
             *
             * If the command is not executed via a CASE session, the command shall fail with a status code of
             * UNSUPPORTED_ACCESS.
             *
             * The server may request approval from the user, but it is not required.
             *
             * The server shall always return SUCCESS to a correctly formatted RequestCommissioningApproval command, and
             * then generate a CommissioningRequestResult event associated with the command’s accessing fabric once the
             * result is ready.
             *
             * Clients SHOULD avoid using the same RequestID. If the RequestID and client NodeID of a
             * RequestCommissioningApproval match a previously received RequestCommissioningApproval and the server has
             * not returned an error or completed commissioning of a device for the prior request, then the server
             * SHOULD return FAILURE.
             *
             * The parameters for RequestCommissioningApproval command are as follows:
             *
             * @see {@link MatterSpecification.v142.Core} § 11.26.6.1
             */
            readonly requestCommissioningApproval: Command<import("../tlv/TlvObject.js").TypeFromFields<{
                requestId: import("../tlv/TlvObject.js").FieldType<number | bigint>;
                vendorId: import("../tlv/TlvObject.js").FieldType<import("../datatype/VendorId.js").VendorId>;
                productId: import("../tlv/TlvObject.js").FieldType<number>;
                label: import("../tlv/TlvObject.js").OptionalFieldType<string>;
            }>, void, any>;
            /**
             * This command is sent by a client to request that the server begins commissioning a previously approved
             * request.
             *
             * The server shall return FAILURE if the CommissionNode command is not sent from the same NodeID and on the
             * same fabric as the RequestCommissioningApproval or if the provided RequestID to CommissionNode does not
             * match the value provided to RequestCommissioningApproval.
             *
             * If the command is not executed via a CASE session, the command shall fail with a status code of
             * UNSUPPORTED_ACCESS.
             *
             * Upon receipt, the server shall respond with ReverseOpenCommissioningWindow if CommissioningRequestResult
             * was generated with StatusCode of SUCCESS for the matching RequestID field and NodeID of the client.
             *
             * The server shall return FAILURE if the CommissionNode command is received after the server has already
             * responded to a client with ReverseOpenCommissioningWindow for a matching RequestID field and NodeID of
             * the client unless the client has sent another RequestCommissioningApproval and received an additional
             * CommissioningRequestResult.
             *
             * The parameters for CommissionNode command are as follows:
             *
             * @see {@link MatterSpecification.v142.Core} § 11.26.6.5
             */
            readonly commissionNode: Command<import("../tlv/TlvObject.js").TypeFromFields<{
                requestId: import("../tlv/TlvObject.js").FieldType<number | bigint>;
                responseTimeoutSeconds: import("../tlv/TlvObject.js").FieldType<number>;
            }>, import("../tlv/TlvObject.js").TypeFromFields<{
                commissioningTimeout: import("../tlv/TlvObject.js").FieldType<number>;
                pakePasscodeVerifier: import("../tlv/TlvObject.js").FieldType<AllowSharedBufferSource>;
                discriminator: import("../tlv/TlvObject.js").FieldType<number>;
                iterations: import("../tlv/TlvObject.js").FieldType<number>;
                salt: import("../tlv/TlvObject.js").FieldType<AllowSharedBufferSource>;
            }>, any>;
        };
        readonly events: {
            /**
             * This event shall be generated by the server following a RequestCommissioningApproval command which the
             * server responded to with SUCCESS.
             *
             * > [!NOTE]
             *
             * > The approval is valid for a period determined by the manufacturer and characteristics of the node
             *   presenting the Commissioner Control Cluster. Clients SHOULD send the CommissionNode command immediately
             *   upon receiving a CommissioningRequestResult event.
             *
             * @see {@link MatterSpecification.v142.Core} § 11.26.7.1
             */
            readonly commissioningRequestResult: Event<import("../tlv/TlvObject.js").TypeFromFields<{
                requestId: import("../tlv/TlvObject.js").FieldType<number | bigint>;
                clientNodeId: import("../tlv/TlvObject.js").FieldType<import("../datatype/NodeId.js").NodeId>;
                statusCode: import("../tlv/TlvObject.js").FieldType<Status>;
                fabricIndex: import("../tlv/TlvObject.js").FieldType<import("../datatype/FabricIndex.js").FabricIndex>;
            }>, any>;
        };
    }, []>;
    /**
     * The Commissioner Control Cluster supports the ability for clients to request the commissioning of themselves or
     * other nodes onto a fabric which the cluster server can commission onto. An example use case is ecosystem to
     * ecosystem Fabric Synchronization setup.
     *
     * The generalized flow supported by the Commissioner Control Cluster can be seen in the following diagram.
     *
     * @see {@link MatterSpecification.v142.Core} § 11.26
     */
    interface Cluster extends Identity<typeof ClusterInstance> {
    }
    const Cluster: Cluster;
    const Complete: Cluster;
}
export type CommissionerControlCluster = CommissionerControl.Cluster;
export declare const CommissionerControlCluster: CommissionerControl.Cluster;
//# sourceMappingURL=commissioner-control.d.ts.map