@camstack/system 1.2.390 → 1.2.392
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/addon-utils.js +1 -1
- package/dist/addon-utils.mjs +1 -1
- package/dist/amd-accelerators-CEuPFBBK.js +36 -0
- package/dist/amd-accelerators-U_RsoEDd.mjs +35 -0
- package/dist/amd-npu-B-QyyMyF.js +53 -0
- package/dist/amd-npu-Db_SoSuL.mjs +52 -0
- 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/addon-pages-aggregator.addon.js +1 -1
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
- 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/addon-widgets-aggregator.addon.js +1 -1
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
- 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/alerts.addon.js +1 -1
- package/dist/builtins/alerts/alerts.addon.mjs +1 -1
- 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/index.js +1 -1
- package/dist/builtins/autotrack/index.mjs +1 -1
- 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/backup-orchestrator.addon.js +2 -2
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +2 -2
- 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/calendars.addon.js +1 -1
- package/dist/builtins/calendars/calendars.addon.mjs +1 -1
- 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/index.js +1 -1
- package/dist/builtins/camera-grid/index.mjs +1 -1
- 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.addon.js +2 -2
- package/dist/builtins/composer/composer.addon.mjs +2 -2
- 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/console-logging/index.js +1 -1
- package/dist/builtins/console-logging/index.mjs +1 -1
- 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/core-blocks.addon.js +2 -2
- package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
- 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-manager.addon.js +2 -2
- package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
- 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/hub-forwarder/index.js +1 -1
- package/dist/builtins/hub-forwarder/index.mjs +1 -1
- package/dist/builtins/keychain/index.d.ts +1 -1
- package/dist/builtins/keychain/index.js +3 -3
- package/dist/builtins/keychain/index.mjs +3 -3
- 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/liveness-monitor/liveness-monitor.addon.js +1 -1
- package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
- 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/local-auth.addon.js +2 -2
- package/dist/builtins/local-auth/local-auth.addon.mjs +2 -2
- 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/local-network/local-network.addon.js +1 -1
- package/dist/builtins/local-network/local-network.addon.mjs +1 -1
- package/dist/builtins/loki-logging/index.d.ts +4 -4
- package/dist/builtins/loki-logging/index.js +1 -1
- package/dist/builtins/loki-logging/index.mjs +1 -1
- 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/native-metrics.addon.js +1 -1
- package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
- 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/amd-accelerators.d.ts +15 -0
- package/dist/builtins/platform-probe/amd-npu.d.ts +29 -0
- 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/index.js +59 -22
- package/dist/builtins/platform-probe/index.mjs +59 -22
- 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/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
- 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/index.js +1 -1
- package/dist/builtins/snapshot/index.mjs +1 -1
- 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/filesystem-storage.addon.js +1 -1
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
- 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-settings.addon.js +0 -0
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
- 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.addon.js +1 -1
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
- 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 -100
- package/dist/builtins/system-config/system-config.addon.js +39 -35
- package/dist/builtins/system-config/system-config.addon.mjs +320 -316
- package/dist/builtins/winston-logging/index.d.ts +3 -3
- package/dist/builtins/winston-logging/index.js +1 -1
- package/dist/builtins/winston-logging/index.mjs +1 -1
- 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-Nx-lrlHR.js} +19 -1
- package/dist/{child-cap-dispatch-B1gyE35b.mjs → child-cap-dispatch-x-onDDiV.mjs} +2 -2
- package/dist/{composition-sources-wdAxs-uY.js → composition-sources-LUJsW0AQ.js} +1 -1
- package/dist/{composition-sources-xqhm2Ygr.mjs → composition-sources-R8TskGSV.mjs} +1 -1
- package/dist/{constants-Ca-Sgcl8.js → constants-D4lxxip7.js} +1 -1
- package/dist/{constants-D5z4EwY8.mjs → constants-DMvAcbbP.mjs} +1 -1
- package/dist/{dist-8LQ4lDEB.js → dist-XTkzsnz-.js} +35 -1
- package/dist/{dist-Biqn3TEn.mjs → dist-byg8IP4Q.mjs} +35 -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/{event-loop-stall-monitor-CNj73d4D.js → event-loop-stall-monitor-DPFghEFw.js} +1 -1
- package/dist/{event-loop-stall-monitor-BtK_0Pjc.mjs → event-loop-stall-monitor-TG8UcdY2.mjs} +1 -1
- 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 +9 -8
- package/dist/index.mjs +7 -9
- package/dist/{jwt-signing-key-DxV2ucvJ.js → jwt-signing-key-CD87HrHH.js} +1 -1
- package/dist/{jwt-signing-key-SnDgvVUQ.mjs → jwt-signing-key-DNBxSN5p.mjs} +1 -1
- 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/{restore-archive-D4cmLoNe.mjs → restore-archive-Bmmmyp1M.mjs} +81 -81
- package/dist/{restore-archive-Do_Yu5rC.js → restore-archive-bvYTsnvp.js} +1 -1
- package/dist/{retired-settings-keys-BsgVxh8-.mjs → retired-settings-keys-R9CBo2lY.mjs} +1 -1
- package/dist/{retired-settings-keys-Cyn3OD0K.js → retired-settings-keys-V0yq5Bm6.js} +1 -1
- 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,396 +1,448 @@
|
|
|
1
|
-
import { ChildLayout, CollectionColumn, CollectionIndex, DeviceDisplayOverride, IScopedLogger, MutationFilter, QueryFilter, SettingsRecord, SettingsStoreClient } from '@camstack/types';
|
|
2
|
-
import { RetiredRowStore } from '../sqlite-storage/retired-settings-keys.js';
|
|
3
|
-
import { PersistedDeviceMeta } from './device-meta-types.js';
|
|
4
|
-
import { FleetReadCensus } from './fleet-read-census.js';
|
|
5
1
|
/**
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
2
|
+
* `device-manager:devices` — ONE ROW PER DEVICE.
|
|
3
|
+
*
|
|
4
|
+
* ## What this replaces
|
|
5
|
+
*
|
|
6
|
+
* The device-manager used to keep its whole fleet in three JSON blobs on the
|
|
7
|
+
* addon-settings row set (`deviceMeta`, `deviceMetadata`, `deviceIndex`).
|
|
8
|
+
* Measured on the live hub 2026-08-19: 467 KB + 87 KB + 70 KB = 625 KB of the
|
|
9
|
+
* table's 627 KB, and EVERY read of any of them read and `JSON.parse`d all
|
|
10
|
+
* three, synchronously, on hub-main's event loop — `ctx.settings.readAddonStore`
|
|
11
|
+
* lands in `SqliteSettingsBackend.getAllAddon`, which is prefix-scoped to the
|
|
12
|
+
* addon but not to the key. A V8 profile of that boot had hub-main's JS thread
|
|
13
|
+
* 99.9% busy for 76 s with 64% of it inside `getAllAddon`, ~89% of that entered
|
|
14
|
+
* through the meta store, and every runner's first store read queued behind it.
|
|
15
|
+
*
|
|
16
|
+
* Writing was worse than reading. `ConfigManager.createSettingsView`'s
|
|
17
|
+
* `writeAddonStore` is `setAllAddon(addonId, { ...existing, ...patch })`, and
|
|
18
|
+
* `setAllAddon` DELETEs and re-INSERTs every row of the addon — so renaming one
|
|
19
|
+
* camera rewrote 625 KB.
|
|
20
|
+
*
|
|
21
|
+
* A row per device makes the per-device question a primary-key lookup and the
|
|
22
|
+
* per-device write a single-row upsert touching only the columns named.
|
|
23
|
+
*
|
|
24
|
+
* ## Why `deviceIndex` has no column and no collection
|
|
25
|
+
*
|
|
26
|
+
* `deviceIndex` was `Record<addonId, stableId[]>` — pure derivation: `addonId`
|
|
27
|
+
* and `stableId` are fields of every row, so "this addon's devices" is
|
|
28
|
+
* `where: { addonId }`. It carried exactly one bit that is NOT derivable:
|
|
29
|
+
* membership meant "`registerDevice` has run at least once", which is how
|
|
30
|
+
* `registerDevice` tells a FIRST registration (emit `DeviceRegistered`) from a
|
|
31
|
+
* meta refresh. `allocateDeviceId` writes a row without registering, so row
|
|
32
|
+
* existence alone cannot answer it. That bit is the {@link registered} column,
|
|
33
|
+
* and nothing else of `deviceIndex` survives.
|
|
34
|
+
*
|
|
35
|
+
* ## Why metadata is a column and not a second collection
|
|
36
|
+
*
|
|
37
|
+
* `deviceMetadata` lived in its own blob for ONE reason: a blob write is
|
|
38
|
+
* whole-value, so a lifecycle writer (`registerDevice` / `setName` / …) that
|
|
39
|
+
* had to preserve a `metadata` field would eventually clobber a concurrent
|
|
40
|
+
* `setMetadata`. Single-writer-per-blob was the fix. Column writes have no such
|
|
41
|
+
* problem — `set` names its columns and leaves the rest of the row untouched —
|
|
42
|
+
* so the split has no reason to exist and metadata rides on the device's own
|
|
43
|
+
* row.
|
|
44
|
+
*
|
|
45
|
+
* ## Adding a column later
|
|
46
|
+
*
|
|
47
|
+
* `declareCollection` is additive ONLY when SQLite can `ALTER TABLE … ADD
|
|
48
|
+
* COLUMN` it. A new `NOT NULL` column without a `defaultValue` cannot be added
|
|
49
|
+
* to a populated table, so the backend counts it as non-additive and REBUILDS
|
|
50
|
+
* the collection — dropping every row. Any column added here after ship must
|
|
51
|
+
* either be nullable or carry a `defaultValue`.
|
|
52
|
+
*/
|
|
53
|
+
import type { ChildLayout, CollectionColumn, CollectionIndex, DeviceDisplayOverride, IScopedLogger, MutationFilter, QueryFilter, SettingsRecord, SettingsStoreClient } from "@camstack/types";
|
|
54
|
+
import type { RetiredRowStore } from "../sqlite-storage/retired-settings-keys.js";
|
|
55
|
+
import type { PersistedDeviceMeta } from "./device-meta-types.js";
|
|
56
|
+
import { FleetReadCensus } from "./fleet-read-census.js";
|
|
57
|
+
/**
|
|
58
|
+
* @durable class=ledger owner=device-manager
|
|
59
|
+
* write="one row per device, written by `allocateDeviceId` (identity placeholder),
|
|
60
|
+
* `registerDevice` (full reconcile) and every meta setter (single-column patch);
|
|
61
|
+
* `setMetadata` patches the `metadata` column of the same row"
|
|
62
|
+
* retention="none — a row goes only when the operator removes the device
|
|
63
|
+
* (`removeDevice`), or when an integration is deleted and cascades. Bounded by the
|
|
64
|
+
* fleet an operator configures (974 rows on the reference hub)."
|
|
65
|
+
*
|
|
66
|
+
* ### Why `ledger` and not `config`
|
|
67
|
+
*
|
|
68
|
+
* This shipped as `class=registry`, a sixth class that does not exist —
|
|
69
|
+
* `DURABLE_CLASSES` is `ledger | mirror | ephemeral | config | audit`, so
|
|
70
|
+
* `check-durable-state-declared.ts` has failed since. `config` is the tempting
|
|
71
|
+
* answer, because a device's `name` and `location` ARE operator intent. It is
|
|
72
|
+
* the wrong one, and wrong in the dangerous direction: `config`'s rule is
|
|
73
|
+
* *"already durable everywhere"*, and that is exactly the premise that made the
|
|
74
|
+
* dead `devices` table look harmless right up to D183.
|
|
75
|
+
*
|
|
76
|
+
* Nothing else holds a device's NUMERIC id. `allocateDeviceId` mints it here
|
|
77
|
+
* and every other store in the system keys on it — `addon-device-settings`,
|
|
78
|
+
* `device-runtime-state`, every `pipeline-analytics:*` row, every recorder path.
|
|
79
|
+
* That is `ledger`'s definition verbatim ("a fact only this component ever
|
|
80
|
+
* held"), and `ledger`'s rule — *must not be pruned against a fallible read* —
|
|
81
|
+
* is precisely the rule this collection needs (D49): a `getBindings` or an
|
|
82
|
+
* integration listing that answers empty because it FAILED must never be
|
|
83
|
+
* allowed to retire a device row.
|
|
84
|
+
*/
|
|
33
85
|
export declare const DEVICE_ROWS_COLLECTION = "device-manager:devices";
|
|
34
86
|
/**
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
export declare const DEVICE_ROWS_FLEET_LIMIT =
|
|
87
|
+
* Fleet reads pass this explicitly.
|
|
88
|
+
*
|
|
89
|
+
* `settings-store.query` applies a DEFAULT row cap of 2 000 when the caller
|
|
90
|
+
* names no `limit` (`query-bounds.ts`), and truncation there is silent to the
|
|
91
|
+
* caller — it warns in the engine's log and returns a short list that looks
|
|
92
|
+
* complete. The reference hub is already at 974 devices; half the default cap
|
|
93
|
+
* is not a margin worth betting the fleet listing on. 20 000 is the engine's
|
|
94
|
+
* hard ceiling, so this asks for everything the engine will ever serve in one
|
|
95
|
+
* call and any future need to page is a loud failure rather than a quiet one.
|
|
96
|
+
*/
|
|
97
|
+
export declare const DEVICE_ROWS_FLEET_LIMIT = 2e4;
|
|
46
98
|
export declare const DEVICE_ROWS_COLUMNS: readonly CollectionColumn[];
|
|
47
99
|
/**
|
|
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
|
-
|
|
100
|
+
* The columns a SLIM fleet read selects: every declared column except the
|
|
101
|
+
* primary key (always returned) and `metadata`.
|
|
102
|
+
*
|
|
103
|
+
* ## Why this is a DENYLIST and must stay one
|
|
104
|
+
*
|
|
105
|
+
* `decodeDeviceRow` returns `null` when `deviceId`, `addonId`, `stableId`,
|
|
106
|
+
* `type` or `name` is missing, and `list()` then SKIPS the row with a warn. A
|
|
107
|
+
* hand-written allowlist that forgot one of the five would not make the fleet
|
|
108
|
+
* slower — it would make devices vanish from every listing, quietly, and the
|
|
109
|
+
* only trace would be a log line nobody is reading at the time. Deriving the
|
|
110
|
+
* list by subtraction means a column added tomorrow is carried by default and
|
|
111
|
+
* the only way to lose one is to name it here.
|
|
112
|
+
*
|
|
113
|
+
* `metadata` is the one slim provably discards: `device-queries.ts#listAll`
|
|
114
|
+
* sets `metadata: null` on every slim row. It is also the largest JSON column
|
|
115
|
+
* on the row, which is why this is worth doing at all.
|
|
116
|
+
*
|
|
117
|
+
* ## What is NOT here, and will not be
|
|
118
|
+
*
|
|
119
|
+
* There is no `where: { type: 'camera' }` companion to this. `isCameraDevice`
|
|
120
|
+
* is a method-presence check (`getStreamSources`), not the persisted `type`, so
|
|
121
|
+
* a doorbell with a camera answers YES while its row says `doorbell`. Filtering
|
|
122
|
+
* the rows by type would strip exactly those devices of their row — and
|
|
123
|
+
* `toDeviceInfo` reads `name` / `location` / `disabled` from the ROW precisely
|
|
124
|
+
* because the live device's copies are stale by construction. The fleet would
|
|
125
|
+
* keep working and start reporting pre-rename names on doorbells. The
|
|
126
|
+
* `isCamera` filter stays in JS.
|
|
127
|
+
*/
|
|
76
128
|
export declare const DEVICE_ROWS_SLIM_COLUMNS: readonly string[];
|
|
77
129
|
export declare const DEVICE_ROWS_INDEXES: readonly CollectionIndex[];
|
|
78
130
|
/**
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
131
|
+
* The settings-store door this store needs, as a plain object surface.
|
|
132
|
+
*
|
|
133
|
+
* The production door is the tRPC client on `ctx.api.settingsStore`
|
|
134
|
+
* (`client.get.query(…)` / `client.set.mutate(…)`); {@link deviceRowBackendOf}
|
|
135
|
+
* adapts it. Declaring the port separately is what lets a test hand over an
|
|
136
|
+
* in-memory table without reconstructing a tRPC router, and it names exactly
|
|
137
|
+
* the seven methods this store is allowed to reach for.
|
|
138
|
+
*/
|
|
87
139
|
export interface DeviceRowBackend {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
140
|
+
declareCollection(input: {
|
|
141
|
+
collection: string;
|
|
142
|
+
columns: readonly CollectionColumn[];
|
|
143
|
+
indexes?: readonly CollectionIndex[];
|
|
144
|
+
}): Promise<void>;
|
|
145
|
+
get(input: {
|
|
146
|
+
collection: string;
|
|
147
|
+
key: string;
|
|
148
|
+
}): Promise<unknown>;
|
|
149
|
+
set(input: {
|
|
150
|
+
collection: string;
|
|
151
|
+
key: string;
|
|
152
|
+
value: Record<string, unknown>;
|
|
153
|
+
}): Promise<void>;
|
|
154
|
+
query(input: {
|
|
155
|
+
collection: string;
|
|
156
|
+
filter?: QueryFilter;
|
|
157
|
+
}): Promise<readonly SettingsRecord<Record<string, unknown>>[]>;
|
|
158
|
+
updateWhere(input: {
|
|
159
|
+
collection: string;
|
|
160
|
+
filter: MutationFilter;
|
|
161
|
+
data: Record<string, unknown>;
|
|
162
|
+
}): Promise<{
|
|
163
|
+
updated: number;
|
|
164
|
+
}>;
|
|
165
|
+
delete(input: {
|
|
166
|
+
collection: string;
|
|
167
|
+
key: string;
|
|
168
|
+
}): Promise<void>;
|
|
169
|
+
count(input: {
|
|
170
|
+
collection: string;
|
|
171
|
+
filter?: QueryFilter;
|
|
172
|
+
}): Promise<number>;
|
|
121
173
|
}
|
|
122
174
|
/** Adapt `ctx.api.settingsStore` (tRPC namespace) to {@link DeviceRowBackend}. */
|
|
123
175
|
export declare function deviceRowBackendOf(client: SettingsStoreClient): DeviceRowBackend;
|
|
124
176
|
/**
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
177
|
+
* The fields a single-column patch may set.
|
|
178
|
+
*
|
|
179
|
+
* Every key is OPTIONAL and only the keys PRESENT reach the `SET` list, so an
|
|
180
|
+
* omitted key leaves that column exactly as it was. `null` is a real value and
|
|
181
|
+
* CLEARS the column; it is how `setDisplay(null)` removes an override.
|
|
182
|
+
*
|
|
183
|
+
* A patch is an UPDATE, never an insert — see {@link DeviceRowStore.patch}.
|
|
184
|
+
*/
|
|
133
185
|
export interface DeviceRowPatch {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
186
|
+
readonly type?: string;
|
|
187
|
+
readonly name?: string;
|
|
188
|
+
readonly userNamed?: boolean;
|
|
189
|
+
readonly location?: string | null;
|
|
190
|
+
readonly disabled?: boolean;
|
|
191
|
+
readonly parentDeviceId?: number | null;
|
|
192
|
+
readonly registered?: boolean;
|
|
193
|
+
readonly features?: readonly string[];
|
|
194
|
+
readonly exportFingerprint?: string;
|
|
195
|
+
readonly integrationId?: string | null;
|
|
196
|
+
readonly linkDeviceId?: number | null;
|
|
197
|
+
readonly primaryChildEntityId?: string | null;
|
|
198
|
+
readonly childLayout?: ChildLayout | null;
|
|
199
|
+
readonly role?: string | null;
|
|
200
|
+
readonly display?: DeviceDisplayOverride | null;
|
|
201
|
+
readonly metadata?: Record<string, unknown> | null;
|
|
150
202
|
}
|
|
151
203
|
/**
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
204
|
+
* Every column `registerDevice` writes.
|
|
205
|
+
*
|
|
206
|
+
* It is spelled out rather than reusing {@link DeviceRowPatch} because this
|
|
207
|
+
* statement doubles as the INSERT for a device whose row does not exist yet
|
|
208
|
+
* (`allocateDeviceId` is not on every path into `registerDevice`), and SQLite
|
|
209
|
+
* checks `NOT NULL` on the insert attempt BEFORE the upsert clause gets to
|
|
210
|
+
* intercept the primary-key conflict. Every `NOT NULL` column is therefore
|
|
211
|
+
* required here, and the type is what keeps it that way.
|
|
212
|
+
*
|
|
213
|
+
* Columns NOT listed — `integrationId`, `linkDeviceId`, `primaryChildEntityId`,
|
|
214
|
+
* `childLayout`, `role`, `display`, `metadata` — are not in the statement at
|
|
215
|
+
* all, so re-registering preserves them. The blob shape had to re-state each
|
|
216
|
+
* one to avoid clobbering it, and every field added since has been one more
|
|
217
|
+
* spread somebody had to remember.
|
|
218
|
+
*/
|
|
167
219
|
export interface DeviceRegistrationRow {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
220
|
+
readonly deviceId: number;
|
|
221
|
+
readonly addonId: string;
|
|
222
|
+
readonly stableId: string;
|
|
223
|
+
readonly type: string;
|
|
224
|
+
readonly name: string;
|
|
225
|
+
readonly userNamed: boolean;
|
|
226
|
+
readonly location: string | null;
|
|
227
|
+
readonly disabled: boolean;
|
|
228
|
+
readonly parentDeviceId: number | null;
|
|
229
|
+
readonly registered: boolean;
|
|
230
|
+
readonly features: readonly string[];
|
|
231
|
+
readonly exportFingerprint: string;
|
|
180
232
|
}
|
|
181
233
|
/** A device row as this store hands it back: the meta record plus its metadata blob. */
|
|
182
234
|
export interface DeviceRow {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
235
|
+
readonly meta: PersistedDeviceMeta;
|
|
236
|
+
/** `null` when the device has no hardware-identity metadata. */
|
|
237
|
+
readonly metadata: Record<string, unknown> | null;
|
|
238
|
+
/** Has `registerDevice` ever run for this device? (former `deviceIndex` membership) */
|
|
239
|
+
readonly registered: boolean;
|
|
188
240
|
}
|
|
189
241
|
/**
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
242
|
+
* Decode one stored row.
|
|
243
|
+
*
|
|
244
|
+
* Returns `null` for a row missing an identity field the rest of the system
|
|
245
|
+
* treats as an invariant (`deviceId` / `addonId` / `stableId` / `type` /
|
|
246
|
+
* `name`). A row like that cannot be projected into a `DeviceInfo` and taking
|
|
247
|
+
* the whole fleet read down for it would be worse — the caller logs the skip.
|
|
248
|
+
*/
|
|
197
249
|
export declare function decodeDeviceRow(data: Record<string, unknown>): DeviceRow | null;
|
|
198
250
|
/** Full-row value for an upsert: identity + every field of the meta record. */
|
|
199
251
|
export declare function encodeDeviceRow(meta: PersistedDeviceMeta, extra?: {
|
|
200
|
-
|
|
201
|
-
|
|
252
|
+
readonly registered?: boolean;
|
|
253
|
+
readonly metadata?: Record<string, unknown> | null;
|
|
202
254
|
}): Record<string, unknown>;
|
|
203
255
|
/** Column map for a partial write — only the keys the caller actually named. */
|
|
204
256
|
export declare function encodeDeviceRowPatch(patch: DeviceRowPatch): Record<string, unknown>;
|
|
205
257
|
/**
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
258
|
+
* Row access for the device fleet. Every method is a single statement against
|
|
259
|
+
* `device-manager:devices` — there is no in-memory copy of the fleet here and
|
|
260
|
+
* no cache: a per-device question is a primary-key lookup, a fleet question is
|
|
261
|
+
* one indexed scan.
|
|
262
|
+
*/
|
|
211
263
|
export declare class DeviceRowStore {
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
264
|
+
private readonly backend;
|
|
265
|
+
private readonly logger;
|
|
266
|
+
private declared;
|
|
267
|
+
/** Call-site attribution for fleet reads. Armed only by
|
|
268
|
+
* `CAMSTACK_FLEET_READ_CENSUS_MS`; see `fleet-read-census.ts`. */
|
|
269
|
+
private readonly census;
|
|
270
|
+
/**
|
|
271
|
+
* Is the fleet-read census armed right now? Exposed so a caller ABOVE this
|
|
272
|
+
* store (`device-queries.ts`) can skip extracting a caller identity off its
|
|
273
|
+
* input entirely when nobody is measuring — "the boolean field read first"
|
|
274
|
+
* pattern this repo already uses elsewhere to keep a diagnostic seam at
|
|
275
|
+
* zero cost while disarmed.
|
|
276
|
+
*/
|
|
277
|
+
get censusArmed(): boolean;
|
|
278
|
+
constructor(backend: DeviceRowBackend, logger: IScopedLogger, census?: FleetReadCensus);
|
|
279
|
+
/**
|
|
280
|
+
* Lazy, idempotent `declareCollection`, memoised on the PROMISE so N
|
|
281
|
+
* concurrent first-callers issue one declaration rather than N. A rejection
|
|
282
|
+
* is not latched — the slot is cleared so the next caller retries instead of
|
|
283
|
+
* inheriting a dead collection forever.
|
|
284
|
+
*/
|
|
285
|
+
declare(): Promise<void>;
|
|
286
|
+
/** One device, by numeric id. `null` when the fleet does not know it. */
|
|
287
|
+
get(deviceId: number): Promise<DeviceRow | null>;
|
|
288
|
+
/**
|
|
289
|
+
* Every device, ordered by numeric id.
|
|
290
|
+
*
|
|
291
|
+
* `callerAddonId`, when known, is the addon that ORIGINATED this call —
|
|
292
|
+
* captured off the cap-channel envelope (`CapCallInput.callerAddonId`, set
|
|
293
|
+
* by `LocalChildRegistry` from the registered `childId`), never guessed.
|
|
294
|
+
* Passed straight to the census; a stack walk can never name it (see
|
|
295
|
+
* `fleet-read-census.ts#siteOf`).
|
|
296
|
+
*/
|
|
297
|
+
listAll(callerAddonId?: string): Promise<readonly DeviceRow[]>;
|
|
298
|
+
/**
|
|
299
|
+
* The fleet, read as narrowly as the question allows.
|
|
300
|
+
*
|
|
301
|
+
* `listAll` is a full-table `SELECT … ORDER BY "deviceId"` — ~1 017 rows a
|
|
302
|
+
* call on the live hub, 14–54 calls a minute — and its callers then filtered
|
|
303
|
+
* the result in JS. The two filters that CAN be pushed down are here:
|
|
304
|
+
*
|
|
305
|
+
* - `deviceIds` becomes a `whereIn`. The viewer's linked-devices panel asks
|
|
306
|
+
* about ~8 named ids; it was answered by reading the whole ledger. An
|
|
307
|
+
* EMPTY set reads nothing at all rather than degrading to "everything" —
|
|
308
|
+
* a request for no devices is a request, not an omission.
|
|
309
|
+
* - `slim` becomes a column projection, {@link DEVICE_ROWS_SLIM_COLUMNS}.
|
|
310
|
+
*
|
|
311
|
+
* `isCamera` is deliberately NOT one of them — see that constant's note and
|
|
312
|
+
* `device-row-store-filtered.spec.ts`.
|
|
313
|
+
*
|
|
314
|
+
* `callerAddonId` — see {@link listAll}'s doc; same meaning here.
|
|
315
|
+
*/
|
|
316
|
+
listFleet(opts: {
|
|
317
|
+
readonly deviceIds?: readonly number[];
|
|
318
|
+
readonly slim?: boolean;
|
|
319
|
+
}, callerAddonId?: string): Promise<readonly DeviceRow[]>;
|
|
320
|
+
/**
|
|
321
|
+
* Many devices, by numeric id, in ONE query.
|
|
322
|
+
*
|
|
323
|
+
* `get(id)` called once per id in a loop is the primary-key lookup this
|
|
324
|
+
* store exists to make cheap, repeated until it isn't — measured on the
|
|
325
|
+
* live hub 2026-08-25: `get device-manager:devices` at 1 656 calls/min
|
|
326
|
+
* steady-state and 17 687 during boot, exactly one row per call. This
|
|
327
|
+
* collapses that into the same `whereIn` {@link listFleet} already does for
|
|
328
|
+
* a fleet read, keyed by id.
|
|
329
|
+
*
|
|
330
|
+
* A requested id the fleet does not know is simply ABSENT from the map —
|
|
331
|
+
* never a fabricated row, matching {@link get}'s `null`. An empty `ids`
|
|
332
|
+
* reads nothing at all, same as `listFleet({ deviceIds: [] })`.
|
|
333
|
+
*/
|
|
334
|
+
getMany(ids: readonly number[]): Promise<ReadonlyMap<number, DeviceRow>>;
|
|
335
|
+
/**
|
|
336
|
+
* The device an addon knows as `stableId`, or `null`.
|
|
337
|
+
*
|
|
338
|
+
* `(addonId, stableId)` is the addon-facing identity — unique by
|
|
339
|
+
* construction, since `allocateDeviceId` is the only thing that mints a row
|
|
340
|
+
* and it returns the existing id for a pair it already knows. A second row
|
|
341
|
+
* for the pair would be a corruption, so this takes the LOWEST id and says
|
|
342
|
+
* so rather than picking arbitrarily.
|
|
343
|
+
*/
|
|
344
|
+
findByStableId(addonId: string, stableId: string): Promise<DeviceRow | null>;
|
|
345
|
+
/** Every device owned by one addon, ordered by numeric id. */
|
|
346
|
+
listByAddon(addonId: string): Promise<readonly DeviceRow[]>;
|
|
347
|
+
/** Every device an integration owns, ordered by numeric id. */
|
|
348
|
+
listByIntegration(integrationId: string): Promise<readonly DeviceRow[]>;
|
|
349
|
+
/** Direct children of one device, ordered by numeric id. */
|
|
350
|
+
listByParent(parentDeviceId: number): Promise<readonly DeviceRow[]>;
|
|
351
|
+
/**
|
|
352
|
+
* Direct children of MANY devices, in ONE query.
|
|
353
|
+
*
|
|
354
|
+
* `listByParent` called once per parent is the same shape `get` was before
|
|
355
|
+
* {@link getMany}: an indexed lookup this store makes cheap, repeated until
|
|
356
|
+
* it isn't. Measured on the live hub 2026-08-27, 120-second boot window:
|
|
357
|
+
* `DeviceRowStore.list < DeviceRowStore.listByParent < getChildren` at
|
|
358
|
+
* **1 024 calls** — one per device — for 919 rows in total. The BFS in
|
|
359
|
+
* `device-meta-actions.ts#collectDescendants` walked a container tree the
|
|
360
|
+
* same way, one query per node.
|
|
361
|
+
*
|
|
362
|
+
* `whereIn` on the indexed `parentDeviceId` column collapses a level of that
|
|
363
|
+
* walk into a single statement. Contract, verbatim from {@link getMany}: an
|
|
364
|
+
* EMPTY `parentDeviceIds` reads nothing at all rather than degrading to
|
|
365
|
+
* "everything", and a parent with no children — or one the fleet does not
|
|
366
|
+
* know — is simply ABSENT from the map, never an invented empty row.
|
|
367
|
+
*/
|
|
368
|
+
listByParentMany(parentDeviceIds: readonly number[]): Promise<ReadonlyMap<number, readonly DeviceRow[]>>;
|
|
369
|
+
/** How many devices the fleet holds. Used to tell "empty store" from "gone device". */
|
|
370
|
+
count(): Promise<number>;
|
|
371
|
+
private list;
|
|
372
|
+
/** Insert or replace the whole identity row. */
|
|
373
|
+
upsert(meta: PersistedDeviceMeta, extra?: {
|
|
374
|
+
readonly registered?: boolean;
|
|
375
|
+
readonly metadata?: Record<string, unknown> | null;
|
|
376
|
+
}): Promise<void>;
|
|
377
|
+
/**
|
|
378
|
+
* Write the named columns of an EXISTING row and nothing else.
|
|
379
|
+
*
|
|
380
|
+
* An UPDATE, deliberately not an upsert: a partial upsert would try to INSERT
|
|
381
|
+
* a row carrying only the patched columns, and SQLite rejects that on the
|
|
382
|
+
* `NOT NULL` identity columns before the primary-key conflict can turn it
|
|
383
|
+
* into an update. Every caller resolves the row under the write lock and
|
|
384
|
+
* throws when it is gone, so matching zero rows means a device was removed
|
|
385
|
+
* between the resolve and the write — the patch is lost, and a lost write
|
|
386
|
+
* that says nothing reads as a write that happened.
|
|
387
|
+
*/
|
|
388
|
+
patch(deviceId: number, patch: DeviceRowPatch): Promise<void>;
|
|
389
|
+
/**
|
|
390
|
+
* Insert-or-update the registration columns. See {@link DeviceRegistrationRow}
|
|
391
|
+
* for why this is a separate, fully-specified statement rather than a patch.
|
|
392
|
+
*/
|
|
393
|
+
upsertRegistration(row: DeviceRegistrationRow): Promise<void>;
|
|
394
|
+
/** Drop the device's row. Idempotent. */
|
|
395
|
+
/**
|
|
396
|
+
* Exchange the ids of two devices, carrying their children with them.
|
|
397
|
+
*
|
|
398
|
+
* ## Why this exists as a primitive
|
|
399
|
+
*
|
|
400
|
+
* Replacing a camera means the new hardware has to become the device the rest
|
|
401
|
+
* of the system already knows. Everything general about a camera is keyed on
|
|
402
|
+
* the NUMERIC id and on nothing else — the recording path on disk is
|
|
403
|
+
* `<deviceId>/profile/…`, the hour ledger, the media store and zone ownership
|
|
404
|
+
* carry `deviceId` and not one `stableId` between them, and all four
|
|
405
|
+
* ecosystem exports (Home Assistant, Alexa, HomeKit, Google) key on it too.
|
|
406
|
+
* Moving that work is the expensive, lossy operation. Moving the NUMBER is
|
|
407
|
+
* two rows.
|
|
408
|
+
*
|
|
409
|
+
* ## Children are re-pointed, not renumbered
|
|
410
|
+
*
|
|
411
|
+
* A child keeps its own id and follows its parent: every row whose
|
|
412
|
+
* `parentDeviceId` was `a` now names `b`, and the reverse. Renumbering the
|
|
413
|
+
* children as well would move THEIR general work for no reason — the
|
|
414
|
+
* accessory's own recordings and rules are keyed on the child id, which is
|
|
415
|
+
* not the id being inherited.
|
|
416
|
+
*
|
|
417
|
+
* ## There are no transactions here, so the ORDER is the safety
|
|
418
|
+
*
|
|
419
|
+
* The backing store is a collection API (`set` / `delete` / `updateWhere`);
|
|
420
|
+
* there is no rollback to lean on. So the sequence is chosen to make every
|
|
421
|
+
* crash point LOUD rather than plausible: `a` first moves to a freshly
|
|
422
|
+
* allocated id, which the monotonic counter guarantees was never used and
|
|
423
|
+
* will never be reused. A crash before the end therefore leaves a device
|
|
424
|
+
* missing from its number and a stray at an unfamiliar one — visible in the
|
|
425
|
+
* device list at a glance. What it can never leave is two rows on one number,
|
|
426
|
+
* or a row that looks correct while its children point elsewhere.
|
|
427
|
+
*
|
|
428
|
+
* The caller holds {@link DeviceMetaStore.withMetaWriteLock}. This method does
|
|
429
|
+
* not take it: taking it here would deadlock the migration that has to disable
|
|
430
|
+
* functions on both devices in the same critical section.
|
|
431
|
+
*/
|
|
432
|
+
swapIds(a: number, b: number, tempId: number): Promise<void>;
|
|
433
|
+
/** The read-only half of {@link swapIds}: every refusal, every read, no write. */
|
|
434
|
+
private planSwap;
|
|
435
|
+
/** Rewrite a row under a new id and drop the old key. Not exported: the only
|
|
436
|
+
* legitimate reason to move a row is {@link swapIds}. */
|
|
437
|
+
private moveRow;
|
|
438
|
+
remove(deviceId: number): Promise<void>;
|
|
439
|
+
/**
|
|
440
|
+
* The retirement door for the three blobs this collection replaced.
|
|
441
|
+
*
|
|
442
|
+
* The purge is gated on THIS collection being non-empty, and the count has to
|
|
443
|
+
* be taken after `declare()` — which is why the owning addon runs it and the
|
|
444
|
+
* settings engine cannot: at the engine's own boot no addon has declared
|
|
445
|
+
* anything, so every successor would read as unreadable, forever.
|
|
446
|
+
*/
|
|
447
|
+
retiredRowStore(): RetiredRowStore;
|
|
396
448
|
}
|