@camstack/system 1.2.190 → 1.2.192

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 (52) 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/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  8. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  9. package/dist/builtins/console-logging/index.js +1 -1
  10. package/dist/builtins/console-logging/index.mjs +1 -1
  11. package/dist/builtins/core-blocks/core-blocks.addon.js +1 -1
  12. package/dist/builtins/core-blocks/core-blocks.addon.mjs +1 -1
  13. package/dist/builtins/device-manager/device-manager.addon.js +2 -2
  14. package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
  15. package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
  16. package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
  17. package/dist/builtins/hub-forwarder/index.js +1 -1
  18. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  19. package/dist/builtins/liveness-monitor/liveness-checks.d.ts +11 -21
  20. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +12 -6
  21. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +12 -6
  22. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  23. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  24. package/dist/builtins/local-network/local-network.addon.js +1 -1
  25. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  26. package/dist/builtins/loki-logging/index.js +1 -1
  27. package/dist/builtins/loki-logging/index.mjs +1 -1
  28. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  29. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  30. package/dist/builtins/platform-probe/index.js +1 -1
  31. package/dist/builtins/platform-probe/index.mjs +1 -1
  32. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  33. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  34. package/dist/builtins/snapshot/index.js +1 -1
  35. package/dist/builtins/snapshot/index.mjs +1 -1
  36. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  37. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  38. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  39. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  40. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  41. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  42. package/dist/builtins/system-config/system-config.addon.js +1 -1
  43. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  44. package/dist/builtins/winston-logging/index.js +1 -1
  45. package/dist/builtins/winston-logging/index.mjs +1 -1
  46. package/dist/{dist-n6kxbqqp.mjs → dist-BjPKkEaJ.mjs} +49 -1
  47. package/dist/{dist-2wpm3tOu.js → dist-DyO7xSEt.js} +54 -0
  48. package/dist/index.js +1 -1
  49. package/dist/index.mjs +1 -1
  50. package/dist/{retired-settings-keys-D6gkOkcN.js → retired-settings-keys-BD6-AoDL.js} +1 -1
  51. package/dist/{retired-settings-keys-CRamEHzS.mjs → retired-settings-keys-DAG8eU5q.mjs} +1 -1
  52. package/package.json +1 -1
@@ -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-2wpm3tOu.js");
6
+ const require_dist = require("../../dist-DyO7xSEt.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 { E as addonPagesCapability, Ft as BaseAddon, Pt as errMsg, sn as EventCategory } from "../../dist-n6kxbqqp.mjs";
1
+ import { D as addonPagesCapability, Ft as errMsg, It as BaseAddon, cn as EventCategory } from "../../dist-BjPKkEaJ.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-2wpm3tOu.js");
6
+ const require_dist = require("../../dist-DyO7xSEt.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 { Ft as BaseAddon, O as addonWidgetsCapability, Pt as errMsg, sn as EventCategory } from "../../dist-n6kxbqqp.mjs";
1
+ import { Ft as errMsg, It as BaseAddon, cn as EventCategory, k as addonWidgetsCapability } from "../../dist-BjPKkEaJ.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-2wpm3tOu.js");
6
+ const require_dist = require("../../dist-DyO7xSEt.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 { Ft as BaseAddon, Jt as createEvent, Pt as errMsg, k as alertsCapability, n as AlertSchema, sn as EventCategory } from "../../dist-n6kxbqqp.mjs";
1
+ import { A as alertsCapability, Ft as errMsg, It as BaseAddon, Yt as createEvent, cn as EventCategory, n as AlertSchema } from "../../dist-BjPKkEaJ.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
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-2wpm3tOu.js");
6
+ const require_dist = require("../../dist-DyO7xSEt.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 { Ft as BaseAddon, j as backupCapability, sn as EventCategory } from "../../dist-n6kxbqqp.mjs";
1
+ import { It as BaseAddon, M as backupCapability, cn as EventCategory } from "../../dist-BjPKkEaJ.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-2wpm3tOu.js");
6
+ const require_dist = require("../../dist-DyO7xSEt.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 { Ft as BaseAddon, ct as logDestinationCapability } from "../../dist-n6kxbqqp.mjs";
1
+ import { It as BaseAddon, lt as logDestinationCapability } from "../../dist-BjPKkEaJ.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-2wpm3tOu.js");
3
+ const require_dist = require("../../dist-DyO7xSEt.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 { Ft as BaseAddon, I as coreBlockAddonId, L as coreBlockIdFromAddonId, Pt as errMsg, R as coreBlocksCapability, c as CORE_BLOCK_ADDON_PREFIX, d as DeclaredDevices, l as CoreBlockSchema, s as CORE_BLOCKS_ADDON_ID } from "../../dist-n6kxbqqp.mjs";
1
+ import { Ft as errMsg, It as BaseAddon, L as coreBlockAddonId, R as coreBlockIdFromAddonId, c as CORE_BLOCK_ADDON_PREFIX, d as DeclaredDevices, l as CoreBlockSchema, s as CORE_BLOCKS_ADDON_ID, z as coreBlocksCapability } from "../../dist-BjPKkEaJ.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";
@@ -3,8 +3,8 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-2wpm3tOu.js");
7
- const require_retired_settings_keys = require("../../retired-settings-keys-D6gkOkcN.js");
6
+ const require_dist = require("../../dist-DyO7xSEt.js");
7
+ const require_retired_settings_keys = require("../../retired-settings-keys-BD6-AoDL.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let _camstack_types_node = require("@camstack/types/node");
10
10
  //#region src/builtins/device-manager/adoption-job-engine.ts
@@ -1,5 +1,5 @@
1
- import { $t as isDeviceConfigCap, Bt as DeviceRole, Ft as BaseAddon, H as deviceManagerCapability, J as enumerateSchemaFields, P as buildStreamParamsConfigSchema, Pt as errMsg, U as deviceStateCapability, Vt as DeviceType, W as deviceStatusCapability, Wt as WELL_KNOWN_TAB_MAP, a as CAMERA_SWITCH_ORDER, b as STREAM_PROFILE_META, f as DeviceStatusSchema, ft as normalizeUnit, mt as parseStreamParamsFormPatch, o as CAP_NAMES_WITH_STATUS, on as sleep, q as enumerateItemArrayFields, sn as EventCategory, t as ALL_CAPABILITY_DEFINITIONS, xt as runtimeStatePolicyFor, yt as resolveContainerPrimaryChild, zt as DeviceFeature } from "../../dist-n6kxbqqp.mjs";
2
- import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-CRamEHzS.mjs";
1
+ import { Bt as DeviceFeature, F as buildStreamParamsConfigSchema, Ft as errMsg, G as deviceStatusCapability, Gt as WELL_KNOWN_TAB_MAP, Ht as DeviceType, It as BaseAddon, J as enumerateItemArrayFields, St as runtimeStatePolicyFor, U as deviceManagerCapability, Vt as DeviceRole, W as deviceStateCapability, Y as enumerateSchemaFields, a as CAMERA_SWITCH_ORDER, bt as resolveContainerPrimaryChild, cn as EventCategory, en as isDeviceConfigCap, f as DeviceStatusSchema, ht as parseStreamParamsFormPatch, o as CAP_NAMES_WITH_STATUS, pt as normalizeUnit, sn as sleep, t as ALL_CAPABILITY_DEFINITIONS, x as STREAM_PROFILE_META } from "../../dist-BjPKkEaJ.mjs";
2
+ import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-DAG8eU5q.mjs";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { canonicalDeviceFingerprint } from "@camstack/types/node";
5
5
  //#region src/builtins/device-manager/adoption-job-engine.ts
@@ -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-2wpm3tOu.js");
6
+ const require_dist = require("../../dist-DyO7xSEt.js");
7
7
  //#region src/builtins/doorbell/trigger-engine.ts
8
8
  /**
9
9
  * Pure trigger logic for the virtual-doorbell builtin — edge detection over
@@ -1,4 +1,4 @@
1
- import { Ft as BaseAddon, G as doorbellCapability, Jt as createEvent, M as bareAddonId, Pt as errMsg, Vt as DeviceType, Y as evaluateSensorEdge, _ as SOURCE_CAPS, nt as isSameAddonId, rt as isSourceCap, sn as EventCategory, v as SOURCE_DEVICE_TYPES } from "../../dist-n6kxbqqp.mjs";
1
+ import { Ft as errMsg, Ht as DeviceType, It as BaseAddon, K as doorbellCapability, N as bareAddonId, X as evaluateSensorEdge, Yt as createEvent, cn as EventCategory, it as isSourceCap, rt as isSameAddonId, v as SOURCE_CAPS, y as SOURCE_DEVICE_TYPES } from "../../dist-BjPKkEaJ.mjs";
2
2
  //#region src/builtins/doorbell/trigger-engine.ts
3
3
  /**
4
4
  * Pure trigger logic for the virtual-doorbell builtin — edge detection over
@@ -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-2wpm3tOu.js");
6
+ const require_dist = require("../../dist-DyO7xSEt.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  //#region src/builtins/hub-forwarder/hub-forwarder-destination.ts
9
9
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
@@ -1,4 +1,4 @@
1
- import { Ft as BaseAddon, ct as logDestinationCapability } from "../../dist-n6kxbqqp.mjs";
1
+ import { It as BaseAddon, lt as logDestinationCapability } from "../../dist-BjPKkEaJ.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  //#region src/builtins/hub-forwarder/hub-forwarder-destination.ts
4
4
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
@@ -1,24 +1,6 @@
1
- /**
2
- * The liveness invariants, as pure functions.
3
- *
4
- * On 2026-08-03 the hub ran for four hours with zero devices, zero published
5
- * streams and zero recordings, and nothing said a word. Three separate defects
6
- * caused it — optional chaining that no-oped, an `if` with no `else`, a JSON
7
- * parse that returned `{}` — and each was silent at the point of failure. All
8
- * three were fixed and a log line added at each. This module exists for the
9
- * CLASS rather than the instances: assert what must be true of a working node,
10
- * and report when it is not.
11
- *
12
- * **Every check here is unambiguous, on purpose.** An alert that fires on a
13
- * quiet night is one an operator learns to ignore, and an ignored alert is
14
- * worse than no alert. So "the pipeline emitted no tracks recently" is NOT a
15
- * check — a camera can legitimately see nothing for hours — while "a camera
16
- * that has been recording all day stopped producing segments" is: continuous
17
- * recording produces segments whether or not anything moves.
18
- *
19
- * I/O lives in the addon; everything here is a function of facts, so the
20
- * outage can be replayed in a test.
21
- */
1
+ import { RecordingStatus } from '@camstack/types';
2
+ /** The recording mode a camera is running under, as `recording.getStatus` reports it. */
3
+ export type RecordingActiveMode = RecordingStatus['activeMode'];
22
4
  /** What the monitor learned about one camera this tick. */
23
5
  export interface CameraFootage {
24
6
  readonly deviceId: number;
@@ -33,6 +15,14 @@ export interface CameraFootage {
33
15
  * stopped is a fault, a camera that never records is a configuration.
34
16
  */
35
17
  readonly lastSegmentMs: number | null;
18
+ /**
19
+ * The recording mode the camera runs under, asked only when it looks silent
20
+ * (`null` = not asked, the footage was recent). Silence is a fault ONLY for a
21
+ * `continuous` recorder: an `events` recorder that has seen nothing move is
22
+ * doing its job, and `off` is the operator's own switch. Seven events-mode
23
+ * cameras alerted for a whole quiet night on 2026-09-06.
24
+ */
25
+ readonly activeMode: RecordingActiveMode | null;
36
26
  }
37
27
  export interface LivenessFacts {
38
28
  readonly nowMs: number;
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  require("../../chunk-Cek0wNdY.js");
3
- const require_dist = require("../../dist-2wpm3tOu.js");
3
+ const require_dist = require("../../dist-DyO7xSEt.js");
4
4
  //#region src/builtins/liveness-monitor/liveness-checks.ts
5
5
  var NO_DEVICES = "liveness:no-devices";
6
6
  var ALL_OFFLINE = "liveness:all-devices-offline";
@@ -34,6 +34,7 @@ function evaluateLiveness(facts) {
34
34
  if (!cam.online) continue;
35
35
  const silentFor = facts.nowMs - cam.lastSegmentMs;
36
36
  if (silentFor <= facts.staleAfterMs) continue;
37
+ if (cam.activeMode !== null && cam.activeMode !== "continuous") continue;
37
38
  findings.push({
38
39
  id: `${NO_FOOTAGE_PREFIX}${cam.deviceId}`,
39
40
  severity: "error",
@@ -147,11 +148,16 @@ var LivenessMonitorAddon = class extends require_dist.BaseAddon {
147
148
  };
148
149
  const cameraDevices = devices.filter((d) => d.isCamera === true);
149
150
  const cameras = [];
150
- for (const device of cameraDevices) cameras.push({
151
- deviceId: device.id,
152
- online: device.online === true,
153
- lastSegmentMs: await this.lastSegmentMs(device.id, nowMs, staleAfterMs)
154
- });
151
+ for (const device of cameraDevices) {
152
+ const lastSegmentMs = await this.lastSegmentMs(device.id, nowMs, staleAfterMs);
153
+ const activeMode = lastSegmentMs !== null && nowMs - lastSegmentMs > staleAfterMs ? require_dist.RecordingStatusSchema.parse(await this.ctx.api.recording.getStatus.query({ deviceId: device.id })).activeMode : null;
154
+ cameras.push({
155
+ deviceId: device.id,
156
+ online: device.online === true,
157
+ lastSegmentMs,
158
+ activeMode
159
+ });
160
+ }
155
161
  return {
156
162
  nowMs,
157
163
  deviceCount: devices.length,
@@ -1,4 +1,4 @@
1
- import { Ft as BaseAddon, Jt as createEvent, Pt as errMsg, sn as EventCategory } from "../../dist-n6kxbqqp.mjs";
1
+ import { Ft as errMsg, It as BaseAddon, Yt as createEvent, _ as RecordingStatusSchema, cn as EventCategory } from "../../dist-BjPKkEaJ.mjs";
2
2
  //#region src/builtins/liveness-monitor/liveness-checks.ts
3
3
  var NO_DEVICES = "liveness:no-devices";
4
4
  var ALL_OFFLINE = "liveness:all-devices-offline";
@@ -32,6 +32,7 @@ function evaluateLiveness(facts) {
32
32
  if (!cam.online) continue;
33
33
  const silentFor = facts.nowMs - cam.lastSegmentMs;
34
34
  if (silentFor <= facts.staleAfterMs) continue;
35
+ if (cam.activeMode !== null && cam.activeMode !== "continuous") continue;
35
36
  findings.push({
36
37
  id: `${NO_FOOTAGE_PREFIX}${cam.deviceId}`,
37
38
  severity: "error",
@@ -145,11 +146,16 @@ var LivenessMonitorAddon = class extends BaseAddon {
145
146
  };
146
147
  const cameraDevices = devices.filter((d) => d.isCamera === true);
147
148
  const cameras = [];
148
- for (const device of cameraDevices) cameras.push({
149
- deviceId: device.id,
150
- online: device.online === true,
151
- lastSegmentMs: await this.lastSegmentMs(device.id, nowMs, staleAfterMs)
152
- });
149
+ for (const device of cameraDevices) {
150
+ const lastSegmentMs = await this.lastSegmentMs(device.id, nowMs, staleAfterMs);
151
+ const activeMode = lastSegmentMs !== null && nowMs - lastSegmentMs > staleAfterMs ? RecordingStatusSchema.parse(await this.ctx.api.recording.getStatus.query({ deviceId: device.id })).activeMode : null;
152
+ cameras.push({
153
+ deviceId: device.id,
154
+ online: device.online === true,
155
+ lastSegmentMs,
156
+ activeMode
157
+ });
158
+ }
153
159
  return {
154
160
  nowMs,
155
161
  deviceCount: devices.length,
@@ -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-2wpm3tOu.js");
6
+ const require_dist = require("../../dist-DyO7xSEt.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  node_crypto = require_chunk.__toESM(node_crypto);
9
9
  let crypto$1 = require("crypto");
@@ -1,5 +1,5 @@
1
1
  import { i as __require, o as __toESM, t as __commonJSMin } from "../../chunk-CNf5ZN-e.mjs";
2
- import { A as authProviderCapability, Ft as BaseAddon, T as UserRecordSchema, jt as userManagementCapability, r as ApiKeyRecordSchema, x as ScopedTokenSchema } from "../../dist-n6kxbqqp.mjs";
2
+ import { E as UserRecordSchema, It as BaseAddon, Mt as userManagementCapability, S as ScopedTokenSchema, j as authProviderCapability, r as ApiKeyRecordSchema } from "../../dist-BjPKkEaJ.mjs";
3
3
  import * as crypto$2 from "node:crypto";
4
4
  import { createHash, randomUUID, timingSafeEqual } from "node:crypto";
5
5
  import nodeCrypto from "crypto";
@@ -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-2wpm3tOu.js");
3
+ const require_dist = require("../../dist-DyO7xSEt.js");
4
4
  const require_tls = require("../../tls-BxQlomxd.js");
5
5
  let node_fs_promises = require("node:fs/promises");
6
6
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Ft as BaseAddon, sn as EventCategory, st as localNetworkCapability } from "../../dist-n6kxbqqp.mjs";
1
+ import { It as BaseAddon, cn as EventCategory, ct as localNetworkCapability } from "../../dist-BjPKkEaJ.mjs";
2
2
  import { S as readLanHttpState, _ as DEFAULT_LAN_HTTP_PORT, a as writeTlsMode, i as writeExtraSans, l as reissueTlsLeaf, n as readTlsAccessStatus, o as validateUploadedTls, r as readTlsMode, s as ensureTlsCert, t as readExtraSans, y as applyLanHttp } from "../../tls-DOTmtLCW.mjs";
3
3
  import { mkdir, writeFile } from "node:fs/promises";
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-2wpm3tOu.js");
6
+ const require_dist = require("../../dist-DyO7xSEt.js");
7
7
  //#region src/builtins/loki-logging/loki-payload.ts
8
8
  /**
9
9
  * Loki rejects a label name that is not a valid Prometheus label
@@ -1,4 +1,4 @@
1
- import { Ft as BaseAddon, ct as logDestinationCapability } from "../../dist-n6kxbqqp.mjs";
1
+ import { It as BaseAddon, lt as logDestinationCapability } from "../../dist-BjPKkEaJ.mjs";
2
2
  //#region src/builtins/loki-logging/loki-payload.ts
3
3
  /**
4
4
  * Loki rejects a label name that is not a valid Prometheus label
@@ -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-2wpm3tOu.js");
6
+ const require_dist = require("../../dist-DyO7xSEt.js");
7
7
  let node_fs_promises = require("node:fs/promises");
8
8
  let node_child_process = require("node:child_process");
9
9
  let node_util = require("node:util");
@@ -1,4 +1,4 @@
1
- import { Ft as BaseAddon, Jt as createEvent, Pt as errMsg, Q as foldSnapshotByFunction, _t as reducePoints, dt as metricsProviderCapability, sn as EventCategory, vt as resolveBucketMs } from "../../dist-n6kxbqqp.mjs";
1
+ import { $ as foldSnapshotByFunction, Ft as errMsg, It as BaseAddon, Yt as createEvent, cn as EventCategory, ft as metricsProviderCapability, vt as reducePoints, yt as resolveBucketMs } from "../../dist-BjPKkEaJ.mjs";
2
2
  import { readFile, readdir } from "node:fs/promises";
3
3
  import { execFile, execFileSync } from "node:child_process";
4
4
  import { promisify } from "node:util";
@@ -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-2wpm3tOu.js");
6
+ const require_dist = require("../../dist-DyO7xSEt.js");
7
7
  let node_child_process = require("node:child_process");
8
8
  let node_util = require("node:util");
9
9
  let node_fs = require("node:fs");
@@ -1,5 +1,5 @@
1
1
  import { o as __toESM } from "../../chunk-CNf5ZN-e.mjs";
2
- import { Ft as BaseAddon, K as enumerateInferenceDevices, Pt as errMsg, Xt as emitReadiness, ht as platformProbeCapability, sn as EventCategory, wt as scoreRuntimes } from "../../dist-n6kxbqqp.mjs";
2
+ import { Ft as errMsg, It as BaseAddon, Tt as scoreRuntimes, Zt as emitReadiness, cn as EventCategory, gt as platformProbeCapability, q as enumerateInferenceDevices } from "../../dist-BjPKkEaJ.mjs";
3
3
  import { execFile } from "node:child_process";
4
4
  import { promisify } from "node:util";
5
5
  import * as fs from "node:fs";
@@ -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-2wpm3tOu.js");
6
+ const require_dist = require("../../dist-DyO7xSEt.js");
7
7
  //#region src/builtins/remote-access-orchestrator/enabled-providers-reconcile.ts
8
8
  /**
9
9
  * Reconcile the durable `enabledProviders` set against authoritative
@@ -1,4 +1,4 @@
1
- import { Ft as BaseAddon, sn as EventCategory } from "../../dist-n6kxbqqp.mjs";
1
+ import { It as BaseAddon, cn as EventCategory } from "../../dist-BjPKkEaJ.mjs";
2
2
  //#region src/builtins/remote-access-orchestrator/enabled-providers-reconcile.ts
3
3
  /**
4
4
  * Reconcile the durable `enabledProviders` set against authoritative
@@ -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-2wpm3tOu.js");
6
+ const require_dist = require("../../dist-DyO7xSEt.js");
7
7
  let zod = require("zod");
8
8
  let node_crypto = require("node:crypto");
9
9
  let _camstack_types_node = require("@camstack/types/node");
@@ -1,4 +1,4 @@
1
- import { At as streamQualityLabel, Et as snapshotCapability, Ft as BaseAddon, M as bareAddonId, N as batteryCapability, Pt as errMsg, V as deriveBatteryPresence, Vt as DeviceType, en as nodePin, i as BatteryStatusSchema, sn as EventCategory, zt as DeviceFeature } from "../../dist-n6kxbqqp.mjs";
1
+ import { Bt as DeviceFeature, Dt as snapshotCapability, Ft as errMsg, H as deriveBatteryPresence, Ht as DeviceType, It as BaseAddon, N as bareAddonId, P as batteryCapability, cn as EventCategory, i as BatteryStatusSchema, jt as streamQualityLabel, tn as nodePin } from "../../dist-BjPKkEaJ.mjs";
2
2
  import { z } from "zod";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { signExpiringUrl, verifyExpiringUrl } from "@camstack/types/node";
@@ -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-2wpm3tOu.js");
6
+ const require_dist = require("../../dist-DyO7xSEt.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let node_fs_promises = require("node:fs/promises");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Ft as BaseAddon, Z as filesystemBrowseCapability, kt as storageProviderCapability } from "../../dist-n6kxbqqp.mjs";
1
+ import { At as storageProviderCapability, It as BaseAddon, Q as filesystemBrowseCapability } from "../../dist-BjPKkEaJ.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { mkdir, readdir, realpath, statfs } from "node:fs/promises";
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-2wpm3tOu.js");
6
+ const require_dist = require("../../dist-DyO7xSEt.js");
7
7
  const require_hub_cap_forward = require("../../hub-cap-forward-DmHNjbB0.js");
8
8
  let zod = require("zod");
9
9
  let node_crypto = require("node:crypto");
@@ -1,4 +1,4 @@
1
- import { C as StorageLocationTypeSchema, Dt as storageCapability, F as collectSecretConfigKeys, Ft as BaseAddon, Ot as storageMigrationCapability, S as StorageCleanupJobSchema, Tt as settingsStoreCapability, h as REDACTED_SECRET, tn as parseJsonObject, w as StorageMigrationJobSchema } from "../../dist-n6kxbqqp.mjs";
1
+ import { C as StorageCleanupJobSchema, Et as settingsStoreCapability, I as collectSecretConfigKeys, It as BaseAddon, Ot as storageCapability, T as StorageMigrationJobSchema, h as REDACTED_SECRET, kt as storageMigrationCapability, nn as parseJsonObject, w as StorageLocationTypeSchema } from "../../dist-BjPKkEaJ.mjs";
2
2
  import { t as HUB_CAP_FWD_ACTION } from "../../hub-cap-forward-BdT320dq.mjs";
3
3
  import { z } from "zod";
4
4
  import { randomUUID } from "node:crypto";
@@ -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-2wpm3tOu.js");
6
+ const require_dist = require("../../dist-DyO7xSEt.js");
7
7
  //#region src/builtins/system-config/system-config.addon.ts
8
8
  /**
9
9
  * Built-in `system-config` addon — Phase 4 of the settings redesign.
@@ -1,4 +1,4 @@
1
- import { Ft as BaseAddon, Pt as errMsg, Qt as hydrateSchema } from "../../dist-n6kxbqqp.mjs";
1
+ import { $t as hydrateSchema, Ft as errMsg, It as BaseAddon } from "../../dist-BjPKkEaJ.mjs";
2
2
  //#region src/builtins/system-config/system-config.addon.ts
3
3
  /**
4
4
  * Built-in `system-config` addon — Phase 4 of the settings redesign.
@@ -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-2wpm3tOu.js");
6
+ const require_dist = require("../../dist-DyO7xSEt.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  let node_path = require("node:path");
9
9
  node_path = require_chunk.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { Ft as BaseAddon, ct as logDestinationCapability } from "../../dist-n6kxbqqp.mjs";
1
+ import { It as BaseAddon, lt as logDestinationCapability } from "../../dist-BjPKkEaJ.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  import * as path$1 from "node:path";
4
4
  import path from "node:path";
@@ -18279,6 +18279,33 @@ var RecentTracksQueryInput = z.object({
18279
18279
  */
18280
18280
  classes: z.array(z.string()).optional()
18281
18281
  });
18282
+ /**
18283
+ * A Summary (D359): the per-camera session envelope that references tracks.
18284
+ * `groupShotKey` is the media key of its group shot (`ownerKind: 'summary'`,
18285
+ * served by the event-media plane by key), null until the first frame with a
18286
+ * member visible has been materialised.
18287
+ */
18288
+ var SummarySchema = z.object({
18289
+ id: z.string(),
18290
+ deviceId: z.number(),
18291
+ openedAt: z.number(),
18292
+ lastActiveAt: z.number(),
18293
+ sealedAt: z.number().nullable(),
18294
+ memberCount: z.number().int().nonnegative(),
18295
+ groupShotKey: z.string().nullable()
18296
+ });
18297
+ var SummariesQueryInput = z.object({
18298
+ deviceIds: z.array(z.number()).min(1),
18299
+ since: z.number().optional(),
18300
+ until: z.number().optional(),
18301
+ limit: z.number().int().min(1).max(200).default(50)
18302
+ });
18303
+ var SummariesPageSchema = z.object({ summaries: z.array(SummarySchema).readonly() });
18304
+ var SummaryDetailSchema = z.object({
18305
+ summary: SummarySchema,
18306
+ /** Member track ids, in absorption order. */
18307
+ trackIds: z.array(z.string()).readonly()
18308
+ });
18282
18309
  var RecentTracksPageSchema = z.object({
18283
18310
  /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
18284
18311
  tracks: z.array(TrackSchema).readonly(),
@@ -18706,6 +18733,10 @@ var pipelineAnalyticsCapability = {
18706
18733
  * are not included (same contract as `listTracks`).
18707
18734
  */
18708
18735
  listRecentTracks: method(RecentTracksQueryInput, RecentTracksPageSchema),
18736
+ /** Newest first by `openedAt`, for a camera set, inside an optional window. */
18737
+ listSummaries: method(SummariesQueryInput, SummariesPageSchema),
18738
+ /** One summary with its member track ids; `null` for an id nobody wrote. */
18739
+ getSummary: method(z.object({ id: z.string() }), SummaryDetailSchema.nullable()),
18709
18740
  clearTracks: method(z.object({ deviceId: z.number() }), z.void(), {
18710
18741
  kind: "mutation",
18711
18742
  auth: "admin"
@@ -38062,6 +38093,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
38062
38093
  addonId: null,
38063
38094
  access: "view"
38064
38095
  },
38096
+ "pipelineAnalytics.getSummary": {
38097
+ capName: "pipeline-analytics",
38098
+ capScope: "device",
38099
+ addonId: null,
38100
+ access: "view"
38101
+ },
38065
38102
  "pipelineAnalytics.getTrack": {
38066
38103
  capName: "pipeline-analytics",
38067
38104
  capScope: "device",
@@ -38140,6 +38177,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
38140
38177
  addonId: null,
38141
38178
  access: "view"
38142
38179
  },
38180
+ "pipelineAnalytics.listSummaries": {
38181
+ capName: "pipeline-analytics",
38182
+ capScope: "device",
38183
+ addonId: null,
38184
+ access: "view"
38185
+ },
38143
38186
  "pipelineAnalytics.listTrackMedia": {
38144
38187
  capName: "pipeline-analytics",
38145
38188
  capScope: "device",
@@ -41835,6 +41878,11 @@ Object.freeze({
41835
41878
  form: "array",
41836
41879
  optional: true
41837
41880
  }],
41881
+ "pipelineAnalytics.listSummaries": [{
41882
+ name: "deviceIds",
41883
+ form: "array",
41884
+ optional: false
41885
+ }],
41838
41886
  "pipelineAnalytics.listTrackMedia": [{
41839
41887
  name: "deviceId",
41840
41888
  form: "single",
@@ -43546,4 +43594,4 @@ function enumerateInferenceDevices(hw) {
43546
43594
  return out;
43547
43595
  }
43548
43596
  //#endregion
43549
- export { isArrayOutputSchema as $, isDeviceConfigCap as $t, authProviderCapability as A, streamQualityLabel as At, decodeVectorBase64 as B, DeviceRole as Bt, StorageLocationTypeSchema as C, scopesAllowDeviceCap as Ct, addonSettingsCapability as D, storageCapability as Dt, addonPagesCapability as E, snapshotCapability as Et, collectSecretConfigKeys as F, BaseAddon as Ft, doorbellCapability as G, asJsonObject as Gt, deviceManagerCapability as H, ReadinessRegistry as Ht, coreBlockAddonId as I, DATAPLANE_SECRET_HEADER as It, enumerateSchemaFields as J, createEvent as Jt, enumerateInferenceDevices as K, asNumber as Kt, coreBlockIdFromAddonId as L, DEVICE_SETTINGS_CONTRIBUTION_METHODS as Lt, bareAddonId as M, vectorDimFromBase64 as Mt, batteryCapability as N, vectorStoreCapability as Nt, addonWidgetsCapability as O, storageMigrationCapability as Ot, buildStreamParamsConfigSchema as P, errMsg as Pt, foldSnapshotByFunction as Q, hydrateSchema as Qt, coreBlocksCapability as R, DEVICE_STATUS_METHOD as Rt, StorageCleanupJobSchema as S, scopesAllowAddon as St, UserRecordSchema as T, settingsStoreCapability as Tt, deviceStateCapability as U, ReadinessTimeoutError as Ut, deriveBatteryPresence as V, DeviceType as Vt, deviceStatusCapability as W, WELL_KNOWN_TAB_MAP as Wt, extractNestedAddonId as X, emitReadiness as Xt, evaluateSensorEdge as Y, emitDownForOwnedCaps as Yt, filesystemBrowseCapability as Z, expandCapMethods as Zt, SOURCE_CAPS as _, reducePoints as _t, CAMERA_SWITCH_ORDER as a, scopeKey as an, kebabToCamel as at, STREAM_PROFILE_META as b, resolveMethodAuth as bt, CORE_BLOCK_ADDON_PREFIX as c, logDestinationCapability as ct, DeclaredDevices as d, metricsProviderCapability as dt, nodePin as en, isCollectionArrayMethod as et, DeviceStatusSchema as f, normalizeUnit as ft, RUNTIME_DEFAULTS as g, procedureAuthKey as gt, REDACTED_SECRET as h, platformProbeCapability as ht, BatteryStatusSchema as i, resolveCapMount as in, isVoidInput as it, backupCapability as j, userManagementCapability as jt, alertsCapability as k, storageProviderCapability as kt, CoreBlockSchema as l, logLevelAtMost as lt, METHOD_ACCESS_MAP as m, parseStreamParamsFormPatch as mt, AlertSchema as n, parseJsonUnknown as nn, isSameAddonId as nt, CAP_NAMES_WITH_STATUS as o, sleep as on, lifecycleJobSchema as ot, LOG_LEVEL_RANK as p, objectInputDeclaresAddonId as pt, enumerateItemArrayFields as q, asString as qt, ApiKeyRecordSchema as r, readinessKey as rn, isSourceCap as rt, CORE_BLOCKS_ADDON_ID as s, EventCategory as sn, localNetworkCapability as st, ALL_CAPABILITY_DEFINITIONS as t, parseJsonObject as tn, isObjectInput as tt, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as u, looseSchema as ut, SOURCE_DEVICE_TYPES as v, resolveBucketMs as vt, StorageMigrationJobSchema as w, scoreRuntimes as wt, ScopedTokenSchema as x, runtimeStatePolicyFor as xt, STORAGE_ACCESS_FALLBACK as y, resolveContainerPrimaryChild as yt, dataStoreProviderCapability as z, DeviceFeature as zt };
43597
+ export { foldSnapshotByFunction as $, hydrateSchema as $t, alertsCapability as A, storageProviderCapability as At, dataStoreProviderCapability as B, DeviceFeature as Bt, StorageCleanupJobSchema as C, scopesAllowAddon as Ct, addonPagesCapability as D, snapshotCapability as Dt, UserRecordSchema as E, settingsStoreCapability as Et, buildStreamParamsConfigSchema as F, errMsg as Ft, deviceStatusCapability as G, WELL_KNOWN_TAB_MAP as Gt, deriveBatteryPresence as H, DeviceType as Ht, collectSecretConfigKeys as I, BaseAddon as It, enumerateItemArrayFields as J, asString as Jt, doorbellCapability as K, asJsonObject as Kt, coreBlockAddonId as L, DATAPLANE_SECRET_HEADER as Lt, backupCapability as M, userManagementCapability as Mt, bareAddonId as N, vectorDimFromBase64 as Nt, addonSettingsCapability as O, storageCapability as Ot, batteryCapability as P, vectorStoreCapability as Pt, filesystemBrowseCapability as Q, expandCapMethods as Qt, coreBlockIdFromAddonId as R, DEVICE_SETTINGS_CONTRIBUTION_METHODS as Rt, ScopedTokenSchema as S, runtimeStatePolicyFor as St, StorageMigrationJobSchema as T, scoreRuntimes as Tt, deviceManagerCapability as U, ReadinessRegistry as Ut, decodeVectorBase64 as V, DeviceRole as Vt, deviceStateCapability as W, ReadinessTimeoutError as Wt, evaluateSensorEdge as X, emitDownForOwnedCaps as Xt, enumerateSchemaFields as Y, createEvent as Yt, extractNestedAddonId as Z, emitReadiness as Zt, RecordingStatusSchema as _, procedureAuthKey as _t, CAMERA_SWITCH_ORDER as a, resolveCapMount as an, isVoidInput as at, STORAGE_ACCESS_FALLBACK as b, resolveContainerPrimaryChild as bt, CORE_BLOCK_ADDON_PREFIX as c, EventCategory as cn, localNetworkCapability as ct, DeclaredDevices as d, looseSchema as dt, isDeviceConfigCap as en, isArrayOutputSchema as et, DeviceStatusSchema as f, metricsProviderCapability as ft, RUNTIME_DEFAULTS as g, platformProbeCapability as gt, REDACTED_SECRET as h, parseStreamParamsFormPatch as ht, BatteryStatusSchema as i, readinessKey as in, isSourceCap as it, authProviderCapability as j, streamQualityLabel as jt, addonWidgetsCapability as k, storageMigrationCapability as kt, CoreBlockSchema as l, logDestinationCapability as lt, METHOD_ACCESS_MAP as m, objectInputDeclaresAddonId as mt, AlertSchema as n, parseJsonObject as nn, isObjectInput as nt, CAP_NAMES_WITH_STATUS as o, scopeKey as on, kebabToCamel as ot, LOG_LEVEL_RANK as p, normalizeUnit as pt, enumerateInferenceDevices as q, asNumber as qt, ApiKeyRecordSchema as r, parseJsonUnknown as rn, isSameAddonId as rt, CORE_BLOCKS_ADDON_ID as s, sleep as sn, lifecycleJobSchema as st, ALL_CAPABILITY_DEFINITIONS as t, nodePin as tn, isCollectionArrayMethod as tt, DEFAULT_FIRST_SIGHTING_FRESHNESS_MS as u, logLevelAtMost as ut, SOURCE_CAPS as v, reducePoints as vt, StorageLocationTypeSchema as w, scopesAllowDeviceCap as wt, STREAM_PROFILE_META as x, resolveMethodAuth as xt, SOURCE_DEVICE_TYPES as y, resolveBucketMs as yt, coreBlocksCapability as z, DEVICE_STATUS_METHOD as zt };
@@ -18279,6 +18279,33 @@ var RecentTracksQueryInput = zod.z.object({
18279
18279
  */
18280
18280
  classes: zod.z.array(zod.z.string()).optional()
18281
18281
  });
18282
+ /**
18283
+ * A Summary (D359): the per-camera session envelope that references tracks.
18284
+ * `groupShotKey` is the media key of its group shot (`ownerKind: 'summary'`,
18285
+ * served by the event-media plane by key), null until the first frame with a
18286
+ * member visible has been materialised.
18287
+ */
18288
+ var SummarySchema = zod.z.object({
18289
+ id: zod.z.string(),
18290
+ deviceId: zod.z.number(),
18291
+ openedAt: zod.z.number(),
18292
+ lastActiveAt: zod.z.number(),
18293
+ sealedAt: zod.z.number().nullable(),
18294
+ memberCount: zod.z.number().int().nonnegative(),
18295
+ groupShotKey: zod.z.string().nullable()
18296
+ });
18297
+ var SummariesQueryInput = zod.z.object({
18298
+ deviceIds: zod.z.array(zod.z.number()).min(1),
18299
+ since: zod.z.number().optional(),
18300
+ until: zod.z.number().optional(),
18301
+ limit: zod.z.number().int().min(1).max(200).default(50)
18302
+ });
18303
+ var SummariesPageSchema = zod.z.object({ summaries: zod.z.array(SummarySchema).readonly() });
18304
+ var SummaryDetailSchema = zod.z.object({
18305
+ summary: SummarySchema,
18306
+ /** Member track ids, in absorption order. */
18307
+ trackIds: zod.z.array(zod.z.string()).readonly()
18308
+ });
18282
18309
  var RecentTracksPageSchema = zod.z.object({
18283
18310
  /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
18284
18311
  tracks: zod.z.array(TrackSchema).readonly(),
@@ -18706,6 +18733,10 @@ var pipelineAnalyticsCapability = {
18706
18733
  * are not included (same contract as `listTracks`).
18707
18734
  */
18708
18735
  listRecentTracks: method(RecentTracksQueryInput, RecentTracksPageSchema),
18736
+ /** Newest first by `openedAt`, for a camera set, inside an optional window. */
18737
+ listSummaries: method(SummariesQueryInput, SummariesPageSchema),
18738
+ /** One summary with its member track ids; `null` for an id nobody wrote. */
18739
+ getSummary: method(zod.z.object({ id: zod.z.string() }), SummaryDetailSchema.nullable()),
18709
18740
  clearTracks: method(zod.z.object({ deviceId: zod.z.number() }), zod.z.void(), {
18710
18741
  kind: "mutation",
18711
18742
  auth: "admin"
@@ -38062,6 +38093,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
38062
38093
  addonId: null,
38063
38094
  access: "view"
38064
38095
  },
38096
+ "pipelineAnalytics.getSummary": {
38097
+ capName: "pipeline-analytics",
38098
+ capScope: "device",
38099
+ addonId: null,
38100
+ access: "view"
38101
+ },
38065
38102
  "pipelineAnalytics.getTrack": {
38066
38103
  capName: "pipeline-analytics",
38067
38104
  capScope: "device",
@@ -38140,6 +38177,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
38140
38177
  addonId: null,
38141
38178
  access: "view"
38142
38179
  },
38180
+ "pipelineAnalytics.listSummaries": {
38181
+ capName: "pipeline-analytics",
38182
+ capScope: "device",
38183
+ addonId: null,
38184
+ access: "view"
38185
+ },
38143
38186
  "pipelineAnalytics.listTrackMedia": {
38144
38187
  capName: "pipeline-analytics",
38145
38188
  capScope: "device",
@@ -41835,6 +41878,11 @@ Object.freeze({
41835
41878
  form: "array",
41836
41879
  optional: true
41837
41880
  }],
41881
+ "pipelineAnalytics.listSummaries": [{
41882
+ name: "deviceIds",
41883
+ form: "array",
41884
+ optional: false
41885
+ }],
41838
41886
  "pipelineAnalytics.listTrackMedia": [{
41839
41887
  name: "deviceId",
41840
41888
  form: "single",
@@ -43702,6 +43750,12 @@ Object.defineProperty(exports, "ReadinessTimeoutError", {
43702
43750
  return ReadinessTimeoutError;
43703
43751
  }
43704
43752
  });
43753
+ Object.defineProperty(exports, "RecordingStatusSchema", {
43754
+ enumerable: true,
43755
+ get: function() {
43756
+ return RecordingStatusSchema;
43757
+ }
43758
+ });
43705
43759
  Object.defineProperty(exports, "SOURCE_CAPS", {
43706
43760
  enumerable: true,
43707
43761
  get: function() {
package/dist/index.js CHANGED
@@ -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-2wpm3tOu.js");
3
+ const require_dist = require("./dist-DyO7xSEt.js");
4
4
  const require_builtins_alerts_alerts_addon = require("./builtins/alerts/alerts.addon.js");
5
5
  require("./builtins/alerts/index.js");
6
6
  const require_formatter = require("./formatter-DqAKDlvN.js");
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { a as __toCommonJS, i as __require, n as __esmMin, o as __toESM$1, r as __exportAll, t as __commonJSMin$1 } from "./chunk-CNf5ZN-e.mjs";
2
- import { $ as isArrayOutputSchema, Ct as scopesAllowDeviceCap, D as addonSettingsCapability, Gt as asJsonObject$1, Ht as ReadinessRegistry, It as DATAPLANE_SECRET_HEADER$1, Jt as createEvent, Kt as asNumber, Lt as DEVICE_SETTINGS_CONTRIBUTION_METHODS, Pt as errMsg$1, Rt as DEVICE_STATUS_METHOD, St as scopesAllowAddon, Ut as ReadinessTimeoutError, X as extractNestedAddonId, Yt as emitDownForOwnedCaps, Zt as expandCapMethods, an as scopeKey, at as kebabToCamel, bt as resolveMethodAuth, et as isCollectionArrayMethod, g as RUNTIME_DEFAULTS, gt as procedureAuthKey, in as resolveCapMount, it as isVoidInput, lt as logLevelAtMost, m as METHOD_ACCESS_MAP, nn as parseJsonUnknown, ot as lifecycleJobSchema, p as LOG_LEVEL_RANK, pt as objectInputDeclaresAddonId, qt as asString$1, rn as readinessKey, sn as EventCategory$1, t as ALL_CAPABILITY_DEFINITIONS, tn as parseJsonObject, tt as isObjectInput, ut as looseSchema } from "./dist-n6kxbqqp.mjs";
2
+ import { Ct as scopesAllowAddon, Ft as errMsg$1, Jt as asString$1, Kt as asJsonObject$1, Lt as DATAPLANE_SECRET_HEADER$1, O as addonSettingsCapability, Qt as expandCapMethods, Rt as DEVICE_SETTINGS_CONTRIBUTION_METHODS, Ut as ReadinessRegistry, Wt as ReadinessTimeoutError, Xt as emitDownForOwnedCaps, Yt as createEvent, Z as extractNestedAddonId, _t as procedureAuthKey, an as resolveCapMount, at as isVoidInput, cn as EventCategory$1, dt as looseSchema, et as isArrayOutputSchema, g as RUNTIME_DEFAULTS, in as readinessKey, m as METHOD_ACCESS_MAP, mt as objectInputDeclaresAddonId, nn as parseJsonObject, nt as isObjectInput, on as scopeKey, ot as kebabToCamel, p as LOG_LEVEL_RANK, qt as asNumber, rn as parseJsonUnknown, st as lifecycleJobSchema, t as ALL_CAPABILITY_DEFINITIONS, tt as isCollectionArrayMethod, ut as logLevelAtMost, wt as scopesAllowDeviceCap, xt as resolveMethodAuth, zt as DEVICE_STATUS_METHOD } from "./dist-BjPKkEaJ.mjs";
3
3
  import { AlertCenterAddon } from "./builtins/alerts/alerts.addon.mjs";
4
4
  import "./builtins/alerts/index.mjs";
5
5
  import { t as formatLogLine } from "./formatter-B7qW8bPJ.mjs";
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-2wpm3tOu.js");
1
+ const require_dist = require("./dist-DyO7xSEt.js");
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?
@@ -1,4 +1,4 @@
1
- import { Gt as asJsonObject } from "./dist-n6kxbqqp.mjs";
1
+ import { Kt as asJsonObject } from "./dist-BjPKkEaJ.mjs";
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/system",
3
- "version": "1.2.190",
3
+ "version": "1.2.192",
4
4
  "description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
5
5
  "keywords": [
6
6
  "camstack",