import type { Fabric } from "#fabric/Fabric.js";
import { AccessLevel } from "@matter/model";
import { ClusterId, DeviceTypeId, EndpointNumber, FabricIndex, StatusResponseError, SubjectId } from "@matter/types";
import { AccessControl } from "@matter/types/clusters/access-control";
import { AccessControl as AccessControlContext } from "../action/server/AccessControl.js";
export type AclEntry = Omit<AccessControl.AccessControlEntry, "privilege"> & {
    privilege: AccessLevel;
};
export type AclList = AclEntry[];
export type AclExtensionEntry = AccessControl.AccessControlExtension;
export type AclExtensionList = AclExtensionEntry[];
export type AclEndpointContext = {
    id: EndpointNumber;
    deviceTypes: DeviceTypeId[];
};
declare enum AuthModeNone {
    None = 0
}
export type IncomingSubjectDescriptor = {
    isCommissioning: boolean;
    authMode: AccessControl.AccessControlEntryAuthMode | AuthModeNone;
    subjects: SubjectId[];
    fabricIndex: FabricIndex;
};
export declare class AccessDeniedError extends StatusResponseError {
    constructor(message?: string);
}
/**
 * Implements Access Control Logic For one fabric as per Matter Specification @see {@link MatterSpecification.v12.Core}
 * § 6.6.5.2.
 */
export declare class FabricAccessControl {
    #private;
    constructor(fabric?: Fabric);
    /**
     * Public method used to update the Access Control List on changes.
     */
    set aclList(aclList: AccessControl.AccessControlEntry[]);
    set extensionEntryAccessCheck(func: (aclList: AclList, aclEntry: AclEntry, subjectDesc: IncomingSubjectDescriptor, endpoint: AclEndpointContext, clusterId: ClusterId) => boolean);
    /**
     * Implements the access control check for the given context, location and endpoint and is called by the
     * InteractionServer. The method returns the list of granted Access privileges for the given context, location and
     * endpoint.
     */
    accessLevelsFor(context: AccessControlContext.Session, location: AccessControlContext.Location, endpoint?: AclEndpointContext): AccessLevel[];
}
export {};
//# sourceMappingURL=FabricAccessControl.d.ts.map