/**
 * @license
 * Copyright 2022-2026 Matter.js Authors
 * SPDX-License-Identifier: Apache-2.0
 */
import { InteractionSession } from "#action/Interactable.js";
import { AttributeTypeProtocol, ClusterProtocol, EndpointProtocol, NodeProtocol } from "#action/protocols.js";
import { ReadResult } from "#action/response/ReadResult.js";
import { AttributeId, AttributePath, ClusterId, EndpointNumber } from "#types";
import { AttributeReadResponse } from "./AttributeReadResponse.js";
export declare namespace DirtyState {
    type ForCluster = {
        [clusterId: ClusterId]: Set<AttributeId>;
    };
    type ForNode = {
        [endpointId: EndpointNumber]: ForCluster;
    };
}
/**
 * A specialization of {@link AttributeReadResponse} that processes a read/subscribe request with a filter applied to
 * the attributes. Only processes attributes that match the filter.
 */
export declare class AttributeSubscriptionResponse<SessionT extends InteractionSession = InteractionSession> extends AttributeReadResponse<SessionT> {
    #private;
    constructor(node: NodeProtocol, session: SessionT, filter: DirtyState.ForNode);
    get dirty(): DirtyState.ForNode;
    /** Guarded accessor for this.#currentEndpointFilter.  This should never be undefined */
    protected get currentEndpointDirty(): DirtyState.ForCluster;
    /** Guarded accessor for this.#currentCLusterFilter.  This should never be undefined */
    protected get currentClusterDirty(): Set<number>;
    protected addConcrete(path: ReadResult.ConcreteAttributePath): void;
    protected readEndpointForWildcard(endpoint: EndpointProtocol, path: AttributePath): Generator<ReadResult.Report[], void, unknown>;
    protected readClusterForWildcard(cluster: ClusterProtocol, path: AttributePath): void;
    protected readAttributeForWildcard(attribute: AttributeTypeProtocol, path: AttributePath): void;
    protected addStatus(): void;
}
//# sourceMappingURL=AttributeSubscriptionResponse.d.ts.map