/**
 * @license
 * Copyright 2022-2026 Matter.js Authors
 * SPDX-License-Identifier: Apache-2.0
 */
import { AttributeId, ClusterId, ClusterType, EndpointNumber, TlvSchema } from "@matter/types";
import { InteractionClient } from "./InteractionClient.js";
/**
 * Factory function to create an AttributeClient for a given attribute.
 */
export declare function createAttributeClient<T>(attribute: ClusterType.Attribute<T>, name: string, endpointId: EndpointNumber | undefined, clusterId: ClusterId, interactionClient: InteractionClient, present?: boolean, unknown?: boolean): AttributeClient<T>;
/**
 * General class for AttributeClients
 */
export declare class AttributeClient<T = any> {
    #private;
    readonly attribute: ClusterType.Attribute<T>;
    readonly name: string;
    readonly endpointId: EndpointNumber | undefined;
    readonly clusterId: ClusterId;
    protected readonly schema: TlvSchema<any>;
    readonly id: AttributeId;
    constructor(attribute: ClusterType.Attribute<T>, name: string, endpointId: EndpointNumber | undefined, clusterId: ClusterId, interactionClient: InteractionClient);
    /**
     * Set the value of the attribute. When dataVersion parameter is provided the value is only set when the
     * cluster dataVersion of the server matches. If it does not match it is rejected with an Error.
     */
    set(value: T, dataVersion?: number): Promise<void>;
    get fabricScoped(): boolean;
    getLocal(): T | undefined;
    /**
     * Get the value of the attribute. Fabric scoped reads are always done with the remote.
     * The `requestFromRemote` parameter allowed to force or prevent remote reads:
     * - `true` forces a remote read
     * - `false` forces a local read, return undefined if no value is available
     * - `undefined` returns local values if available or if the read is fabric filtered, otherwise remote read
     */
    get(requestFromRemote?: boolean, isFabricFiltered?: boolean): Promise<T | undefined>;
    /** Subscribe to the attribute. */
    subscribe(minIntervalFloorSeconds: number, maxIntervalCeilingSeconds: number, knownDataVersion?: number, isFabricFiltered?: boolean): Promise<{
        maxInterval: number;
    }>;
    /**
     * Update the value of the attribute. Just internally used!
     * @private
     */
    update(value: T): void;
    /** Add a listener to the attribute. */
    addListener(listener: (newValue: T) => void): void;
    /** Remove a listener from the attribute. */
    removeListener(listener: (newValue: T) => void): void;
}
/**
 * Special AttributeClient class to allow identifying attributes that are supported because reported by the Devices.
 */
export declare class SupportedAttributeClient<T> extends AttributeClient<T> {
}
/**
 * Special AttributeClient class to allow identifying attributes that are supported because reported by the Devices,
 * but the contained attribute is unknown.
 */
export declare class UnknownSupportedAttributeClient extends SupportedAttributeClient<any> {
}
//# sourceMappingURL=AttributeClient.d.ts.map