@camstack/system 1.2.389 → 1.2.391
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/addon-api-factory.d.ts +30 -30
- package/dist/addon-routes/addon-route-registry.d.ts +31 -31
- package/dist/addon-runner.js +1 -1
- package/dist/addon-runner.mjs +1 -1
- package/dist/addon-utils.d.ts +22 -22
- package/dist/auth/admin-token-manager.d.ts +37 -67
- package/dist/auth/api-key-manager.d.ts +8 -8
- package/dist/auth/auth-audit-log.d.ts +29 -49
- package/dist/auth/auth-manager.d.ts +127 -126
- package/dist/auth/cidr.d.ts +8 -8
- package/dist/auth/external-identity-manager.d.ts +46 -34
- package/dist/auth/jwt-signing-key.d.ts +14 -14
- package/dist/auth/login-session-manager.d.ts +95 -135
- package/dist/auth/parse-record.d.ts +13 -13
- package/dist/auth/scope-matcher.d.ts +7 -7
- package/dist/auth/scoped-token-manager.d.ts +62 -62
- package/dist/auth/token-expiry.d.ts +49 -26
- package/dist/auth/totp-manager.d.ts +48 -48
- package/dist/auth/user-management-internal.d.ts +67 -52
- package/dist/auth/user-manager.d.ts +58 -58
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.d.ts +54 -54
- package/dist/builtins/addon-pages-aggregator/dedupe-pages.d.ts +22 -4
- package/dist/builtins/addon-pages-aggregator/index.d.ts +1 -1
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.d.ts +54 -54
- package/dist/builtins/addon-widgets-aggregator/index.d.ts +1 -1
- package/dist/builtins/alerts/alerts.addon.d.ts +88 -87
- package/dist/builtins/alerts/device-label.d.ts +6 -6
- package/dist/builtins/alerts/index.d.ts +1 -1
- package/dist/builtins/alerts/prune-policy.d.ts +36 -36
- package/dist/builtins/autotrack/autotrack-cameras.d.ts +102 -79
- package/dist/builtins/autotrack/autotrack-config.d.ts +81 -81
- package/dist/builtins/autotrack/autotrack-decision.d.ts +69 -82
- package/dist/builtins/autotrack/autotrack-loop.d.ts +81 -61
- package/dist/builtins/autotrack/autotrack.addon.d.ts +103 -66
- package/dist/builtins/autotrack/frame-error.d.ts +38 -38
- package/dist/builtins/autotrack/frame-measurements.d.ts +79 -79
- package/dist/builtins/autotrack/index.d.ts +2 -2
- package/dist/builtins/autotrack/ptz-mirror.d.ts +46 -17
- package/dist/builtins/autotrack/target-selection.d.ts +33 -47
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.d.ts +270 -269
- package/dist/builtins/backup-orchestrator/cron-helpers.d.ts +17 -17
- package/dist/builtins/backup-orchestrator/destination-policy.d.ts +99 -82
- package/dist/builtins/backup-orchestrator/download-helpers.d.ts +9 -9
- package/dist/builtins/backup-orchestrator/encryption-key-store.d.ts +40 -29
- package/dist/builtins/backup-orchestrator/index.d.ts +2 -2
- package/dist/builtins/backup-orchestrator/manifest-store.d.ts +88 -69
- package/dist/builtins/backup-orchestrator/restore-archive.d.ts +14 -14
- package/dist/builtins/backup-orchestrator/run-queue.d.ts +86 -86
- package/dist/builtins/backup-orchestrator/schedule-store.d.ts +53 -37
- package/dist/builtins/backup-orchestrator/staging-paths.d.ts +23 -23
- package/dist/builtins/backup-orchestrator/write-targets.d.ts +53 -53
- package/dist/builtins/calendars/calendar-color.d.ts +5 -1
- package/dist/builtins/calendars/calendar-prefs-store.d.ts +18 -12
- package/dist/builtins/calendars/calendars.addon.d.ts +16 -11
- package/dist/builtins/calendars/index.d.ts +1 -1
- package/dist/builtins/camera-grid/acquire-retry.d.ts +26 -26
- package/dist/builtins/camera-grid/addon.d.ts +200 -174
- package/dist/builtins/camera-grid/flv-join.d.ts +32 -58
- package/dist/builtins/camera-grid/grid-activity-mirror.d.ts +37 -37
- package/dist/builtins/camera-grid/grid-activity.d.ts +83 -42
- package/dist/builtins/camera-grid/grid-camera-declarations.d.ts +46 -46
- package/dist/builtins/camera-grid/grid-camera-device.d.ts +60 -34
- package/dist/builtins/camera-grid/grid-canvas-derivation.d.ts +50 -15
- package/dist/builtins/camera-grid/grid-canvas-seed.d.ts +96 -46
- package/dist/builtins/camera-grid/grid-canvas.d.ts +74 -74
- package/dist/builtins/camera-grid/grid-child.d.ts +29 -16
- package/dist/builtins/camera-grid/grid-compositor-child.d.ts +2 -2
- package/dist/builtins/camera-grid/grid-compositor-invocation.d.ts +39 -11
- package/dist/builtins/camera-grid/grid-compositor.d.ts +50 -50
- package/dist/builtins/camera-grid/grid-detection-mapping.d.ts +52 -22
- package/dist/builtins/camera-grid/grid-device-settings.d.ts +31 -7
- package/dist/builtins/camera-grid/grid-filter-graph.d.ts +41 -41
- package/dist/builtins/camera-grid/grid-frame-sample.d.ts +45 -19
- package/dist/builtins/camera-grid/grid-instances.d.ts +20 -50
- package/dist/builtins/camera-grid/grid-last-frame-store.d.ts +51 -51
- package/dist/builtins/camera-grid/grid-layout-native-provider.d.ts +30 -4
- package/dist/builtins/camera-grid/grid-plan.d.ts +30 -20
- package/dist/builtins/camera-grid/grid-profiles.d.ts +85 -45
- package/dist/builtins/camera-grid/grid-row-normalization.d.ts +6 -6
- package/dist/builtins/camera-grid/grid-sentry-sources.d.ts +57 -57
- package/dist/builtins/camera-grid/grid-snapshot.d.ts +41 -41
- package/dist/builtins/camera-grid/grid-stream-descriptor.d.ts +49 -21
- package/dist/builtins/camera-grid/grid-stream-invocation.d.ts +37 -22
- package/dist/builtins/camera-grid/grid-stream-relay.d.ts +26 -26
- package/dist/builtins/camera-grid/grid-stream-session.d.ts +123 -93
- package/dist/builtins/camera-grid/grid-tile-feed.d.ts +47 -47
- package/dist/builtins/camera-grid/grid-tile-plan.d.ts +55 -20
- package/dist/builtins/camera-grid/grid-wire-format.d.ts +22 -6
- package/dist/builtins/camera-grid/index.d.ts +44 -44
- package/dist/builtins/camera-grid/silence-analysis.d.ts +31 -14
- package/dist/builtins/composer/claim-gate.d.ts +54 -27
- package/dist/builtins/composer/composed-device-set.d.ts +40 -26
- package/dist/builtins/composer/composed-device.d.ts +39 -17
- package/dist/builtins/composer/composer-apply-waits.d.ts +20 -13
- package/dist/builtins/composer/composer-grafts.d.ts +57 -38
- package/dist/builtins/composer/composer-live-set.d.ts +15 -15
- package/dist/builtins/composer/composer-plan.d.ts +76 -60
- package/dist/builtins/composer/composer-runtime-factory.d.ts +21 -14
- package/dist/builtins/composer/composer-seeds.d.ts +20 -14
- package/dist/builtins/composer/composer-verdict.d.ts +28 -14
- package/dist/builtins/composer/composer.addon.d.ts +23 -9
- package/dist/builtins/composer/composer.d.ts +145 -100
- package/dist/builtins/composer/composition-declarations.d.ts +50 -39
- package/dist/builtins/composer/composition-evaluation.d.ts +38 -22
- package/dist/builtins/composer/composition-runtime.d.ts +178 -125
- package/dist/builtins/composer/composition-target.d.ts +38 -34
- package/dist/builtins/composer/confirmed-seed.d.ts +35 -23
- package/dist/builtins/composer/deadline-timer.d.ts +13 -13
- package/dist/builtins/composer/existing-target.d.ts +90 -73
- package/dist/builtins/composer/field-record.d.ts +26 -19
- package/dist/builtins/composer/graft-host.d.ts +56 -32
- package/dist/builtins/composer/held-claims.d.ts +26 -9
- package/dist/builtins/composer/index.d.ts +1 -1
- package/dist/builtins/composer/own-field-reads.d.ts +26 -15
- package/dist/builtins/composer/owned-fields-target.d.ts +75 -44
- package/dist/builtins/composer/slice-assembler.d.ts +19 -3
- package/dist/builtins/composer/source-readings.d.ts +67 -61
- package/dist/builtins/composer/source-tracker.d.ts +133 -69
- package/dist/builtins/console-logging/console-destination.d.ts +15 -8
- package/dist/builtins/console-logging/console-logging.addon.d.ts +20 -19
- package/dist/builtins/console-logging/index.d.ts +3 -3
- package/dist/builtins/core-blocks/block-package.d.ts +37 -37
- package/dist/builtins/core-blocks/block-settings-store.d.ts +34 -21
- package/dist/builtins/core-blocks/block-supervisor.d.ts +138 -117
- package/dist/builtins/core-blocks/block-type-defs.d.ts +21 -21
- package/dist/builtins/core-blocks/blocks-integration.d.ts +76 -49
- package/dist/builtins/core-blocks/compile-block.d.ts +37 -37
- package/dist/builtins/core-blocks/composition-api.d.ts +38 -24
- package/dist/builtins/core-blocks/composition-peers.d.ts +26 -4
- package/dist/builtins/core-blocks/composition-sources.d.ts +25 -10
- package/dist/builtins/core-blocks/core-block-store.d.ts +109 -109
- package/dist/builtins/core-blocks/core-blocks.addon.d.ts +72 -72
- package/dist/builtins/core-blocks/extract-settings-schema.d.ts +4 -4
- package/dist/builtins/core-blocks/index.d.ts +8 -8
- package/dist/builtins/device-manager/adoption-job-engine.d.ts +141 -98
- package/dist/builtins/device-manager/claimed-status-overlay.d.ts +42 -9
- package/dist/builtins/device-manager/contribution-cache.d.ts +56 -56
- package/dist/builtins/device-manager/day-night-config-schema.d.ts +26 -12
- package/dist/builtins/device-manager/device-aggregation-merge.d.ts +17 -17
- package/dist/builtins/device-manager/device-aggregation.d.ts +277 -254
- package/dist/builtins/device-manager/device-bindings-store.d.ts +232 -220
- package/dist/builtins/device-manager/device-config-contribution.d.ts +29 -29
- package/dist/builtins/device-manager/device-config-secrets.d.ts +32 -13
- package/dist/builtins/device-manager/device-event-propagator.d.ts +22 -22
- package/dist/builtins/device-manager/device-extension-linked-slot.d.ts +17 -17
- package/dist/builtins/device-manager/device-form-secrets.d.ts +14 -14
- package/dist/builtins/device-manager/device-linked-devices.d.ts +159 -98
- package/dist/builtins/device-manager/device-manager.addon.d.ts +223 -197
- package/dist/builtins/device-manager/device-meta-actions.d.ts +306 -305
- package/dist/builtins/device-manager/device-meta-store.d.ts +100 -90
- package/dist/builtins/device-manager/device-meta-types.d.ts +250 -241
- package/dist/builtins/device-manager/device-online-fallback.d.ts +30 -30
- package/dist/builtins/device-manager/device-projection.d.ts +53 -67
- package/dist/builtins/device-manager/device-provider-context.d.ts +109 -94
- package/dist/builtins/device-manager/device-queries.d.ts +63 -63
- package/dist/builtins/device-manager/device-row-store.d.ts +417 -365
- package/dist/builtins/device-manager/device-source-activation.d.ts +91 -49
- package/dist/builtins/device-manager/device-state-claim-views.d.ts +76 -61
- package/dist/builtins/device-manager/device-state-claims.d.ts +53 -30
- package/dist/builtins/device-manager/device-state-mirror.d.ts +256 -264
- package/dist/builtins/device-manager/device-sync-resolvers.d.ts +25 -25
- package/dist/builtins/device-manager/field-claims-index.d.ts +85 -58
- package/dist/builtins/device-manager/field-ownership.d.ts +54 -36
- package/dist/builtins/device-manager/fleet-read-census.d.ts +99 -61
- package/dist/builtins/device-manager/image-settings-config-schema.d.ts +18 -8
- package/dist/builtins/device-manager/index.d.ts +2 -2
- package/dist/builtins/device-manager/linked-devices-manual-backfill.d.ts +20 -9
- package/dist/builtins/device-manager/location-alignment.d.ts +46 -46
- package/dist/builtins/device-manager/migrate-device.d.ts +178 -101
- package/dist/builtins/device-manager/migrate-guard.d.ts +66 -34
- package/dist/builtins/device-manager/migrate-hardware-state.d.ts +59 -59
- package/dist/builtins/device-manager/migrate-reload.d.ts +42 -4
- package/dist/builtins/device-manager/migration-refused.d.ts +20 -20
- package/dist/builtins/device-manager/mirror-row-writer.d.ts +205 -179
- package/dist/builtins/device-manager/recording-onboard-config-schema.d.ts +56 -32
- package/dist/builtins/device-manager/removal-fence.d.ts +48 -48
- package/dist/builtins/device-manager/runtime-state-persist-gate.d.ts +54 -26
- package/dist/builtins/device-manager/secret-config-paths.d.ts +17 -17
- package/dist/builtins/device-manager/stale-wrapper-activations.d.ts +52 -25
- package/dist/builtins/device-manager/write-lock.d.ts +13 -13
- package/dist/builtins/hub-forwarder/hub-forwarder-destination.d.ts +41 -41
- package/dist/builtins/hub-forwarder/hub-forwarder.addon.d.ts +13 -12
- package/dist/builtins/hub-forwarder/index.d.ts +3 -3
- package/dist/builtins/keychain/index.d.ts +1 -1
- package/dist/builtins/keychain/key-sources.d.ts +19 -19
- package/dist/builtins/keychain/keychain-crypto.d.ts +4 -4
- package/dist/builtins/keychain/keychain-reset-trigger.d.ts +13 -13
- package/dist/builtins/keychain/keychain-service.d.ts +128 -128
- package/dist/builtins/keychain/keychain-store.d.ts +96 -87
- package/dist/builtins/keychain/keychain-usage.d.ts +13 -2
- package/dist/builtins/keychain/keychain.addon.d.ts +31 -6
- package/dist/builtins/keychain/platform-key-source.d.ts +15 -15
- package/dist/builtins/keychain/system-held-secrets.d.ts +17 -4
- package/dist/builtins/liveness-monitor/index.d.ts +2 -2
- package/dist/builtins/liveness-monitor/liveness-checks.d.ts +73 -52
- package/dist/builtins/liveness-monitor/liveness-monitor.addon.d.ts +57 -36
- package/dist/builtins/local-auth/admin-account-boot.d.ts +14 -14
- package/dist/builtins/local-auth/auth-config-reader.d.ts +34 -17
- package/dist/builtins/local-auth/auth-schema.d.ts +92 -69
- package/dist/builtins/local-auth/index.d.ts +1 -1
- package/dist/builtins/local-auth/jwt-signing-key-keeper.d.ts +22 -22
- package/dist/builtins/local-auth/local-auth.addon.d.ts +41 -40
- package/dist/builtins/local-auth/oauth-grants.d.ts +57 -57
- package/dist/builtins/local-auth/oauth-session-manager.d.ts +62 -62
- package/dist/builtins/local-network/address-book.d.ts +61 -36
- package/dist/builtins/local-network/index.d.ts +2 -2
- package/dist/builtins/local-network/ipv6-lan.d.ts +12 -17
- package/dist/builtins/local-network/local-hostname.d.ts +10 -10
- package/dist/builtins/local-network/local-network.addon.d.ts +259 -258
- package/dist/builtins/loki-logging/index.d.ts +4 -4
- package/dist/builtins/loki-logging/loki-destination.d.ts +113 -87
- package/dist/builtins/loki-logging/loki-logging.addon.d.ts +61 -42
- package/dist/builtins/loki-logging/loki-payload.d.ts +82 -39
- package/dist/builtins/loki-logging/retire-enabled-flag.d.ts +37 -12
- package/dist/builtins/native-metrics/cgroup-memory.d.ts +206 -159
- package/dist/builtins/native-metrics/cgroup-pids.d.ts +138 -91
- package/dist/builtins/native-metrics/container-memory-series.d.ts +212 -178
- package/dist/builtins/native-metrics/gpu-probe.d.ts +9 -9
- package/dist/builtins/native-metrics/index.d.ts +2 -2
- package/dist/builtins/native-metrics/load-series-config.d.ts +29 -57
- package/dist/builtins/native-metrics/load-series-reader.d.ts +52 -26
- package/dist/builtins/native-metrics/load-series-store.d.ts +237 -176
- package/dist/builtins/native-metrics/native-metrics-provider.d.ts +43 -43
- package/dist/builtins/native-metrics/native-metrics.addon.d.ts +230 -230
- package/dist/builtins/native-metrics/node-load-ring.d.ts +196 -196
- package/dist/builtins/native-metrics/proc-process-table.d.ts +12 -12
- package/dist/builtins/native-metrics/process-classification.d.ts +95 -36
- package/dist/builtins/native-metrics/thread-cpu-sampler.d.ts +95 -95
- package/dist/builtins/platform-probe/coral-accelerators.d.ts +17 -17
- package/dist/builtins/platform-probe/index.d.ts +38 -30
- package/dist/builtins/platform-probe/inference-config-resolver.d.ts +27 -27
- package/dist/builtins/platform-probe/intel-accelerators.d.ts +8 -8
- package/dist/builtins/platform-probe/intel-npu.d.ts +30 -30
- package/dist/builtins/platform-probe/platform-scorer.d.ts +35 -35
- package/dist/builtins/platform-probe/runtime-packages.d.ts +3 -3
- package/dist/builtins/remote-access-orchestrator/enabled-providers-reconcile.d.ts +87 -87
- package/dist/builtins/remote-access-orchestrator/index.d.ts +1 -1
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.d.ts +66 -35
- package/dist/builtins/shared/device-state-changed.d.ts +9 -9
- package/dist/builtins/shared/settle-sources.d.ts +16 -16
- package/dist/builtins/snapshot/index.d.ts +2 -2
- package/dist/builtins/snapshot/snapshot-cache.d.ts +92 -92
- package/dist/builtins/snapshot/snapshot-coalescing.d.ts +108 -108
- package/dist/builtins/snapshot/snapshot-courtesy.d.ts +48 -48
- package/dist/builtins/snapshot/snapshot-durable-store.d.ts +32 -32
- package/dist/builtins/snapshot/snapshot-fatigue.d.ts +34 -34
- package/dist/builtins/snapshot/snapshot-grab-pick.d.ts +14 -14
- package/dist/builtins/snapshot/snapshot-link-url.d.ts +49 -49
- package/dist/builtins/snapshot/snapshot-media-handler.d.ts +97 -97
- package/dist/builtins/snapshot/snapshot-resize.d.ts +64 -103
- package/dist/builtins/snapshot/snapshot.addon.d.ts +569 -568
- package/dist/builtins/sqlite-storage/analyze-stats.d.ts +73 -29
- package/dist/builtins/sqlite-storage/config-store.d.ts +6 -6
- package/dist/builtins/sqlite-storage/device-store.d.ts +16 -16
- package/dist/builtins/sqlite-storage/filesystem-browse-provider.d.ts +23 -23
- package/dist/builtins/sqlite-storage/filesystem-storage-provider.d.ts +79 -79
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.d.ts +27 -26
- package/dist/builtins/sqlite-storage/filter-compiler.d.ts +107 -107
- package/dist/builtins/sqlite-storage/index.d.ts +12 -12
- package/dist/builtins/sqlite-storage/integration-registry.d.ts +37 -37
- package/dist/builtins/sqlite-storage/path-guard.d.ts +5 -5
- package/dist/builtins/sqlite-storage/prefix-range.d.ts +44 -44
- package/dist/builtins/sqlite-storage/query-bounds.d.ts +100 -106
- package/dist/builtins/sqlite-storage/query-profiler.d.ts +217 -217
- package/dist/builtins/sqlite-storage/retired-collections.d.ts +124 -55
- package/dist/builtins/sqlite-storage/retired-settings-keys.d.ts +239 -189
- package/dist/builtins/sqlite-storage/shm-lock-canary.d.ts +41 -41
- package/dist/builtins/sqlite-storage/sqlite-pragmas.d.ts +162 -162
- package/dist/builtins/sqlite-storage/sqlite-settings-backend.d.ts +458 -458
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.d.ts +59 -58
- package/dist/builtins/sqlite-storage/sqlite-snapshot-protocol.d.ts +37 -32
- package/dist/builtins/sqlite-storage/sqlite-snapshot-worker.d.ts +19 -19
- package/dist/builtins/sqlite-storage/sqlite-snapshotter.d.ts +76 -76
- package/dist/builtins/sqlite-storage/statement-shape.d.ts +54 -54
- package/dist/builtins/sqlite-storage/table-sizes.d.ts +71 -71
- package/dist/builtins/sqlite-storage/vector-index-shared.d.ts +63 -54
- package/dist/builtins/sqlite-storage/vector-index-vec.d.ts +133 -96
- package/dist/builtins/sqlite-storage/wal-checkpoint-policy.d.ts +161 -161
- package/dist/builtins/sqlite-storage/wal-checkpointer.d.ts +60 -60
- package/dist/builtins/sqlite-storage/wal-maintenance.d.ts +94 -94
- package/dist/builtins/storage-orchestrator/access-guards.d.ts +37 -26
- package/dist/builtins/storage-orchestrator/data-store-dispatch.d.ts +33 -18
- package/dist/builtins/storage-orchestrator/drain-ratchet.d.ts +85 -85
- package/dist/builtins/storage-orchestrator/drain-state-store.d.ts +20 -10
- package/dist/builtins/storage-orchestrator/hub-settings-forward.d.ts +113 -53
- package/dist/builtins/storage-orchestrator/index.d.ts +7 -7
- package/dist/builtins/storage-orchestrator/location-occupancy-slice.d.ts +64 -40
- package/dist/builtins/storage-orchestrator/location-occupancy.d.ts +14 -14
- package/dist/builtins/storage-orchestrator/location-protection.d.ts +13 -13
- package/dist/builtins/storage-orchestrator/location-repoint-move.d.ts +44 -44
- package/dist/builtins/storage-orchestrator/location-root-collision.d.ts +61 -25
- package/dist/builtins/storage-orchestrator/location-secrets.d.ts +99 -58
- package/dist/builtins/storage-orchestrator/location-store.d.ts +56 -47
- package/dist/builtins/storage-orchestrator/location-volume-capacity.d.ts +37 -37
- package/dist/builtins/storage-orchestrator/provider-discovery.d.ts +20 -6
- package/dist/builtins/storage-orchestrator/storage-cleanup-coordinator.d.ts +51 -51
- package/dist/builtins/storage-orchestrator/storage-migration-coordinator.d.ts +224 -224
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.d.ts +292 -292
- package/dist/builtins/storage-orchestrator/storage-orchestrator.service.d.ts +431 -450
- package/dist/builtins/storage-orchestrator/storage-pressure-manager.d.ts +104 -104
- package/dist/builtins/system-backup/backup-encryption.d.ts +60 -23
- package/dist/builtins/system-backup/system-backup.service.d.ts +240 -240
- package/dist/builtins/system-config/cluster-secret-keeper.d.ts +54 -34
- package/dist/builtins/system-config/index.d.ts +2 -2
- package/dist/builtins/system-config/mesh-actions.d.ts +2 -30
- package/dist/builtins/system-config/system-config.addon.d.ts +57 -93
- package/dist/builtins/system-config/system-config.addon.js +46 -33
- package/dist/builtins/system-config/system-config.addon.mjs +46 -33
- package/dist/builtins/winston-logging/index.d.ts +3 -3
- package/dist/builtins/winston-logging/winston-destination.d.ts +15 -15
- package/dist/builtins/winston-logging/winston-logging.addon.d.ts +14 -13
- package/dist/{child-cap-dispatch-nURMuVTX.js → child-cap-dispatch-Bnr8brru.js} +18 -0
- package/dist/{child-cap-dispatch-B1gyE35b.mjs → child-cap-dispatch-mHO_6r0G.mjs} +1 -1
- package/dist/download/hosted-model-revisions.d.ts +8 -8
- package/dist/download/model-download-service.d.ts +32 -32
- package/dist/download/model-downloader.d.ts +88 -88
- package/dist/events/event-bus.d.ts +6 -6
- package/dist/events/system-event-bus.d.ts +11 -11
- package/dist/feature/feature-manager.d.ts +6 -6
- package/dist/http/asset-compression.d.ts +35 -73
- package/dist/http/authenticated-file-server.d.ts +32 -32
- package/dist/http/data-plane-registry.d.ts +49 -39
- package/dist/http/file-data-plane.d.ts +14 -14
- package/dist/http/lan-http-bind.d.ts +24 -13
- package/dist/http/reverse-proxy.d.ts +36 -24
- package/dist/index.d.ts +137 -137
- package/dist/index.js +4 -3
- package/dist/index.mjs +2 -4
- package/dist/kernel/addon-class-resolver.d.ts +1 -1
- package/dist/kernel/addon-engine-manager.d.ts +20 -20
- package/dist/kernel/addon-health-monitor.d.ts +151 -151
- package/dist/kernel/addon-installer.d.ts +609 -609
- package/dist/kernel/addon-loader.d.ts +133 -133
- package/dist/kernel/addon-manifest.d.ts +118 -118
- package/dist/kernel/addon-residue.d.ts +28 -32
- package/dist/kernel/array-buffer-census.d.ts +84 -88
- package/dist/kernel/bootstrap-config.d.ts +3 -3
- package/dist/kernel/cap-router-builder.d.ts +145 -101
- package/dist/kernel/capability-handle.d.ts +41 -41
- package/dist/kernel/capability-registry.d.ts +588 -576
- package/dist/kernel/config-manager.d.ts +199 -199
- package/dist/kernel/config-schema.d.ts +132 -128
- package/dist/kernel/custom-action-registry.d.ts +25 -25
- package/dist/kernel/deps/addon-deps-manager.d.ts +17 -17
- package/dist/kernel/deps/closure-dedupe.d.ts +76 -76
- package/dist/kernel/deps/ensure-addon-natives.d.ts +34 -34
- package/dist/kernel/deps/ensure-native-prebuilds.d.ts +25 -25
- package/dist/kernel/deps/manifest-native-deps.d.ts +38 -38
- package/dist/kernel/deps/manifest-python-deps.d.ts +18 -18
- package/dist/kernel/deps/manifest-system-deps.d.ts +13 -13
- package/dist/kernel/deps/npm-command.d.ts +45 -45
- package/dist/kernel/deps/system-package-allowlist.d.ts +9 -9
- package/dist/kernel/deps/system-package-broker.d.ts +20 -20
- package/dist/kernel/deps/system-package-client.d.ts +3 -3
- package/dist/kernel/device-registry.d.ts +27 -27
- package/dist/kernel/event-loop-stall-monitor.d.ts +33 -33
- package/dist/kernel/event-plane-report.d.ts +174 -174
- package/dist/kernel/fs-utils.d.ts +70 -70
- package/dist/kernel/gc-census.d.ts +119 -119
- package/dist/kernel/heap-spaces.d.ts +87 -87
- package/dist/kernel/heap-watch.d.ts +706 -706
- package/dist/kernel/host-externals.d.ts +8 -8
- package/dist/kernel/hwaccel/hwaccel-resolver.d.ts +27 -27
- package/dist/kernel/index.d.ts +115 -113
- package/dist/kernel/inference/inference-resolver.d.ts +13 -13
- package/dist/kernel/infra-capabilities.d.ts +7 -7
- package/dist/kernel/isolated-builtin-phase.d.ts +42 -42
- package/dist/kernel/lifecycle/job-journal.d.ts +17 -17
- package/dist/kernel/lifecycle/lifecycle-job-engine.d.ts +99 -99
- package/dist/kernel/lifecycle/staging-area.d.ts +22 -22
- package/dist/kernel/moleculer/addon-context-factory.d.ts +90 -89
- package/dist/kernel/moleculer/addon-data-plane-facility.d.ts +12 -12
- package/dist/kernel/moleculer/addon-deploy-source.d.ts +11 -11
- package/dist/kernel/moleculer/addon-peer-bytes-facility.d.ts +18 -18
- package/dist/kernel/moleculer/addon-service-factory.d.ts +41 -41
- package/dist/kernel/moleculer/agent-mesh-authenticator.d.ts +60 -33
- package/dist/kernel/moleculer/agent-ui-unlock.d.ts +30 -30
- package/dist/kernel/moleculer/broker-factory.d.ts +61 -61
- package/dist/kernel/moleculer/cap-usage-registry.d.ts +108 -153
- package/dist/kernel/moleculer/capabilities-access.d.ts +19 -19
- package/dist/kernel/moleculer/child-addon-call-dispatch.d.ts +43 -43
- package/dist/kernel/moleculer/child-cap-descriptors.d.ts +26 -26
- package/dist/kernel/moleculer/child-cap-dispatch.d.ts +52 -52
- package/dist/kernel/moleculer/children-batch-loader.d.ts +86 -34
- package/dist/kernel/moleculer/cluster-secret.d.ts +19 -19
- package/dist/kernel/moleculer/core-cap-service.d.ts +53 -53
- package/dist/kernel/moleculer/crash-supervisor.d.ts +39 -39
- package/dist/kernel/moleculer/device-cap-proxy.d.ts +51 -51
- package/dist/kernel/moleculer/device-event-ring.d.ts +117 -75
- package/dist/kernel/moleculer/event-bus-core.d.ts +171 -159
- package/dist/kernel/moleculer/event-bus.d.ts +73 -73
- package/dist/kernel/moleculer/hub-log-forwarder.d.ts +30 -30
- package/dist/kernel/moleculer/hub-service.d.ts +42 -42
- package/dist/kernel/moleculer/init-watchdog.d.ts +49 -49
- package/dist/kernel/moleculer/mesh-access-middleware.d.ts +36 -21
- package/dist/kernel/moleculer/mesh-auth-mode.d.ts +33 -39
- package/dist/kernel/moleculer/mesh-authenticator.d.ts +58 -58
- package/dist/kernel/moleculer/mesh-auto-enforce.d.ts +38 -18
- package/dist/kernel/moleculer/mesh-join-client.d.ts +67 -45
- package/dist/kernel/moleculer/mesh-join-proof.d.ts +8 -8
- package/dist/kernel/moleculer/mesh-mtls/constants.d.ts +1 -1
- package/dist/kernel/moleculer/mesh-mtls/index.d.ts +10 -10
- package/dist/kernel/moleculer/mesh-mtls/mesh-ca-keeper.d.ts +43 -38
- package/dist/kernel/moleculer/mesh-mtls/mesh-ca.d.ts +29 -20
- package/dist/kernel/moleculer/mesh-mtls/mesh-clear-port.d.ts +32 -32
- package/dist/kernel/moleculer/mesh-mtls/mesh-crl.d.ts +11 -11
- package/dist/kernel/moleculer/mesh-mtls/mesh-enroll.d.ts +19 -16
- package/dist/kernel/moleculer/mesh-mtls/mesh-join-token.d.ts +40 -40
- package/dist/kernel/moleculer/mesh-mtls/mesh-tls-enabler.d.ts +5 -1
- package/dist/kernel/moleculer/mesh-mtls/tls-tcp-transporter.d.ts +131 -130
- package/dist/kernel/moleculer/mesh-queue-report.d.ts +39 -39
- package/dist/kernel/moleculer/node-registry.d.ts +120 -120
- package/dist/kernel/moleculer/process-context.d.ts +2 -2
- package/dist/kernel/moleculer/process-service.d.ts +168 -168
- package/dist/kernel/moleculer/provider-registry.d.ts +9 -9
- package/dist/kernel/moleculer/readiness-context.d.ts +58 -58
- package/dist/kernel/moleculer/readiness-service.d.ts +31 -16
- package/dist/kernel/moleculer/register-framework-resolver.d.ts +6 -6
- package/dist/kernel/moleculer/register-node-client.d.ts +34 -27
- package/dist/kernel/moleculer/remote-logger.d.ts +29 -29
- package/dist/kernel/moleculer/resilient-cap-call.d.ts +21 -21
- package/dist/kernel/moleculer/runner-native-allocator.d.ts +95 -95
- package/dist/kernel/moleculer/runner-process-group.d.ts +57 -57
- package/dist/kernel/moleculer/runtime-state-load.d.ts +21 -11
- package/dist/kernel/moleculer/settings-read-guard.d.ts +39 -39
- package/dist/kernel/moleculer/stream-probe-service.d.ts +25 -6
- package/dist/kernel/moleculer/trpc-links.d.ts +203 -203
- package/dist/kernel/moleculer/typed-array-serde.d.ts +9 -20
- package/dist/kernel/moleculer/worker-device-restore.d.ts +8 -8
- package/dist/kernel/outbound-queue-watch.d.ts +74 -74
- package/dist/kernel/process-cpu-census.d.ts +55 -55
- package/dist/kernel/provider-kind-drift.d.ts +17 -8
- package/dist/kernel/restart-coordinator.d.ts +71 -71
- package/dist/kernel/settings-door-view.d.ts +36 -25
- package/dist/kernel/settings-read-error.d.ts +29 -31
- package/dist/kernel/settings-view-types.d.ts +100 -95
- package/dist/kernel/socket-plane-report.d.ts +214 -153
- package/dist/kernel/status-overlay.d.ts +31 -11
- package/dist/kernel/storage-location-registry.d.ts +50 -50
- package/dist/kernel/store-settings-view.d.ts +13 -13
- package/dist/kernel/system-settings-mirror.d.ts +40 -28
- package/dist/kernel/system-settings-policy.d.ts +15 -34
- package/dist/kernel/transport/cap-action-census.d.ts +183 -183
- package/dist/kernel/transport/cap-action-name.d.ts +84 -84
- package/dist/kernel/transport/cap-child-index.d.ts +41 -41
- package/dist/kernel/transport/cap-route-resolver.d.ts +237 -212
- package/dist/kernel/transport/cap-route.d.ts +139 -139
- package/dist/kernel/transport/cap-routing-hints.d.ts +37 -37
- package/dist/kernel/transport/child-cap-protocol.d.ts +245 -245
- package/dist/kernel/transport/claimed-get-status.d.ts +30 -6
- package/dist/kernel/transport/create-local-transport.d.ts +5 -5
- package/dist/kernel/transport/frame-codec.d.ts +109 -109
- package/dist/kernel/transport/hub-cap-forward.d.ts +81 -59
- package/dist/kernel/transport/index.d.ts +36 -36
- package/dist/kernel/transport/local-child-client.d.ts +184 -184
- package/dist/kernel/transport/local-child-registry.d.ts +592 -592
- package/dist/kernel/transport/local-endpoint-path.d.ts +4 -4
- package/dist/kernel/transport/local-transport.d.ts +92 -92
- package/dist/kernel/transport/parent-unowned-call.d.ts +266 -237
- package/dist/kernel/transport/peer-answered-error.d.ts +14 -14
- package/dist/kernel/transport/socket-channel.d.ts +110 -110
- package/dist/kernel/transport/socket-traffic.d.ts +96 -96
- package/dist/kernel/transport/uds-event-bridge.d.ts +77 -50
- package/dist/kernel/transport/uds-event-bus.d.ts +75 -26
- package/dist/kernel/transport/uds-local-transport.d.ts +14 -14
- package/dist/kernel/transport/uds-log-ingest.d.ts +38 -23
- package/dist/kernel/transport/uds-logger.d.ts +33 -33
- package/dist/kernel/utils/ring-buffer.d.ts +12 -12
- package/dist/kernel/workspace-detect.d.ts +7 -7
- package/dist/lifecycle/lifecycle-state-machine.d.ts +24 -24
- package/dist/logging/formatter.d.ts +52 -25
- package/dist/logging/log-manager.d.ts +133 -133
- package/dist/logging/log-redactor.d.ts +22 -1
- package/dist/logging/log-ring-buffer.d.ts +57 -57
- package/dist/logging/logging-gate.d.ts +69 -25
- package/dist/logging/logging-gate.singleton.d.ts +12 -1
- package/dist/logging/partitioned-log-buffer.d.ts +161 -161
- package/dist/logging/scoped-logger.d.ts +14 -14
- package/dist/network/network-quality.d.ts +8 -8
- package/dist/notification/notification-service.d.ts +37 -37
- package/dist/notification/toast-service.d.ts +18 -18
- package/dist/pipeline/engine-manager-resolver.d.ts +12 -12
- package/dist/pipeline/pipeline-runner.d.ts +6 -6
- package/dist/pipeline/pipeline-validator.d.ts +8 -8
- package/dist/process/proc-stat.d.ts +51 -51
- package/dist/process/resource-monitor.d.ts +19 -19
- package/dist/python/python-env-manager.d.ts +10 -10
- package/dist/repl/interfaces.d.ts +21 -21
- package/dist/repl/repl-engine.d.ts +6 -6
- package/dist/storage/fs-storage-backend.d.ts +35 -35
- package/dist/storage/storage-location-manager.d.ts +21 -21
- package/dist/storage/storage-manager.d.ts +68 -68
- package/dist/tls/boot-tls.d.ts +24 -24
- package/dist/tls/cert-evaluation.d.ts +25 -25
- package/dist/tls/cert-identity.d.ts +39 -39
- package/dist/tls/cert-issue.d.ts +37 -17
- package/dist/tls/cert-manager.d.ts +86 -84
- package/dist/tls/https-listener.d.ts +16 -16
- package/dist/tls/index.d.ts +8 -8
- package/dist/tls/tls-actions.d.ts +18 -18
- package/dist/tls/tls-status.d.ts +15 -15
- package/dist/tls/uploaded-cert.d.ts +9 -9
- package/package.json +9 -3
|
@@ -1,61 +1,61 @@
|
|
|
1
|
-
import { PersistedDeviceMeta } from
|
|
2
|
-
import { ProviderContext } from
|
|
3
|
-
import { DeviceRow } from
|
|
1
|
+
import type { PersistedDeviceMeta } from "./device-meta-types.js";
|
|
2
|
+
import type { ProviderContext } from "./device-provider-context.js";
|
|
3
|
+
import type { DeviceRow } from "./device-row-store.js";
|
|
4
4
|
/** Addon-store key of the one-shot marker. A number: the highest backfill
|
|
5
|
-
|
|
5
|
+
* version that COMPLETED (every planned write landed). */
|
|
6
6
|
export declare const LOCATION_BACKFILL_MARKER_KEY = "locationBackfillVersion";
|
|
7
7
|
export declare const LOCATION_BACKFILL_VERSION = 1;
|
|
8
8
|
/** One planned repair: write `location` onto row `id`, inherited from the
|
|
9
|
-
|
|
9
|
+
* nearest located ancestor `ancestorId`. */
|
|
10
10
|
export interface NullLocationFill {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
readonly id: number;
|
|
12
|
+
readonly location: string;
|
|
13
|
+
readonly ancestorId: number;
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
16
|
+
* Pure planning core of the backfill: every row whose own `location` is null
|
|
17
|
+
* and whose parent chain reaches a located CONTAINER ancestor gets that
|
|
18
|
+
* ancestor's location. Nearest located ancestor wins — and DECIDES: a located
|
|
19
|
+
* non-container between the row and a located container blocks the fill.
|
|
20
|
+
*
|
|
21
|
+
* The container-only predicate is an operator decision (2026-09-05), the
|
|
22
|
+
* automated mirror of the structural-children rule: a non-container parent's
|
|
23
|
+
* subtree (a camera and its siren/floodlight) is already fully reachable
|
|
24
|
+
* through `resolveLinkedDeviceIds`' children-of-self rule, so a location buys
|
|
25
|
+
* its own camera nothing — and COSTS cross-camera noise, verified against the
|
|
26
|
+
* real fleet shape with the real resolver: a camera child that gains the room
|
|
27
|
+
* matches every OTHER camera in that room individually (`ids.add`; only a
|
|
28
|
+
* Container parent routes through `expand`), so camera B lists camera A's
|
|
29
|
+
* siren as a companion. A container's descendants, by contrast, are reachable
|
|
30
|
+
* by location ONLY through their own columns — the container itself is never
|
|
31
|
+
* a link — which is the whole reason the cascade writes them (D252). Note the
|
|
32
|
+
* asymmetry with the OPERATOR's cascade, which has no type predicate (D329):
|
|
33
|
+
* an operator re-saving a camera accepts that trade explicitly; an automated
|
|
34
|
+
* pass must not manufacture it.
|
|
35
|
+
*/
|
|
36
36
|
export declare function planNullLocationFills(rows: readonly PersistedDeviceMeta[]): readonly NullLocationFill[];
|
|
37
37
|
/** The one row-store method the async ancestor walk needs. */
|
|
38
38
|
export interface RowReader {
|
|
39
|
-
|
|
39
|
+
get(deviceId: number): Promise<DeviceRow | null>;
|
|
40
40
|
}
|
|
41
41
|
/**
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
42
|
+
* Async ancestor walk for `registerDevice`: the nearest located CONTAINER
|
|
43
|
+
* ancestor's location, read row by row (registration has no fleet snapshot in
|
|
44
|
+
* hand and must not pay for one). Same container-only predicate as
|
|
45
|
+
* {@link planNullLocationFills}, and for the same reason — a child adopted
|
|
46
|
+
* under a located CAMERA is already linked structurally to that camera, and a
|
|
47
|
+
* location on its own column would make it a companion of every other camera
|
|
48
|
+
* in the room. The nearest located ancestor decides: a located non-container
|
|
49
|
+
* on the way up answers null. Cycle-guarded like the pure walk; a missing row
|
|
50
|
+
* — a parent registered out of order — answers null, and the parent's own
|
|
51
|
+
* later registration pulls the location down instead (see `registerDevice`).
|
|
52
|
+
*/
|
|
53
53
|
export declare function resolveInheritedLocation(rows: RowReader, parentDeviceId: number | null): Promise<string | null>;
|
|
54
54
|
/**
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
55
|
+
* Boot entrypoint: the one-shot repair (marker-guarded) plus the every-boot
|
|
56
|
+
* detection. `bootRows` is the fleet listing the addon's warm-boot pass
|
|
57
|
+
* already paid for — reused for the detection so a clean boot costs no extra
|
|
58
|
+
* fleet read; ignored by the repair, which takes its own listing UNDER the
|
|
59
|
+
* meta write lock (the snapshot must not predate the lock).
|
|
60
|
+
*/
|
|
61
61
|
export declare function runLocationBackfillAtBoot(pctx: ProviderContext, bootRows?: readonly DeviceRow[]): Promise<void>;
|
|
@@ -1,115 +1,192 @@
|
|
|
1
|
-
import { CameraSwitchId } from '@camstack/types';
|
|
2
1
|
/**
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
2
|
+
* Replacing a camera: the new hardware becomes the device the system knows.
|
|
3
|
+
*
|
|
4
|
+
* ## Why the NUMBER moves instead of the work
|
|
5
|
+
*
|
|
6
|
+
* Everything general about a camera is keyed on the numeric `deviceId` and on
|
|
7
|
+
* nothing else. The recording path on disk is `<deviceId>/profile/…`; the hour
|
|
8
|
+
* ledger, the media store and zone ownership carry `deviceId` without one
|
|
9
|
+
* `stableId` between them; and all four ecosystem exports — Home Assistant,
|
|
10
|
+
* Alexa, HomeKit, Google — key on it. Moving that work would mean renaming
|
|
11
|
+
* directories, rewriting a durable ledger and re-establishing four external
|
|
12
|
+
* integrations. Moving the number is two rows ({@link DeviceRowStore.swapIds}).
|
|
13
|
+
*
|
|
14
|
+
* ## The rule the swap must obey
|
|
15
|
+
*
|
|
16
|
+
* **Role-scoped state follows the NUMBER. Hardware-scoped state follows the
|
|
17
|
+
* DEVICE.** Tracks, faces, scenes, recordings, notification mutes — the work —
|
|
18
|
+
* key on the number and stay put. State that DESCRIBES the box — the driver
|
|
19
|
+
* config (host/credentials/`deviceCache`), the runtime-state slices, the
|
|
20
|
+
* broker's probed snapshots, profile assignment and derived streams — must
|
|
21
|
+
* move with it or be re-derived from the hardware now wearing the number
|
|
22
|
+
* (`swapHardwareState`, `forgetStreamState`). Getting this wrong put two live
|
|
23
|
+
* cameras in each other's identity on 2026-09-01: the new camera was dialled
|
|
24
|
+
* at the old one's dead address forever, and a derived feeder defined against
|
|
25
|
+
* the old profile layout respawned every ten seconds.
|
|
26
|
+
*
|
|
27
|
+
* ## The one thing this must never do
|
|
28
|
+
*
|
|
29
|
+
* Report a function as switched off when it could not ask.
|
|
30
|
+
*
|
|
31
|
+
* The source camera in a replacement is, characteristically, BROKEN — that is
|
|
32
|
+
* why it is being replaced. Two of the eight switches (`privacy-mask` and
|
|
33
|
+
* `device-audio`) write the CAMERA rather than the server: the camera holds the
|
|
34
|
+
* fact and every read is a read-through, so on a dead camera they cannot be
|
|
35
|
+
* written at all. A step that swallowed those failures would announce a device
|
|
36
|
+
* put safely to sleep while it was still able to produce data, and the caller
|
|
37
|
+
* would have no way to tell.
|
|
38
|
+
*
|
|
39
|
+
* So every switch gets an outcome of its own — {@link SwitchOutcome} — and
|
|
40
|
+
* `unreachable` is a first-class answer, distinct both from `off` and from
|
|
41
|
+
* `not-offered` (a switch this camera never had). The migration proceeds; the
|
|
42
|
+
* report says what was actually done.
|
|
43
|
+
*
|
|
44
|
+
* ## Every switch write is BOUNDED — and the bound is honest
|
|
45
|
+
*
|
|
46
|
+
* A write that does not answer within {@link SWITCH_WRITE_TIMEOUT_MS} is
|
|
47
|
+
* reported `unreachable` and the migration moves on. Measured on 2026-09-01: a
|
|
48
|
+
* single unanswered write burned the transport's 60 s default, three phases
|
|
49
|
+
* burned three minutes, and the CALLER's own timeout expired first — which is
|
|
50
|
+
* how one migration became two (see `migrate-guard.ts`). Two rules the bound
|
|
51
|
+
* must not break: a timed-out write is NEVER folded into `off`/`on` (a camera
|
|
52
|
+
* we could not ask was not silenced), and the underlying write may still land
|
|
53
|
+
* after the bound — which is safe, because every switch authority is
|
|
54
|
+
* idempotent under a duplicate write of the same value.
|
|
55
|
+
*
|
|
56
|
+
* ## Order
|
|
57
|
+
*
|
|
58
|
+
* Claims first (a device under customization is refused before anything is
|
|
59
|
+
* touched — D663), then functions down on BOTH devices, then the swap, then
|
|
60
|
+
* functions up on the target — the device now answering on the inherited
|
|
61
|
+
* number. Down-first is not
|
|
62
|
+
* cosmetic: between the two writes a runner still holding the old number would
|
|
63
|
+
* otherwise write frames, events or notifications against the wrong camera.
|
|
64
|
+
*
|
|
65
|
+
* ## After the disable phase, a failure is one of two things
|
|
66
|
+
*
|
|
67
|
+
* - **Refused, nothing moved** ({@link MigrationRefusedError}: a `swapIds`
|
|
68
|
+
* precheck, a failed mirror drain, a claim that landed during the start).
|
|
69
|
+
* Both cameras are put back EXACTLY as they were — the switch states read
|
|
70
|
+
* before the disable phase — never left
|
|
71
|
+
* dark for a migration that did not happen.
|
|
72
|
+
* - **Failed while moving** (any other throw from `swapIds`, any throw from
|
|
73
|
+
* `swapHardwareState`). The devices may wear each other's identity, so they
|
|
74
|
+
* stay OFF and each gets an ERROR line naming what moved and that an
|
|
75
|
+
* operator must intervene. Switching them on would run pipelines against
|
|
76
|
+
* crossed identities.
|
|
77
|
+
*/
|
|
78
|
+
import type { CameraSwitchId } from "@camstack/types";
|
|
79
|
+
/**
|
|
80
|
+
* Upper bound for ONE switch write. Generous against a live camera (a real
|
|
81
|
+
* write is sub-second; the camera-plane pair is a few seconds of HTTP) and
|
|
82
|
+
* small against the alternative: the 60 s transport default that let three
|
|
83
|
+
* phases burn three minutes on 2026-09-01.
|
|
84
|
+
*/
|
|
85
|
+
export declare const SWITCH_WRITE_TIMEOUT_MS = 15e3;
|
|
9
86
|
/** What actually happened to one switch on one device. */
|
|
10
|
-
export type SwitchOutcome =
|
|
87
|
+
export type SwitchOutcome = "off" | "on" | "not-offered" | "unreachable";
|
|
11
88
|
export interface SwitchReport {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
89
|
+
readonly deviceId: number;
|
|
90
|
+
readonly switchId: CameraSwitchId;
|
|
91
|
+
readonly outcome: SwitchOutcome;
|
|
92
|
+
/** The refusal, verbatim, when the outcome is not the requested one. */
|
|
93
|
+
readonly detail?: string;
|
|
17
94
|
}
|
|
18
95
|
export interface MigrateDeviceResult {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
96
|
+
readonly sourceId: number;
|
|
97
|
+
readonly targetId: number;
|
|
98
|
+
/** Every switch write attempted, in order, on both devices. */
|
|
99
|
+
readonly switches: readonly SwitchReport[];
|
|
100
|
+
/**
|
|
101
|
+
* Switches that could NOT be turned off on the source. Empty is the only
|
|
102
|
+
* value that means "the old camera is fully quiet"; a caller that renders
|
|
103
|
+
* only a success flag is not entitled to one.
|
|
104
|
+
*/
|
|
105
|
+
readonly sourceStillLive: readonly CameraSwitchId[];
|
|
106
|
+
readonly swapped: boolean;
|
|
30
107
|
}
|
|
31
108
|
/**
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
109
|
+
* A camera's switch states as read before the disable phase: every switch the
|
|
110
|
+
* camera OFFERS, with its state. A switch it does not offer is absent.
|
|
111
|
+
*/
|
|
35
112
|
export type SwitchStates = ReadonlyMap<CameraSwitchId, boolean>;
|
|
36
113
|
/** Severity of a per-device migration line. */
|
|
37
|
-
export type MigrationLogLevel =
|
|
114
|
+
export type MigrationLogLevel = "warn" | "error";
|
|
38
115
|
export interface MigrateDeviceDeps {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
116
|
+
/** `pipelineOrchestrator.setCameraSwitch`, through `ctx.api`. */
|
|
117
|
+
readonly setSwitch: (deviceId: number, switchId: CameraSwitchId, enabled: boolean) => Promise<void>;
|
|
118
|
+
/** `DeviceRowStore.swapIds`, already under the meta write lock. */
|
|
119
|
+
readonly swapIds: (a: number, b: number) => Promise<void>;
|
|
120
|
+
/**
|
|
121
|
+
* Swap the HARDWARE-scoped per-device state along with the rows: the driver
|
|
122
|
+
* config blob (host/port/credentials/`deviceCache` — everything the
|
|
123
|
+
* provider's schema owns) and the runtime-state blob. Role-scoped keys stay
|
|
124
|
+
* with the number. See `migrate-hardware-state.ts` for the rule, and for
|
|
125
|
+
* the incident where the rows swapped and the configs did not — the two
|
|
126
|
+
* devices came out wearing each other's identity.
|
|
127
|
+
*
|
|
128
|
+
* A failure here THROWS, and the migration throws with it: rows swapped
|
|
129
|
+
* with configs unswapped is exactly that incident, and it must never be
|
|
130
|
+
* reported as a success.
|
|
131
|
+
*/
|
|
132
|
+
readonly swapHardwareState: (sourceId: number, targetId: number) => Promise<void>;
|
|
133
|
+
/**
|
|
134
|
+
* Refuse a migration over a device under customization
|
|
135
|
+
* (`migrate-hardware-state.ts::assertNoFieldClaims`, D663): a field claim
|
|
136
|
+
* names the NUMBER while its owner names the STABLE ID the swap moves, so no
|
|
137
|
+
* order of operations keeps both right. THROWS to refuse. Asked FIRST —
|
|
138
|
+
* before any switch is flipped, so a refused migration leaves both cameras
|
|
139
|
+
* exactly as they were.
|
|
140
|
+
*/
|
|
141
|
+
readonly assertNoFieldClaims: (sourceId: number, targetId: number) => Promise<void>;
|
|
142
|
+
/**
|
|
143
|
+
* Tell the stream broker the hardware behind this number is gone
|
|
144
|
+
* (`streamBroker.forgetDeviceHardware`): every DERIVED stream definition is
|
|
145
|
+
* DELETED, the profile-slot assignment entry is purged, and the probed
|
|
146
|
+
* snapshots and RTSP token rows of the old streams go with it.
|
|
147
|
+
*
|
|
148
|
+
* Measured on the live hub after replacing a Hikvision with a Reolink on id
|
|
149
|
+
* 618: the assignment still said `mid → native:slot-3`, a raw slot only the
|
|
150
|
+
* Hikvision had, and the `derived:Mid to low` feeder — defined against the
|
|
151
|
+
* old profile layout — respawned every ten seconds forever (observed at
|
|
152
|
+
* attempt 2732). The recorder reported `no profile attached for device
|
|
153
|
+
* 618`, live view answered `No broker for stream "618/adaptive"`, and no
|
|
154
|
+
* line named the stale assignment as the cause.
|
|
155
|
+
*
|
|
156
|
+
* Forgetting is deliberately what this does, rather than guessing a
|
|
157
|
+
* mapping: the catalog is the authority on which stream is which, and it
|
|
158
|
+
* belongs to the camera that is now there. An RPC, never an event — a
|
|
159
|
+
* dropped event (D8) would leave the feeder respawning forever.
|
|
160
|
+
*/
|
|
161
|
+
readonly forgetStreamState: (deviceId: number) => Promise<void>;
|
|
162
|
+
readonly log: (message: string, meta: Record<string, unknown>) => void;
|
|
163
|
+
/**
|
|
164
|
+
* The state of every switch the camera offers, read BEFORE the disable
|
|
165
|
+
* phase, so a migration refused before any row moved can put each switch
|
|
166
|
+
* back exactly as it was (D663 5b ruling I-1) — never blanket-on, which
|
|
167
|
+
* would undo a function the operator had switched off (D62). Bounded like a
|
|
168
|
+
* switch write; a read that fails is reported and the rollback falls back to
|
|
169
|
+
* switching that camera on.
|
|
170
|
+
*/
|
|
171
|
+
readonly readSwitches: (deviceId: number) => Promise<SwitchStates>;
|
|
172
|
+
/** One line about ONE device, tagged with its id (D391). */
|
|
173
|
+
readonly logDevice: (level: MigrationLogLevel, deviceId: number, message: string, meta: Record<string, unknown>) => void;
|
|
174
|
+
/**
|
|
175
|
+
* Override for {@link SWITCH_WRITE_TIMEOUT_MS}, for the specs. A write that
|
|
176
|
+
* outlives the bound is reported `unreachable` — never `off`/`on` — and may
|
|
177
|
+
* still land later, which every switch authority tolerates (a duplicate
|
|
178
|
+
* write of the same value is a no-op at all eight of them).
|
|
179
|
+
*/
|
|
180
|
+
readonly switchTimeoutMs?: number;
|
|
104
181
|
}
|
|
105
182
|
/**
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
183
|
+
* Put both cameras to sleep, exchange their identities, wake the target.
|
|
184
|
+
*
|
|
185
|
+
* Throws only if the swap itself fails — a switch that could not be written is
|
|
186
|
+
* reported, not raised, because refusing to migrate a camera whose old hardware
|
|
187
|
+
* is unreachable would refuse the exact case this exists for.
|
|
188
|
+
*/
|
|
112
189
|
export declare function migrateDevice(deps: MigrateDeviceDeps, input: {
|
|
113
|
-
|
|
114
|
-
|
|
190
|
+
readonly sourceId: number;
|
|
191
|
+
readonly targetId: number;
|
|
115
192
|
}): Promise<MigrateDeviceResult>;
|
|
@@ -1,46 +1,78 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* A migration must survive its own retry.
|
|
3
|
+
*
|
|
4
|
+
* On 2026-09-01 `migrateDevice` ran for ~3.5 minutes under the transport's 60 s
|
|
5
|
+
* default timeout. The caller died with `UND_ERR_HEADERS_TIMEOUT`, something
|
|
6
|
+
* retried the call, and a SECOND full cycle ran. Two swaps cancel out — the
|
|
7
|
+
* operator saw "nothing happened" with no error — and had the timing differed
|
|
8
|
+
* by a lock's width, two live cameras would have kept each other's identity
|
|
9
|
+
* with no way to tell. The cap now declares a timeout that covers the real
|
|
10
|
+
* runtime (`device-manager.cap.ts`), but a bound alone only makes the retry
|
|
11
|
+
* rarer; this guard makes it harmless. Two rules:
|
|
12
|
+
*
|
|
13
|
+
* 1. **While a migration involving a device is in flight, a second call
|
|
14
|
+
* touching that device is REFUSED — never queued.** The meta write lock is
|
|
15
|
+
* FIFO, so without this the retry parks politely behind the first run and
|
|
16
|
+
* then re-swaps the moment it finishes. The refusal is loud and names the
|
|
17
|
+
* device; the running migration's report stands.
|
|
18
|
+
* 2. **A repeat of a COMPLETED swap is a no-op returning the original
|
|
19
|
+
* report.** "Did this already run" is answerable from the rows: the swap
|
|
20
|
+
* moves `addonId`/`stableId` between the two numbers, so a completed
|
|
21
|
+
* migration leaves a fingerprint this guard records and compares. Only an
|
|
22
|
+
* exact match replays — same pair, same post-swap identities, within
|
|
23
|
+
* {@link MIGRATION_REPLAY_WINDOW_MS} — anything else is a new operation and
|
|
24
|
+
* runs. The window is what separates a client's automated retry (arrives
|
|
25
|
+
* within the transport timeout envelope) from an operator deliberately
|
|
26
|
+
* swapping the same pair back later: the first must be absorbed, the second
|
|
27
|
+
* must run.
|
|
28
|
+
*
|
|
29
|
+
* In-memory on purpose. The retry that matters arrives at the same hub process
|
|
30
|
+
* that ran the first cycle; a hub restart empties the guard AND ends every
|
|
31
|
+
* client call that could still be retrying against it.
|
|
32
|
+
*/
|
|
33
|
+
import type { MigrateDeviceResult } from "./migrate-device.js";
|
|
2
34
|
/** The addon-facing identity a device row carries — what `swapIds` moves. */
|
|
3
35
|
export interface DeviceIdentity {
|
|
4
|
-
|
|
5
|
-
|
|
36
|
+
readonly addonId: string;
|
|
37
|
+
readonly stableId: string;
|
|
6
38
|
}
|
|
7
39
|
/** What a finished migration left behind, for replay matching. */
|
|
8
40
|
export interface CompletedMigration {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
41
|
+
readonly sourceId: number;
|
|
42
|
+
readonly targetId: number;
|
|
43
|
+
/** Identity the completed swap left at `sourceId` (the pre-swap target's). */
|
|
44
|
+
readonly identityAtSource: DeviceIdentity;
|
|
45
|
+
/** Identity the completed swap left at `targetId` (the pre-swap source's). */
|
|
46
|
+
readonly identityAtTarget: DeviceIdentity;
|
|
47
|
+
readonly result: MigrateDeviceResult;
|
|
16
48
|
}
|
|
17
49
|
/**
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
50
|
+
* How long a completed migration absorbs an identical repeat call. Sized to
|
|
51
|
+
* comfortably cover the cap's own `timeoutMs` (10 min): a retry fired by a
|
|
52
|
+
* client that gave up arrives inside that envelope; a call arriving later is
|
|
53
|
+
* an operator's deliberate new operation and runs.
|
|
54
|
+
*/
|
|
23
55
|
export declare const MIGRATION_REPLAY_WINDOW_MS: number;
|
|
24
56
|
export interface MigrationGuard {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
57
|
+
/** Claim both ids for a run. Throws when either is already in flight. */
|
|
58
|
+
begin(sourceId: number, targetId: number): void;
|
|
59
|
+
/** Release both ids. Always paired with {@link begin} via try/finally. */
|
|
60
|
+
end(sourceId: number, targetId: number): void;
|
|
61
|
+
/**
|
|
62
|
+
* Is a migration involving this device running right now? A per-field claim,
|
|
63
|
+
* patch or release asks before touching the device's row (D663): the row is
|
|
64
|
+
* about to be swapped with another device's, and a claim written into that
|
|
65
|
+
* window would travel with the wrong hardware.
|
|
66
|
+
*/
|
|
67
|
+
isInFlight(deviceId: number): boolean;
|
|
68
|
+
/** Record a completed swap's fingerprint for replay matching. */
|
|
69
|
+
recordCompleted(record: CompletedMigration): void;
|
|
70
|
+
/**
|
|
71
|
+
* The original report, when the call is a repeat of a completed swap: same
|
|
72
|
+
* ordered pair, current row identities equal to the recorded post-swap
|
|
73
|
+
* identities, within the window. `null` means "this is a new operation".
|
|
74
|
+
*/
|
|
75
|
+
matchReplay(sourceId: number, targetId: number, atSource: DeviceIdentity, atTarget: DeviceIdentity): MigrateDeviceResult | null;
|
|
44
76
|
}
|
|
45
77
|
/** One guard per device-manager instance. `now` is injectable for the specs. */
|
|
46
78
|
export declare function createMigrationGuard(now?: () => number): MigrationGuard;
|