@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.
Files changed (503) hide show
  1. package/dist/addon/addon-api-factory.d.ts +30 -30
  2. package/dist/addon-routes/addon-route-registry.d.ts +31 -31
  3. package/dist/addon-runner.js +1 -1
  4. package/dist/addon-runner.mjs +1 -1
  5. package/dist/addon-utils.d.ts +22 -22
  6. package/dist/auth/admin-token-manager.d.ts +37 -67
  7. package/dist/auth/api-key-manager.d.ts +8 -8
  8. package/dist/auth/auth-audit-log.d.ts +29 -49
  9. package/dist/auth/auth-manager.d.ts +127 -126
  10. package/dist/auth/cidr.d.ts +8 -8
  11. package/dist/auth/external-identity-manager.d.ts +46 -34
  12. package/dist/auth/jwt-signing-key.d.ts +14 -14
  13. package/dist/auth/login-session-manager.d.ts +95 -135
  14. package/dist/auth/parse-record.d.ts +13 -13
  15. package/dist/auth/scope-matcher.d.ts +7 -7
  16. package/dist/auth/scoped-token-manager.d.ts +62 -62
  17. package/dist/auth/token-expiry.d.ts +49 -26
  18. package/dist/auth/totp-manager.d.ts +48 -48
  19. package/dist/auth/user-management-internal.d.ts +67 -52
  20. package/dist/auth/user-manager.d.ts +58 -58
  21. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.d.ts +54 -54
  22. package/dist/builtins/addon-pages-aggregator/dedupe-pages.d.ts +22 -4
  23. package/dist/builtins/addon-pages-aggregator/index.d.ts +1 -1
  24. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.d.ts +54 -54
  25. package/dist/builtins/addon-widgets-aggregator/index.d.ts +1 -1
  26. package/dist/builtins/alerts/alerts.addon.d.ts +88 -87
  27. package/dist/builtins/alerts/device-label.d.ts +6 -6
  28. package/dist/builtins/alerts/index.d.ts +1 -1
  29. package/dist/builtins/alerts/prune-policy.d.ts +36 -36
  30. package/dist/builtins/autotrack/autotrack-cameras.d.ts +102 -79
  31. package/dist/builtins/autotrack/autotrack-config.d.ts +81 -81
  32. package/dist/builtins/autotrack/autotrack-decision.d.ts +69 -82
  33. package/dist/builtins/autotrack/autotrack-loop.d.ts +81 -61
  34. package/dist/builtins/autotrack/autotrack.addon.d.ts +103 -66
  35. package/dist/builtins/autotrack/frame-error.d.ts +38 -38
  36. package/dist/builtins/autotrack/frame-measurements.d.ts +79 -79
  37. package/dist/builtins/autotrack/index.d.ts +2 -2
  38. package/dist/builtins/autotrack/ptz-mirror.d.ts +46 -17
  39. package/dist/builtins/autotrack/target-selection.d.ts +33 -47
  40. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.d.ts +270 -269
  41. package/dist/builtins/backup-orchestrator/cron-helpers.d.ts +17 -17
  42. package/dist/builtins/backup-orchestrator/destination-policy.d.ts +99 -82
  43. package/dist/builtins/backup-orchestrator/download-helpers.d.ts +9 -9
  44. package/dist/builtins/backup-orchestrator/encryption-key-store.d.ts +40 -29
  45. package/dist/builtins/backup-orchestrator/index.d.ts +2 -2
  46. package/dist/builtins/backup-orchestrator/manifest-store.d.ts +88 -69
  47. package/dist/builtins/backup-orchestrator/restore-archive.d.ts +14 -14
  48. package/dist/builtins/backup-orchestrator/run-queue.d.ts +86 -86
  49. package/dist/builtins/backup-orchestrator/schedule-store.d.ts +53 -37
  50. package/dist/builtins/backup-orchestrator/staging-paths.d.ts +23 -23
  51. package/dist/builtins/backup-orchestrator/write-targets.d.ts +53 -53
  52. package/dist/builtins/calendars/calendar-color.d.ts +5 -1
  53. package/dist/builtins/calendars/calendar-prefs-store.d.ts +18 -12
  54. package/dist/builtins/calendars/calendars.addon.d.ts +16 -11
  55. package/dist/builtins/calendars/index.d.ts +1 -1
  56. package/dist/builtins/camera-grid/acquire-retry.d.ts +26 -26
  57. package/dist/builtins/camera-grid/addon.d.ts +200 -174
  58. package/dist/builtins/camera-grid/flv-join.d.ts +32 -58
  59. package/dist/builtins/camera-grid/grid-activity-mirror.d.ts +37 -37
  60. package/dist/builtins/camera-grid/grid-activity.d.ts +83 -42
  61. package/dist/builtins/camera-grid/grid-camera-declarations.d.ts +46 -46
  62. package/dist/builtins/camera-grid/grid-camera-device.d.ts +60 -34
  63. package/dist/builtins/camera-grid/grid-canvas-derivation.d.ts +50 -15
  64. package/dist/builtins/camera-grid/grid-canvas-seed.d.ts +96 -46
  65. package/dist/builtins/camera-grid/grid-canvas.d.ts +74 -74
  66. package/dist/builtins/camera-grid/grid-child.d.ts +29 -16
  67. package/dist/builtins/camera-grid/grid-compositor-child.d.ts +2 -2
  68. package/dist/builtins/camera-grid/grid-compositor-invocation.d.ts +39 -11
  69. package/dist/builtins/camera-grid/grid-compositor.d.ts +50 -50
  70. package/dist/builtins/camera-grid/grid-detection-mapping.d.ts +52 -22
  71. package/dist/builtins/camera-grid/grid-device-settings.d.ts +31 -7
  72. package/dist/builtins/camera-grid/grid-filter-graph.d.ts +41 -41
  73. package/dist/builtins/camera-grid/grid-frame-sample.d.ts +45 -19
  74. package/dist/builtins/camera-grid/grid-instances.d.ts +20 -50
  75. package/dist/builtins/camera-grid/grid-last-frame-store.d.ts +51 -51
  76. package/dist/builtins/camera-grid/grid-layout-native-provider.d.ts +30 -4
  77. package/dist/builtins/camera-grid/grid-plan.d.ts +30 -20
  78. package/dist/builtins/camera-grid/grid-profiles.d.ts +85 -45
  79. package/dist/builtins/camera-grid/grid-row-normalization.d.ts +6 -6
  80. package/dist/builtins/camera-grid/grid-sentry-sources.d.ts +57 -57
  81. package/dist/builtins/camera-grid/grid-snapshot.d.ts +41 -41
  82. package/dist/builtins/camera-grid/grid-stream-descriptor.d.ts +49 -21
  83. package/dist/builtins/camera-grid/grid-stream-invocation.d.ts +37 -22
  84. package/dist/builtins/camera-grid/grid-stream-relay.d.ts +26 -26
  85. package/dist/builtins/camera-grid/grid-stream-session.d.ts +123 -93
  86. package/dist/builtins/camera-grid/grid-tile-feed.d.ts +47 -47
  87. package/dist/builtins/camera-grid/grid-tile-plan.d.ts +55 -20
  88. package/dist/builtins/camera-grid/grid-wire-format.d.ts +22 -6
  89. package/dist/builtins/camera-grid/index.d.ts +44 -44
  90. package/dist/builtins/camera-grid/silence-analysis.d.ts +31 -14
  91. package/dist/builtins/composer/claim-gate.d.ts +54 -27
  92. package/dist/builtins/composer/composed-device-set.d.ts +40 -26
  93. package/dist/builtins/composer/composed-device.d.ts +39 -17
  94. package/dist/builtins/composer/composer-apply-waits.d.ts +20 -13
  95. package/dist/builtins/composer/composer-grafts.d.ts +57 -38
  96. package/dist/builtins/composer/composer-live-set.d.ts +15 -15
  97. package/dist/builtins/composer/composer-plan.d.ts +76 -60
  98. package/dist/builtins/composer/composer-runtime-factory.d.ts +21 -14
  99. package/dist/builtins/composer/composer-seeds.d.ts +20 -14
  100. package/dist/builtins/composer/composer-verdict.d.ts +28 -14
  101. package/dist/builtins/composer/composer.addon.d.ts +23 -9
  102. package/dist/builtins/composer/composer.d.ts +145 -100
  103. package/dist/builtins/composer/composition-declarations.d.ts +50 -39
  104. package/dist/builtins/composer/composition-evaluation.d.ts +38 -22
  105. package/dist/builtins/composer/composition-runtime.d.ts +178 -125
  106. package/dist/builtins/composer/composition-target.d.ts +38 -34
  107. package/dist/builtins/composer/confirmed-seed.d.ts +35 -23
  108. package/dist/builtins/composer/deadline-timer.d.ts +13 -13
  109. package/dist/builtins/composer/existing-target.d.ts +90 -73
  110. package/dist/builtins/composer/field-record.d.ts +26 -19
  111. package/dist/builtins/composer/graft-host.d.ts +56 -32
  112. package/dist/builtins/composer/held-claims.d.ts +26 -9
  113. package/dist/builtins/composer/index.d.ts +1 -1
  114. package/dist/builtins/composer/own-field-reads.d.ts +26 -15
  115. package/dist/builtins/composer/owned-fields-target.d.ts +75 -44
  116. package/dist/builtins/composer/slice-assembler.d.ts +19 -3
  117. package/dist/builtins/composer/source-readings.d.ts +67 -61
  118. package/dist/builtins/composer/source-tracker.d.ts +133 -69
  119. package/dist/builtins/console-logging/console-destination.d.ts +15 -8
  120. package/dist/builtins/console-logging/console-logging.addon.d.ts +20 -19
  121. package/dist/builtins/console-logging/index.d.ts +3 -3
  122. package/dist/builtins/core-blocks/block-package.d.ts +37 -37
  123. package/dist/builtins/core-blocks/block-settings-store.d.ts +34 -21
  124. package/dist/builtins/core-blocks/block-supervisor.d.ts +138 -117
  125. package/dist/builtins/core-blocks/block-type-defs.d.ts +21 -21
  126. package/dist/builtins/core-blocks/blocks-integration.d.ts +76 -49
  127. package/dist/builtins/core-blocks/compile-block.d.ts +37 -37
  128. package/dist/builtins/core-blocks/composition-api.d.ts +38 -24
  129. package/dist/builtins/core-blocks/composition-peers.d.ts +26 -4
  130. package/dist/builtins/core-blocks/composition-sources.d.ts +25 -10
  131. package/dist/builtins/core-blocks/core-block-store.d.ts +109 -109
  132. package/dist/builtins/core-blocks/core-blocks.addon.d.ts +72 -72
  133. package/dist/builtins/core-blocks/extract-settings-schema.d.ts +4 -4
  134. package/dist/builtins/core-blocks/index.d.ts +8 -8
  135. package/dist/builtins/device-manager/adoption-job-engine.d.ts +141 -98
  136. package/dist/builtins/device-manager/claimed-status-overlay.d.ts +42 -9
  137. package/dist/builtins/device-manager/contribution-cache.d.ts +56 -56
  138. package/dist/builtins/device-manager/day-night-config-schema.d.ts +26 -12
  139. package/dist/builtins/device-manager/device-aggregation-merge.d.ts +17 -17
  140. package/dist/builtins/device-manager/device-aggregation.d.ts +277 -254
  141. package/dist/builtins/device-manager/device-bindings-store.d.ts +232 -220
  142. package/dist/builtins/device-manager/device-config-contribution.d.ts +29 -29
  143. package/dist/builtins/device-manager/device-config-secrets.d.ts +32 -13
  144. package/dist/builtins/device-manager/device-event-propagator.d.ts +22 -22
  145. package/dist/builtins/device-manager/device-extension-linked-slot.d.ts +17 -17
  146. package/dist/builtins/device-manager/device-form-secrets.d.ts +14 -14
  147. package/dist/builtins/device-manager/device-linked-devices.d.ts +159 -98
  148. package/dist/builtins/device-manager/device-manager.addon.d.ts +223 -197
  149. package/dist/builtins/device-manager/device-meta-actions.d.ts +306 -305
  150. package/dist/builtins/device-manager/device-meta-store.d.ts +100 -90
  151. package/dist/builtins/device-manager/device-meta-types.d.ts +250 -241
  152. package/dist/builtins/device-manager/device-online-fallback.d.ts +30 -30
  153. package/dist/builtins/device-manager/device-projection.d.ts +53 -67
  154. package/dist/builtins/device-manager/device-provider-context.d.ts +109 -94
  155. package/dist/builtins/device-manager/device-queries.d.ts +63 -63
  156. package/dist/builtins/device-manager/device-row-store.d.ts +417 -365
  157. package/dist/builtins/device-manager/device-source-activation.d.ts +91 -49
  158. package/dist/builtins/device-manager/device-state-claim-views.d.ts +76 -61
  159. package/dist/builtins/device-manager/device-state-claims.d.ts +53 -30
  160. package/dist/builtins/device-manager/device-state-mirror.d.ts +256 -264
  161. package/dist/builtins/device-manager/device-sync-resolvers.d.ts +25 -25
  162. package/dist/builtins/device-manager/field-claims-index.d.ts +85 -58
  163. package/dist/builtins/device-manager/field-ownership.d.ts +54 -36
  164. package/dist/builtins/device-manager/fleet-read-census.d.ts +99 -61
  165. package/dist/builtins/device-manager/image-settings-config-schema.d.ts +18 -8
  166. package/dist/builtins/device-manager/index.d.ts +2 -2
  167. package/dist/builtins/device-manager/linked-devices-manual-backfill.d.ts +20 -9
  168. package/dist/builtins/device-manager/location-alignment.d.ts +46 -46
  169. package/dist/builtins/device-manager/migrate-device.d.ts +178 -101
  170. package/dist/builtins/device-manager/migrate-guard.d.ts +66 -34
  171. package/dist/builtins/device-manager/migrate-hardware-state.d.ts +59 -59
  172. package/dist/builtins/device-manager/migrate-reload.d.ts +42 -4
  173. package/dist/builtins/device-manager/migration-refused.d.ts +20 -20
  174. package/dist/builtins/device-manager/mirror-row-writer.d.ts +205 -179
  175. package/dist/builtins/device-manager/recording-onboard-config-schema.d.ts +56 -32
  176. package/dist/builtins/device-manager/removal-fence.d.ts +48 -48
  177. package/dist/builtins/device-manager/runtime-state-persist-gate.d.ts +54 -26
  178. package/dist/builtins/device-manager/secret-config-paths.d.ts +17 -17
  179. package/dist/builtins/device-manager/stale-wrapper-activations.d.ts +52 -25
  180. package/dist/builtins/device-manager/write-lock.d.ts +13 -13
  181. package/dist/builtins/hub-forwarder/hub-forwarder-destination.d.ts +41 -41
  182. package/dist/builtins/hub-forwarder/hub-forwarder.addon.d.ts +13 -12
  183. package/dist/builtins/hub-forwarder/index.d.ts +3 -3
  184. package/dist/builtins/keychain/index.d.ts +1 -1
  185. package/dist/builtins/keychain/key-sources.d.ts +19 -19
  186. package/dist/builtins/keychain/keychain-crypto.d.ts +4 -4
  187. package/dist/builtins/keychain/keychain-reset-trigger.d.ts +13 -13
  188. package/dist/builtins/keychain/keychain-service.d.ts +128 -128
  189. package/dist/builtins/keychain/keychain-store.d.ts +96 -87
  190. package/dist/builtins/keychain/keychain-usage.d.ts +13 -2
  191. package/dist/builtins/keychain/keychain.addon.d.ts +31 -6
  192. package/dist/builtins/keychain/platform-key-source.d.ts +15 -15
  193. package/dist/builtins/keychain/system-held-secrets.d.ts +17 -4
  194. package/dist/builtins/liveness-monitor/index.d.ts +2 -2
  195. package/dist/builtins/liveness-monitor/liveness-checks.d.ts +73 -52
  196. package/dist/builtins/liveness-monitor/liveness-monitor.addon.d.ts +57 -36
  197. package/dist/builtins/local-auth/admin-account-boot.d.ts +14 -14
  198. package/dist/builtins/local-auth/auth-config-reader.d.ts +34 -17
  199. package/dist/builtins/local-auth/auth-schema.d.ts +92 -69
  200. package/dist/builtins/local-auth/index.d.ts +1 -1
  201. package/dist/builtins/local-auth/jwt-signing-key-keeper.d.ts +22 -22
  202. package/dist/builtins/local-auth/local-auth.addon.d.ts +41 -40
  203. package/dist/builtins/local-auth/oauth-grants.d.ts +57 -57
  204. package/dist/builtins/local-auth/oauth-session-manager.d.ts +62 -62
  205. package/dist/builtins/local-network/address-book.d.ts +61 -36
  206. package/dist/builtins/local-network/index.d.ts +2 -2
  207. package/dist/builtins/local-network/ipv6-lan.d.ts +12 -17
  208. package/dist/builtins/local-network/local-hostname.d.ts +10 -10
  209. package/dist/builtins/local-network/local-network.addon.d.ts +259 -258
  210. package/dist/builtins/loki-logging/index.d.ts +4 -4
  211. package/dist/builtins/loki-logging/loki-destination.d.ts +113 -87
  212. package/dist/builtins/loki-logging/loki-logging.addon.d.ts +61 -42
  213. package/dist/builtins/loki-logging/loki-payload.d.ts +82 -39
  214. package/dist/builtins/loki-logging/retire-enabled-flag.d.ts +37 -12
  215. package/dist/builtins/native-metrics/cgroup-memory.d.ts +206 -159
  216. package/dist/builtins/native-metrics/cgroup-pids.d.ts +138 -91
  217. package/dist/builtins/native-metrics/container-memory-series.d.ts +212 -178
  218. package/dist/builtins/native-metrics/gpu-probe.d.ts +9 -9
  219. package/dist/builtins/native-metrics/index.d.ts +2 -2
  220. package/dist/builtins/native-metrics/load-series-config.d.ts +29 -57
  221. package/dist/builtins/native-metrics/load-series-reader.d.ts +52 -26
  222. package/dist/builtins/native-metrics/load-series-store.d.ts +237 -176
  223. package/dist/builtins/native-metrics/native-metrics-provider.d.ts +43 -43
  224. package/dist/builtins/native-metrics/native-metrics.addon.d.ts +230 -230
  225. package/dist/builtins/native-metrics/node-load-ring.d.ts +196 -196
  226. package/dist/builtins/native-metrics/proc-process-table.d.ts +12 -12
  227. package/dist/builtins/native-metrics/process-classification.d.ts +95 -36
  228. package/dist/builtins/native-metrics/thread-cpu-sampler.d.ts +95 -95
  229. package/dist/builtins/platform-probe/coral-accelerators.d.ts +17 -17
  230. package/dist/builtins/platform-probe/index.d.ts +38 -30
  231. package/dist/builtins/platform-probe/inference-config-resolver.d.ts +27 -27
  232. package/dist/builtins/platform-probe/intel-accelerators.d.ts +8 -8
  233. package/dist/builtins/platform-probe/intel-npu.d.ts +30 -30
  234. package/dist/builtins/platform-probe/platform-scorer.d.ts +35 -35
  235. package/dist/builtins/platform-probe/runtime-packages.d.ts +3 -3
  236. package/dist/builtins/remote-access-orchestrator/enabled-providers-reconcile.d.ts +87 -87
  237. package/dist/builtins/remote-access-orchestrator/index.d.ts +1 -1
  238. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.d.ts +66 -35
  239. package/dist/builtins/shared/device-state-changed.d.ts +9 -9
  240. package/dist/builtins/shared/settle-sources.d.ts +16 -16
  241. package/dist/builtins/snapshot/index.d.ts +2 -2
  242. package/dist/builtins/snapshot/snapshot-cache.d.ts +92 -92
  243. package/dist/builtins/snapshot/snapshot-coalescing.d.ts +108 -108
  244. package/dist/builtins/snapshot/snapshot-courtesy.d.ts +48 -48
  245. package/dist/builtins/snapshot/snapshot-durable-store.d.ts +32 -32
  246. package/dist/builtins/snapshot/snapshot-fatigue.d.ts +34 -34
  247. package/dist/builtins/snapshot/snapshot-grab-pick.d.ts +14 -14
  248. package/dist/builtins/snapshot/snapshot-link-url.d.ts +49 -49
  249. package/dist/builtins/snapshot/snapshot-media-handler.d.ts +97 -97
  250. package/dist/builtins/snapshot/snapshot-resize.d.ts +64 -103
  251. package/dist/builtins/snapshot/snapshot.addon.d.ts +569 -568
  252. package/dist/builtins/sqlite-storage/analyze-stats.d.ts +73 -29
  253. package/dist/builtins/sqlite-storage/config-store.d.ts +6 -6
  254. package/dist/builtins/sqlite-storage/device-store.d.ts +16 -16
  255. package/dist/builtins/sqlite-storage/filesystem-browse-provider.d.ts +23 -23
  256. package/dist/builtins/sqlite-storage/filesystem-storage-provider.d.ts +79 -79
  257. package/dist/builtins/sqlite-storage/filesystem-storage.addon.d.ts +27 -26
  258. package/dist/builtins/sqlite-storage/filter-compiler.d.ts +107 -107
  259. package/dist/builtins/sqlite-storage/index.d.ts +12 -12
  260. package/dist/builtins/sqlite-storage/integration-registry.d.ts +37 -37
  261. package/dist/builtins/sqlite-storage/path-guard.d.ts +5 -5
  262. package/dist/builtins/sqlite-storage/prefix-range.d.ts +44 -44
  263. package/dist/builtins/sqlite-storage/query-bounds.d.ts +100 -106
  264. package/dist/builtins/sqlite-storage/query-profiler.d.ts +217 -217
  265. package/dist/builtins/sqlite-storage/retired-collections.d.ts +124 -55
  266. package/dist/builtins/sqlite-storage/retired-settings-keys.d.ts +239 -189
  267. package/dist/builtins/sqlite-storage/shm-lock-canary.d.ts +41 -41
  268. package/dist/builtins/sqlite-storage/sqlite-pragmas.d.ts +162 -162
  269. package/dist/builtins/sqlite-storage/sqlite-settings-backend.d.ts +458 -458
  270. package/dist/builtins/sqlite-storage/sqlite-settings.addon.d.ts +59 -58
  271. package/dist/builtins/sqlite-storage/sqlite-snapshot-protocol.d.ts +37 -32
  272. package/dist/builtins/sqlite-storage/sqlite-snapshot-worker.d.ts +19 -19
  273. package/dist/builtins/sqlite-storage/sqlite-snapshotter.d.ts +76 -76
  274. package/dist/builtins/sqlite-storage/statement-shape.d.ts +54 -54
  275. package/dist/builtins/sqlite-storage/table-sizes.d.ts +71 -71
  276. package/dist/builtins/sqlite-storage/vector-index-shared.d.ts +63 -54
  277. package/dist/builtins/sqlite-storage/vector-index-vec.d.ts +133 -96
  278. package/dist/builtins/sqlite-storage/wal-checkpoint-policy.d.ts +161 -161
  279. package/dist/builtins/sqlite-storage/wal-checkpointer.d.ts +60 -60
  280. package/dist/builtins/sqlite-storage/wal-maintenance.d.ts +94 -94
  281. package/dist/builtins/storage-orchestrator/access-guards.d.ts +37 -26
  282. package/dist/builtins/storage-orchestrator/data-store-dispatch.d.ts +33 -18
  283. package/dist/builtins/storage-orchestrator/drain-ratchet.d.ts +85 -85
  284. package/dist/builtins/storage-orchestrator/drain-state-store.d.ts +20 -10
  285. package/dist/builtins/storage-orchestrator/hub-settings-forward.d.ts +113 -53
  286. package/dist/builtins/storage-orchestrator/index.d.ts +7 -7
  287. package/dist/builtins/storage-orchestrator/location-occupancy-slice.d.ts +64 -40
  288. package/dist/builtins/storage-orchestrator/location-occupancy.d.ts +14 -14
  289. package/dist/builtins/storage-orchestrator/location-protection.d.ts +13 -13
  290. package/dist/builtins/storage-orchestrator/location-repoint-move.d.ts +44 -44
  291. package/dist/builtins/storage-orchestrator/location-root-collision.d.ts +61 -25
  292. package/dist/builtins/storage-orchestrator/location-secrets.d.ts +99 -58
  293. package/dist/builtins/storage-orchestrator/location-store.d.ts +56 -47
  294. package/dist/builtins/storage-orchestrator/location-volume-capacity.d.ts +37 -37
  295. package/dist/builtins/storage-orchestrator/provider-discovery.d.ts +20 -6
  296. package/dist/builtins/storage-orchestrator/storage-cleanup-coordinator.d.ts +51 -51
  297. package/dist/builtins/storage-orchestrator/storage-migration-coordinator.d.ts +224 -224
  298. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.d.ts +292 -292
  299. package/dist/builtins/storage-orchestrator/storage-orchestrator.service.d.ts +431 -450
  300. package/dist/builtins/storage-orchestrator/storage-pressure-manager.d.ts +104 -104
  301. package/dist/builtins/system-backup/backup-encryption.d.ts +60 -23
  302. package/dist/builtins/system-backup/system-backup.service.d.ts +240 -240
  303. package/dist/builtins/system-config/cluster-secret-keeper.d.ts +54 -34
  304. package/dist/builtins/system-config/index.d.ts +2 -2
  305. package/dist/builtins/system-config/mesh-actions.d.ts +2 -30
  306. package/dist/builtins/system-config/system-config.addon.d.ts +57 -93
  307. package/dist/builtins/system-config/system-config.addon.js +46 -33
  308. package/dist/builtins/system-config/system-config.addon.mjs +46 -33
  309. package/dist/builtins/winston-logging/index.d.ts +3 -3
  310. package/dist/builtins/winston-logging/winston-destination.d.ts +15 -15
  311. package/dist/builtins/winston-logging/winston-logging.addon.d.ts +14 -13
  312. package/dist/{child-cap-dispatch-nURMuVTX.js → child-cap-dispatch-Bnr8brru.js} +18 -0
  313. package/dist/{child-cap-dispatch-B1gyE35b.mjs → child-cap-dispatch-mHO_6r0G.mjs} +1 -1
  314. package/dist/download/hosted-model-revisions.d.ts +8 -8
  315. package/dist/download/model-download-service.d.ts +32 -32
  316. package/dist/download/model-downloader.d.ts +88 -88
  317. package/dist/events/event-bus.d.ts +6 -6
  318. package/dist/events/system-event-bus.d.ts +11 -11
  319. package/dist/feature/feature-manager.d.ts +6 -6
  320. package/dist/http/asset-compression.d.ts +35 -73
  321. package/dist/http/authenticated-file-server.d.ts +32 -32
  322. package/dist/http/data-plane-registry.d.ts +49 -39
  323. package/dist/http/file-data-plane.d.ts +14 -14
  324. package/dist/http/lan-http-bind.d.ts +24 -13
  325. package/dist/http/reverse-proxy.d.ts +36 -24
  326. package/dist/index.d.ts +137 -137
  327. package/dist/index.js +4 -3
  328. package/dist/index.mjs +2 -4
  329. package/dist/kernel/addon-class-resolver.d.ts +1 -1
  330. package/dist/kernel/addon-engine-manager.d.ts +20 -20
  331. package/dist/kernel/addon-health-monitor.d.ts +151 -151
  332. package/dist/kernel/addon-installer.d.ts +609 -609
  333. package/dist/kernel/addon-loader.d.ts +133 -133
  334. package/dist/kernel/addon-manifest.d.ts +118 -118
  335. package/dist/kernel/addon-residue.d.ts +28 -32
  336. package/dist/kernel/array-buffer-census.d.ts +84 -88
  337. package/dist/kernel/bootstrap-config.d.ts +3 -3
  338. package/dist/kernel/cap-router-builder.d.ts +145 -101
  339. package/dist/kernel/capability-handle.d.ts +41 -41
  340. package/dist/kernel/capability-registry.d.ts +588 -576
  341. package/dist/kernel/config-manager.d.ts +199 -199
  342. package/dist/kernel/config-schema.d.ts +132 -128
  343. package/dist/kernel/custom-action-registry.d.ts +25 -25
  344. package/dist/kernel/deps/addon-deps-manager.d.ts +17 -17
  345. package/dist/kernel/deps/closure-dedupe.d.ts +76 -76
  346. package/dist/kernel/deps/ensure-addon-natives.d.ts +34 -34
  347. package/dist/kernel/deps/ensure-native-prebuilds.d.ts +25 -25
  348. package/dist/kernel/deps/manifest-native-deps.d.ts +38 -38
  349. package/dist/kernel/deps/manifest-python-deps.d.ts +18 -18
  350. package/dist/kernel/deps/manifest-system-deps.d.ts +13 -13
  351. package/dist/kernel/deps/npm-command.d.ts +45 -45
  352. package/dist/kernel/deps/system-package-allowlist.d.ts +9 -9
  353. package/dist/kernel/deps/system-package-broker.d.ts +20 -20
  354. package/dist/kernel/deps/system-package-client.d.ts +3 -3
  355. package/dist/kernel/device-registry.d.ts +27 -27
  356. package/dist/kernel/event-loop-stall-monitor.d.ts +33 -33
  357. package/dist/kernel/event-plane-report.d.ts +174 -174
  358. package/dist/kernel/fs-utils.d.ts +70 -70
  359. package/dist/kernel/gc-census.d.ts +119 -119
  360. package/dist/kernel/heap-spaces.d.ts +87 -87
  361. package/dist/kernel/heap-watch.d.ts +706 -706
  362. package/dist/kernel/host-externals.d.ts +8 -8
  363. package/dist/kernel/hwaccel/hwaccel-resolver.d.ts +27 -27
  364. package/dist/kernel/index.d.ts +115 -113
  365. package/dist/kernel/inference/inference-resolver.d.ts +13 -13
  366. package/dist/kernel/infra-capabilities.d.ts +7 -7
  367. package/dist/kernel/isolated-builtin-phase.d.ts +42 -42
  368. package/dist/kernel/lifecycle/job-journal.d.ts +17 -17
  369. package/dist/kernel/lifecycle/lifecycle-job-engine.d.ts +99 -99
  370. package/dist/kernel/lifecycle/staging-area.d.ts +22 -22
  371. package/dist/kernel/moleculer/addon-context-factory.d.ts +90 -89
  372. package/dist/kernel/moleculer/addon-data-plane-facility.d.ts +12 -12
  373. package/dist/kernel/moleculer/addon-deploy-source.d.ts +11 -11
  374. package/dist/kernel/moleculer/addon-peer-bytes-facility.d.ts +18 -18
  375. package/dist/kernel/moleculer/addon-service-factory.d.ts +41 -41
  376. package/dist/kernel/moleculer/agent-mesh-authenticator.d.ts +60 -33
  377. package/dist/kernel/moleculer/agent-ui-unlock.d.ts +30 -30
  378. package/dist/kernel/moleculer/broker-factory.d.ts +61 -61
  379. package/dist/kernel/moleculer/cap-usage-registry.d.ts +108 -153
  380. package/dist/kernel/moleculer/capabilities-access.d.ts +19 -19
  381. package/dist/kernel/moleculer/child-addon-call-dispatch.d.ts +43 -43
  382. package/dist/kernel/moleculer/child-cap-descriptors.d.ts +26 -26
  383. package/dist/kernel/moleculer/child-cap-dispatch.d.ts +52 -52
  384. package/dist/kernel/moleculer/children-batch-loader.d.ts +86 -34
  385. package/dist/kernel/moleculer/cluster-secret.d.ts +19 -19
  386. package/dist/kernel/moleculer/core-cap-service.d.ts +53 -53
  387. package/dist/kernel/moleculer/crash-supervisor.d.ts +39 -39
  388. package/dist/kernel/moleculer/device-cap-proxy.d.ts +51 -51
  389. package/dist/kernel/moleculer/device-event-ring.d.ts +117 -75
  390. package/dist/kernel/moleculer/event-bus-core.d.ts +171 -159
  391. package/dist/kernel/moleculer/event-bus.d.ts +73 -73
  392. package/dist/kernel/moleculer/hub-log-forwarder.d.ts +30 -30
  393. package/dist/kernel/moleculer/hub-service.d.ts +42 -42
  394. package/dist/kernel/moleculer/init-watchdog.d.ts +49 -49
  395. package/dist/kernel/moleculer/mesh-access-middleware.d.ts +36 -21
  396. package/dist/kernel/moleculer/mesh-auth-mode.d.ts +33 -39
  397. package/dist/kernel/moleculer/mesh-authenticator.d.ts +58 -58
  398. package/dist/kernel/moleculer/mesh-auto-enforce.d.ts +38 -18
  399. package/dist/kernel/moleculer/mesh-join-client.d.ts +67 -45
  400. package/dist/kernel/moleculer/mesh-join-proof.d.ts +8 -8
  401. package/dist/kernel/moleculer/mesh-mtls/constants.d.ts +1 -1
  402. package/dist/kernel/moleculer/mesh-mtls/index.d.ts +10 -10
  403. package/dist/kernel/moleculer/mesh-mtls/mesh-ca-keeper.d.ts +43 -38
  404. package/dist/kernel/moleculer/mesh-mtls/mesh-ca.d.ts +29 -20
  405. package/dist/kernel/moleculer/mesh-mtls/mesh-clear-port.d.ts +32 -32
  406. package/dist/kernel/moleculer/mesh-mtls/mesh-crl.d.ts +11 -11
  407. package/dist/kernel/moleculer/mesh-mtls/mesh-enroll.d.ts +19 -16
  408. package/dist/kernel/moleculer/mesh-mtls/mesh-join-token.d.ts +40 -40
  409. package/dist/kernel/moleculer/mesh-mtls/mesh-tls-enabler.d.ts +5 -1
  410. package/dist/kernel/moleculer/mesh-mtls/tls-tcp-transporter.d.ts +131 -130
  411. package/dist/kernel/moleculer/mesh-queue-report.d.ts +39 -39
  412. package/dist/kernel/moleculer/node-registry.d.ts +120 -120
  413. package/dist/kernel/moleculer/process-context.d.ts +2 -2
  414. package/dist/kernel/moleculer/process-service.d.ts +168 -168
  415. package/dist/kernel/moleculer/provider-registry.d.ts +9 -9
  416. package/dist/kernel/moleculer/readiness-context.d.ts +58 -58
  417. package/dist/kernel/moleculer/readiness-service.d.ts +31 -16
  418. package/dist/kernel/moleculer/register-framework-resolver.d.ts +6 -6
  419. package/dist/kernel/moleculer/register-node-client.d.ts +34 -27
  420. package/dist/kernel/moleculer/remote-logger.d.ts +29 -29
  421. package/dist/kernel/moleculer/resilient-cap-call.d.ts +21 -21
  422. package/dist/kernel/moleculer/runner-native-allocator.d.ts +95 -95
  423. package/dist/kernel/moleculer/runner-process-group.d.ts +57 -57
  424. package/dist/kernel/moleculer/runtime-state-load.d.ts +21 -11
  425. package/dist/kernel/moleculer/settings-read-guard.d.ts +39 -39
  426. package/dist/kernel/moleculer/stream-probe-service.d.ts +25 -6
  427. package/dist/kernel/moleculer/trpc-links.d.ts +203 -203
  428. package/dist/kernel/moleculer/typed-array-serde.d.ts +9 -20
  429. package/dist/kernel/moleculer/worker-device-restore.d.ts +8 -8
  430. package/dist/kernel/outbound-queue-watch.d.ts +74 -74
  431. package/dist/kernel/process-cpu-census.d.ts +55 -55
  432. package/dist/kernel/provider-kind-drift.d.ts +17 -8
  433. package/dist/kernel/restart-coordinator.d.ts +71 -71
  434. package/dist/kernel/settings-door-view.d.ts +36 -25
  435. package/dist/kernel/settings-read-error.d.ts +29 -31
  436. package/dist/kernel/settings-view-types.d.ts +100 -95
  437. package/dist/kernel/socket-plane-report.d.ts +214 -153
  438. package/dist/kernel/status-overlay.d.ts +31 -11
  439. package/dist/kernel/storage-location-registry.d.ts +50 -50
  440. package/dist/kernel/store-settings-view.d.ts +13 -13
  441. package/dist/kernel/system-settings-mirror.d.ts +40 -28
  442. package/dist/kernel/system-settings-policy.d.ts +15 -34
  443. package/dist/kernel/transport/cap-action-census.d.ts +183 -183
  444. package/dist/kernel/transport/cap-action-name.d.ts +84 -84
  445. package/dist/kernel/transport/cap-child-index.d.ts +41 -41
  446. package/dist/kernel/transport/cap-route-resolver.d.ts +237 -212
  447. package/dist/kernel/transport/cap-route.d.ts +139 -139
  448. package/dist/kernel/transport/cap-routing-hints.d.ts +37 -37
  449. package/dist/kernel/transport/child-cap-protocol.d.ts +245 -245
  450. package/dist/kernel/transport/claimed-get-status.d.ts +30 -6
  451. package/dist/kernel/transport/create-local-transport.d.ts +5 -5
  452. package/dist/kernel/transport/frame-codec.d.ts +109 -109
  453. package/dist/kernel/transport/hub-cap-forward.d.ts +81 -59
  454. package/dist/kernel/transport/index.d.ts +36 -36
  455. package/dist/kernel/transport/local-child-client.d.ts +184 -184
  456. package/dist/kernel/transport/local-child-registry.d.ts +592 -592
  457. package/dist/kernel/transport/local-endpoint-path.d.ts +4 -4
  458. package/dist/kernel/transport/local-transport.d.ts +92 -92
  459. package/dist/kernel/transport/parent-unowned-call.d.ts +266 -237
  460. package/dist/kernel/transport/peer-answered-error.d.ts +14 -14
  461. package/dist/kernel/transport/socket-channel.d.ts +110 -110
  462. package/dist/kernel/transport/socket-traffic.d.ts +96 -96
  463. package/dist/kernel/transport/uds-event-bridge.d.ts +77 -50
  464. package/dist/kernel/transport/uds-event-bus.d.ts +75 -26
  465. package/dist/kernel/transport/uds-local-transport.d.ts +14 -14
  466. package/dist/kernel/transport/uds-log-ingest.d.ts +38 -23
  467. package/dist/kernel/transport/uds-logger.d.ts +33 -33
  468. package/dist/kernel/utils/ring-buffer.d.ts +12 -12
  469. package/dist/kernel/workspace-detect.d.ts +7 -7
  470. package/dist/lifecycle/lifecycle-state-machine.d.ts +24 -24
  471. package/dist/logging/formatter.d.ts +52 -25
  472. package/dist/logging/log-manager.d.ts +133 -133
  473. package/dist/logging/log-redactor.d.ts +22 -1
  474. package/dist/logging/log-ring-buffer.d.ts +57 -57
  475. package/dist/logging/logging-gate.d.ts +69 -25
  476. package/dist/logging/logging-gate.singleton.d.ts +12 -1
  477. package/dist/logging/partitioned-log-buffer.d.ts +161 -161
  478. package/dist/logging/scoped-logger.d.ts +14 -14
  479. package/dist/network/network-quality.d.ts +8 -8
  480. package/dist/notification/notification-service.d.ts +37 -37
  481. package/dist/notification/toast-service.d.ts +18 -18
  482. package/dist/pipeline/engine-manager-resolver.d.ts +12 -12
  483. package/dist/pipeline/pipeline-runner.d.ts +6 -6
  484. package/dist/pipeline/pipeline-validator.d.ts +8 -8
  485. package/dist/process/proc-stat.d.ts +51 -51
  486. package/dist/process/resource-monitor.d.ts +19 -19
  487. package/dist/python/python-env-manager.d.ts +10 -10
  488. package/dist/repl/interfaces.d.ts +21 -21
  489. package/dist/repl/repl-engine.d.ts +6 -6
  490. package/dist/storage/fs-storage-backend.d.ts +35 -35
  491. package/dist/storage/storage-location-manager.d.ts +21 -21
  492. package/dist/storage/storage-manager.d.ts +68 -68
  493. package/dist/tls/boot-tls.d.ts +24 -24
  494. package/dist/tls/cert-evaluation.d.ts +25 -25
  495. package/dist/tls/cert-identity.d.ts +39 -39
  496. package/dist/tls/cert-issue.d.ts +37 -17
  497. package/dist/tls/cert-manager.d.ts +86 -84
  498. package/dist/tls/https-listener.d.ts +16 -16
  499. package/dist/tls/index.d.ts +8 -8
  500. package/dist/tls/tls-actions.d.ts +18 -18
  501. package/dist/tls/tls-status.d.ts +15 -15
  502. package/dist/tls/uploaded-cert.d.ts +9 -9
  503. package/package.json +9 -3
@@ -1,61 +1,61 @@
1
- import { PersistedDeviceMeta } from './device-meta-types.js';
2
- import { ProviderContext } from './device-provider-context.js';
3
- import { DeviceRow } from './device-row-store.js';
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
- * version that COMPLETED (every planned write landed). */
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
- * nearest located ancestor `ancestorId`. */
9
+ * nearest located ancestor `ancestorId`. */
10
10
  export interface NullLocationFill {
11
- readonly id: number;
12
- readonly location: string;
13
- readonly ancestorId: number;
11
+ readonly id: number;
12
+ readonly location: string;
13
+ readonly ancestorId: number;
14
14
  }
15
15
  /**
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
- */
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
- get(deviceId: number): Promise<DeviceRow | null>;
39
+ get(deviceId: number): Promise<DeviceRow | null>;
40
40
  }
41
41
  /**
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
- */
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
- * 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
- */
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
- * Upper bound for ONE switch write. Generous against a live camera (a real
4
- * write is sub-second; the camera-plane pair is a few seconds of HTTP) and
5
- * small against the alternative: the 60 s transport default that let three
6
- * phases burn three minutes on 2026-09-01.
7
- */
8
- export declare const SWITCH_WRITE_TIMEOUT_MS = 15000;
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 = 'off' | 'on' | 'not-offered' | 'unreachable';
87
+ export type SwitchOutcome = "off" | "on" | "not-offered" | "unreachable";
11
88
  export interface SwitchReport {
12
- readonly deviceId: number;
13
- readonly switchId: CameraSwitchId;
14
- readonly outcome: SwitchOutcome;
15
- /** The refusal, verbatim, when the outcome is not the requested one. */
16
- readonly detail?: string;
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
- readonly sourceId: number;
20
- readonly targetId: number;
21
- /** Every switch write attempted, in order, on both devices. */
22
- readonly switches: readonly SwitchReport[];
23
- /**
24
- * Switches that could NOT be turned off on the source. Empty is the only
25
- * value that means "the old camera is fully quiet"; a caller that renders
26
- * only a success flag is not entitled to one.
27
- */
28
- readonly sourceStillLive: readonly CameraSwitchId[];
29
- readonly swapped: boolean;
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
- * A camera's switch states as read before the disable phase: every switch the
33
- * camera OFFERS, with its state. A switch it does not offer is absent.
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 = 'warn' | 'error';
114
+ export type MigrationLogLevel = "warn" | "error";
38
115
  export interface MigrateDeviceDeps {
39
- /** `pipelineOrchestrator.setCameraSwitch`, through `ctx.api`. */
40
- readonly setSwitch: (deviceId: number, switchId: CameraSwitchId, enabled: boolean) => Promise<void>;
41
- /** `DeviceRowStore.swapIds`, already under the meta write lock. */
42
- readonly swapIds: (a: number, b: number) => Promise<void>;
43
- /**
44
- * Swap the HARDWARE-scoped per-device state along with the rows: the driver
45
- * config blob (host/port/credentials/`deviceCache` — everything the
46
- * provider's schema owns) and the runtime-state blob. Role-scoped keys stay
47
- * with the number. See `migrate-hardware-state.ts` for the rule, and for
48
- * the incident where the rows swapped and the configs did not — the two
49
- * devices came out wearing each other's identity.
50
- *
51
- * A failure here THROWS, and the migration throws with it: rows swapped
52
- * with configs unswapped is exactly that incident, and it must never be
53
- * reported as a success.
54
- */
55
- readonly swapHardwareState: (sourceId: number, targetId: number) => Promise<void>;
56
- /**
57
- * Refuse a migration over a device under customization
58
- * (`migrate-hardware-state.ts::assertNoFieldClaims`, D663): a field claim
59
- * names the NUMBER while its owner names the STABLE ID the swap moves, so no
60
- * order of operations keeps both right. THROWS to refuse. Asked FIRST —
61
- * before any switch is flipped, so a refused migration leaves both cameras
62
- * exactly as they were.
63
- */
64
- readonly assertNoFieldClaims: (sourceId: number, targetId: number) => Promise<void>;
65
- /**
66
- * Tell the stream broker the hardware behind this number is gone
67
- * (`streamBroker.forgetDeviceHardware`): every DERIVED stream definition is
68
- * DELETED, the profile-slot assignment entry is purged, and the probed
69
- * snapshots and RTSP token rows of the old streams go with it.
70
- *
71
- * Measured on the live hub after replacing a Hikvision with a Reolink on id
72
- * 618: the assignment still said `mid → native:slot-3`, a raw slot only the
73
- * Hikvision had, and the `derived:Mid to low` feeder — defined against the
74
- * old profile layout — respawned every ten seconds forever (observed at
75
- * attempt 2732). The recorder reported `no profile attached for device
76
- * 618`, live view answered `No broker for stream "618/adaptive"`, and no
77
- * line named the stale assignment as the cause.
78
- *
79
- * Forgetting is deliberately what this does, rather than guessing a
80
- * mapping: the catalog is the authority on which stream is which, and it
81
- * belongs to the camera that is now there. An RPC, never an event — a
82
- * dropped event (D8) would leave the feeder respawning forever.
83
- */
84
- readonly forgetStreamState: (deviceId: number) => Promise<void>;
85
- readonly log: (message: string, meta: Record<string, unknown>) => void;
86
- /**
87
- * The state of every switch the camera offers, read BEFORE the disable
88
- * phase, so a migration refused before any row moved can put each switch
89
- * back exactly as it was (D663 5b ruling I-1) — never blanket-on, which
90
- * would undo a function the operator had switched off (D62). Bounded like a
91
- * switch write; a read that fails is reported and the rollback falls back to
92
- * switching that camera on.
93
- */
94
- readonly readSwitches: (deviceId: number) => Promise<SwitchStates>;
95
- /** One line about ONE device, tagged with its id (D391). */
96
- readonly logDevice: (level: MigrationLogLevel, deviceId: number, message: string, meta: Record<string, unknown>) => void;
97
- /**
98
- * Override for {@link SWITCH_WRITE_TIMEOUT_MS}, for the specs. A write that
99
- * outlives the bound is reported `unreachable` — never `off`/`on` — and may
100
- * still land later, which every switch authority tolerates (a duplicate
101
- * write of the same value is a no-op at all eight of them).
102
- */
103
- readonly switchTimeoutMs?: number;
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
- * Put both cameras to sleep, exchange their identities, wake the target.
107
- *
108
- * Throws only if the swap itself fails — a switch that could not be written is
109
- * reported, not raised, because refusing to migrate a camera whose old hardware
110
- * is unreachable would refuse the exact case this exists for.
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
- readonly sourceId: number;
114
- readonly targetId: number;
190
+ readonly sourceId: number;
191
+ readonly targetId: number;
115
192
  }): Promise<MigrateDeviceResult>;
@@ -1,46 +1,78 @@
1
- import { MigrateDeviceResult } from './migrate-device.js';
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
- readonly addonId: string;
5
- readonly stableId: string;
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
- readonly sourceId: number;
10
- readonly targetId: number;
11
- /** Identity the completed swap left at `sourceId` (the pre-swap target's). */
12
- readonly identityAtSource: DeviceIdentity;
13
- /** Identity the completed swap left at `targetId` (the pre-swap source's). */
14
- readonly identityAtTarget: DeviceIdentity;
15
- readonly result: MigrateDeviceResult;
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
- * How long a completed migration absorbs an identical repeat call. Sized to
19
- * comfortably cover the cap's own `timeoutMs` (10 min): a retry fired by a
20
- * client that gave up arrives inside that envelope; a call arriving later is
21
- * an operator's deliberate new operation and runs.
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
- /** Claim both ids for a run. Throws when either is already in flight. */
26
- begin(sourceId: number, targetId: number): void;
27
- /** Release both ids. Always paired with {@link begin} via try/finally. */
28
- end(sourceId: number, targetId: number): void;
29
- /**
30
- * Is a migration involving this device running right now? A per-field claim,
31
- * patch or release asks before touching the device's row (D663): the row is
32
- * about to be swapped with another device's, and a claim written into that
33
- * window would travel with the wrong hardware.
34
- */
35
- isInFlight(deviceId: number): boolean;
36
- /** Record a completed swap's fingerprint for replay matching. */
37
- recordCompleted(record: CompletedMigration): void;
38
- /**
39
- * The original report, when the call is a repeat of a completed swap: same
40
- * ordered pair, current row identities equal to the recorded post-swap
41
- * identities, within the window. `null` means "this is a new operation".
42
- */
43
- matchReplay(sourceId: number, targetId: number, atSource: DeviceIdentity, atTarget: DeviceIdentity): MigrateDeviceResult | null;
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;