@camstack/types 0.1.8 → 0.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/addon-capability-provider.test.d.ts +2 -0
- package/dist/__tests__/addon-capability-provider.test.d.ts.map +1 -0
- package/dist/__tests__/addon-declaration.test.d.ts +2 -0
- package/dist/__tests__/addon-declaration.test.d.ts.map +1 -0
- package/dist/__tests__/capability.test.d.ts +2 -0
- package/dist/__tests__/capability.test.d.ts.map +1 -0
- package/dist/catalogs/coco-classmap.d.ts +5 -0
- package/dist/catalogs/coco-classmap.d.ts.map +1 -0
- package/dist/catalogs/index.d.ts +2 -0
- package/dist/catalogs/index.d.ts.map +1 -0
- package/dist/constants.d.ts +3 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/generated/addon-api.d.ts +4974 -0
- package/dist/generated/addon-api.d.ts.map +1 -0
- package/dist/index.d.ts +82 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +550 -744
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +529 -777
- package/dist/index.mjs.map +1 -1
- package/dist/interfaces/addon-i18n.d.ts +41 -0
- package/dist/interfaces/addon-i18n.d.ts.map +1 -0
- package/dist/interfaces/addon-routes.d.ts +50 -0
- package/dist/interfaces/addon-routes.d.ts.map +1 -0
- package/dist/interfaces/addon.d.ts +294 -0
- package/dist/interfaces/addon.d.ts.map +1 -0
- package/dist/interfaces/advanced-notifier.d.ts +59 -0
- package/dist/interfaces/advanced-notifier.d.ts.map +1 -0
- package/dist/interfaces/agent-protocol.d.ts +189 -0
- package/dist/interfaces/agent-protocol.d.ts.map +1 -0
- package/dist/interfaces/agent.d.ts +87 -0
- package/dist/interfaces/agent.d.ts.map +1 -0
- package/dist/interfaces/analysis-persistence.d.ts +278 -0
- package/dist/interfaces/analysis-persistence.d.ts.map +1 -0
- package/dist/interfaces/analysis.d.ts +27 -0
- package/dist/interfaces/analysis.d.ts.map +1 -0
- package/dist/interfaces/api-shared.d.ts +176 -0
- package/dist/interfaces/api-shared.d.ts.map +1 -0
- package/dist/interfaces/auth-provider.d.ts +39 -0
- package/dist/interfaces/auth-provider.d.ts.map +1 -0
- package/dist/interfaces/auth.d.ts +47 -0
- package/dist/interfaces/auth.d.ts.map +1 -0
- package/dist/interfaces/camera-pipeline.d.ts +121 -0
- package/dist/interfaces/camera-pipeline.d.ts.map +1 -0
- package/dist/interfaces/capability.d.ts +84 -0
- package/dist/interfaces/capability.d.ts.map +1 -0
- package/dist/interfaces/classifier.d.ts +8 -0
- package/dist/interfaces/classifier.d.ts.map +1 -0
- package/dist/interfaces/config-ui.d.ts +152 -0
- package/dist/interfaces/config-ui.d.ts.map +1 -0
- package/dist/interfaces/context.d.ts +44 -0
- package/dist/interfaces/context.d.ts.map +1 -0
- package/dist/interfaces/cropper.d.ts +8 -0
- package/dist/interfaces/cropper.d.ts.map +1 -0
- package/dist/interfaces/decoder.d.ts +27 -0
- package/dist/interfaces/decoder.d.ts.map +1 -0
- package/dist/interfaces/detection-addon.d.ts +15 -0
- package/dist/interfaces/detection-addon.d.ts.map +1 -0
- package/dist/interfaces/detector.d.ts +8 -0
- package/dist/interfaces/detector.d.ts.map +1 -0
- package/dist/interfaces/device-capabilities/accessory.d.ts +14 -0
- package/dist/interfaces/device-capabilities/accessory.d.ts.map +1 -0
- package/dist/interfaces/device-capabilities/audio-detector.d.ts +12 -0
- package/dist/interfaces/device-capabilities/audio-detector.d.ts.map +1 -0
- package/dist/interfaces/device-capabilities/camera.d.ts +22 -0
- package/dist/interfaces/device-capabilities/camera.d.ts.map +1 -0
- package/dist/interfaces/device-capabilities/doorbell.d.ts +10 -0
- package/dist/interfaces/device-capabilities/doorbell.d.ts.map +1 -0
- package/dist/interfaces/device-capabilities/events.d.ts +47 -0
- package/dist/interfaces/device-capabilities/events.d.ts.map +1 -0
- package/dist/interfaces/device-capabilities/index.d.ts +15 -0
- package/dist/interfaces/device-capabilities/index.d.ts.map +1 -0
- package/dist/interfaces/device-capabilities/motion-sensor.d.ts +7 -0
- package/dist/interfaces/device-capabilities/motion-sensor.d.ts.map +1 -0
- package/dist/interfaces/device-capabilities/native-detection.d.ts +14 -0
- package/dist/interfaces/device-capabilities/native-detection.d.ts.map +1 -0
- package/dist/interfaces/device-capabilities/object-detector.d.ts +59 -0
- package/dist/interfaces/device-capabilities/object-detector.d.ts.map +1 -0
- package/dist/interfaces/device-capabilities/pan-tilt-zoom.d.ts +29 -0
- package/dist/interfaces/device-capabilities/pan-tilt-zoom.d.ts.map +1 -0
- package/dist/interfaces/device-capabilities/recording.d.ts +18 -0
- package/dist/interfaces/device-capabilities/recording.d.ts.map +1 -0
- package/dist/interfaces/device-capabilities/siren.d.ts +8 -0
- package/dist/interfaces/device-capabilities/siren.d.ts.map +1 -0
- package/dist/interfaces/device-capabilities/status-light.d.ts +7 -0
- package/dist/interfaces/device-capabilities/status-light.d.ts.map +1 -0
- package/dist/interfaces/device-capabilities/switch.d.ts +8 -0
- package/dist/interfaces/device-capabilities/switch.d.ts.map +1 -0
- package/dist/interfaces/device-capabilities/two-way-audio.d.ts +8 -0
- package/dist/interfaces/device-capabilities/two-way-audio.d.ts.map +1 -0
- package/dist/interfaces/device-capability.d.ts +14 -0
- package/dist/interfaces/device-capability.d.ts.map +1 -0
- package/dist/interfaces/device-provider.d.ts +43 -0
- package/dist/interfaces/device-provider.d.ts.map +1 -0
- package/dist/interfaces/device.d.ts +40 -0
- package/dist/interfaces/device.d.ts.map +1 -0
- package/dist/interfaces/event-bus.d.ts +244 -0
- package/dist/interfaces/event-bus.d.ts.map +1 -0
- package/dist/interfaces/feature-flags.d.ts +14 -0
- package/dist/interfaces/feature-flags.d.ts.map +1 -0
- package/dist/interfaces/ffmpeg.d.ts +10 -0
- package/dist/interfaces/ffmpeg.d.ts.map +1 -0
- package/dist/interfaces/inference-capabilities.d.ts +101 -0
- package/dist/interfaces/inference-capabilities.d.ts.map +1 -0
- package/dist/interfaces/inference-engine.d.ts +17 -0
- package/dist/interfaces/inference-engine.d.ts.map +1 -0
- package/dist/interfaces/lifecycle.d.ts +19 -0
- package/dist/interfaces/lifecycle.d.ts.map +1 -0
- package/dist/interfaces/logging.d.ts +33 -0
- package/dist/interfaces/logging.d.ts.map +1 -0
- package/dist/interfaces/model-catalog.d.ts +25 -0
- package/dist/interfaces/model-catalog.d.ts.map +1 -0
- package/dist/interfaces/network-quality.d.ts +25 -0
- package/dist/interfaces/network-quality.d.ts.map +1 -0
- package/dist/interfaces/network.d.ts +43 -0
- package/dist/interfaces/network.d.ts.map +1 -0
- package/dist/interfaces/notification.d.ts +53 -0
- package/dist/interfaces/notification.d.ts.map +1 -0
- package/dist/interfaces/pipeline-runner.d.ts +23 -0
- package/dist/interfaces/pipeline-runner.d.ts.map +1 -0
- package/dist/interfaces/pipeline-slot.d.ts +10 -0
- package/dist/interfaces/pipeline-slot.d.ts.map +1 -0
- package/dist/interfaces/platform.d.ts +55 -0
- package/dist/interfaces/platform.d.ts.map +1 -0
- package/dist/interfaces/process.d.ts +41 -0
- package/dist/interfaces/process.d.ts.map +1 -0
- package/dist/interfaces/python-env.d.ts +20 -0
- package/dist/interfaces/python-env.d.ts.map +1 -0
- package/dist/interfaces/refiner.d.ts +8 -0
- package/dist/interfaces/refiner.d.ts.map +1 -0
- package/dist/interfaces/repl.d.ts +26 -0
- package/dist/interfaces/repl.d.ts.map +1 -0
- package/dist/interfaces/repositories.d.ts +20 -0
- package/dist/interfaces/repositories.d.ts.map +1 -0
- package/dist/interfaces/restreamer.d.ts +24 -0
- package/dist/interfaces/restreamer.d.ts.map +1 -0
- package/dist/interfaces/router.d.ts +30 -0
- package/dist/interfaces/router.d.ts.map +1 -0
- package/dist/interfaces/scene-intelligence.d.ts +21 -0
- package/dist/interfaces/scene-intelligence.d.ts.map +1 -0
- package/dist/interfaces/scoped-token.d.ts +22 -0
- package/dist/interfaces/scoped-token.d.ts.map +1 -0
- package/dist/interfaces/server-analysis.d.ts +146 -0
- package/dist/interfaces/server-analysis.d.ts.map +1 -0
- package/dist/interfaces/server-network.d.ts +78 -0
- package/dist/interfaces/server-network.d.ts.map +1 -0
- package/dist/interfaces/storage-backend.d.ts +27 -0
- package/dist/interfaces/storage-backend.d.ts.map +1 -0
- package/dist/interfaces/storage.d.ts +174 -0
- package/dist/interfaces/storage.d.ts.map +1 -0
- package/dist/interfaces/stream-broker.d.ts +92 -0
- package/dist/interfaces/stream-broker.d.ts.map +1 -0
- package/dist/interfaces/streaming.d.ts +29 -0
- package/dist/interfaces/streaming.d.ts.map +1 -0
- package/dist/interfaces/task-handler.d.ts +46 -0
- package/dist/interfaces/task-handler.d.ts.map +1 -0
- package/dist/interfaces/webrtc-provider.d.ts +11 -0
- package/dist/interfaces/webrtc-provider.d.ts.map +1 -0
- package/dist/interfaces/worker-protocol.d.ts +110 -0
- package/dist/interfaces/worker-protocol.d.ts.map +1 -0
- package/dist/schemas/system-settings-schemas.d.ts +27 -0
- package/dist/schemas/system-settings-schemas.d.ts.map +1 -0
- package/dist/types/analytics.d.ts +75 -0
- package/dist/types/analytics.d.ts.map +1 -0
- package/dist/types/benchmark.d.ts +112 -0
- package/dist/types/benchmark.d.ts.map +1 -0
- package/dist/types/camera-detection.d.ts +34 -0
- package/dist/types/camera-detection.d.ts.map +1 -0
- package/dist/types/config.d.ts +37 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/detection.d.ts +93 -0
- package/dist/types/detection.d.ts.map +1 -0
- package/dist/types/device-type.d.ts +10 -0
- package/dist/types/device-type.d.ts.map +1 -0
- package/dist/types/entities.d.ts +35 -0
- package/dist/types/entities.d.ts.map +1 -0
- package/dist/types/events.d.ts +35 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/io.d.ts +25 -0
- package/dist/types/io.d.ts.map +1 -0
- package/dist/types/labels.d.ts +12 -0
- package/dist/types/labels.d.ts.map +1 -0
- package/dist/types/live-state.d.ts +47 -0
- package/dist/types/live-state.d.ts.map +1 -0
- package/dist/types/models.d.ts +79 -0
- package/dist/types/models.d.ts.map +1 -0
- package/dist/types/pipeline-schema.d.ts +78 -0
- package/dist/types/pipeline-schema.d.ts.map +1 -0
- package/dist/types/pipeline.d.ts +42 -0
- package/dist/types/pipeline.d.ts.map +1 -0
- package/dist/types/tracked.d.ts +21 -0
- package/dist/types/tracked.d.ts.map +1 -0
- package/dist/types/zones.d.ts +48 -0
- package/dist/types/zones.d.ts.map +1 -0
- package/dist/utils/cosine-similarity.d.ts +3 -0
- package/dist/utils/cosine-similarity.d.ts.map +1 -0
- package/dist/utils/hf-url.d.ts +2 -0
- package/dist/utils/hf-url.d.ts.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { IDeviceCapability } from '../device-capability.js';
|
|
2
|
+
/** A stored event from a device */
|
|
3
|
+
export interface DeviceStoredEvent {
|
|
4
|
+
id: string;
|
|
5
|
+
type: string;
|
|
6
|
+
timestamp: number;
|
|
7
|
+
endTimestamp?: number;
|
|
8
|
+
label?: string;
|
|
9
|
+
score?: number;
|
|
10
|
+
hasClip?: boolean;
|
|
11
|
+
hasSnapshot?: boolean;
|
|
12
|
+
thumbnailUrl?: string;
|
|
13
|
+
data?: Record<string, unknown>;
|
|
14
|
+
}
|
|
15
|
+
/** Query filter for events */
|
|
16
|
+
export interface EventQuery {
|
|
17
|
+
since?: number;
|
|
18
|
+
until?: number;
|
|
19
|
+
types?: string[];
|
|
20
|
+
detectionClasses?: string[];
|
|
21
|
+
clusterSpan?: number;
|
|
22
|
+
onlyKeyEvents?: boolean;
|
|
23
|
+
includeClip?: boolean;
|
|
24
|
+
limit?: number;
|
|
25
|
+
offset?: number;
|
|
26
|
+
}
|
|
27
|
+
/** Query result */
|
|
28
|
+
export interface EventQueryResult {
|
|
29
|
+
events: DeviceStoredEvent[];
|
|
30
|
+
total: number;
|
|
31
|
+
}
|
|
32
|
+
/** A cluster of nearby events */
|
|
33
|
+
export interface EventCluster {
|
|
34
|
+
representative: DeviceStoredEvent;
|
|
35
|
+
events: DeviceStoredEvent[];
|
|
36
|
+
startMs: number;
|
|
37
|
+
endMs: number;
|
|
38
|
+
classes: string[];
|
|
39
|
+
}
|
|
40
|
+
export interface IEvents extends IDeviceCapability {
|
|
41
|
+
kind: 'events';
|
|
42
|
+
getEvents(query: EventQuery): Promise<EventQueryResult>;
|
|
43
|
+
getEventThumbnail(eventId: string): Promise<Buffer | null>;
|
|
44
|
+
getEventSnapshot(eventId: string): Promise<Buffer | null>;
|
|
45
|
+
getEventClipUrl(eventId: string): Promise<string | null>;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/interfaces/device-capabilities/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAEhE,mCAAmC;AACnC,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B;AAED,8BAA8B;AAC9B,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,mBAAmB;AACnB,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,iBAAiB,EAAE,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;CACd;AAED,iCAAiC;AACjC,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,iBAAiB,CAAA;IACjC,MAAM,EAAE,iBAAiB,EAAE,CAAA;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,OAAQ,SAAQ,iBAAiB;IAChD,IAAI,EAAE,QAAQ,CAAA;IACd,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACvD,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAC1D,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACzD,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CACzD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export * from './camera.js';
|
|
2
|
+
export * from './pan-tilt-zoom.js';
|
|
3
|
+
export * from './motion-sensor.js';
|
|
4
|
+
export * from './object-detector.js';
|
|
5
|
+
export * from './audio-detector.js';
|
|
6
|
+
export * from './two-way-audio.js';
|
|
7
|
+
export * from './doorbell.js';
|
|
8
|
+
export * from './events.js';
|
|
9
|
+
export * from './recording.js';
|
|
10
|
+
export * from './accessory.js';
|
|
11
|
+
export * from './status-light.js';
|
|
12
|
+
export * from './siren.js';
|
|
13
|
+
export * from './switch.js';
|
|
14
|
+
export * from './native-detection.js';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/interfaces/device-capabilities/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { IDeviceCapability } from '../device-capability.js';
|
|
2
|
+
export interface IMotionSensor extends IDeviceCapability {
|
|
3
|
+
kind: 'motionSensor';
|
|
4
|
+
isMotionDetected(): boolean;
|
|
5
|
+
subscribe(callback: (active: boolean) => void): () => void;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=motion-sensor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"motion-sensor.d.ts","sourceRoot":"","sources":["../../../src/interfaces/device-capabilities/motion-sensor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAEhE,MAAM,WAAW,aAAc,SAAQ,iBAAiB;IACtD,IAAI,EAAE,cAAc,CAAA;IACpB,gBAAgB,IAAI,OAAO,CAAA;IAC3B,SAAS,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;CAC3D"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Native detection events from camera hardware (ONVIF, Frigate, etc.) */
|
|
2
|
+
export interface NativeDetectionEvent {
|
|
3
|
+
readonly cameraId: string;
|
|
4
|
+
readonly type: 'motion' | 'person' | 'vehicle' | 'animal' | string;
|
|
5
|
+
readonly confidence?: number;
|
|
6
|
+
readonly timestamp: number;
|
|
7
|
+
readonly source: 'onvif' | 'frigate' | 'rtsp-metadata' | string;
|
|
8
|
+
}
|
|
9
|
+
/** Interface for cameras that support native detection */
|
|
10
|
+
export interface ICameraNativeDetection {
|
|
11
|
+
readonly supportsNativeDetection: true;
|
|
12
|
+
onNativeDetection(handler: (event: NativeDetectionEvent) => void): () => void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=native-detection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-detection.d.ts","sourceRoot":"","sources":["../../../src/interfaces/device-capabilities/native-detection.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAA;IAClE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,eAAe,GAAG,MAAM,CAAA;CAChE;AAED,0DAA0D;AAC1D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,uBAAuB,EAAE,IAAI,CAAA;IACtC,iBAAiB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;CAC9E"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { IDeviceCapability } from '../device-capability.js';
|
|
2
|
+
/** A single detection result from a frame */
|
|
3
|
+
export interface Detection {
|
|
4
|
+
className: string;
|
|
5
|
+
score: number;
|
|
6
|
+
boundingBox?: [number, number, number, number];
|
|
7
|
+
id?: string;
|
|
8
|
+
label?: string;
|
|
9
|
+
labelScore?: number;
|
|
10
|
+
zones?: string[];
|
|
11
|
+
previousZones?: string[];
|
|
12
|
+
}
|
|
13
|
+
/** Payload emitted by onDetections -- a full frame of detections */
|
|
14
|
+
export interface DetectionFrame {
|
|
15
|
+
detections: Detection[];
|
|
16
|
+
frameWidth: number;
|
|
17
|
+
frameHeight: number;
|
|
18
|
+
timestamp: number;
|
|
19
|
+
}
|
|
20
|
+
/** An actively tracked object in the scene */
|
|
21
|
+
export interface ActiveDetection extends Detection {
|
|
22
|
+
state: 'moving' | 'stationary';
|
|
23
|
+
durationMs: number;
|
|
24
|
+
velocity?: {
|
|
25
|
+
dx: number;
|
|
26
|
+
dy: number;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/** A closed polygon zone on the camera scene */
|
|
30
|
+
export interface DetectionZone {
|
|
31
|
+
id: string;
|
|
32
|
+
name: string;
|
|
33
|
+
polygon: Array<[number, number]>;
|
|
34
|
+
mode: 'observe' | 'restrict';
|
|
35
|
+
}
|
|
36
|
+
/** A line on the scene for crossing rules */
|
|
37
|
+
export interface DetectionLine {
|
|
38
|
+
id: string;
|
|
39
|
+
name: string;
|
|
40
|
+
points: [[number, number], [number, number]];
|
|
41
|
+
direction: 'left-to-right' | 'right-to-left' | 'both';
|
|
42
|
+
}
|
|
43
|
+
export interface IObjectDetector extends IDeviceCapability {
|
|
44
|
+
kind: 'objectDetector';
|
|
45
|
+
getLabels(): string[];
|
|
46
|
+
onDetections(callback: (frame: DetectionFrame) => void): () => void;
|
|
47
|
+
getZones(): Promise<DetectionZone[]>;
|
|
48
|
+
addZone(zone: DetectionZone): Promise<void>;
|
|
49
|
+
removeZone(zoneId: string): Promise<void>;
|
|
50
|
+
updateZone(zoneId: string, zone: Partial<Omit<DetectionZone, 'id'>>): Promise<void>;
|
|
51
|
+
getLines(): Promise<DetectionLine[]>;
|
|
52
|
+
addLine(line: DetectionLine): Promise<void>;
|
|
53
|
+
removeLine(lineId: string): Promise<void>;
|
|
54
|
+
getActiveDetections(): ActiveDetection[];
|
|
55
|
+
getZoneDetections(zoneId: string): ActiveDetection[];
|
|
56
|
+
getStationaryDetections(): ActiveDetection[];
|
|
57
|
+
getMovingDetections(): ActiveDetection[];
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=object-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-detector.d.ts","sourceRoot":"","sources":["../../../src/interfaces/device-capabilities/object-detector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAEhE,6CAA6C;AAC7C,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9C,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;CACzB;AAED,oEAAoE;AACpE,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,SAAS,EAAE,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,8CAA8C;AAC9C,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD,KAAK,EAAE,QAAQ,GAAG,YAAY,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;CACtC;AAED,gDAAgD;AAChD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAChC,IAAI,EAAE,SAAS,GAAG,UAAU,CAAA;CAC7B;AAED,6CAA6C;AAC7C,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC5C,SAAS,EAAE,eAAe,GAAG,eAAe,GAAG,MAAM,CAAA;CACtD;AAED,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,IAAI,EAAE,gBAAgB,CAAA;IAEtB,SAAS,IAAI,MAAM,EAAE,CAAA;IACrB,YAAY,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;IAEnE,QAAQ,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IACpC,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEnF,QAAQ,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IACpC,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEzC,mBAAmB,IAAI,eAAe,EAAE,CAAA;IACxC,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,EAAE,CAAA;IACpD,uBAAuB,IAAI,eAAe,EAAE,CAAA;IAC5C,mBAAmB,IAAI,eAAe,EAAE,CAAA;CACzC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { IDeviceCapability } from '../device-capability.js';
|
|
2
|
+
export interface PtzPreset {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
}
|
|
6
|
+
export interface IPanTiltZoom extends IDeviceCapability {
|
|
7
|
+
kind: 'panTiltZoom';
|
|
8
|
+
move(command: {
|
|
9
|
+
pan?: number;
|
|
10
|
+
tilt?: number;
|
|
11
|
+
zoom?: number;
|
|
12
|
+
speed?: number;
|
|
13
|
+
}): Promise<void>;
|
|
14
|
+
continuousMove(command: {
|
|
15
|
+
pan?: number;
|
|
16
|
+
tilt?: number;
|
|
17
|
+
zoom?: number;
|
|
18
|
+
}): Promise<void>;
|
|
19
|
+
stop(): Promise<void>;
|
|
20
|
+
getPresets(): Promise<PtzPreset[]>;
|
|
21
|
+
goToPreset(presetId: string): Promise<void>;
|
|
22
|
+
goHome(): Promise<void>;
|
|
23
|
+
getPosition(): Promise<{
|
|
24
|
+
pan: number;
|
|
25
|
+
tilt: number;
|
|
26
|
+
zoom: number;
|
|
27
|
+
}>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=pan-tilt-zoom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pan-tilt-zoom.d.ts","sourceRoot":"","sources":["../../../src/interfaces/device-capabilities/pan-tilt-zoom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAEhE,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,YAAa,SAAQ,iBAAiB;IACrD,IAAI,EAAE,aAAa,CAAA;IACnB,IAAI,CAAC,OAAO,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5F,cAAc,CAAC,OAAO,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtF,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACrB,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IAClC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACvB,WAAW,IAAI,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACpE"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { IDeviceCapability } from '../device-capability.js';
|
|
2
|
+
export interface TimeRange {
|
|
3
|
+
since: number;
|
|
4
|
+
until: number;
|
|
5
|
+
}
|
|
6
|
+
export interface RecordingSegment {
|
|
7
|
+
id: string;
|
|
8
|
+
startTime: number;
|
|
9
|
+
endTime: number;
|
|
10
|
+
duration: number;
|
|
11
|
+
}
|
|
12
|
+
export interface IRecording extends IDeviceCapability {
|
|
13
|
+
kind: 'recording';
|
|
14
|
+
getSegments(range: TimeRange): Promise<RecordingSegment[]>;
|
|
15
|
+
getPlaybackUrl(startTime: number, endTime: number): Promise<string>;
|
|
16
|
+
getThumbnailAt(timestampMs: number): Promise<Buffer | null>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=recording.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recording.d.ts","sourceRoot":"","sources":["../../../src/interfaces/device-capabilities/recording.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAEhE,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,UAAW,SAAQ,iBAAiB;IACnD,IAAI,EAAE,WAAW,CAAA;IACjB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAA;IAC1D,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACnE,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAC5D"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { IDeviceCapability } from '../device-capability.js';
|
|
2
|
+
export interface ISiren extends IDeviceCapability {
|
|
3
|
+
kind: 'siren';
|
|
4
|
+
isActive(): boolean;
|
|
5
|
+
activate(durationMs?: number): Promise<void>;
|
|
6
|
+
deactivate(): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=siren.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"siren.d.ts","sourceRoot":"","sources":["../../../src/interfaces/device-capabilities/siren.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAEhE,MAAM,WAAW,MAAO,SAAQ,iBAAiB;IAC/C,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,IAAI,OAAO,CAAA;IACnB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-light.d.ts","sourceRoot":"","sources":["../../../src/interfaces/device-capabilities/status-light.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAEhE,MAAM,WAAW,YAAa,SAAQ,iBAAiB;IACrD,IAAI,EAAE,aAAa,CAAA;IACnB,IAAI,IAAI,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAClC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switch.d.ts","sourceRoot":"","sources":["../../../src/interfaces/device-capabilities/switch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAEhE,MAAM,WAAW,OAAQ,SAAQ,iBAAiB;IAChD,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,IAAI,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACxB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { IDeviceCapability } from '../device-capability.js';
|
|
2
|
+
export interface ITwoWayAudio extends IDeviceCapability {
|
|
3
|
+
kind: 'twoWayAudio';
|
|
4
|
+
startMicrophone(stream: unknown): Promise<void>;
|
|
5
|
+
stopMicrophone(): Promise<void>;
|
|
6
|
+
isMicrophoneActive(): boolean;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=two-way-audio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"two-way-audio.d.ts","sourceRoot":"","sources":["../../../src/interfaces/device-capabilities/two-way-audio.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAEhE,MAAM,WAAW,YAAa,SAAQ,iBAAiB;IACrD,IAAI,EAAE,aAAa,CAAA;IACnB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/C,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/B,kBAAkB,IAAI,OAAO,CAAA;CAC9B"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface IDeviceCapability {
|
|
2
|
+
kind: DeviceCapabilityName;
|
|
3
|
+
}
|
|
4
|
+
export type DeviceCapabilityName = 'camera' | 'panTiltZoom' | 'motionSensor' | 'objectDetector' | 'audioDetector' | 'twoWayAudio' | 'doorbell' | 'events' | 'recording' | 'accessory' | 'statusLight' | 'siren' | 'switch';
|
|
5
|
+
export interface CapabilityBinding {
|
|
6
|
+
source: 'native' | 'addon' | 'disabled';
|
|
7
|
+
addonId?: string;
|
|
8
|
+
config?: Record<string, unknown>;
|
|
9
|
+
}
|
|
10
|
+
export interface DeviceCapabilityBinding {
|
|
11
|
+
deviceId: string;
|
|
12
|
+
bindings: Partial<Record<DeviceCapabilityName, CapabilityBinding>>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=device-capability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-capability.d.ts","sourceRoot":"","sources":["../../src/interfaces/device-capability.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,oBAAoB,CAAA;CAC3B;AAED,MAAM,MAAM,oBAAoB,GAC5B,QAAQ,GACR,aAAa,GACb,cAAc,GACd,gBAAgB,GAChB,eAAe,GACf,aAAa,GACb,UAAU,GACV,QAAQ,GACR,WAAW,GACX,WAAW,GACX,aAAa,GACb,OAAO,GACP,QAAQ,CAAA;AAEZ,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAA;IACvC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC,CAAA;CACnE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { IDevice, DeviceType, DeviceMetadata } from './device.js';
|
|
2
|
+
import type { DeviceCapabilityName } from './device-capability.js';
|
|
3
|
+
import type { CamstackContext } from './context.js';
|
|
4
|
+
import type { ConfigUISchema } from './config-ui.js';
|
|
5
|
+
export interface ProviderStatus {
|
|
6
|
+
connected: boolean;
|
|
7
|
+
error?: string;
|
|
8
|
+
deviceCount: number;
|
|
9
|
+
}
|
|
10
|
+
export interface DiscoveredDevice {
|
|
11
|
+
externalId: string;
|
|
12
|
+
name: string;
|
|
13
|
+
type: DeviceType;
|
|
14
|
+
capabilities: DeviceCapabilityName[];
|
|
15
|
+
metadata: DeviceMetadata;
|
|
16
|
+
}
|
|
17
|
+
export interface LiveEvent {
|
|
18
|
+
type: string;
|
|
19
|
+
camera: string;
|
|
20
|
+
timestamp: number;
|
|
21
|
+
data: Record<string, unknown>;
|
|
22
|
+
}
|
|
23
|
+
export interface IDeviceProvider {
|
|
24
|
+
/** Immutable progressive ID */
|
|
25
|
+
readonly id: string;
|
|
26
|
+
readonly type: string;
|
|
27
|
+
readonly name: string;
|
|
28
|
+
readonly discoveryMode: 'auto' | 'manual' | 'both';
|
|
29
|
+
/** The provider's context -- logger, storage, eventBus scoped to this provider */
|
|
30
|
+
readonly ctx: CamstackContext;
|
|
31
|
+
start(): Promise<void>;
|
|
32
|
+
stop(): Promise<void>;
|
|
33
|
+
getStatus(): ProviderStatus;
|
|
34
|
+
discoverDevices(): Promise<DiscoveredDevice[]>;
|
|
35
|
+
getDeviceConfigSchema?(): unknown;
|
|
36
|
+
createDevice?(config: Record<string, unknown>): Promise<IDevice>;
|
|
37
|
+
adoptDevice?(externalId: string, config?: Record<string, unknown>): Promise<IDevice>;
|
|
38
|
+
getDevices(): IDevice[];
|
|
39
|
+
subscribeLiveEvents(callback: (event: LiveEvent) => void): () => void;
|
|
40
|
+
/** Optional: declare configurable settings UI for this provider */
|
|
41
|
+
getConfigSchema?(): ConfigUISchema;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=device-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-provider.d.ts","sourceRoot":"","sources":["../../src/interfaces/device-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,UAAU,CAAA;IAChB,YAAY,EAAE,oBAAoB,EAAE,CAAA;IACpC,QAAQ,EAAE,cAAc,CAAA;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAA;IAElD,kFAAkF;IAClF,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAA;IAE7B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACrB,SAAS,IAAI,cAAc,CAAA;IAC3B,eAAe,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAA;IAC9C,qBAAqB,CAAC,IAAI,OAAO,CAAA;IACjC,YAAY,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAChE,WAAW,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACpF,UAAU,IAAI,OAAO,EAAE,CAAA;IACvB,mBAAmB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;IAErE,mEAAmE;IACnE,eAAe,CAAC,IAAI,cAAc,CAAA;CACnC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { IDeviceCapability, DeviceCapabilityName } from './device-capability.js';
|
|
2
|
+
import type { CamstackContext } from './context.js';
|
|
3
|
+
import type { ConfigUISchema } from './config-ui.js';
|
|
4
|
+
export type DeviceType = 'camera' | 'doorbell' | 'sensor' | 'switch' | 'thermostat' | 'light' | 'generic';
|
|
5
|
+
export interface DeviceState {
|
|
6
|
+
online: boolean;
|
|
7
|
+
lastSeen?: number;
|
|
8
|
+
error?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface DeviceMetadata {
|
|
11
|
+
manufacturer?: string;
|
|
12
|
+
model?: string;
|
|
13
|
+
firmware?: string;
|
|
14
|
+
hardwareId?: string;
|
|
15
|
+
ip?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface DeviceEvent {
|
|
18
|
+
deviceId: string;
|
|
19
|
+
type: string;
|
|
20
|
+
timestamp: number;
|
|
21
|
+
data: Record<string, unknown>;
|
|
22
|
+
}
|
|
23
|
+
export interface IDevice {
|
|
24
|
+
/** Immutable progressive ID */
|
|
25
|
+
readonly id: string;
|
|
26
|
+
readonly name: string;
|
|
27
|
+
readonly providerId: string;
|
|
28
|
+
readonly type: DeviceType;
|
|
29
|
+
readonly capabilities: DeviceCapabilityName[];
|
|
30
|
+
/** The device's context -- logger, storage, eventBus scoped to this device */
|
|
31
|
+
readonly ctx: CamstackContext;
|
|
32
|
+
getCapability<T extends IDeviceCapability>(cap: DeviceCapabilityName): T | null;
|
|
33
|
+
hasCapability(cap: DeviceCapabilityName): boolean;
|
|
34
|
+
getState(): DeviceState;
|
|
35
|
+
getMetadata(): DeviceMetadata;
|
|
36
|
+
subscribeEvents?(callback: (event: DeviceEvent) => void): () => void;
|
|
37
|
+
/** Optional: declare configurable settings UI for this device */
|
|
38
|
+
getConfigSchema?(): ConfigUISchema;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=device.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../src/interfaces/device.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AACrF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,YAAY,GACZ,OAAO,GACP,SAAS,CAAA;AAEb,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B;AAED,MAAM,WAAW,OAAO;IACtB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,QAAQ,CAAC,YAAY,EAAE,oBAAoB,EAAE,CAAA;IAE7C,8EAA8E;IAC9E,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAA;IAE7B,aAAa,CAAC,CAAC,SAAS,iBAAiB,EAAE,GAAG,EAAE,oBAAoB,GAAG,CAAC,GAAG,IAAI,CAAA;IAC/E,aAAa,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAA;IACjD,QAAQ,IAAI,WAAW,CAAA;IACvB,WAAW,IAAI,cAAc,CAAA;IAC7B,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;IAEpE,iEAAiE;IACjE,eAAe,CAAC,IAAI,cAAc,CAAA;CACnC"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
export interface EventSource {
|
|
2
|
+
type: string;
|
|
3
|
+
id: string;
|
|
4
|
+
}
|
|
5
|
+
/** All known event categories with their typed payloads */
|
|
6
|
+
export interface EventCatalog {
|
|
7
|
+
'system.boot': {
|
|
8
|
+
mode: string;
|
|
9
|
+
};
|
|
10
|
+
'system.addons-ready': {
|
|
11
|
+
activeAddons: readonly string[];
|
|
12
|
+
};
|
|
13
|
+
'system.restarting': Record<string, never>;
|
|
14
|
+
'addon.started': {
|
|
15
|
+
addonId: string;
|
|
16
|
+
packageName?: string;
|
|
17
|
+
packageVersion?: string;
|
|
18
|
+
agent?: string;
|
|
19
|
+
};
|
|
20
|
+
'addon.stopped': {
|
|
21
|
+
addonId: string;
|
|
22
|
+
packageName?: string;
|
|
23
|
+
packageVersion?: string;
|
|
24
|
+
agent?: string;
|
|
25
|
+
};
|
|
26
|
+
'addon.restarted': {
|
|
27
|
+
addonId: string;
|
|
28
|
+
packageName?: string;
|
|
29
|
+
packageVersion?: string;
|
|
30
|
+
agent?: string;
|
|
31
|
+
};
|
|
32
|
+
'addon.updated': {
|
|
33
|
+
addonId: string;
|
|
34
|
+
packageName?: string;
|
|
35
|
+
packageVersion?: string;
|
|
36
|
+
agent?: string;
|
|
37
|
+
fromVersion?: string;
|
|
38
|
+
toVersion?: string;
|
|
39
|
+
};
|
|
40
|
+
'addon.installed': {
|
|
41
|
+
addonId: string;
|
|
42
|
+
packageName?: string;
|
|
43
|
+
packageVersion?: string;
|
|
44
|
+
agent?: string;
|
|
45
|
+
};
|
|
46
|
+
'addon.uninstalled': {
|
|
47
|
+
addonId: string;
|
|
48
|
+
packageName?: string;
|
|
49
|
+
packageVersion?: string;
|
|
50
|
+
agent?: string;
|
|
51
|
+
};
|
|
52
|
+
'addon.crashed': {
|
|
53
|
+
addonId: string;
|
|
54
|
+
packageName?: string;
|
|
55
|
+
packageVersion?: string;
|
|
56
|
+
agent?: string;
|
|
57
|
+
error?: string;
|
|
58
|
+
};
|
|
59
|
+
'addon.error': {
|
|
60
|
+
addonId: string;
|
|
61
|
+
packageName?: string;
|
|
62
|
+
packageVersion?: string;
|
|
63
|
+
agent?: string;
|
|
64
|
+
error?: string;
|
|
65
|
+
action?: string;
|
|
66
|
+
phase?: string;
|
|
67
|
+
};
|
|
68
|
+
'device.registered': {
|
|
69
|
+
deviceId: string;
|
|
70
|
+
providerId: string;
|
|
71
|
+
name?: string;
|
|
72
|
+
};
|
|
73
|
+
'device.unregistered': {
|
|
74
|
+
deviceId: string;
|
|
75
|
+
providerId: string;
|
|
76
|
+
};
|
|
77
|
+
'provider.started': {
|
|
78
|
+
providerId: string;
|
|
79
|
+
type?: string;
|
|
80
|
+
};
|
|
81
|
+
'provider.stopped': {
|
|
82
|
+
providerId: string;
|
|
83
|
+
reason?: string;
|
|
84
|
+
};
|
|
85
|
+
'process.crashed': {
|
|
86
|
+
processId: string;
|
|
87
|
+
exitCode?: number;
|
|
88
|
+
signal?: string;
|
|
89
|
+
};
|
|
90
|
+
'process.restart_scheduled': {
|
|
91
|
+
processId: string;
|
|
92
|
+
delayMs: number;
|
|
93
|
+
};
|
|
94
|
+
'process.restarted': {
|
|
95
|
+
processId: string;
|
|
96
|
+
};
|
|
97
|
+
'recording.started': {
|
|
98
|
+
deviceId: string;
|
|
99
|
+
streamId?: string;
|
|
100
|
+
};
|
|
101
|
+
'recording.stopped': {
|
|
102
|
+
deviceId: string;
|
|
103
|
+
reason?: string;
|
|
104
|
+
};
|
|
105
|
+
'recording.error': {
|
|
106
|
+
deviceId: string;
|
|
107
|
+
error: string;
|
|
108
|
+
};
|
|
109
|
+
'recording.health.degraded': {
|
|
110
|
+
deviceId: string;
|
|
111
|
+
message: string;
|
|
112
|
+
};
|
|
113
|
+
'recording.storage.critical': {
|
|
114
|
+
deviceId: string;
|
|
115
|
+
usagePercent?: number;
|
|
116
|
+
};
|
|
117
|
+
'recording.segment.written': {
|
|
118
|
+
deviceId: string;
|
|
119
|
+
path?: string;
|
|
120
|
+
durationSec?: number;
|
|
121
|
+
sizeMB?: number;
|
|
122
|
+
};
|
|
123
|
+
'recording.policy.fallback': {
|
|
124
|
+
deviceId: string;
|
|
125
|
+
reason: string;
|
|
126
|
+
};
|
|
127
|
+
'recording.retention.completed': {
|
|
128
|
+
deletedCount?: number;
|
|
129
|
+
freedMB?: number;
|
|
130
|
+
};
|
|
131
|
+
'detection.event': {
|
|
132
|
+
deviceId: string;
|
|
133
|
+
detections?: unknown[];
|
|
134
|
+
[key: string]: unknown;
|
|
135
|
+
};
|
|
136
|
+
'session.track.new': {
|
|
137
|
+
deviceId: string;
|
|
138
|
+
trackId: string;
|
|
139
|
+
label?: string;
|
|
140
|
+
};
|
|
141
|
+
'session.track.expired': {
|
|
142
|
+
deviceId: string;
|
|
143
|
+
trackId: string;
|
|
144
|
+
durationMs?: number;
|
|
145
|
+
};
|
|
146
|
+
'pipeline.progress': {
|
|
147
|
+
step: string;
|
|
148
|
+
addonId?: string;
|
|
149
|
+
modelId?: string;
|
|
150
|
+
ms?: number;
|
|
151
|
+
message?: string;
|
|
152
|
+
};
|
|
153
|
+
'model.download.progress': {
|
|
154
|
+
modelId: string;
|
|
155
|
+
progress: number;
|
|
156
|
+
totalMB?: number;
|
|
157
|
+
};
|
|
158
|
+
'benchmark.progress': {
|
|
159
|
+
addonId: string;
|
|
160
|
+
phase: string;
|
|
161
|
+
[key: string]: unknown;
|
|
162
|
+
};
|
|
163
|
+
'agent.task.assigned': {
|
|
164
|
+
agentId: string;
|
|
165
|
+
taskId: string;
|
|
166
|
+
taskType: string;
|
|
167
|
+
payload?: unknown;
|
|
168
|
+
};
|
|
169
|
+
'agent.benchmark.result': {
|
|
170
|
+
agentId: string;
|
|
171
|
+
result: unknown;
|
|
172
|
+
};
|
|
173
|
+
'retention.cleanup': {
|
|
174
|
+
deletedCount?: number;
|
|
175
|
+
freedMB?: number;
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
/** All known event category strings */
|
|
179
|
+
export type KnownEventCategory = keyof EventCatalog;
|
|
180
|
+
/**
|
|
181
|
+
* System event — `data` is `Record<string, unknown>` for backward compatibility.
|
|
182
|
+
* Use `TypedSystemEvent<C>` or `narrowEvent()` for typed access to data.
|
|
183
|
+
*/
|
|
184
|
+
export interface SystemEvent {
|
|
185
|
+
id: string;
|
|
186
|
+
timestamp: Date;
|
|
187
|
+
source: EventSource;
|
|
188
|
+
category: string;
|
|
189
|
+
data: Record<string, unknown>;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* A system event with a known category — `data` is typed.
|
|
193
|
+
* Use this when you know the exact category at compile time.
|
|
194
|
+
*/
|
|
195
|
+
export type TypedSystemEvent<C extends KnownEventCategory> = {
|
|
196
|
+
id: string;
|
|
197
|
+
timestamp: Date;
|
|
198
|
+
source: EventSource;
|
|
199
|
+
category: C;
|
|
200
|
+
data: EventCatalog[C];
|
|
201
|
+
};
|
|
202
|
+
export interface EventFilter {
|
|
203
|
+
source?: EventSource;
|
|
204
|
+
/** Category string — supports exact match or glob (e.g. 'device.*') */
|
|
205
|
+
category?: string;
|
|
206
|
+
since?: Date;
|
|
207
|
+
}
|
|
208
|
+
export interface IEventBus {
|
|
209
|
+
/** Emit a known-category event with typed payload */
|
|
210
|
+
emit<C extends KnownEventCategory>(event: TypedSystemEvent<C>): void;
|
|
211
|
+
/** Emit an arbitrary event (custom/unknown category) */
|
|
212
|
+
emit(event: SystemEvent): void;
|
|
213
|
+
/** Subscribe to events matching a filter */
|
|
214
|
+
subscribe(filter: EventFilter, handler: (event: SystemEvent) => void): () => void;
|
|
215
|
+
/** Get recent events */
|
|
216
|
+
getRecent(filter?: EventFilter, limit?: number): readonly SystemEvent[];
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Narrow a SystemEvent to a typed event by checking its category.
|
|
220
|
+
* Returns `true` (and narrows the type) if the category matches.
|
|
221
|
+
*
|
|
222
|
+
* @example
|
|
223
|
+
* ```typescript
|
|
224
|
+
* eventBus.subscribe({ category: 'addon.started' }, (event) => {
|
|
225
|
+
* if (isEvent(event, 'addon.started')) {
|
|
226
|
+
* event.data.addonId // ✓ typed as string
|
|
227
|
+
* }
|
|
228
|
+
* })
|
|
229
|
+
* ```
|
|
230
|
+
*/
|
|
231
|
+
export declare function isEvent<C extends KnownEventCategory>(event: SystemEvent, category: C): event is TypedSystemEvent<C>;
|
|
232
|
+
/**
|
|
233
|
+
* Create a typed event with less boilerplate.
|
|
234
|
+
*
|
|
235
|
+
* @example
|
|
236
|
+
* ```typescript
|
|
237
|
+
* eventBus.emit(createEvent('addon.started', { type: 'addon', id: 'pipeline' }, {
|
|
238
|
+
* addonId: 'pipeline',
|
|
239
|
+
* packageVersion: '0.1.8',
|
|
240
|
+
* }))
|
|
241
|
+
* ```
|
|
242
|
+
*/
|
|
243
|
+
export declare function createEvent<C extends KnownEventCategory>(category: C, source: EventSource, data: EventCatalog[C]): TypedSystemEvent<C>;
|
|
244
|
+
//# sourceMappingURL=event-bus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../src/interfaces/event-bus.ts"],"names":[],"mappings":"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"}
|