import { DeviceTypeDefinition, MatterbridgeEndpoint } from 'matterbridge';
import { AtLeastOne, ServerNode } from 'matterbridge/matter';
import { BasicInformation } from 'matterbridge/matter/clusters';
import { AnsiLogger } from 'matterbridge/logger';
import { Config } from './config-types.js';
import { Changed } from './decorator-changed.js';
export interface BasicInformationOptions {
    uniqueId: string;
    hardwareVersion?: string;
    nodeLabel: string;
    productId: number;
    productName: string;
    softwareVersion?: string;
    vendorId: number;
    vendorName: string;
    manufacturingDate?: string;
    partNumber?: string;
    productAppearance?: BasicInformation.ProductAppearance;
    productLabel?: string;
    productUrl?: string;
    serialNumber?: string;
}
export interface EndpointOptionsBase {
    uniqueStorageKey: string;
    matterbridgeDeviceName: string;
    basicInformation: BasicInformationOptions;
}
export type EndpointLike = Pick<EndpointBase, 'behaviors' | 'log' | 'triggerEvent' | 'updateAttribute' | 'changed'>;
export declare class EndpointBase extends MatterbridgeEndpoint {
    readonly config: Config;
    readonly options: EndpointOptionsBase;
    changed: Changed;
    constructor(log: AnsiLogger, config: Config, options: EndpointOptionsBase, definition: DeviceTypeDefinition | AtLeastOne<DeviceTypeDefinition>);
    postRegister(): Promise<void>;
    patchBasicInformationClusterServer(serverNode: ServerNode, info: BasicInformationOptions): Promise<void>;
    createBridgedDeviceBasicInformationClusterServer(info: BasicInformationOptions): this;
    updateReachable(reachable: boolean): Promise<void>;
}
export declare function formatEnumLog<T extends Record<string, number | string>>(enumMap: T, value: T[keyof T] extends number ? T[keyof T] : never): string;
//# sourceMappingURL=endpoint-base.d.ts.map