UNPKG

homebridge

Version:
146 lines 6.35 kB
/** * Matter Bridge Manager * * Manages Matter server lifecycle and accessories for the main Homebridge bridge. * This class extracts Matter-specific logic from server.ts to minimize changes to core files. */ import type { HomebridgeAPI } from '../api.js'; import type { HomebridgeConfig } from '../bridgeService.js'; import type { ExternalPortService } from '../externalPortService.js'; import type { IpcService } from '../ipcService.js'; import type { HomebridgeOptions } from '../server.js'; import type { MatterStatusInfo } from './ipc-types.js'; import type { AccessoryInfo } from './managerTypes.js'; import type { InternalMatterAccessory } from './types.js'; import { PluginManager } from '../pluginManager.js'; import { BaseMatterManager } from './BaseMatterManager.js'; /** * Manages Matter server and accessories for the main bridge */ export declare class MatterBridgeManager extends BaseMatterManager { private readonly config; private readonly api; private readonly externalPortService; private readonly options; private readonly server; constructor(config: HomebridgeConfig, api: HomebridgeAPI, externalPortService: ExternalPortService, pluginManager: PluginManager, options: HomebridgeOptions, server: { registerExternalMatterBridge: (username: string, owner: string) => void; ipcService: IpcService; }); protected releaseExternalMatterPort(uniqueId: string): void; private readonly _onPublishExternalMatterAccessories; private readonly _onRegisterMatterPlatformAccessories; private readonly _onUpdateMatterPlatformAccessories; private readonly _onUnregisterMatterPlatformAccessories; private readonly _onUnregisterExternalMatterAccessories; private readonly _onUpdateMatterAccessoryState; private readonly _onRegisterMatterPlatformAccessoriesDropped; private readonly _onUnregisterMatterPlatformAccessoriesDropped; private externalsOnlyMode; /** * Whether the main bridge has active Matter handling. True in normal mode * (the bridge MatterServer was created and its listeners attached — even if * start() later failed, the listeners are still attached) and in externalsOnly * mode. False when `bridge.matter` is absent or disabled, in which case * initialize() returns before attaching any listeners — so api.matter calls * made against the main bridge must be rejected rather than silently dropped. */ hasActiveMatter(): boolean; private readonly _onMatterServerStateChange; /** * Set up all Matter API event listeners (external + bridged). Used in * normal mode where the bridge MatterServer is running. */ private setupEventListeners; /** * Set up only the external-accessory listeners. These do not need a running * bridge MatterServer — each external creates its own dedicated server. * Used in normal mode (via setupEventListeners) and in externalsOnly mode. */ private setupExternalEventListeners; /** * Set up bridged-accessory listeners that require the bridge MatterServer. * Used in normal mode only. */ private setupBridgedEventListeners; /** * Attach drop-stub listeners for bridged Matter events in externalsOnly * mode. Each stub logs at debug level and returns without doing anything, * so plugin authors who misconfigure a bridge get a breadcrumb without * noisy warn-level output. */ private setupBridgedDropStubs; /** * Initialize Matter server for main bridge. Three states: * * 1. Disabled (matter absent, or `enabled: false` without `externalsOnly`) → return early. * 2. externalsOnly mode → attach listeners for external publishing AND debug-log * drop stubs for bridged matter events, but do NOT start the bridge MatterServer. * 3. Normal (`enabled !== false`) → full setup including server startup. */ initialize(): Promise<void>; /** * Handle external Matter accessories - each gets its own dedicated Matter server * This is required for devices like Robotic Vacuum Cleaners that Apple Home * requires to be on their own bridge. */ handlePublishExternalAccessories(accessories: InternalMatterAccessory[], registrationId: string): Promise<void>; /** * Get Matter server status information for IPC communication */ getMatterStatus(): MatterStatusInfo; /** * Collect all Matter accessories from all sources * * @param bridgeUsername - Optional: specific bridge username to filter by * @returns Array of accessory data suitable for UI consumption */ collectAllAccessories(bridgeUsername?: string): AccessoryInfo[]; /** * Get detailed info for a specific Matter accessory * * @param uuid - Accessory UUID * @returns Accessory info or undefined if not found */ getAccessoryInfo(uuid: string): AccessoryInfo | undefined; /** * Collect accessories from a specific Matter server * * @param server - Matter server instance * @param bridgeUsername - Bridge MAC address * @param bridgeType - Type of bridge (main/child/external) * @param bridgeName - Display name of the bridge * @returns Array of accessory information */ private collectAccessoriesFromServer; /** * Transform accessory data for UI consumption * * @param acc - Cached accessory data * @param server - Matter server instance * @param bridgeUsername - Bridge MAC address * @param bridgeType - Type of bridge * @param bridgeName - Display name of the bridge * @returns Transformed accessory info for UI */ private transformAccessoryData; /** * Get detailed accessory info from a specific server * * @param server - Matter server instance * @param uuid - Accessory UUID * @param bridgeUsername - Bridge MAC address * @param bridgeType - Type of bridge * @returns Accessory info or undefined if not found */ private getAccessoryDetailFromServer; /** * Get current state from Matter server for an accessory */ private getCurrentStateFromServer; /** * Teardown Matter servers */ teardown(): Promise<void>; } //# sourceMappingURL=MatterBridgeManager.d.ts.map