Skip to content

@camera.ui/sdk / plugin / ServicePlugin

Abstract Class: ServicePlugin<T> ​

Defined in: plugin/interfaces.ts:249

Base class for a plugin with the role PluginRole.Service: it serves camera.ui itself and never touches cameras, so the camera lifecycle hooks are already implemented as no-ops.

Example ​

ts
export default class MyModels extends ServicePlugin implements AssistantModelProvider {
  assistantModels(): AssistantModelSpec[] {
    return [{ id: 'local', name: 'Local model', contextTokens: 8192, vision: false, toolCalling: false, structuredOutput: true }];
  }
}

Extends ​

Type Parameters ​

T ​

T extends Record<string, any> = Record<string, any>

Constructors ​

Constructor ​

new ServicePlugin<T>(logger, api, storage): ServicePlugin<T>

Defined in: plugin/interfaces.ts:167

Parameters ​

logger ​

LoggerService

api ​

PluginAPI

storage ​

DeviceStorage<T>

Returns ​

ServicePlugin<T>

Inherited from ​

BasePlugin.constructor

Properties ​

api ​

api: PluginAPI

Defined in: plugin/interfaces.ts:169

Inherited from ​

BasePlugin.api


logger ​

logger: LoggerService

Defined in: plugin/interfaces.ts:168

Inherited from ​

BasePlugin.logger


storage ​

storage: DeviceStorage<T>

Defined in: plugin/interfaces.ts:170

Inherited from ​

BasePlugin.storage

Accessors ​

storageSchema ​

Get Signature ​

get storageSchema(): JsonSchema[]

Defined in: plugin/interfaces.ts:174

Override to register a JSON schema for the plugin-level settings form rendered in the UI. Default: no schema.

Returns ​

JsonSchema[]

Inherited from ​

BasePlugin.storageSchema

Methods ​

configureCameras() ​

configureCameras(): Promise<void>

Defined in: plugin/interfaces.ts:250

Called once on startup with every camera that is already assigned to this plugin. Attach handlers, open vendor sessions, warm up models here. A rejection aborts plugin startup.

Returns ​

Promise<void>

Overrides ​

BasePlugin.configureCameras


configureSensors()? ​

optional configureSensors(sensors): Promise<void>

Defined in: plugin/interfaces.ts:215

Called once on startup with every sensor this plugin may consume: sensors whose type is listed in contract.consumes and that are exposed. Each sensor carries type, assignedCameraIds, assignmentLocked and connected, so consumers decide rendering purely from that data. Optional, only bridge plugins implement it.

Parameters ​

sensors ​

SensorLike[]

Consumable sensors known at startup.

Returns ​

Promise<void>

Inherited from ​

BasePlugin.configureSensors


onCameraAdded() ​

onCameraAdded(): Promise<void>

Defined in: plugin/interfaces.ts:252

Called whenever a camera is assigned to this plugin at runtime, after a discovery adoption (DiscoveryProvider.onAdoptCamera) or after the user re-assigns an existing camera. Set up the same per-camera state as in configureCameras().

Returns ​

Promise<void>

Overrides ​

BasePlugin.onCameraAdded


onCameraReleased() ​

onCameraReleased(): Promise<void>

Defined in: plugin/interfaces.ts:254

Called when a camera is unassigned from this plugin or deleted from the system. Release per-camera resources (sessions, timers, decoders) before resolving.

Returns ​

Promise<void>

Overrides ​

BasePlugin.onCameraReleased


onSensorAdded()? ​

optional onSensorAdded(sensor): Promise<void>

Defined in: plugin/interfaces.ts:223

Called when a sensor enters this plugin's consumable view at runtime: it was created, became exposed, or its type became consumable.

Parameters ​

sensor ​

SensorLike

The sensor that appeared.

Returns ​

Promise<void>

Inherited from ​

BasePlugin.onSensorAdded


onSensorReleased()? ​

optional onSensorReleased(sensorId): Promise<void>

Defined in: plugin/interfaces.ts:232

Called when a sensor permanently leaves the consumable view: it was deleted or unexposed. Plugin connectivity does NOT fire this, watch sensor.onConnectedChanged for that.

Parameters ​

sensorId ​

string

Persistent id of the sensor that left.

Returns ​

Promise<void>

Inherited from ​

BasePlugin.onSensorReleased