import type { HomebridgePlugin, HomebridgePluginUiMetadata, HomebridgePluginVersions, PluginAlias } from './plugins.interfaces.js';
import { EventEmitter } from 'node:events';
import { HttpService } from '@nestjs/axios';
import { ConfigService } from '../../core/config/config.service.js';
import { HomebridgeIpcService } from '../../core/homebridge-ipc/homebridge-ipc.service.js';
import { Logger } from '../../core/logger/logger.service.js';
import { NodePtyService } from '../../core/node-pty/node-pty.service.js';
import { ChildBridgesService } from '../child-bridges/child-bridges.service.js';
import { HomebridgeUpdateActionDto, PluginActionDto } from './plugins.dto.js';
export declare class PluginsService {
    private readonly httpService;
    private readonly nodePtyService;
    private readonly logger;
    private readonly configService;
    private readonly homebridgeIpcService;
    private readonly childBridgesService;
    private _npm;
    private _paths;
    private get npm();
    private get paths();
    private static readonly UI_RESTART_DELAY_MS;
    private installedPlugins;
    private npmPackage;
    private pluginListUrl;
    private pluginListFile;
    private pluginListRetryTimeout;
    private hiddenPlugins;
    private hiddenScopes;
    private unmaintainedPlugins;
    private pluginIcons;
    private pluginAuthors;
    private pluginNames;
    private pluginChangelogs;
    private newScopePlugins;
    private scopedPluginNames;
    private verifiedPlugins;
    private verifiedPlusPlugins;
    private npmPluginCache;
    private pluginAliasCache;
    private installedPluginsCache;
    private pluginAliasHints;
    constructor(httpService: HttpService, nodePtyService: NodePtyService, logger: Logger, configService: ConfigService, homebridgeIpcService: HomebridgeIpcService, childBridgesService: ChildBridgesService);
    private fixDisplayName;
    getInstalledPlugins(): Promise<HomebridgePlugin[]>;
    getOutOfDatePlugins(): Promise<HomebridgePlugin[]>;
    lookupPlugin(pluginName: string): Promise<HomebridgePlugin>;
    getAvailablePluginVersions(pluginName: string): Promise<HomebridgePluginVersions>;
    private extractTerms;
    private getPluginKeywords;
    private matchesPlugin;
    searchNpmRegistry(query: string): Promise<HomebridgePlugin[]>;
    searchNpmRegistrySingle(query: string): Promise<HomebridgePlugin[]>;
    private manageUi;
    managePlugin(action: 'install' | 'uninstall', pluginAction: PluginActionDto, client: EventEmitter): Promise<boolean>;
    getHomebridgePackage(): Promise<HomebridgePlugin>;
    updateHomebridgePackage(homebridgeUpdateAction: HomebridgeUpdateActionDto, client: EventEmitter): Promise<boolean>;
    triggerUpdate(name: string, version?: string): Promise<{
        ok: boolean;
        name: string;
        version: string;
    }>;
    clearInstalledPluginsCache(): void;
    getHomebridgeUiPackage(): Promise<HomebridgePlugin>;
    getNpmPackage(): Promise<HomebridgePlugin>;
    isPluginBundleAvailable(pluginAction: PluginActionDto): Promise<boolean>;
    doPluginBundleUpdate(pluginAction: PluginActionDto, client: EventEmitter): Promise<boolean>;
    private getPluginReleaseTag;
    isUiUpdateBundleAvailable(pluginAction: PluginActionDto): Promise<string>;
    doUiBundleUpdate(pluginAction: PluginActionDto, client: EventEmitter, githubReleaseName: string): Promise<void>;
    updateSelfOffline(client: EventEmitter): Promise<void>;
    getPluginConfigSchema(pluginName: string): Promise<any>;
    getPluginChangeLog(pluginName: string): Promise<{
        changelog: string;
    }>;
    getPluginRelease(pluginName: string): Promise<{
        name: any;
        notes: any;
        changelog: any;
        latestVersion: string;
    }>;
    getPluginAlias(pluginName: string): Promise<PluginAlias>;
    getPluginChildBridgeUsernames(pluginName: string): Promise<string[]>;
    getPluginUiMetadata(pluginName: string): Promise<HomebridgePluginUiMetadata>;
    private getDisabledPlugins;
    private getInstalledScopedModules;
    private getInstalledModules;
    private isScopedPlugin;
    private isHiddenPlugin;
    private getNpmPath;
    private getBasePaths;
    private getNpmPrefixToSearchPaths;
    private checkForBetaUpdates;
    private parsePackageJson;
    private getPluginFromNpm;
    getNpmModuleLatestVersion(npmModuleName: string): Promise<string>;
    private runNpmCommand;
    private ensureCustomPluginDirExists;
    private removeSynologyMetadata;
    private cleanNpmCache;
    private loadPluginList;
}
