@camstack/types 0.1.14 → 0.1.16
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/addon/base-addon.d.ts +262 -0
- package/dist/addon/base-addon.d.ts.map +1 -0
- package/dist/auth-records-BDg37fy9.mjs +8297 -0
- package/dist/auth-records-BDg37fy9.mjs.map +1 -0
- package/dist/auth-records-D5ZNaUos.js +8296 -0
- package/dist/auth-records-D5ZNaUos.js.map +1 -0
- package/dist/capabilities/accessories.cap.d.ts +42 -0
- package/dist/capabilities/accessories.cap.d.ts.map +1 -0
- package/dist/capabilities/addon-pages-source.cap.d.ts +41 -0
- package/dist/capabilities/addon-pages-source.cap.d.ts.map +1 -0
- package/dist/capabilities/addon-pages.cap.d.ts +36 -0
- package/dist/capabilities/addon-pages.cap.d.ts.map +1 -0
- package/dist/capabilities/addon-routes.cap.d.ts +22 -0
- package/dist/capabilities/addon-routes.cap.d.ts.map +1 -0
- package/dist/capabilities/addon-settings.cap.d.ts +170 -0
- package/dist/capabilities/addon-settings.cap.d.ts.map +1 -0
- package/dist/capabilities/addon-widgets-source.cap.d.ts +103 -0
- package/dist/capabilities/addon-widgets-source.cap.d.ts.map +1 -0
- package/dist/capabilities/addon-widgets.cap.d.ts +98 -0
- package/dist/capabilities/addon-widgets.cap.d.ts.map +1 -0
- package/dist/capabilities/addons.cap.d.ts +356 -0
- package/dist/capabilities/addons.cap.d.ts.map +1 -0
- package/dist/capabilities/admin-ui.cap.d.ts +14 -0
- package/dist/capabilities/admin-ui.cap.d.ts.map +1 -0
- package/dist/capabilities/advanced-notifier.cap.d.ts +60 -0
- package/dist/capabilities/advanced-notifier.cap.d.ts.map +1 -0
- package/dist/capabilities/alerts.cap.d.ts +164 -0
- package/dist/capabilities/alerts.cap.d.ts.map +1 -0
- package/dist/capabilities/audio-analysis.cap.d.ts +46 -0
- package/dist/capabilities/audio-analysis.cap.d.ts.map +1 -0
- package/dist/capabilities/audio-analyzer.cap.d.ts +148 -0
- package/dist/capabilities/audio-analyzer.cap.d.ts.map +1 -0
- package/dist/capabilities/audio-codec.cap.d.ts +202 -0
- package/dist/capabilities/audio-codec.cap.d.ts.map +1 -0
- package/dist/capabilities/audio-metrics.cap.d.ts +174 -0
- package/dist/capabilities/audio-metrics.cap.d.ts.map +1 -0
- package/dist/capabilities/auth-provider.cap.d.ts +49 -0
- package/dist/capabilities/auth-provider.cap.d.ts.map +1 -0
- package/dist/capabilities/authentication.cap.d.ts +83 -0
- package/dist/capabilities/authentication.cap.d.ts.map +1 -0
- package/dist/capabilities/backup.cap.d.ts +269 -0
- package/dist/capabilities/backup.cap.d.ts.map +1 -0
- package/dist/capabilities/battery.cap.d.ts +85 -0
- package/dist/capabilities/battery.cap.d.ts.map +1 -0
- package/dist/capabilities/brightness.cap.d.ts +64 -0
- package/dist/capabilities/brightness.cap.d.ts.map +1 -0
- package/dist/capabilities/camera-credentials.cap.d.ts +102 -0
- package/dist/capabilities/camera-credentials.cap.d.ts.map +1 -0
- package/dist/capabilities/camera-streams.cap.d.ts +214 -0
- package/dist/capabilities/camera-streams.cap.d.ts.map +1 -0
- package/dist/capabilities/capability-definition.d.ts +474 -0
- package/dist/capabilities/capability-definition.d.ts.map +1 -0
- package/dist/capabilities/custom-actions.d.ts +47 -0
- package/dist/capabilities/custom-actions.d.ts.map +1 -0
- package/dist/capabilities/decoder.cap.d.ts +173 -0
- package/dist/capabilities/decoder.cap.d.ts.map +1 -0
- package/dist/capabilities/detection-pipeline.cap.d.ts +34 -0
- package/dist/capabilities/detection-pipeline.cap.d.ts.map +1 -0
- package/dist/capabilities/device-discovery.cap.d.ts +247 -0
- package/dist/capabilities/device-discovery.cap.d.ts.map +1 -0
- package/dist/capabilities/device-manager.cap.d.ts +709 -0
- package/dist/capabilities/device-manager.cap.d.ts.map +1 -0
- package/dist/capabilities/device-ops.cap.d.ts +87 -0
- package/dist/capabilities/device-ops.cap.d.ts.map +1 -0
- package/dist/capabilities/device-provider.cap.d.ts +151 -0
- package/dist/capabilities/device-provider.cap.d.ts.map +1 -0
- package/dist/capabilities/device-state.cap.d.ts +97 -0
- package/dist/capabilities/device-state.cap.d.ts.map +1 -0
- package/dist/capabilities/device-status.cap.d.ts +54 -0
- package/dist/capabilities/device-status.cap.d.ts.map +1 -0
- package/dist/capabilities/doorbell.cap.d.ts +62 -0
- package/dist/capabilities/doorbell.cap.d.ts.map +1 -0
- package/dist/capabilities/embedding-encoder.cap.d.ts +41 -0
- package/dist/capabilities/embedding-encoder.cap.d.ts.map +1 -0
- package/dist/capabilities/events.cap.d.ts +48 -0
- package/dist/capabilities/events.cap.d.ts.map +1 -0
- package/dist/capabilities/feature-probe.cap.d.ts +79 -0
- package/dist/capabilities/feature-probe.cap.d.ts.map +1 -0
- package/dist/capabilities/index.d.ts +191 -0
- package/dist/capabilities/index.d.ts.map +1 -0
- package/dist/capabilities/integrations.cap.d.ts +182 -0
- package/dist/capabilities/integrations.cap.d.ts.map +1 -0
- package/dist/capabilities/intercom.cap.d.ts +108 -0
- package/dist/capabilities/intercom.cap.d.ts.map +1 -0
- package/dist/capabilities/local-network.cap.d.ts +216 -0
- package/dist/capabilities/local-network.cap.d.ts.map +1 -0
- package/dist/capabilities/log-destination.cap.d.ts +70 -0
- package/dist/capabilities/log-destination.cap.d.ts.map +1 -0
- package/dist/capabilities/mesh-network.cap.d.ts +160 -0
- package/dist/capabilities/mesh-network.cap.d.ts.map +1 -0
- package/dist/capabilities/mesh-orchestrator.cap.d.ts +96 -0
- package/dist/capabilities/mesh-orchestrator.cap.d.ts.map +1 -0
- package/dist/capabilities/metrics-provider.cap.d.ts +522 -0
- package/dist/capabilities/metrics-provider.cap.d.ts.map +1 -0
- package/dist/capabilities/motion-detection.cap.d.ts +107 -0
- package/dist/capabilities/motion-detection.cap.d.ts.map +1 -0
- package/dist/capabilities/motion-trigger.cap.d.ts +78 -0
- package/dist/capabilities/motion-trigger.cap.d.ts.map +1 -0
- package/dist/capabilities/motion.cap.d.ts +122 -0
- package/dist/capabilities/motion.cap.d.ts.map +1 -0
- package/dist/capabilities/native-object-detection.cap.d.ts +127 -0
- package/dist/capabilities/native-object-detection.cap.d.ts.map +1 -0
- package/dist/capabilities/network-access.cap.d.ts +67 -0
- package/dist/capabilities/network-access.cap.d.ts.map +1 -0
- package/dist/capabilities/network-quality.cap.d.ts +95 -0
- package/dist/capabilities/network-quality.cap.d.ts.map +1 -0
- package/dist/capabilities/nodes.cap.d.ts +200 -0
- package/dist/capabilities/nodes.cap.d.ts.map +1 -0
- package/dist/capabilities/notification-output.cap.d.ts +44 -0
- package/dist/capabilities/notification-output.cap.d.ts.map +1 -0
- package/dist/capabilities/osd.cap.d.ts +236 -0
- package/dist/capabilities/osd.cap.d.ts.map +1 -0
- package/dist/capabilities/pipeline-analytics.cap.d.ts +501 -0
- package/dist/capabilities/pipeline-analytics.cap.d.ts.map +1 -0
- package/dist/capabilities/pipeline-executor.cap.d.ts +922 -0
- package/dist/capabilities/pipeline-executor.cap.d.ts.map +1 -0
- package/dist/capabilities/pipeline-orchestrator.cap.d.ts +793 -0
- package/dist/capabilities/pipeline-orchestrator.cap.d.ts.map +1 -0
- package/dist/capabilities/pipeline-runner.cap.d.ts +393 -0
- package/dist/capabilities/pipeline-runner.cap.d.ts.map +1 -0
- package/dist/capabilities/platform-probe.cap.d.ts +168 -0
- package/dist/capabilities/platform-probe.cap.d.ts.map +1 -0
- package/dist/capabilities/ptz-autotrack.cap.d.ts +188 -0
- package/dist/capabilities/ptz-autotrack.cap.d.ts.map +1 -0
- package/dist/capabilities/ptz.cap.d.ts +80 -0
- package/dist/capabilities/ptz.cap.d.ts.map +1 -0
- package/dist/capabilities/reboot.cap.d.ts +32 -0
- package/dist/capabilities/reboot.cap.d.ts.map +1 -0
- package/dist/capabilities/recording-engine.cap.d.ts +477 -0
- package/dist/capabilities/recording-engine.cap.d.ts.map +1 -0
- package/dist/capabilities/recording.cap.d.ts +43 -0
- package/dist/capabilities/recording.cap.d.ts.map +1 -0
- package/dist/capabilities/remote-access.cap.d.ts +103 -0
- package/dist/capabilities/remote-access.cap.d.ts.map +1 -0
- package/dist/capabilities/restreamer.cap.d.ts +51 -0
- package/dist/capabilities/restreamer.cap.d.ts.map +1 -0
- package/dist/capabilities/schemas/detection-shared.d.ts +63 -0
- package/dist/capabilities/schemas/detection-shared.d.ts.map +1 -0
- package/dist/capabilities/schemas/orchestrator-metrics.d.ts +44 -0
- package/dist/capabilities/schemas/orchestrator-metrics.d.ts.map +1 -0
- package/dist/capabilities/schemas/streaming-shared.d.ts +177 -0
- package/dist/capabilities/schemas/streaming-shared.d.ts.map +1 -0
- package/dist/capabilities/schemas/zone-rule.d.ts +74 -0
- package/dist/capabilities/schemas/zone-rule.d.ts.map +1 -0
- package/dist/capabilities/settings-store.cap.d.ts +198 -0
- package/dist/capabilities/settings-store.cap.d.ts.map +1 -0
- package/dist/capabilities/snapshot-provider.cap.d.ts +40 -0
- package/dist/capabilities/snapshot-provider.cap.d.ts.map +1 -0
- package/dist/capabilities/snapshot.cap.d.ts +78 -0
- package/dist/capabilities/snapshot.cap.d.ts.map +1 -0
- package/dist/capabilities/storage-provider.cap.d.ts +432 -0
- package/dist/capabilities/storage-provider.cap.d.ts.map +1 -0
- package/dist/capabilities/storage.cap.d.ts +367 -0
- package/dist/capabilities/storage.cap.d.ts.map +1 -0
- package/dist/capabilities/stream-broker.cap.d.ts +416 -0
- package/dist/capabilities/stream-broker.cap.d.ts.map +1 -0
- package/dist/capabilities/streaming-engine.cap.d.ts +58 -0
- package/dist/capabilities/streaming-engine.cap.d.ts.map +1 -0
- package/dist/capabilities/switch.cap.d.ts +66 -0
- package/dist/capabilities/switch.cap.d.ts.map +1 -0
- package/dist/capabilities/system.cap.d.ts +86 -0
- package/dist/capabilities/system.cap.d.ts.map +1 -0
- package/dist/capabilities/toast.cap.d.ts +56 -0
- package/dist/capabilities/toast.cap.d.ts.map +1 -0
- package/dist/capabilities/turn-orchestrator.cap.d.ts +74 -0
- package/dist/capabilities/turn-orchestrator.cap.d.ts.map +1 -0
- package/dist/capabilities/turn-provider.cap.d.ts +43 -0
- package/dist/capabilities/turn-provider.cap.d.ts.map +1 -0
- package/dist/capabilities/user-management.cap.d.ts +378 -0
- package/dist/capabilities/user-management.cap.d.ts.map +1 -0
- package/dist/capabilities/webrtc-session.cap.d.ts +181 -0
- package/dist/capabilities/webrtc-session.cap.d.ts.map +1 -0
- package/dist/capabilities/webrtc.cap.d.ts +72 -0
- package/dist/capabilities/webrtc.cap.d.ts.map +1 -0
- package/dist/capabilities/zone-analytics.cap.d.ts +213 -0
- package/dist/capabilities/zone-analytics.cap.d.ts.map +1 -0
- package/dist/capabilities/zone-rules.cap.d.ts +129 -0
- package/dist/capabilities/zone-rules.cap.d.ts.map +1 -0
- package/dist/capabilities/zones.cap.d.ts +151 -0
- package/dist/capabilities/zones.cap.d.ts.map +1 -0
- package/dist/catalogs/audio-classmap.d.ts +16 -0
- package/dist/catalogs/audio-classmap.d.ts.map +1 -0
- package/dist/catalogs/coco-classmap.d.ts.map +1 -1
- package/dist/constants.d.ts +50 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/deps/binary-downloader.d.ts +41 -0
- package/dist/deps/binary-downloader.d.ts.map +1 -0
- package/dist/deps/ffmpeg-downloader.d.ts +13 -0
- package/dist/deps/ffmpeg-downloader.d.ts.map +1 -0
- package/dist/deps/index.d.ts +4 -0
- package/dist/deps/index.d.ts.map +1 -0
- package/dist/deps/python-downloader.d.ts +34 -0
- package/dist/deps/python-downloader.d.ts.map +1 -0
- package/dist/device/accessory.d.ts +62 -0
- package/dist/device/accessory.d.ts.map +1 -0
- package/dist/device/base-device-provider.d.ts +178 -0
- package/dist/device/base-device-provider.d.ts.map +1 -0
- package/dist/device/base-device.d.ts +287 -0
- package/dist/device/base-device.d.ts.map +1 -0
- package/dist/device/camera-device.d.ts +49 -0
- package/dist/device/camera-device.d.ts.map +1 -0
- package/dist/device/device-binding.d.ts +23 -0
- package/dist/device/device-binding.d.ts.map +1 -0
- package/dist/device/device-config.d.ts +65 -0
- package/dist/device/device-config.d.ts.map +1 -0
- package/dist/device/device-context.d.ts +256 -0
- package/dist/device/device-context.d.ts.map +1 -0
- package/dist/device/device-management.d.ts +118 -0
- package/dist/device/device-management.d.ts.map +1 -0
- package/dist/device/device-profile.d.ts +161 -0
- package/dist/device/device-profile.d.ts.map +1 -0
- package/dist/device/device-runtime-state.d.ts +124 -0
- package/dist/device/device-runtime-state.d.ts.map +1 -0
- package/dist/device/device-state-handle.d.ts +161 -0
- package/dist/device/device-state-handle.d.ts.map +1 -0
- package/dist/device/device-type.d.ts +68 -0
- package/dist/device/device-type.d.ts.map +1 -0
- package/dist/device/device.d.ts +87 -0
- package/dist/device/device.d.ts.map +1 -0
- package/dist/device/features.d.ts +29 -0
- package/dist/device/features.d.ts.map +1 -0
- package/dist/device/index.d.ts +20 -0
- package/dist/device/index.d.ts.map +1 -0
- package/dist/device/runtime-state-helpers.d.ts +69 -0
- package/dist/device/runtime-state-helpers.d.ts.map +1 -0
- package/dist/device/system-mirror.d.ts +318 -0
- package/dist/device/system-mirror.d.ts.map +1 -0
- package/dist/device/zod-to-config-ui.d.ts +23 -0
- package/dist/device/zod-to-config-ui.d.ts.map +1 -0
- package/dist/disposer-chain.d.ts +32 -0
- package/dist/disposer-chain.d.ts.map +1 -0
- package/dist/enums/event-category.d.ts +361 -0
- package/dist/enums/event-category.d.ts.map +1 -0
- package/dist/enums/event-source-type.d.ts +8 -0
- package/dist/enums/event-source-type.d.ts.map +1 -0
- package/dist/enums/index.d.ts +3 -0
- package/dist/enums/index.d.ts.map +1 -0
- package/dist/generated/addon-api.d.ts +14604 -3217
- package/dist/generated/addon-api.d.ts.map +1 -1
- package/dist/generated/cap-status-types.d.ts +51 -0
- package/dist/generated/cap-status-types.d.ts.map +1 -0
- package/dist/generated/capability-router-map.d.ts +278 -0
- package/dist/generated/capability-router-map.d.ts.map +1 -0
- package/dist/generated/device-local-state.d.ts +82 -0
- package/dist/generated/device-local-state.d.ts.map +1 -0
- package/dist/generated/device-proxy.d.ts +146 -0
- package/dist/generated/device-proxy.d.ts.map +1 -0
- package/dist/generated/system-proxy.d.ts +92 -0
- package/dist/generated/system-proxy.d.ts.map +1 -0
- package/dist/helpers/bind-addon-actions.d.ts +19 -0
- package/dist/helpers/bind-addon-actions.d.ts.map +1 -0
- package/dist/index.d.ts +91 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4843 -477
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +4832 -415
- package/dist/index.mjs.map +1 -1
- package/dist/interfaces/addon.d.ts +760 -132
- package/dist/interfaces/addon.d.ts.map +1 -1
- package/dist/interfaces/advanced-notifier.d.ts +3 -2
- package/dist/interfaces/advanced-notifier.d.ts.map +1 -1
- package/dist/interfaces/agent-protocol.d.ts +17 -173
- package/dist/interfaces/agent-protocol.d.ts.map +1 -1
- package/dist/interfaces/agent.d.ts +61 -0
- package/dist/interfaces/agent.d.ts.map +1 -1
- package/dist/interfaces/alerts.d.ts +14 -0
- package/dist/interfaces/alerts.d.ts.map +1 -0
- package/dist/interfaces/analysis-persistence.d.ts +37 -19
- package/dist/interfaces/analysis-persistence.d.ts.map +1 -1
- package/dist/interfaces/analysis.d.ts +33 -4
- package/dist/interfaces/analysis.d.ts.map +1 -1
- package/dist/interfaces/api-responses.d.ts +124 -0
- package/dist/interfaces/api-responses.d.ts.map +1 -0
- package/dist/interfaces/api-shared.d.ts +5 -79
- package/dist/interfaces/api-shared.d.ts.map +1 -1
- package/dist/interfaces/audio-analyzer.d.ts +49 -0
- package/dist/interfaces/audio-analyzer.d.ts.map +1 -0
- package/dist/interfaces/audio-codec.d.ts +123 -0
- package/dist/interfaces/audio-codec.d.ts.map +1 -0
- package/dist/interfaces/audio-inference-engine.d.ts +19 -0
- package/dist/interfaces/audio-inference-engine.d.ts.map +1 -0
- package/dist/interfaces/auth-provider.d.ts.map +1 -1
- package/dist/interfaces/auth.d.ts +4 -25
- package/dist/interfaces/auth.d.ts.map +1 -1
- package/dist/interfaces/camera-pipeline.d.ts +7 -20
- package/dist/interfaces/camera-pipeline.d.ts.map +1 -1
- package/dist/interfaces/capability.d.ts +171 -24
- package/dist/interfaces/capability.d.ts.map +1 -1
- package/dist/interfaces/config-ui.d.ts +746 -24
- package/dist/interfaces/config-ui.d.ts.map +1 -1
- package/dist/interfaces/context.d.ts +9 -4
- package/dist/interfaces/context.d.ts.map +1 -1
- package/dist/interfaces/decoder.d.ts +38 -3
- package/dist/interfaces/decoder.d.ts.map +1 -1
- package/dist/interfaces/detection-addon.d.ts +6 -6
- package/dist/interfaces/detection-addon.d.ts.map +1 -1
- package/dist/interfaces/device-capabilities/camera.d.ts +95 -18
- package/dist/interfaces/device-capabilities/camera.d.ts.map +1 -1
- package/dist/interfaces/device-capabilities/index.d.ts +0 -13
- package/dist/interfaces/device-capabilities/index.d.ts.map +1 -1
- package/dist/interfaces/device-provider.d.ts +18 -16
- package/dist/interfaces/device-provider.d.ts.map +1 -1
- package/dist/interfaces/device.d.ts +4 -21
- package/dist/interfaces/device.d.ts.map +1 -1
- package/dist/interfaces/embedding-encoder.d.ts +19 -0
- package/dist/interfaces/embedding-encoder.d.ts.map +1 -0
- package/dist/interfaces/engine-slots.d.ts +10 -0
- package/dist/interfaces/engine-slots.d.ts.map +1 -0
- package/dist/interfaces/event-bus.d.ts +710 -26
- package/dist/interfaces/event-bus.d.ts.map +1 -1
- package/dist/interfaces/inference-capabilities.d.ts +0 -17
- package/dist/interfaces/inference-capabilities.d.ts.map +1 -1
- package/dist/interfaces/inference-engine.d.ts +30 -10
- package/dist/interfaces/inference-engine.d.ts.map +1 -1
- package/dist/interfaces/integration-registry.d.ts +20 -20
- package/dist/interfaces/integration-registry.d.ts.map +1 -1
- package/dist/interfaces/kernel-abstractions.d.ts +83 -0
- package/dist/interfaces/kernel-abstractions.d.ts.map +1 -0
- package/dist/interfaces/logging.d.ts +89 -8
- package/dist/interfaces/logging.d.ts.map +1 -1
- package/dist/interfaces/metrics-provider.d.ts +17 -0
- package/dist/interfaces/metrics-provider.d.ts.map +1 -0
- package/dist/interfaces/network-quality.d.ts +4 -4
- package/dist/interfaces/network.d.ts +0 -16
- package/dist/interfaces/network.d.ts.map +1 -1
- package/dist/interfaces/notification.d.ts +1 -1
- package/dist/interfaces/pipeline-executor-capability.d.ts +200 -0
- package/dist/interfaces/pipeline-executor-capability.d.ts.map +1 -0
- package/dist/interfaces/pipeline-orchestrator-capability.d.ts +165 -0
- package/dist/interfaces/pipeline-orchestrator-capability.d.ts.map +1 -0
- package/dist/interfaces/pipeline-runner-capability.d.ts +147 -0
- package/dist/interfaces/pipeline-runner-capability.d.ts.map +1 -0
- package/dist/interfaces/pipeline-runner.d.ts +18 -2
- package/dist/interfaces/pipeline-runner.d.ts.map +1 -1
- package/dist/interfaces/platform.d.ts +1 -1
- package/dist/interfaces/platform.d.ts.map +1 -1
- package/dist/interfaces/queryable.d.ts +26 -0
- package/dist/interfaces/queryable.d.ts.map +1 -0
- package/dist/interfaces/raw-tensor-engine.d.ts +16 -0
- package/dist/interfaces/raw-tensor-engine.d.ts.map +1 -0
- package/dist/interfaces/readiness.d.ts +101 -0
- package/dist/interfaces/readiness.d.ts.map +1 -0
- package/dist/interfaces/repl.d.ts +1 -1
- package/dist/interfaces/restreamer.d.ts +3 -3
- package/dist/interfaces/scoped-token.d.ts +1 -21
- package/dist/interfaces/scoped-token.d.ts.map +1 -1
- package/dist/interfaces/server-analysis.d.ts +30 -87
- package/dist/interfaces/server-analysis.d.ts.map +1 -1
- package/dist/interfaces/storage-location.d.ts +120 -0
- package/dist/interfaces/storage-location.d.ts.map +1 -0
- package/dist/interfaces/storage.d.ts +124 -50
- package/dist/interfaces/storage.d.ts.map +1 -1
- package/dist/interfaces/stream-broker.d.ts +285 -17
- package/dist/interfaces/stream-broker.d.ts.map +1 -1
- package/dist/interfaces/webrtc-provider.d.ts +24 -0
- package/dist/interfaces/webrtc-provider.d.ts.map +1 -1
- package/dist/node.d.ts +6 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +481 -0
- package/dist/node.js.map +1 -0
- package/dist/node.mjs +443 -0
- package/dist/node.mjs.map +1 -0
- package/dist/readiness/index.d.ts +3 -0
- package/dist/readiness/index.d.ts.map +1 -0
- package/dist/readiness/readiness-registry.d.ts +183 -0
- package/dist/readiness/readiness-registry.d.ts.map +1 -0
- package/dist/schemas/auth-records.d.ts +81 -0
- package/dist/schemas/auth-records.d.ts.map +1 -0
- package/dist/storage/filesystem-storage-provider.d.ts +37 -0
- package/dist/storage/filesystem-storage-provider.d.ts.map +1 -0
- package/dist/types/agent-pipeline-settings.d.ts +94 -0
- package/dist/types/agent-pipeline-settings.d.ts.map +1 -0
- package/dist/types/camera-pipeline.d.ts +58 -0
- package/dist/types/camera-pipeline.d.ts.map +1 -0
- package/dist/types/detection.d.ts +195 -38
- package/dist/types/detection.d.ts.map +1 -1
- package/dist/types/device-type.d.ts +4 -0
- package/dist/types/device-type.d.ts.map +1 -1
- package/dist/types/engine-output.d.ts +24 -0
- package/dist/types/engine-output.d.ts.map +1 -0
- package/dist/types/io.d.ts +57 -3
- package/dist/types/io.d.ts.map +1 -1
- package/dist/types/models.d.ts +3 -1
- package/dist/types/models.d.ts.map +1 -1
- package/dist/types/pipeline-schema.d.ts +15 -72
- package/dist/types/pipeline-schema.d.ts.map +1 -1
- package/dist/types/pipeline-step.d.ts +201 -0
- package/dist/types/pipeline-step.d.ts.map +1 -0
- package/dist/types/pipeline.d.ts +24 -1
- package/dist/types/pipeline.d.ts.map +1 -1
- package/dist/utils/element-config-store.d.ts +29 -0
- package/dist/utils/element-config-store.d.ts.map +1 -0
- package/dist/utils/err-msg.d.ts +7 -0
- package/dist/utils/err-msg.d.ts.map +1 -0
- package/dist/utils/json-safe.d.ts +33 -0
- package/dist/utils/json-safe.d.ts.map +1 -0
- package/dist/utils/mask-url.d.ts +10 -0
- package/dist/utils/mask-url.d.ts.map +1 -0
- package/dist/utils/ring-buffer.d.ts +16 -0
- package/dist/utils/ring-buffer.d.ts.map +1 -0
- package/dist/utils/run-inference-step.d.ts +26 -0
- package/dist/utils/run-inference-step.d.ts.map +1 -0
- package/dist/utils/runtime-mapping.d.ts +88 -0
- package/dist/utils/runtime-mapping.d.ts.map +1 -0
- package/dist/utils/zone-rule-eval.d.ts +47 -0
- package/dist/utils/zone-rule-eval.d.ts.map +1 -0
- package/package.json +11 -2
- package/dist/__tests__/addon-capability-provider.test.d.ts +0 -2
- package/dist/__tests__/addon-capability-provider.test.d.ts.map +0 -1
- package/dist/__tests__/addon-declaration.test.d.ts +0 -2
- package/dist/__tests__/addon-declaration.test.d.ts.map +0 -1
- package/dist/__tests__/capability.test.d.ts +0 -2
- package/dist/__tests__/capability.test.d.ts.map +0 -1
- package/dist/interfaces/addon-i18n.d.ts +0 -41
- package/dist/interfaces/addon-i18n.d.ts.map +0 -1
- package/dist/interfaces/classifier.d.ts +0 -8
- package/dist/interfaces/classifier.d.ts.map +0 -1
- package/dist/interfaces/cropper.d.ts +0 -8
- package/dist/interfaces/cropper.d.ts.map +0 -1
- package/dist/interfaces/detector.d.ts +0 -8
- package/dist/interfaces/detector.d.ts.map +0 -1
- package/dist/interfaces/device-capabilities/accessory.d.ts +0 -14
- package/dist/interfaces/device-capabilities/accessory.d.ts.map +0 -1
- package/dist/interfaces/device-capabilities/audio-detector.d.ts +0 -12
- package/dist/interfaces/device-capabilities/audio-detector.d.ts.map +0 -1
- package/dist/interfaces/device-capabilities/doorbell.d.ts +0 -10
- package/dist/interfaces/device-capabilities/doorbell.d.ts.map +0 -1
- package/dist/interfaces/device-capabilities/events.d.ts +0 -47
- package/dist/interfaces/device-capabilities/events.d.ts.map +0 -1
- package/dist/interfaces/device-capabilities/motion-sensor.d.ts +0 -7
- package/dist/interfaces/device-capabilities/motion-sensor.d.ts.map +0 -1
- package/dist/interfaces/device-capabilities/native-detection.d.ts +0 -14
- package/dist/interfaces/device-capabilities/native-detection.d.ts.map +0 -1
- package/dist/interfaces/device-capabilities/object-detector.d.ts +0 -59
- package/dist/interfaces/device-capabilities/object-detector.d.ts.map +0 -1
- package/dist/interfaces/device-capabilities/pan-tilt-zoom.d.ts +0 -29
- package/dist/interfaces/device-capabilities/pan-tilt-zoom.d.ts.map +0 -1
- package/dist/interfaces/device-capabilities/recording.d.ts +0 -18
- package/dist/interfaces/device-capabilities/recording.d.ts.map +0 -1
- package/dist/interfaces/device-capabilities/siren.d.ts +0 -8
- package/dist/interfaces/device-capabilities/siren.d.ts.map +0 -1
- package/dist/interfaces/device-capabilities/status-light.d.ts +0 -7
- package/dist/interfaces/device-capabilities/status-light.d.ts.map +0 -1
- package/dist/interfaces/device-capabilities/switch.d.ts +0 -8
- package/dist/interfaces/device-capabilities/switch.d.ts.map +0 -1
- package/dist/interfaces/device-capabilities/two-way-audio.d.ts +0 -8
- package/dist/interfaces/device-capabilities/two-way-audio.d.ts.map +0 -1
- package/dist/interfaces/device-capability.d.ts +0 -14
- package/dist/interfaces/device-capability.d.ts.map +0 -1
- package/dist/interfaces/model-catalog.d.ts +0 -25
- package/dist/interfaces/model-catalog.d.ts.map +0 -1
- package/dist/interfaces/refiner.d.ts +0 -8
- package/dist/interfaces/refiner.d.ts.map +0 -1
- package/dist/interfaces/repositories.d.ts +0 -20
- package/dist/interfaces/repositories.d.ts.map +0 -1
- package/dist/interfaces/scene-intelligence.d.ts +0 -21
- package/dist/interfaces/scene-intelligence.d.ts.map +0 -1
- package/dist/interfaces/storage-backend.d.ts +0 -27
- package/dist/interfaces/storage-backend.d.ts.map +0 -1
- package/dist/interfaces/worker-protocol.d.ts +0 -110
- package/dist/interfaces/worker-protocol.d.ts.map +0 -1
- package/dist/schemas/system-settings-schemas.d.ts +0 -27
- package/dist/schemas/system-settings-schemas.d.ts.map +0 -1
- package/dist/types/benchmark.d.ts +0 -112
- package/dist/types/benchmark.d.ts.map +0 -1
- package/dist/types/zones.d.ts +0 -48
- package/dist/types/zones.d.ts.map +0 -1
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { DeviceConfig } from './device-config.js';
|
|
3
|
+
import type { IDeviceRuntimeState } from './device-runtime-state.js';
|
|
4
|
+
import type { DeviceType, DeviceFeature, DeviceRole } from './device-type.js';
|
|
5
|
+
import type { DeviceContext } from './device-context.js';
|
|
6
|
+
import type { IDevice } from './device.js';
|
|
7
|
+
import type { ConfigUISchemaWithValues } from '../interfaces/config-ui.js';
|
|
8
|
+
import type { CapabilityDefinition, InferRuntimeState } from '../capabilities/capability-definition.js';
|
|
9
|
+
import { type DeviceLocalState } from '../generated/device-local-state.js';
|
|
10
|
+
export declare abstract class BaseDevice<T extends z.ZodObject<z.core.$ZodLooseShape> = z.ZodObject<z.ZodRawShape>> implements IDevice {
|
|
11
|
+
readonly id: number;
|
|
12
|
+
readonly stableId: string;
|
|
13
|
+
readonly type: DeviceType;
|
|
14
|
+
readonly name: string;
|
|
15
|
+
readonly parentDeviceId: number | null;
|
|
16
|
+
readonly role?: DeviceRole;
|
|
17
|
+
/**
|
|
18
|
+
* Cap-keyed runtime-state slice is the single source of truth for
|
|
19
|
+
* `online`. Both getter and setter proxy to the slice — drivers can
|
|
20
|
+
* write `this.online = true` ergonomically, and the cap event fires
|
|
21
|
+
* automatically through the runtime-state writer. `markOnline()` is
|
|
22
|
+
* kept as the explicit method form mandated by `IDevice`.
|
|
23
|
+
*/
|
|
24
|
+
get online(): boolean;
|
|
25
|
+
set online(value: boolean);
|
|
26
|
+
/**
|
|
27
|
+
* Generic per-cap runtime-state namespace. One entry per cap with
|
|
28
|
+
* `runtimeState:` declared, auto-generated by codegen — see
|
|
29
|
+
* `device-local-state.ts`. Drivers access via:
|
|
30
|
+
*
|
|
31
|
+
* `this.state.battery.sleeping = true` // patches the battery slice
|
|
32
|
+
* `const pct = this.state.battery.percentage` // reads the battery slice
|
|
33
|
+
* `this.state.deviceStatus.online = true` // mirrors `markOnline(true)`
|
|
34
|
+
*
|
|
35
|
+
* Adding a new cap with `runtimeState:` automatically extends this
|
|
36
|
+
* namespace — drivers don't have to declare proxies. Reads return
|
|
37
|
+
* `undefined` when the slice hasn't been seeded; writes patch via
|
|
38
|
+
* `runtimeState.patchCapState` and validate against the cap's schema
|
|
39
|
+
* (so partial writes need the slice to be seeded with the required
|
|
40
|
+
* fields first — drivers do this on cap registration).
|
|
41
|
+
*
|
|
42
|
+
* For caps not exposed in `DeviceLocalState`, drivers can build their
|
|
43
|
+
* own typed proxy via `this.sliceProxy(cap)`.
|
|
44
|
+
*/
|
|
45
|
+
get state(): DeviceLocalState;
|
|
46
|
+
private _stateProxyCache?;
|
|
47
|
+
abstract readonly features: readonly DeviceFeature[];
|
|
48
|
+
readonly config: DeviceConfig<T>;
|
|
49
|
+
/**
|
|
50
|
+
* Per-device runtime state, cap-keyed. Always installed — slices
|
|
51
|
+
* for individual caps materialise as those caps register their
|
|
52
|
+
* native providers (`ctx.registerNativeCap`). The cap's own
|
|
53
|
+
* `runtimeState` schema is the source of truth for the slice
|
|
54
|
+
* shape; drivers don't redeclare it, they just write through.
|
|
55
|
+
*
|
|
56
|
+
* Read: `this.runtimeState.getCapState('battery')` →
|
|
57
|
+
* `{percentage, charging, sleeping, lastUpdated}` for any
|
|
58
|
+
* provider that registers `batteryCapability`.
|
|
59
|
+
* Write: `this.runtimeState.setCapState('battery', { … })`.
|
|
60
|
+
*
|
|
61
|
+
* Cross-process consumers reach this state through the
|
|
62
|
+
* `deviceState` cap router (or via cap-specific events the driver
|
|
63
|
+
* emits — e.g. `battery.onStatusChanged`). The local handle is
|
|
64
|
+
* accessed in-process by the driver to avoid roundtrips.
|
|
65
|
+
*/
|
|
66
|
+
readonly runtimeState: IDeviceRuntimeState;
|
|
67
|
+
readonly ctx: DeviceContext;
|
|
68
|
+
/**
|
|
69
|
+
* Operator-organisational location label (room / area / zone).
|
|
70
|
+
* Read from `ctx.deviceMeta.location`; mutated via
|
|
71
|
+
* `kernel.devices.setLocation(id, value)`. Free-text — providers
|
|
72
|
+
* don't interpret it; the UI groups devices by this for filters
|
|
73
|
+
* like "show me all cameras in Kitchen". `null` when unset.
|
|
74
|
+
*/
|
|
75
|
+
readonly location: string | null;
|
|
76
|
+
/**
|
|
77
|
+
* Soft-disabled flag. When `true`, the device class is still
|
|
78
|
+
* instantiated and visible in the UI (so the operator can flip
|
|
79
|
+
* back on without re-adding) but lifecycle hooks (publishToBroker,
|
|
80
|
+
* alarm-stream subscribe, …) MUST be gated by the driver to skip
|
|
81
|
+
* work. The `BaseDevice` enforces this by exposing the flag here;
|
|
82
|
+
* it does NOT mutate cap behaviour automatically — drivers consult
|
|
83
|
+
* `this.disabled` at the top of their lifecycle methods. Read from
|
|
84
|
+
* `ctx.deviceMeta.disabled`; mutated via
|
|
85
|
+
* `kernel.devices.setDisabled(id, value)`.
|
|
86
|
+
*/
|
|
87
|
+
readonly disabled: boolean;
|
|
88
|
+
constructor(ctx: DeviceContext, schema: T, options: {
|
|
89
|
+
type: DeviceType;
|
|
90
|
+
/** Optional semantic role within parent — see `DeviceRole`. */
|
|
91
|
+
role?: DeviceRole;
|
|
92
|
+
});
|
|
93
|
+
removeDevice(): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* Set the device's online flag. Called by `BaseDeviceProvider` after
|
|
96
|
+
* aggregating per-profile stream-broker health, or directly by drivers
|
|
97
|
+
* that have provider-side liveness signals (e.g. ONVIF heartbeats,
|
|
98
|
+
* Reolink Baichuan firmware push events). Mirrors the new value into
|
|
99
|
+
* the `device-status` runtime-state slice so cross-process consumers
|
|
100
|
+
* pick it up via the standard cap-state channel. Subclasses can
|
|
101
|
+
* override to gate side effects on the transition.
|
|
102
|
+
*/
|
|
103
|
+
markOnline(online: boolean): void;
|
|
104
|
+
/**
|
|
105
|
+
* Re-publish the device's current `features` array to the persisted
|
|
106
|
+
* meta blob. Drivers call this after a probe finishes when the live
|
|
107
|
+
* `features` getter has gained new flags (e.g. `hasIntercom` flips
|
|
108
|
+
* to true → `DeviceFeature.TwoWayAudio` joins the list).
|
|
109
|
+
*
|
|
110
|
+
* Without this, only the construction-time snapshot is written —
|
|
111
|
+
* `deviceManager.registerDevice` is invoked once per boot, so probe-
|
|
112
|
+
* driven additions don't reach the persisted index until the next
|
|
113
|
+
* server restart, and `getDevice` / `listAll` keep returning the
|
|
114
|
+
* stale list for forked-worker devices (whose live IDevice instance
|
|
115
|
+
* is invisible to the hub registry).
|
|
116
|
+
*
|
|
117
|
+
* Idempotent: re-calling with the same features just no-ops on the
|
|
118
|
+
* persisted meta. Best-effort: lookup or write failures are logged
|
|
119
|
+
* at debug and swallowed — the live `device.features` getter is
|
|
120
|
+
* still authoritative within this process, so callers never block
|
|
121
|
+
* device boot on a meta refresh.
|
|
122
|
+
*/
|
|
123
|
+
protected refreshFeatures(): Promise<void>;
|
|
124
|
+
/**
|
|
125
|
+
* Typed read-through to a cap-keyed runtime-state slice. Drivers
|
|
126
|
+
* call `this.getCapSlice(batteryCapability)` and the return type
|
|
127
|
+
* is inferred from the cap's `runtimeState` Zod schema — no string
|
|
128
|
+
* key, no manual generic. Returns `null` when the slice hasn't
|
|
129
|
+
* been written yet (e.g. driver hasn't seeded battery yet).
|
|
130
|
+
*/
|
|
131
|
+
protected getCapSlice<TCap extends CapabilityDefinition>(cap: TCap): InferRuntimeState<TCap> | null;
|
|
132
|
+
/**
|
|
133
|
+
* Typed writer to a cap-keyed runtime-state slice. Routes through
|
|
134
|
+
* the runtime-state writer (validate → persist → emit cap event).
|
|
135
|
+
* Equivalent to `this.runtimeState.setCapState(cap.name, value)`
|
|
136
|
+
* but with the cap's `runtimeState` schema enforcing the value
|
|
137
|
+
* shape at compile time. Mirrors the symmetry of
|
|
138
|
+
* `getCapSlice` / `setCapSlice` for cross-cap consistency.
|
|
139
|
+
*/
|
|
140
|
+
protected setCapSlice<TCap extends CapabilityDefinition>(cap: TCap, value: InferRuntimeState<TCap> & Record<string, unknown>): void;
|
|
141
|
+
/**
|
|
142
|
+
* Field-level read/write proxy over a cap's runtime-state slice.
|
|
143
|
+
* Drivers that want ergonomic per-field access declare:
|
|
144
|
+
*
|
|
145
|
+
* ```ts
|
|
146
|
+
* protected battery = this.sliceProxy(batteryCapability)
|
|
147
|
+
* // …
|
|
148
|
+
* this.battery.sleeping = true // patches the slice
|
|
149
|
+
* const charging = this.battery.charging // reads the slice
|
|
150
|
+
* ```
|
|
151
|
+
*
|
|
152
|
+
* Reads return `undefined` when the slice hasn't been seeded yet
|
|
153
|
+
* (cap not registered, or seeded but the field is absent). Writes
|
|
154
|
+
* route through `runtimeState.patchCapState` so the cap's `runtimeState`
|
|
155
|
+
* schema validates the merged result and the cap event fires.
|
|
156
|
+
*
|
|
157
|
+
* Pattern is generic — same shape works for `battery`, `device-status`,
|
|
158
|
+
* `motion`, `doorbell`, anything with a `runtimeState:` schema. Drivers
|
|
159
|
+
* declare one proxy per cap they read/write directly.
|
|
160
|
+
*/
|
|
161
|
+
protected sliceProxy<TCap extends CapabilityDefinition>(cap: TCap): InferRuntimeState<TCap>;
|
|
162
|
+
/**
|
|
163
|
+
* Default empty settings UI. Drivers override this to expose an
|
|
164
|
+
* editable form in the device-details page. Returning an empty sections
|
|
165
|
+
* array signals "nothing to contribute" — the aggregator drops the
|
|
166
|
+
* contribution entirely rather than rendering a blank panel.
|
|
167
|
+
*/
|
|
168
|
+
getSettingsUISchema(): ConfigUISchemaWithValues;
|
|
169
|
+
/**
|
|
170
|
+
* Default write path: forward the flat patch directly to storage.
|
|
171
|
+
* Drivers that project a UI shape different from storage (e.g. `RtspCamera`
|
|
172
|
+
* exposing `mainStreamUrl`/`subStreamUrl` over `streams[]`) override this
|
|
173
|
+
* to reshape before `config.setAll`.
|
|
174
|
+
*/
|
|
175
|
+
applySettingsPatch(patch: Record<string, unknown>): Promise<void>;
|
|
176
|
+
/**
|
|
177
|
+
* Phase 3 — populate device-scoped state needed by downstream phases
|
|
178
|
+
* (accessory reconciliation, public `features` array, optional cap
|
|
179
|
+
* registration). Called ONCE per construction, after register but
|
|
180
|
+
* before `getAccessoryChildren()`.
|
|
181
|
+
*
|
|
182
|
+
* Drivers write the `feature-probe` runtime-state slice via
|
|
183
|
+
* `this.runtimeState.setCapState('feature-probe', {...})` — flag bag
|
|
184
|
+
* is open (Reolink writes `hasPtz/hasIntercom`, Hikvision writes
|
|
185
|
+
* `hasSupplementalLight/hasAlarmIo`, etc).
|
|
186
|
+
*
|
|
187
|
+
* Default: no-op (driver had no probe to run).
|
|
188
|
+
*/
|
|
189
|
+
onProbe(): Promise<void>;
|
|
190
|
+
/**
|
|
191
|
+
* Phase 5 — fired after the device + its accessories are registered.
|
|
192
|
+
* Drivers publish streams to the broker, kick off background tasks,
|
|
193
|
+
* or subscribe to lib events that need a fully-registered device id.
|
|
194
|
+
*
|
|
195
|
+
* Default: no-op.
|
|
196
|
+
*
|
|
197
|
+
* RENAMED FROM `onCreated` (which still exists for back-compat in this
|
|
198
|
+
* pass). The new name reflects the post-probe, post-accessory contract.
|
|
199
|
+
*/
|
|
200
|
+
onActivate(): Promise<void>;
|
|
201
|
+
/**
|
|
202
|
+
* Re-run the probe + reconcile accessories + refresh features meta.
|
|
203
|
+
* Drivers call this when device-side state changes (battery cam wakes,
|
|
204
|
+
* firmware update, manual operator trigger).
|
|
205
|
+
*
|
|
206
|
+
* The kernel injects `_kernelReprobe` on registration so this method
|
|
207
|
+
* delegates to the same orchestrator that runs the boot-time phase
|
|
208
|
+
* 3 + 4 sequence. Drivers should NOT override this — they override
|
|
209
|
+
* `onProbe()` instead.
|
|
210
|
+
*/
|
|
211
|
+
reprobe(): Promise<void>;
|
|
212
|
+
/**
|
|
213
|
+
* Kernel-injected callback that runs the full post-probe orchestration
|
|
214
|
+
* (onProbe → registerDevice meta refresh → accessory reconciliation).
|
|
215
|
+
* Set by `device-cap-proxy.register()`. Drivers should not touch this
|
|
216
|
+
* directly — call `reprobe()` instead.
|
|
217
|
+
*/
|
|
218
|
+
_kernelReprobe?: () => Promise<void>;
|
|
219
|
+
/**
|
|
220
|
+
* Declare accessory child devices the kernel should auto-spawn
|
|
221
|
+
* after `onProbe()` resolves. Each spec fully describes one child
|
|
222
|
+
* — stableId suffix (deterministic per kind for restore-safety),
|
|
223
|
+
* meta (type / name / location), config (initial blob the child
|
|
224
|
+
* self-hydrates), and a factory that constructs the concrete
|
|
225
|
+
* class with whatever closure-captured refs it needs (typically
|
|
226
|
+
* `this` for the parent reference).
|
|
227
|
+
*
|
|
228
|
+
* The kernel handles the rest: allocateDeviceId, persistInitialConfig
|
|
229
|
+
* (skipped on restore when the row already exists),
|
|
230
|
+
* persistInitialMeta, createContext, factory invocation, register,
|
|
231
|
+
* and recursive lifecycle (probe + accessories + activate).
|
|
232
|
+
*
|
|
233
|
+
* Implementations should derive children from
|
|
234
|
+
* `this.runtimeState.getCapState('feature-probe')` (post-probe truth).
|
|
235
|
+
* Drivers can use the `getProbeFlags()` helper to read the flag bag
|
|
236
|
+
* with a typed cast.
|
|
237
|
+
*
|
|
238
|
+
* Default: no children.
|
|
239
|
+
*/
|
|
240
|
+
getAccessoryChildren(): readonly AccessoryChildSpec[];
|
|
241
|
+
/**
|
|
242
|
+
* Read the current feature-probe flag bag with a typed cast. Helper
|
|
243
|
+
* for `getAccessoryChildren()` and `features` getters that derive
|
|
244
|
+
* outputs from the probe results.
|
|
245
|
+
*/
|
|
246
|
+
protected getProbeFlags<F extends Record<string, unknown> = Record<string, unknown>>(): F;
|
|
247
|
+
/**
|
|
248
|
+
* Returns true once `onProbe` has completed at least once
|
|
249
|
+
* (`lastProbedAt > 0`). Drivers gate `getAccessoryChildren()` on this
|
|
250
|
+
* to avoid spawning stale accessories on a fresh device whose probe
|
|
251
|
+
* hasn't landed yet.
|
|
252
|
+
*/
|
|
253
|
+
protected hasProbed(): boolean;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Specification for one accessory child a parent device wants the
|
|
257
|
+
* kernel to auto-spawn. Returned from `BaseDevice.getAccessoryChildren()`.
|
|
258
|
+
*/
|
|
259
|
+
export interface AccessoryChildSpec {
|
|
260
|
+
/**
|
|
261
|
+
* Stable suffix appended to the parent's stableId to derive the
|
|
262
|
+
* child's stableId (e.g. `siren` → `${parent.stableId}-siren`).
|
|
263
|
+
* Must be deterministic per (parent, accessory kind) so restore
|
|
264
|
+
* resolves the same numeric id and re-instantiates without
|
|
265
|
+
* orphaning the persisted config.
|
|
266
|
+
*/
|
|
267
|
+
readonly stableIdSuffix: string;
|
|
268
|
+
/** Operator-organisational meta passed to `kernel.devices.create()`'s
|
|
269
|
+
* `initialMeta` arg. The kernel pre-writes the meta row before
|
|
270
|
+
* the child class constructor runs. */
|
|
271
|
+
readonly meta: import('./device-management.js').InitialDeviceMeta;
|
|
272
|
+
/** Initial config blob the child self-hydrates from on first
|
|
273
|
+
* create. Empty `{}` on restore (DB row carries the canonical
|
|
274
|
+
* values) — the kernel detects the existing row and skips the
|
|
275
|
+
* pre-persist step. */
|
|
276
|
+
readonly config: Record<string, unknown>;
|
|
277
|
+
/**
|
|
278
|
+
* Constructor closure — invoked with the kernel-built context
|
|
279
|
+
* after meta + config are persisted. Closures over the parent
|
|
280
|
+
* reference for child classes that need `parent` as a constructor
|
|
281
|
+
* arg (e.g. accessories that share the parent's connection). The
|
|
282
|
+
* returned IDevice is registered + `onCreated`-fired by the
|
|
283
|
+
* kernel.
|
|
284
|
+
*/
|
|
285
|
+
readonly factory: (ctx: DeviceContext) => IDevice;
|
|
286
|
+
}
|
|
287
|
+
//# sourceMappingURL=base-device.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-device.d.ts","sourceRoot":"","sources":["../../src/device/base-device.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { StreamQuality } from '../interfaces/device-capabilities/camera.js';
|
|
2
|
+
import type { IDevice } from './device.js';
|
|
3
|
+
import type { DeviceType } from './device-type.js';
|
|
4
|
+
export interface StreamSourceEntry {
|
|
5
|
+
readonly id: string;
|
|
6
|
+
readonly label: string;
|
|
7
|
+
readonly protocol: 'rtsp' | 'rtmp' | 'annexb' | 'http-mjpeg' | 'webrtc' | 'custom';
|
|
8
|
+
/** Stream URL — required for rtsp, rtmp, http-mjpeg. Not used for annexb/custom. */
|
|
9
|
+
readonly url?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Stream metadata — optional. If omitted, the stream-broker will probe
|
|
12
|
+
* the stream (via ffprobe) on first registration to discover resolution/fps/codec.
|
|
13
|
+
* Providers that already know the metadata (e.g. ONVIF profiles) should provide it
|
|
14
|
+
* to avoid the probe delay.
|
|
15
|
+
*/
|
|
16
|
+
readonly resolution?: {
|
|
17
|
+
readonly width: number;
|
|
18
|
+
readonly height: number;
|
|
19
|
+
};
|
|
20
|
+
readonly fps?: number;
|
|
21
|
+
readonly bitrate?: number;
|
|
22
|
+
readonly codec?: string;
|
|
23
|
+
/** Hint: suggested quality profile. Stream-broker may override after probing. */
|
|
24
|
+
readonly profileHint?: StreamQuality;
|
|
25
|
+
/**
|
|
26
|
+
* Pre-built SDP. Drivers that publish a `pull-rfc4571` source can
|
|
27
|
+
* derive a synthetic SDP from device-side metadata (e.g. Reolink
|
|
28
|
+
* `getStreamMetadata` cmd_id 56 — `videoEncType` + audio config) so
|
|
29
|
+
* the broker's `metadata.sdp` is populated WITHOUT first opening an
|
|
30
|
+
* upstream streaming session. SPS/PPS are intentionally omitted —
|
|
31
|
+
* the lib's `Rfc4571Muxer.sendCachedVideoConfigToClient` primes
|
|
32
|
+
* downstream consumers from in-band keyframe NAL units.
|
|
33
|
+
*
|
|
34
|
+
* Drivers that need full SDP (with parameter sets) still open a real
|
|
35
|
+
* streaming session at publish time — the field stays optional.
|
|
36
|
+
*/
|
|
37
|
+
readonly sdp?: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Camera device interface — extends IDevice with stream source exposure.
|
|
41
|
+
* Every camera MUST implement getStreamSources() to tell the stream-broker
|
|
42
|
+
* how to consume its video feeds. The broker will probe streams that lack
|
|
43
|
+
* metadata (resolution/fps) and assign quality profiles automatically.
|
|
44
|
+
*/
|
|
45
|
+
export interface ICameraDevice extends IDevice {
|
|
46
|
+
readonly type: typeof DeviceType.Camera;
|
|
47
|
+
getStreamSources(): Promise<readonly StreamSourceEntry[]>;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=camera-device.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"camera-device.d.ts","sourceRoot":"","sources":["../../src/device/camera-device.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAA;AAChF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAA;IAClF,oFAAoF;IACpF,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IACzE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,iFAAiF;IACjF,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAA;IACpC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAc,SAAQ,OAAO;IAC5C,QAAQ,CAAC,IAAI,EAAE,OAAO,UAAU,CAAC,MAAM,CAAA;IACvC,gBAAgB,IAAI,OAAO,CAAC,SAAS,iBAAiB,EAAE,CAAC,CAAA;CAC1D"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-device capability binding record. For each capability a device supports,
|
|
3
|
+
* one entry tells consumers which addon+node currently serves it (native or
|
|
4
|
+
* wrapper) and which addon provides the underlying native in case a wrapper is
|
|
5
|
+
* active.
|
|
6
|
+
*/
|
|
7
|
+
export interface DeviceBindingEntry {
|
|
8
|
+
capName: string;
|
|
9
|
+
kind: 'native' | 'wrapped';
|
|
10
|
+
/** Currently-active provider. For kind='native', equal to `nativeAddonId`.
|
|
11
|
+
* For kind='wrapped', the wrapper addon id. */
|
|
12
|
+
providerAddonId: string;
|
|
13
|
+
/** Node where the active provider runs. 'hub' for native; may vary for wrappers. */
|
|
14
|
+
providerNodeId: string;
|
|
15
|
+
/** Always the addon id of the underlying native provider for the device. */
|
|
16
|
+
nativeAddonId: string;
|
|
17
|
+
}
|
|
18
|
+
export interface DeviceBinding {
|
|
19
|
+
/** Numeric device id — matches `IDevice.id`. */
|
|
20
|
+
deviceId: number;
|
|
21
|
+
entries: DeviceBindingEntry[];
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=device-binding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-binding.d.ts","sourceRoot":"","sources":["../../src/device/device-binding.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC1B;oDACgD;IAChD,eAAe,EAAE,MAAM,CAAA;IACvB,oFAAoF;IACpF,cAAc,EAAE,MAAM,CAAA;IACtB,4EAA4E;IAC5E,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,kBAAkB,EAAE,CAAA;CAC9B"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Optional callback invoked when `fromSchema` had to drop one or
|
|
4
|
+
* more persisted fields to recover from a Zod validation failure.
|
|
5
|
+
* Used by `BaseDevice` to surface the action via the device logger.
|
|
6
|
+
*/
|
|
7
|
+
export type ConfigRecoveryListener = (info: {
|
|
8
|
+
droppedKeys: readonly string[];
|
|
9
|
+
issues: readonly z.core.$ZodIssue[];
|
|
10
|
+
}) => void;
|
|
11
|
+
export declare class DeviceConfig<T extends z.ZodObject<z.core.$ZodLooseShape>> {
|
|
12
|
+
readonly schema: T;
|
|
13
|
+
private data;
|
|
14
|
+
private readonly persistFn;
|
|
15
|
+
private constructor();
|
|
16
|
+
/**
|
|
17
|
+
* Build a `DeviceConfig` from a persisted blob, with automatic
|
|
18
|
+
* recovery from schema-validation failures. Boot must never be
|
|
19
|
+
* blocked by stale persisted values: if Zod rejects the blob,
|
|
20
|
+
* we drop every offending top-level field, retry, and persist
|
|
21
|
+
* the cleaned blob so the bad value is healed in the DB on next
|
|
22
|
+
* write. The most common trigger is a tightened range constraint
|
|
23
|
+
* (e.g. `max(100) → max(50)`) on a field that already has an
|
|
24
|
+
* out-of-range value persisted from the previous schema. Without
|
|
25
|
+
* this safety net, the device would fail to instantiate and end
|
|
26
|
+
* up with no caps registered — exactly the failure mode that
|
|
27
|
+
* stranded device 15 when `motionSensitivity: 90` no longer fit
|
|
28
|
+
* the new `1..50` schema.
|
|
29
|
+
*
|
|
30
|
+
* Recovery rules:
|
|
31
|
+
* 1. Try `safeParse(initialData)`. If it succeeds, done.
|
|
32
|
+
* 2. On failure, walk `error.issues`, collect the top-level path
|
|
33
|
+
* of each issue, and drop those keys from `initialData`.
|
|
34
|
+
* 3. Re-run `safeParse`. If the cleaned blob now passes (Zod
|
|
35
|
+
* fills the missing keys with schema defaults / undefined for
|
|
36
|
+
* `.optional()`), persist it via `persist()` so the bad
|
|
37
|
+
* values disappear from the DB, and return the device.
|
|
38
|
+
* 4. If the cleaned blob STILL fails (very rare — would require
|
|
39
|
+
* a non-recoverable required field), fall back to
|
|
40
|
+
* `schema.parse({})` so the device still boots with pure
|
|
41
|
+
* schema defaults. Persist nothing in that path so the next
|
|
42
|
+
* successful `setAll` still writes a coherent blob.
|
|
43
|
+
*/
|
|
44
|
+
static fromSchema<T extends z.ZodObject<z.core.$ZodLooseShape>>(schema: T, persist: (data: z.infer<T>) => Promise<void>, initialData?: Record<string, unknown>, onRecover?: ConfigRecoveryListener): DeviceConfig<T>;
|
|
45
|
+
get values(): z.infer<T>;
|
|
46
|
+
get<K extends keyof z.infer<T>>(key: K): z.infer<T>[K];
|
|
47
|
+
set<K extends keyof z.infer<T>>(key: K, value: z.infer<T>[K]): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Merge an untyped patch onto the current config and persist. Accepts
|
|
50
|
+
* `Record<string, unknown>` because the patch typically comes from the
|
|
51
|
+
* UI form layer (a `ConfigField.key → value` map) where the caller
|
|
52
|
+
* doesn't hold the Zod schema's static type. Runtime validation is
|
|
53
|
+
* authoritative: `this.schema.parse` rejects unknown keys or invalid
|
|
54
|
+
* shapes before touching storage.
|
|
55
|
+
*/
|
|
56
|
+
setAll(partial: Record<string, unknown>): Promise<void>;
|
|
57
|
+
deleteKey<K extends keyof z.infer<T>>(key: K): Promise<void>;
|
|
58
|
+
entries(): Array<{
|
|
59
|
+
key: string;
|
|
60
|
+
schema: z.ZodType;
|
|
61
|
+
value: unknown;
|
|
62
|
+
description?: string;
|
|
63
|
+
}>;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=device-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-config.d.ts","sourceRoot":"","sources":["../../src/device/device-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE;IAC1C,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;IAC9B,MAAM,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAA;CACpC,KAAK,IAAI,CAAA;AAEV,qBAAa,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;IACpE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;IAClB,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqC;IAE/D,OAAO;IAUP;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,EAC5D,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,EAC5C,WAAW,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACzC,SAAS,CAAC,EAAE,sBAAsB,GACjC,YAAY,CAAC,CAAC,CAAC;IAuClB,IAAI,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAEvB;IAED,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAIhD,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlF;;;;;;;OAOG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvD,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlE,OAAO,IAAI,KAAK,CAAC;QACf,GAAG,EAAE,MAAM,CAAA;QACX,MAAM,EAAE,CAAC,CAAC,OAAO,CAAA;QACjB,KAAK,EAAE,OAAO,CAAA;QACd,WAAW,CAAC,EAAE,MAAM,CAAA;KACrB,CAAC;CASH"}
|