import type { HomebridgePlugin, HomebridgePluginUiMetadata, HomebridgePluginVersions, PackageUpdateResult, PluginAlias } from './plugins.interfaces.js'; import { EventEmitter } from 'node:events'; import { HttpService } from '@nestjs/axios'; import { OnModuleDestroy } from '@nestjs/common'; 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 implements OnModuleDestroy { private readonly httpService; private readonly nodePtyService; private readonly logger; private readonly configService; private readonly homebridgeIpcService; private readonly childBridgesService; private _npm; private npmMajorVersion; private _paths; private warnedDuplicateUiInstall; private get npm(); private get paths(); private static readonly UI_RESTART_DELAY_MS; private uiRestartTimer?; scheduleUiRestart(): void; get uiRestartPending(): boolean; private exitOnceUpdatesFinish; onModuleDestroy(): void; private packageOperationQueue; private packageOperationsPending; private queuePackageOperation; 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 pluginManagementInProgress; get isPluginManagementInProgress(): boolean; private pluginAliasHints; constructor(httpService: HttpService, nodePtyService: NodePtyService, logger: Logger, configService: ConfigService, homebridgeIpcService: HomebridgeIpcService, childBridgesService: ChildBridgesService); private fixDisplayName; getCachedInstalledPlugins(): HomebridgePlugin[] | undefined; getInstalledPlugins(): Promise; getOutOfDatePlugins(): Promise; lookupPlugin(pluginName: string): Promise; getAvailablePluginVersions(pluginName: string): Promise; private extractTerms; private getPluginKeywords; private supportsMatter; private supportsHap; private matchesPlugin; searchNpmRegistry(query: string): Promise; searchNpmRegistrySingle(query: string): Promise; private manageUi; managePlugin(action: 'install' | 'uninstall', pluginAction: PluginActionDto, client: EventEmitter): Promise; private doManagePlugin; getHomebridgePackage(): Promise; private findRunningHomebridgeInstall; private containsInstallPath; updateHomebridgePackage(homebridgeUpdateAction: HomebridgeUpdateActionDto, client: EventEmitter): Promise; private doUpdateHomebridgePackage; triggerUpdate(name: string, version?: string): Promise<{ ok: boolean; name: string; version: string; }>; performPackageUpdate(name: string, version: string, client: EventEmitter): Promise; clearInstalledPluginsCache(): void; getHomebridgeUiPackage(): Promise; getNpmPackage(): Promise; isPluginBundleAvailable(pluginAction: PluginActionDto): Promise; doPluginBundleUpdate(pluginAction: PluginActionDto, client: EventEmitter): Promise; private getPluginReleaseTag; isUiUpdateBundleAvailable(pluginAction: PluginActionDto): Promise; doUiBundleUpdate(pluginAction: PluginActionDto, client: EventEmitter, githubReleaseName: string): Promise; updateSelfOffline(client: EventEmitter): Promise; getPluginConfigSchema(pluginName: string): Promise; getPluginChangeLog(pluginName: string): Promise<{ changelog: string; }>; getPluginRelease(pluginName: string, version?: string): Promise<{ name: any; notes: any; changelog: string; latestVersion: string; }>; getPluginAlias(pluginName: string): Promise; getEditorContext(pluginName: string): Promise<{ pluginName: string; alias: PluginAlias; configSchema: any; config: any[]; childBridges: import("../child-bridges/child-bridges.interfaces.js").ChildBridgeMetadata[]; }>; private getPluginConfigSchemaSafe; private getConfigBlocksForPlugin; private filterConfigBlocksForPlugin; getInstalledPluginsWithConfig(): Promise; getPluginChildBridgeUsernames(pluginName: string): Promise; getPluginUiMetadata(pluginName: string): Promise; 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; private getNpmMajorVersion; private getAllowedInstallScripts; private getLocalAllowScripts; private filterLocallyHandledScripts; private applyAllowScripts; private runNpmCommand; private ensureCustomPluginDirExists; sanitizeNpmEnv(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv; private removeSynologyMetadata; private cleanNpmCache; private loadPluginList; private sanitizeCspDomains; }