import type { EventEmitter } from 'node:events';
import type { HomebridgePlugin, HomebridgePluginUiMetadata, HomebridgePluginVersions, PluginAlias } from './plugins.interfaces';
import { HttpService } from '@nestjs/axios';
import { ConfigService } from '../../core/config/config.service';
import { Logger } from '../../core/logger/logger.service';
import { NodePtyService } from '../../core/node-pty/node-pty.service';
import { HomebridgeUpdateActionDto, PluginActionDto } from './plugins.dto';
export declare class PluginsService {
    private httpService;
    private nodePtyService;
    private logger;
    private configService;
    private static readonly PLUGIN_IDENTIFIER_PATTERN;
    private npm;
    private paths;
    private installedPlugins;
    private npmPackage;
    private pluginListUrl;
    private pluginListFile;
    private pluginListRetryTimeout;
    private hiddenPlugins;
    private maintainedPlugins;
    private pluginIcons;
    private pluginAuthors;
    private pluginNames;
    private pluginChangelogs;
    private newScopePlugins;
    private verifiedPlugins;
    private verifiedPlusPlugins;
    private npmPluginCache;
    private pluginAliasCache;
    private installedPluginsCache;
    private pluginAliasHints;
    constructor(httpService: HttpService, nodePtyService: NodePtyService, logger: Logger, configService: ConfigService);
    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[]>;
    manageUi(action: 'install' | 'uninstall', pluginAction: PluginActionDto, client: EventEmitter): Promise<boolean>;
    managePlugin(action: 'install' | 'uninstall', pluginAction: PluginActionDto, client: EventEmitter): Promise<boolean>;
    getHomebridgePackage(): Promise<HomebridgePlugin>;
    updateHomebridgePackage(homebridgeUpdateAction: HomebridgeUpdateActionDto, client: EventEmitter): Promise<boolean>;
    getHomebridgeUiPackage(): Promise<HomebridgePlugin>;
    getNpmPackage(): Promise<HomebridgePlugin>;
    isPluginBundleAvailable(pluginAction: PluginActionDto): Promise<boolean>;
    doPluginBundleUpdate(pluginAction: PluginActionDto, client: EventEmitter): Promise<boolean>;
    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>;
    getPluginUiMetadata(pluginName: string): Promise<HomebridgePluginUiMetadata>;
    private getDisabledPlugins;
    private getInstalledScopedModules;
    private getInstalledModules;
    private isScopedPlugin;
    private getNpmPath;
    private getBasePaths;
    private getNpmPrefixToSearchPaths;
    private parsePackageJson;
    private getPluginFromNpm;
    getNpmModuleLatestVersion(npmModuleName: string): Promise<string>;
    private runNpmCommand;
    private ensureCustomPluginDirExists;
    private removeSynologyMetadata;
    private cleanNpmCache;
    private loadPluginList;
}
