@camstack/system 1.2.305 → 1.2.306

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 (60) hide show
  1. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  2. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  3. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  4. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  5. package/dist/builtins/alerts/alerts.addon.js +1 -1
  6. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  7. package/dist/builtins/autotrack/index.js +1 -1
  8. package/dist/builtins/autotrack/index.mjs +1 -1
  9. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  10. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  11. package/dist/builtins/camera-grid/index.js +1 -1
  12. package/dist/builtins/camera-grid/index.mjs +1 -1
  13. package/dist/builtins/console-logging/index.js +1 -1
  14. package/dist/builtins/console-logging/index.mjs +1 -1
  15. package/dist/builtins/core-blocks/core-blocks.addon.js +1 -1
  16. package/dist/builtins/core-blocks/core-blocks.addon.mjs +1 -1
  17. package/dist/builtins/device-manager/device-extension-linked-slot.d.ts +19 -0
  18. package/dist/builtins/device-manager/device-linked-devices.d.ts +26 -18
  19. package/dist/builtins/device-manager/device-manager.addon.js +157 -135
  20. package/dist/builtins/device-manager/device-manager.addon.mjs +157 -135
  21. package/dist/builtins/doorbell/binding-mirror.d.ts +13 -7
  22. package/dist/builtins/doorbell/virtual-doorbell.addon.d.ts +12 -45
  23. package/dist/builtins/doorbell/virtual-doorbell.addon.js +29 -102
  24. package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +29 -102
  25. package/dist/builtins/hub-forwarder/index.js +1 -1
  26. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  27. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  28. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  29. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  30. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  31. package/dist/builtins/local-network/local-network.addon.js +1 -1
  32. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  33. package/dist/builtins/loki-logging/index.js +1 -1
  34. package/dist/builtins/loki-logging/index.mjs +1 -1
  35. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  36. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  37. package/dist/builtins/platform-probe/index.js +1 -1
  38. package/dist/builtins/platform-probe/index.mjs +1 -1
  39. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  40. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  41. package/dist/builtins/snapshot/index.js +1 -1
  42. package/dist/builtins/snapshot/index.mjs +1 -1
  43. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  44. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  45. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  46. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  47. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  48. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  49. package/dist/builtins/system-config/system-config.addon.js +1 -1
  50. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  51. package/dist/builtins/winston-logging/index.js +1 -1
  52. package/dist/builtins/winston-logging/index.mjs +1 -1
  53. package/dist/{dist-Df1NhKxm.mjs → dist-CLfJMMdf.mjs} +40 -68
  54. package/dist/{dist-BK4iP6ab.js → dist-vecbhDzu.js} +39 -73
  55. package/dist/index.js +1 -1
  56. package/dist/index.mjs +1 -1
  57. package/dist/{retired-settings-keys-DwWMph6F.js → retired-settings-keys-Bm2p0Rot.js} +1 -1
  58. package/dist/{retired-settings-keys-dC4ckbXJ.mjs → retired-settings-keys-C1ODcdnr.mjs} +1 -1
  59. package/package.json +1 -1
  60. package/dist/builtins/device-manager/device-store-sections.d.ts +0 -26
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BK4iP6ab.js");
6
+ const require_dist = require("../../dist-vecbhDzu.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { L as addonPagesCapability, Wn as EventCategory, _n as BaseAddon, hn as errMsg } from "../../dist-Df1NhKxm.mjs";
1
+ import { I as addonPagesCapability, Un as EventCategory, gn as BaseAddon, mn as errMsg } from "../../dist-CLfJMMdf.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { createHash, randomUUID } from "node:crypto";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BK4iP6ab.js");
6
+ const require_dist = require("../../dist-vecbhDzu.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Wn as EventCategory, _n as BaseAddon, hn as errMsg, z as addonWidgetsCapability } from "../../dist-Df1NhKxm.mjs";
1
+ import { R as addonWidgetsCapability, Un as EventCategory, gn as BaseAddon, mn as errMsg } from "../../dist-CLfJMMdf.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { createHash, randomUUID } from "node:crypto";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BK4iP6ab.js");
6
+ const require_dist = require("../../dist-vecbhDzu.js");
7
7
  //#region src/builtins/alerts/prune-policy.ts
8
8
  /**
9
9
  * Ids older than `cutoffMs`, oldest first.
@@ -1,4 +1,4 @@
1
- import { An as createEvent, B as alertsCapability, Wn as EventCategory, _n as BaseAddon, hn as errMsg, n as AlertSchema } from "../../dist-Df1NhKxm.mjs";
1
+ import { Un as EventCategory, gn as BaseAddon, kn as createEvent, mn as errMsg, n as AlertSchema, z as alertsCapability } from "../../dist-CLfJMMdf.mjs";
2
2
  //#region src/builtins/alerts/prune-policy.ts
3
3
  /**
4
4
  * Ids older than `cutoffMs`, oldest first.
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BK4iP6ab.js");
6
+ const require_dist = require("../../dist-vecbhDzu.js");
7
7
  //#region src/builtins/autotrack/autotrack-config.ts
8
8
  var DEFAULT_AUTOTRACK_LOOP_CONFIG = {
9
9
  deadZoneFraction: .5,
@@ -1,4 +1,4 @@
1
- import { In as isEvent, Kt as ptzAutotrackCapability, U as bareAddonId, Wn as EventCategory, _n as BaseAddon, g as FIRST_LEVEL_MACRO_CLASSES, hn as errMsg } from "../../dist-Df1NhKxm.mjs";
1
+ import { Fn as isEvent, Gt as ptzAutotrackCapability, H as bareAddonId, Un as EventCategory, g as FIRST_LEVEL_MACRO_CLASSES, gn as BaseAddon, mn as errMsg } from "../../dist-CLfJMMdf.mjs";
2
2
  //#region src/builtins/autotrack/autotrack-config.ts
3
3
  var DEFAULT_AUTOTRACK_LOOP_CONFIG = {
4
4
  deadZoneFraction: .5,
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BK4iP6ab.js");
6
+ const require_dist = require("../../dist-vecbhDzu.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let buffer = require("buffer");
9
9
  let node_fs_promises = require("node:fs/promises");
@@ -1,4 +1,4 @@
1
- import { H as backupCapability, It as mayWriteToLocation, Wn as EventCategory, _n as BaseAddon, on as storageOccupancyCapability } from "../../dist-Df1NhKxm.mjs";
1
+ import { Ft as mayWriteToLocation, Un as EventCategory, V as backupCapability, an as storageOccupancyCapability, gn as BaseAddon } from "../../dist-CLfJMMdf.mjs";
2
2
  import { randomBytes, randomUUID } from "node:crypto";
3
3
  import { Buffer as Buffer$1 } from "buffer";
4
4
  import * as fsp from "node:fs/promises";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BK4iP6ab.js");
6
+ const require_dist = require("../../dist-vecbhDzu.js");
7
7
  let zod = require("zod");
8
8
  let _camstack_types_node = require("@camstack/types/node");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { $ as declarationOwnerNodeId, An as createEvent, Cn as DeviceType, K as cameraGridLayoutCapability, Pn as hydrateSchema, S as MOTION_CLOSE_AFTER_MS, Wn as EventCategory, _n as BaseAddon, cn as streamCatalogCapability, gn as buildFfmpegArgs, hn as errMsg, i as BaseDevice, m as DeclaredDevices, p as DERIVED_CAMERA_SILENCED_CAP_NAMES, rn as snapshotCapability, xn as DeviceFeature, zt as motionCapability } from "../../dist-Df1NhKxm.mjs";
1
+ import { G as cameraGridLayoutCapability, Nn as hydrateSchema, Q as declarationOwnerNodeId, Rt as motionCapability, S as MOTION_CLOSE_AFTER_MS, Sn as DeviceType, Un as EventCategory, bn as DeviceFeature, gn as BaseAddon, hn as buildFfmpegArgs, i as BaseDevice, kn as createEvent, m as DeclaredDevices, mn as errMsg, nn as snapshotCapability, p as DERIVED_CAMERA_SILENCED_CAP_NAMES, sn as streamCatalogCapability } from "../../dist-CLfJMMdf.mjs";
2
2
  import { z } from "zod";
3
3
  import { FfmpegProcess } from "@camstack/types/node";
4
4
  import { join } from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-BK4iP6ab.js");
6
+ const require_dist = require("../../dist-vecbhDzu.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  //#region src/builtins/console-logging/console-destination.ts
9
9
  var LEVEL_RANK = {
@@ -1,4 +1,4 @@
1
- import { Mt as logDestinationCapability, _n as BaseAddon } from "../../dist-Df1NhKxm.mjs";
1
+ import { gn as BaseAddon, jt as logDestinationCapability } from "../../dist-CLfJMMdf.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  //#region src/builtins/console-logging/console-destination.ts
4
4
  var LEVEL_RANK = {
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("../../chunk-Cek0wNdY.js");
3
- const require_dist = require("../../dist-BK4iP6ab.js");
3
+ const require_dist = require("../../dist-vecbhDzu.js");
4
4
  let node_crypto = require("node:crypto");
5
5
  let node_fs_promises = require("node:fs/promises");
6
6
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -1,4 +1,4 @@
1
- import { J as coreBlockAddonId, X as coreBlocksCapability, Y as coreBlockIdFromAddonId, _n as BaseAddon, c as CORE_BLOCKS_ADDON_ID, hn as errMsg, l as CORE_BLOCK_ADDON_PREFIX, m as DeclaredDevices, u as CoreBlockSchema } from "../../dist-Df1NhKxm.mjs";
1
+ import { J as coreBlockIdFromAddonId, Y as coreBlocksCapability, c as CORE_BLOCKS_ADDON_ID, gn as BaseAddon, l as CORE_BLOCK_ADDON_PREFIX, m as DeclaredDevices, mn as errMsg, q as coreBlockAddonId, u as CoreBlockSchema } from "../../dist-CLfJMMdf.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import * as fs from "node:fs/promises";
4
4
  import * as path$1 from "node:path";
@@ -4,5 +4,24 @@ import { ProviderContext } from './device-provider-context.js';
4
4
  export declare const DEVICE_MANAGER_EXTENSION_SOURCE = "device-manager";
5
5
  /** The store the slot reads and writes, named (D62). */
6
6
  export declare const LINKED_DEVICES_AUTHORITY = "device-manager:_linkedDeviceIds";
7
+ /** What `refusedTrackedOptIns` judges: the opt-in written, and what it may name. */
8
+ export interface TrackedOptInWrite {
9
+ readonly tracked: readonly number[];
10
+ /** The picks being written. */
11
+ readonly picked: readonly number[];
12
+ /** Linked by structure: tree children, a picked container's child. */
13
+ readonly implied: readonly number[];
14
+ /** The opt-in as stored before this write. */
15
+ readonly stored: readonly number[];
16
+ }
17
+ /**
18
+ * Which ids of a written opt-in must be refused: a NEW opt-in for a device the
19
+ * camera does not link. An id already stored is never refused — whatever was
20
+ * read can be written back unchanged (a stale opt-in is removed by leaving it
21
+ * out, never by being unable to save). The written list REPLACES the stored
22
+ * one: since D655 the editor shows every stored opt-in, so nothing it sends
23
+ * back is written blind.
24
+ */
25
+ export declare function refusedTrackedOptIns(params: TrackedOptInWrite): readonly number[];
7
26
  /** Build the `device-extension` provider the device manager registers. */
8
27
  export declare function createDeviceManagerExtensionProvider(pctx: ProviderContext): IDeviceExtensionProvider;
@@ -1,4 +1,4 @@
1
- import { ConfigUISchemaWithValues, IDeviceManagerProvider, LinkedDevicesMode, legacyAutoLinkIds, LinkCandidate } from '@camstack/types';
1
+ import { IDeviceManagerProvider, LinkedDevicesMode, legacyAutoLinkIds, LinkCandidate } from '@camstack/types';
2
2
  import { ProviderContext } from './device-provider-context.js';
3
3
  export { legacyAutoLinkIds, type LinkCandidate };
4
4
  /** Reserved device-config keys (cf. `_profileMap`). */
@@ -9,6 +9,12 @@ export declare const LINKED_IDS_CONFIG_KEY = "_linkedDeviceIds";
9
9
  * explicit operator OPT-IN (2026-07-22 flip: the old absent⇒ALL default
10
10
  * auto-materialized sensor snapshots the operator never asked for). */
11
11
  export declare const LINKED_TRACKED_IDS_CONFIG_KEY = "_linkedDeviceTrackedIds";
12
+ /**
13
+ * The three reserved keys, as one set: they stay with a camera's NUMBER on a
14
+ * hardware swap, and a settings save that still carries them (a page opened
15
+ * before D655 retired the section) is refused by name, never dropped.
16
+ */
17
+ export declare const LINKED_DEVICES_RESERVED_KEYS: ReadonlySet<string>;
12
18
  export interface LinkedDevicesConfig {
13
19
  /** Always `manual` since D356 — kept on the type because the cap output
14
20
  * still carries it for clients already shipped. */
@@ -40,6 +46,13 @@ export declare function resolveLinkedDeviceIds(params: {
40
46
  * are ignored.
41
47
  */
42
48
  export declare function resolveTrackedEventDeviceIds(config: Record<string, unknown>, linkedIds: readonly number[]): readonly number[];
49
+ /**
50
+ * The persisted tracked-event opt-in AS STORED — not intersected with the
51
+ * linked set, which is the resolver's job. Absent / non-array ⇒ `[]` (NONE,
52
+ * the same answer the resolver gives). Ids may be numbers or numeric strings;
53
+ * anything else is dropped; deduped, in stored order.
54
+ */
55
+ export declare function parseTrackedOptIn(config: Record<string, unknown>): readonly number[];
43
56
  /**
44
57
  * The fleet listing every function here needs, and the ONLY projection any of
45
58
  * them may ask for.
@@ -80,20 +93,18 @@ export declare function getLinkedDevices(pctx: ProviderContext, input: Parameter
80
93
  * an empty config, i.e. children-only) rather than dropping out of the array.
81
94
  */
82
95
  export declare function getLinkedDevicesBatch(pctx: ProviderContext, input: Parameters<IDeviceManagerProvider['getLinkedDevicesBatch']>[0]): ReturnType<IDeviceManagerProvider['getLinkedDevicesBatch']>;
96
+ /** The two device-store calls the linked-devices write needs — nothing else. */
97
+ export interface LinkedDevicesStoreAccess {
98
+ readonly settings: Pick<ProviderContext['settings'], 'readDeviceStore' | 'writeDeviceStore'>;
99
+ }
83
100
  /**
84
- * "Linked devices" settings section for a CAMERA (null for every other
85
- * device type — the association is camera-anchored). Contributed through
86
- * `collectSystemDeviceContributions`; saves route through the existing
87
- * `writerCapName: 'device-manager'` path into the device config blob.
88
- */
89
- export declare function buildLinkedDevicesContribution(pctx: ProviderContext, deviceId: number): Promise<ConfigUISchemaWithValues | null>;
90
- /**
91
- * Direct `applyDeviceSettingsPatch` normalization for the two reserved keys.
92
- * The admin-ui save path reaches the device config blob via the
93
- * `writerCapName: 'device-manager'` routing (never this method), but the cap
94
- * contract includes the method — keep it correct for direct callers.
101
+ * THE write path for the linked-devices keys — the `linked-devices` slot's
102
+ * `set` lands here (D648). Normalizes the pick list and the tracked-event
103
+ * opt-in; an EXPLICIT empty opt-in is stored as `[]`, never deleted, because
104
+ * an absent key and an empty one are read alike today but only `[]` says the
105
+ * operator chose "none".
95
106
  */
96
- export declare function applyLinkedDevicesPatch(pctx: Pick<ProviderContext, 'settings'>, deviceId: number, patch: Record<string, unknown>): Promise<{
107
+ export declare function applyLinkedDevicesPatch(pctx: LinkedDevicesStoreAccess, deviceId: number, patch: Record<string, unknown>): Promise<{
97
108
  success: true;
98
109
  }>;
99
110
  /** The one field a pick is judged by. */
@@ -123,10 +134,7 @@ export interface LinkedPickRefusal {
123
134
  * is not a new link. Removing them is the operator's call, never this
124
135
  * function's (a missing source is shown, never silently dropped).
125
136
  *
126
- * Deliberately NOT applied to the settings-section save
127
- * (`applyLinkedDevicesPatch` via `DEVICE_STORE_SECTIONS`): that surface has
128
- * never refused, its picker never offers a container, and the Locations page
129
- * writes the list through it. Slice 1 changes no behaviour on the old path;
130
- * both paths persist through `applyLinkedDevicesPatch`.
137
+ * Since D655 every write of the list goes through the slot, the Locations
138
+ * page's room rebuild included, so this is the only gate a pick passes.
131
139
  */
132
140
  export declare function refusedLinkedPicks(params: LinkedPicksInput): readonly LinkedPickRefusal[];