matterbridge
Version:
Matterbridge plugin manager for Matter
285 lines • 12.4 kB
TypeScript
/**
* This file contains the class MatterbridgeAccessoryPlatform.
*
* @file matterbridgePlatform.ts
* @author Luca Liguori
* @date 2024-03-21
* @version 1.1.0
*
* Copyright 2024, 2025, 2026 Luca Liguori.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License. *
*/
import { Matterbridge } from './matterbridge.js';
import { MatterbridgeEndpoint } from './matterbridgeEndpoint.js';
import { AnsiLogger, LogLevel } from './logger/export.js';
import { NodeStorage, NodeStorageManager } from './storage/export.js';
export type PlatformConfigValue = string | number | boolean | bigint | object | undefined | null;
export type PlatformConfig = Record<string, PlatformConfigValue>;
export interface DefaultPlatformConfig {
name: string;
type: string;
version: string;
whiteList?: string[];
blackList?: string[];
debug: boolean;
unregisterOnShutdown: boolean;
}
export type PlatformSchemaValue = string | number | boolean | bigint | object | undefined | null;
export type PlatformSchema = Record<string, PlatformSchemaValue>;
/**
* Represents the base Matterbridge platform. It is extended by the MatterbridgeAccessoryPlatform and MatterbridgeServicePlatform classes.
*
*/
export declare class MatterbridgePlatform {
matterbridge: Matterbridge;
log: AnsiLogger;
config: PlatformConfig;
name: string;
type: string;
version: string;
storage: NodeStorageManager;
context?: NodeStorage;
readonly selectDevice: Map<string, {
serial: string;
name: string;
configUrl?: string;
icon?: string;
entities?: {
name: string;
description: string;
icon?: string;
}[];
}>;
readonly selectEntity: Map<string, {
name: string;
description: string;
icon?: string;
}>;
private _contextReady;
private _selectDeviceContextReady;
private _selectEntityContextReady;
ready: Promise<void>;
private readonly _registeredEndpoints;
private readonly _registeredEndpointsByName;
private readonly _storedDevices;
/**
* Creates an instance of the base MatterbridgePlatform. It is extended by the MatterbridgeAccessoryPlatform and MatterbridgeServicePlatform classes.
* @param {Matterbridge} matterbridge - The Matterbridge instance.
* @param {AnsiLogger} log - The logger instance.
* @param {PlatformConfig} config - The platform configuration.
*/
constructor(matterbridge: Matterbridge, log: AnsiLogger, config: PlatformConfig);
/**
* This method must be overridden in the extended class.
* It is called when the platform is started.
* Use this method to create the MatterbridgeDevice and call this.registerDevice().
* @param {string} [reason] - The reason for starting.
* @throws {Error} - Throws an error if the method is not overridden.
*/
onStart(reason?: string): Promise<void>;
/**
* This method can be overridden in the extended class. Call super.onConfigure() to run checkEndpointNumbers().
* It is called after the platform has started.
* Use this method to perform any configuration of your devices.
*/
onConfigure(): Promise<void>;
/**
* This method can be overridden in the extended class. In this case always call super.onShutdown() to save the selects, run checkEndpointNumbers() and cleanup memory.
* It is called when the platform is shutting down.
* Use this method to clean up any resources.
* @param {string} [reason] - The reason for shutting down.
*/
onShutdown(reason?: string): Promise<void>;
/**
* Sets the logger level and logs a debug message indicating that the plugin doesn't override this method.
* @param {LogLevel} logLevel The new logger level.
*/
onChangeLoggerLevel(logLevel: LogLevel): Promise<void>;
/**
* Called when a plugin config includes an action button or an action button with text field.
* @param {string} action The action triggered by the button in plugin config.
* @param {string} value The value of the field of the action button.
* @param {string} id The id of the schema associated with the action.
*
* @remarks
* This method can be overridden in the extended class.
*
* Use this method to handle the action defined in the plugin schema:
* "addDevice": {
* "description": "Manually add a device that has not been discovered with mdns:",
* "type": "boolean",
* "buttonText": "ADD", // The text on the button.
* "buttonField": "ADD", // The text on the button. This is used when the action includes a text field.
* "buttonClose": false, // optional, default is false. When true, the dialog will close after the action is sent.
* "buttonSave": false, // optional, default is false. When true, the dialog will close and trigger the restart required after the action is sent.
* "textPlaceholder": "Enter the device IP address", // optional: the placeholder text for the text field.
* "default": false
* },
*/
onAction(action: string, value?: string, id?: string): Promise<void>;
/**
* Called when the plugin config has been updated.
* @param {PlatformConfig} config The new plugin config.
*/
onConfigChanged(config: PlatformConfig): Promise<void>;
/**
* Check if a device with this name is already registered in the platform.
* @param {string} deviceName - The device name to check.
* @returns {boolean} True if the device is already registered, false otherwise.
*/
hasDeviceName(deviceName: string): boolean;
/**
* Registers a device with the Matterbridge platform.
* @param {MatterbridgeEndpoint} device - The device to register.
*/
registerDevice(device: MatterbridgeEndpoint): Promise<void>;
/**
* Unregisters a device registered with the Matterbridge platform.
* @param {MatterbridgeEndpoint} device - The device to unregister.
*/
unregisterDevice(device: MatterbridgeEndpoint): Promise<void>;
/**
* Unregisters all devices registered with the Matterbridge platform.
*/
unregisterAllDevices(): Promise<void>;
/**
* Saves the select devices and entities to storage.
*
* This method saves the current state of `selectDevice` and `selectEntity` maps to their respective storage.
* It logs the number of items being saved and ensures that the storage is properly closed after saving.
*
* @returns {Promise<void>} A promise that resolves when the save operation is complete.
*/
private saveSelects;
/**
* Clears the select device and entity maps.
*
* @returns {void}
*/
clearSelect(): Promise<void>;
/**
* Clears the select for a single device.
*
* @param {string} device - The serial of the device to clear.
* @returns {void}
*/
clearDeviceSelect(device: string): Promise<void>;
/**
* Set the select device in the platform map.
*
* @param {string} serial - The serial number of the device.
* @param {string} name - The name of the device.
* @param {string} [configUrl] - The configuration URL of the device.
* @param {string} [icon] - The icon of the device: 'wifi', 'ble', 'hub'
* @param {Array<{ name: string; description: string; icon?: string }>} [entities] - The entities associated with the device.
* @returns {void}
*/
setSelectDevice(serial: string, name: string, configUrl?: string, icon?: string, entities?: {
name: string;
description: string;
icon?: string;
}[]): void;
/**
* Set the select device entity in the platform map.
*
* @param {string} serial - The serial number of the device.
* @param {string} entityName - The name of the entity.
* @param {string} entityDescription - The description of the entity.
* @param {string} [entityIcon] - The icon of the entity: 'wifi', 'ble', 'hub', 'component', 'matter'
* @returns {void}
*/
setSelectDeviceEntity(serial: string, entityName: string, entityDescription: string, entityIcon?: string): void;
/**
* Retrieves the select devices from the platform map.
*
* @returns {{ pluginName: string; serial: string; name: string; configUrl?: string; icon?: string; entities?: { name: string; description: string; icon?: string }[] }[]} The selected devices array.
*/
getSelectDevices(): {
pluginName: string;
serial: string;
name: string;
configUrl?: string;
icon?: string;
entities?: {
name: string;
description: string;
icon?: string;
}[];
}[];
/**
* Set the select entity in the platform map.
*
* @param {string} name - The entity name.
* @param {string} description - The entity description.
* @param {string} [icon] - The entity icon: 'wifi', 'ble', 'hub', 'component', 'matter'
* @returns {void}
*/
setSelectEntity(name: string, description: string, icon?: string): void;
/**
* Retrieve the select entities.
*
* @returns {{ pluginName: string; name: string; description: string; icon?: string }[]} The select entities array.
*/
getSelectEntities(): {
pluginName: string;
name: string;
description: string;
icon?: string;
}[];
/**
* Verifies if the Matterbridge version meets the required version.
* @param {string} requiredVersion - The required version to compare against.
* @returns {boolean} True if the Matterbridge version meets or exceeds the required version, false otherwise.
*/
verifyMatterbridgeVersion(requiredVersion: string): boolean;
/**
* @deprecated This method is deprecated and will be removed in future versions. Use validateDevice instead.
*/
validateDeviceWhiteBlackList(device: string | string[], log?: boolean): boolean;
/**
* Validates if a device is allowed based on the whitelist and blacklist configurations.
* The blacklist has priority over the whitelist.
*
* @param {string | string[]} device - The device name(s) to validate.
* @param {boolean} [log=true] - Whether to log the validation result.
* @returns {boolean} - Returns true if the device is allowed, false otherwise.
*
*/
validateDevice(device: string | string[], log?: boolean): boolean;
/**
* @deprecated This method is deprecated and will be removed in future versions. Use validateEntity instead.
*/
validateEntityBlackList(device: string, entity: string, log?: boolean): boolean;
/**
* Validates if an entity is allowed based on the entity blacklist and device-entity blacklist configurations.
*
* @param {string} device - The device to which the entity belongs.
* @param {string} entity - The entity to validate.
* @param {boolean} [log=true] - Whether to log the validation result.
* @returns {boolean} - Returns true if the entity is allowed, false otherwise.
*
*/
validateEntity(device: string, entity: string, log?: boolean): boolean;
/**
* Checks and updates the endpoint numbers for Matterbridge devices.
*
* This method retrieves the list of Matterbridge devices and their child endpoints,
* compares their current endpoint numbers with the stored ones, and updates the storage
* if there are any changes. It logs the changes and updates the endpoint numbers accordingly.
*
* @returns {Promise<number>} The size of the updated endpoint map, or -1 if storage is not available.
*/
checkEndpointNumbers(): Promise<number>;
}
//# sourceMappingURL=matterbridgePlatform.d.ts.map