@camstack/system 1.2.464 → 1.2.466

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 (92) hide show
  1. package/dist/addon-runner.js +1 -0
  2. package/dist/addon-runner.mjs +1 -0
  3. package/dist/addon-utils.mjs +1 -1
  4. package/dist/{agent-https-B9gbXoJI.mjs → agent-https-DDzIuZY_.mjs} +1 -1
  5. package/dist/{agent-https-DhFIbEwN.js → agent-https-OIvfjiTx.js} +1 -1
  6. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  7. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +4 -4
  8. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  9. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +5 -5
  10. package/dist/builtins/alerts/alerts.addon.d.ts +7 -0
  11. package/dist/builtins/alerts/alerts.addon.js +65 -2
  12. package/dist/builtins/alerts/alerts.addon.mjs +65 -2
  13. package/dist/builtins/autotrack/index.js +1 -1
  14. package/dist/builtins/autotrack/index.mjs +1 -1
  15. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +2 -2
  16. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +5 -5
  17. package/dist/builtins/calendars/calendars.addon.js +1 -1
  18. package/dist/builtins/calendars/calendars.addon.mjs +1 -1
  19. package/dist/builtins/camera-grid/index.js +1 -1
  20. package/dist/builtins/camera-grid/index.mjs +1 -1
  21. package/dist/builtins/composer/composer.addon.js +2 -2
  22. package/dist/builtins/composer/composer.addon.mjs +2 -2
  23. package/dist/builtins/console-logging/index.js +1 -1
  24. package/dist/builtins/console-logging/index.mjs +1 -1
  25. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  26. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  27. package/dist/builtins/device-history/device-history.addon.js +1 -1
  28. package/dist/builtins/device-history/device-history.addon.mjs +1 -1
  29. package/dist/builtins/device-manager/device-manager.addon.js +1 -1
  30. package/dist/builtins/device-manager/device-manager.addon.mjs +1 -1
  31. package/dist/builtins/hub-forwarder/index.js +1 -1
  32. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  33. package/dist/builtins/keychain/index.js +3 -3
  34. package/dist/builtins/keychain/index.mjs +3 -3
  35. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  36. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  37. package/dist/builtins/local-auth/auth-schema.d.ts +0 -2
  38. package/dist/builtins/local-auth/local-auth.addon.d.ts +0 -1
  39. package/dist/builtins/local-auth/local-auth.addon.js +23 -178
  40. package/dist/builtins/local-auth/local-auth.addon.mjs +27 -181
  41. package/dist/builtins/local-auth/record-kinds.d.ts +1 -6
  42. package/dist/builtins/local-network/local-network.addon.js +2 -2
  43. package/dist/builtins/local-network/local-network.addon.mjs +2 -2
  44. package/dist/builtins/loki-logging/index.js +1 -1
  45. package/dist/builtins/loki-logging/index.mjs +1 -1
  46. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  47. package/dist/builtins/native-metrics/native-metrics.addon.mjs +10 -10
  48. package/dist/builtins/platform-probe/index.js +1 -1
  49. package/dist/builtins/platform-probe/index.mjs +8 -8
  50. package/dist/builtins/record-entries/index.js +1 -1
  51. package/dist/builtins/record-entries/index.mjs +1 -1
  52. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  53. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  54. package/dist/builtins/snapshot/index.js +1 -1
  55. package/dist/builtins/snapshot/index.mjs +1 -1
  56. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  57. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +20 -20
  58. package/dist/builtins/sqlite-storage/index.js +1 -1
  59. package/dist/builtins/sqlite-storage/index.mjs +1 -1
  60. package/dist/builtins/sqlite-storage/records/records-engine.d.ts +11 -0
  61. package/dist/builtins/sqlite-storage/records/records-provider.d.ts +7 -2
  62. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +25 -15
  63. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +25 -15
  64. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  65. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  66. package/dist/builtins/system-config/system-config.addon.js +3 -3
  67. package/dist/builtins/system-config/system-config.addon.mjs +115 -115
  68. package/dist/builtins/winston-logging/index.js +1 -1
  69. package/dist/builtins/winston-logging/index.mjs +1 -1
  70. package/dist/{composition-sources-oXvmbMHX.js → composition-sources-DqHwltDV.js} +1 -1
  71. package/dist/{composition-sources-CGtooHSL.mjs → composition-sources-f74jlgRO.mjs} +1 -1
  72. package/dist/{constants-5mrGZxwS.js → constants-CdgJF4V6.js} +1 -1
  73. package/dist/{constants-CdutnpL9.mjs → constants-Dknv37yZ.mjs} +1 -1
  74. package/dist/{coral-accelerators-D_S1Fo5h.mjs → coral-accelerators-Qhn5TOYZ.mjs} +5 -5
  75. package/dist/{custom-action-registry-BGYDjTqY.mjs → custom-action-registry-DZSCLBuT.mjs} +37 -37
  76. package/dist/{device-ca-DZHKlZlD.mjs → device-ca-B16Mr3EY.mjs} +1 -1
  77. package/dist/{device-ca-B3xUzps7.js → device-ca-DpvQ5wrb.js} +1 -1
  78. package/dist/{dist-C2OBCa-A.mjs → dist-CfjkLTZV.mjs} +281 -66
  79. package/dist/{dist-D9aw_d0G.js → dist-QyW9hVO2.js} +298 -71
  80. package/dist/file-host-worker.js +1 -1
  81. package/dist/file-host-worker.mjs +1 -1
  82. package/dist/{hub-mdns-ciao-CFlhVKK6.js → hub-mdns-ciao-CWkX17zX.js} +2 -2
  83. package/dist/{hub-mdns-ciao-Bm09NrMS.mjs → hub-mdns-ciao-CtHQEnb3.mjs} +2 -2
  84. package/dist/index.d.ts +0 -2
  85. package/dist/index.js +8 -8
  86. package/dist/index.mjs +228 -227
  87. package/dist/{restore-archive-D6sS7Gt2.mjs → restore-archive-BmHNBgte.mjs} +94 -94
  88. package/dist/{restore-archive-6zkRREHO.js → restore-archive-DMgpNgX5.js} +1 -1
  89. package/dist/{wal-maintenance-jXcOxm2T.js → wal-maintenance-BIpPCYDi.js} +0 -0
  90. package/dist/{wal-maintenance-Dg6IzSgz.mjs → wal-maintenance-Bs_X-di6.mjs} +0 -0
  91. package/package.json +1 -1
  92. package/dist/auth/api-key-manager.d.ts +0 -19
@@ -5338,6 +5338,7 @@ function recordsTransportOf(api) {
5338
5338
  histogram: (input) => r.histogram.query(input),
5339
5339
  aggregate: (input) => r.aggregate.query(input),
5340
5340
  deleteWhere: (input) => r.deleteWhere.mutate(input),
5341
+ transact: (input) => r.transact.mutate(input),
5341
5342
  deleteDevice: (input) => r.deleteDevice.mutate(input),
5342
5343
  allocateId: (input) => r.allocateId.mutate(input)
5343
5344
  };
@@ -5314,6 +5314,7 @@ function recordsTransportOf(api) {
5314
5314
  histogram: (input) => r.histogram.query(input),
5315
5315
  aggregate: (input) => r.aggregate.query(input),
5316
5316
  deleteWhere: (input) => r.deleteWhere.mutate(input),
5317
+ transact: (input) => r.transact.mutate(input),
5317
5318
  deleteDevice: (input) => r.deleteDevice.mutate(input),
5318
5319
  allocateId: (input) => r.allocateId.mutate(input)
5319
5320
  };
@@ -1,3 +1,3 @@
1
- import { C as isModelDownloaded, S as isModelDownloadHttpError, _ as downloadFile, a as startEventLoopStallMonitor, f as ModelDownloadService, g as deleteModelFromDisk, h as collectModelFiles, i as attributeStall, l as parseRangeHeader, m as adoptModelRevisions, n as STALL_REPORT_MS, o as createFileDataPlaneHandler, p as ModelDownloadHttpError, r as STALL_TICK_MS, s as contentTypeFor, t as CustomActionRegistry, w as resolveFormatRevision, x as getModelFilePath, y as ensureModel } from "./custom-action-registry-BGYDjTqY.mjs";
1
+ import { C as isModelDownloaded, S as isModelDownloadHttpError, _ as downloadFile, a as startEventLoopStallMonitor, f as ModelDownloadService, g as deleteModelFromDisk, h as collectModelFiles, i as attributeStall, l as parseRangeHeader, m as adoptModelRevisions, n as STALL_REPORT_MS, o as createFileDataPlaneHandler, p as ModelDownloadHttpError, r as STALL_TICK_MS, s as contentTypeFor, t as CustomActionRegistry, w as resolveFormatRevision, x as getModelFilePath, y as ensureModel } from "./custom-action-registry-DZSCLBuT.mjs";
2
2
  import { i as renderCourtesyOverlayJpeg, n as courtesyCacheKey, r as renderCourtesyJpeg, t as COURTESY_DEFAULT_WIDTH } from "./snapshot-courtesy-CyFs1M3I.mjs";
3
3
  export { COURTESY_DEFAULT_WIDTH, CustomActionRegistry, ModelDownloadHttpError, ModelDownloadService, STALL_REPORT_MS, STALL_TICK_MS, adoptModelRevisions, attributeStall, collectModelFiles, contentTypeFor, courtesyCacheKey, createFileDataPlaneHandler, deleteModelFromDisk, downloadFile, ensureModel, getModelFilePath, isModelDownloadHttpError, isModelDownloaded, parseRangeHeader, renderCourtesyJpeg, renderCourtesyOverlayJpeg, resolveFormatRevision, startEventLoopStallMonitor };
@@ -1,4 +1,4 @@
1
- import { Ui as defineRecordKinds } from "./dist-C2OBCa-A.mjs";
1
+ import { Gi as defineRecordKinds } from "./dist-CfjkLTZV.mjs";
2
2
  import { S as backdatedNotBefore, _ as NameConstraints, a as KeyUsageFlags, c as Pkcs10CertificateRequest, d as SubjectKeyIdentifierExtension, f as X509Certificate$1, g as GeneralSubtrees, h as GeneralSubtree, i as Extension, l as Pkcs10CertificateRequestGenerator, m as cryptoProvider, n as BasicConstraintsExtension, o as KeyUsagesExtension, p as X509CertificateGenerator, r as ExtendedKeyUsageExtension, s as PemConverter, t as AuthorityKeyIdentifierExtension, u as SubjectAlternativeNameExtension, v as GeneralName, x as AsnConvert } from "./x509.es-DK__ETIe.mjs";
3
3
  import { z } from "zod";
4
4
  import { X509Certificate, createHash, createPrivateKey, randomBytes, webcrypto } from "node:crypto";
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- const require_dist = require("./dist-D9aw_d0G.js");
2
+ const require_dist = require("./dist-QyW9hVO2.js");
3
3
  const require_x509_es = require("./x509.es-C4cOo48M.js");
4
4
  let zod = require("zod");
5
5
  let node_crypto = require("node:crypto");
@@ -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-D9aw_d0G.js");
6
+ const require_dist = require("../../dist-QyW9hVO2.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,8 +1,8 @@
1
- import { $r as errMsg, Ca as EventCategory, _t as addonPagesCapability, ei as BaseAddon } from "../../dist-C2OBCa-A.mjs";
1
+ import { $r as BaseAddon, Qr as errMsg, Ta as EventCategory, gt as addonPagesCapability } from "../../dist-CfjkLTZV.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";
5
- import * as fs from "node:fs";
5
+ import * as fs$1 from "node:fs";
6
6
  //#region src/builtins/addon-pages-aggregator/dedupe-pages.ts
7
7
  /** Stable identity for an addon page, independent of which node reported it. */
8
8
  function pageKey(info) {
@@ -211,11 +211,11 @@ var AddonPagesAggregatorAddon = class extends BaseAddon {
211
211
  const bundlePath = this.resolveBundlePath(addonId, bundle);
212
212
  if (bundlePath === null) return `/api/addon-pages/${addonId}/${bundle}?v=${Math.floor(Date.now())}`;
213
213
  try {
214
- const stat = fs.statSync(bundlePath);
214
+ const stat = fs$1.statSync(bundlePath);
215
215
  const cacheKey = `${bundlePath}:${stat.size}:${stat.mtimeMs}`;
216
216
  let v = this.bundleHashCache.get(cacheKey);
217
217
  if (v === void 0) {
218
- v = createHash("sha1").update(fs.readFileSync(bundlePath)).digest("hex").slice(0, 12);
218
+ v = createHash("sha1").update(fs$1.readFileSync(bundlePath)).digest("hex").slice(0, 12);
219
219
  this.bundleHashCache.set(cacheKey, v);
220
220
  }
221
221
  return `/api/addon-pages/${addonId}/${bundle}?v=${v}`;
@@ -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-D9aw_d0G.js");
6
+ const require_dist = require("../../dist-QyW9hVO2.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,8 +1,8 @@
1
- import { $r as errMsg, Ca as EventCategory, ei as BaseAddon, yt as addonWidgetsCapability } from "../../dist-C2OBCa-A.mjs";
1
+ import { $r as BaseAddon, Qr as errMsg, Ta as EventCategory, vt as addonWidgetsCapability } from "../../dist-CfjkLTZV.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";
5
- import * as fs from "node:fs";
5
+ import * as fs$1 from "node:fs";
6
6
  //#region src/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.ts
7
7
  /**
8
8
  * Addon Widgets Aggregator — hub-local builtin that owns the singleton
@@ -204,9 +204,9 @@ var AddonWidgetsAggregatorAddon = class extends BaseAddon {
204
204
  if (entryPath === null) return String(Math.floor(Date.now()));
205
205
  try {
206
206
  const dir = path$1.dirname(entryPath);
207
- const files = fs.readdirSync(dir).filter((f) => fs.statSync(path$1.join(dir, f)).isFile()).sort();
207
+ const files = fs$1.readdirSync(dir).filter((f) => fs$1.statSync(path$1.join(dir, f)).isFile()).sort();
208
208
  const cacheKey = `${dir}#${files.map((f) => {
209
- const s = fs.statSync(path$1.join(dir, f));
209
+ const s = fs$1.statSync(path$1.join(dir, f));
210
210
  return `${f}:${s.size}:${s.mtimeMs}`;
211
211
  }).join("|")}`;
212
212
  const cached = this.bundleHashCache.get(cacheKey);
@@ -214,7 +214,7 @@ var AddonWidgetsAggregatorAddon = class extends BaseAddon {
214
214
  const hash = createHash("sha1");
215
215
  for (const f of files) {
216
216
  hash.update(f);
217
- hash.update(fs.readFileSync(path$1.join(dir, f)));
217
+ hash.update(fs$1.readFileSync(path$1.join(dir, f)));
218
218
  }
219
219
  const digest = hash.digest("hex").slice(0, 12);
220
220
  this.bundleHashCache.set(cacheKey, digest);
@@ -94,6 +94,13 @@ export declare class AlertCenterAddon extends BaseAddon<AlertCenterConfig> {
94
94
  * must not ring the bell (same gate NC uses). One card per DEVICE (D883).
95
95
  */
96
96
  private handleStreamOffline;
97
+ /**
98
+ * A notification rule that cannot work (D905) — visible in-app even when no
99
+ * rule listens for `rule-broken`. One card per RULE; a new reason updates it.
100
+ */
101
+ private handleRuleBroken;
102
+ /** The rule works again — drop its broken-rule card. */
103
+ private handleRuleRepaired;
97
104
  /** Stream online after an outage — drop the matching offline card. */
98
105
  private handleStreamOnline;
99
106
  /**
@@ -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-D9aw_d0G.js");
6
+ const require_dist = require("../../dist-QyW9hVO2.js");
7
7
  const require_read_all_rows$1 = require("../../read-all-rows-CVoO1ONM.js");
8
8
  //#region src/builtins/alerts/alert-episode-policy.ts
9
9
  /**
@@ -509,6 +509,10 @@ var CATEGORY_MAPPINGS = {
509
509
  severity: "warning",
510
510
  titleTemplate: "Stream offline"
511
511
  },
512
+ "notification.rule-broken": {
513
+ severity: "warning",
514
+ titleTemplate: "Notification rule broken"
515
+ },
512
516
  "backup.restored": {
513
517
  severity: "info",
514
518
  titleTemplate: "Backup restored"
@@ -527,7 +531,8 @@ var SILENT_TRACKED_CATEGORIES = [
527
531
  "process.state-changed",
528
532
  "addon.load-recovered",
529
533
  "system.liveness-recovered",
530
- "stream.online"
534
+ "stream.online",
535
+ "notification.rule-repaired"
531
536
  ];
532
537
  /** The `stream.offline` reasons that are an outage (D883) — mirrors the broker's `isStreamOutageReason`. */
533
538
  var STREAM_OUTAGE_REASONS = [
@@ -794,6 +799,14 @@ var AlertCenterAddon = class extends require_dist.BaseAddon {
794
799
  await this.handleStreamOnline(event);
795
800
  return;
796
801
  }
802
+ if (category === require_dist.EventCategory.NotificationRuleBroken) {
803
+ await this.handleRuleBroken(event);
804
+ return;
805
+ }
806
+ if (category === require_dist.EventCategory.NotificationRuleRepaired) {
807
+ await this.handleRuleRepaired(event);
808
+ return;
809
+ }
797
810
  const mapping = CATEGORY_MAPPINGS[category];
798
811
  if (!mapping) return;
799
812
  if (category === "addon.updated") {
@@ -1208,6 +1221,56 @@ var AlertCenterAddon = class extends require_dist.BaseAddon {
1208
1221
  };
1209
1222
  await this.emitAlert(alert);
1210
1223
  }
1224
+ /**
1225
+ * A notification rule that cannot work (D905) — visible in-app even when no
1226
+ * rule listens for `rule-broken`. One card per RULE; a new reason updates it.
1227
+ */
1228
+ async handleRuleBroken(event) {
1229
+ const ruleId = event.data["ruleId"];
1230
+ if (typeof ruleId !== "string" || ruleId.length === 0) return;
1231
+ const ruleName = typeof event.data["ruleName"] === "string" ? event.data["ruleName"] : ruleId;
1232
+ const reason = typeof event.data["reason"] === "string" ? event.data["reason"] : "unknown";
1233
+ const listed = event.data["offendingIds"];
1234
+ const offendingIds = Array.isArray(listed) ? listed.filter((id) => typeof id === "string") : [];
1235
+ const what = reason === "unparseable" ? "cannot be loaded and sends nothing — open it and save it again" : reason === "device-deleted" ? `still names a deleted device (${offendingIds.join(", ")}) and was switched off` : reason === "target-deleted" ? `still sends to a deleted destination (${offendingIds.join(", ")}) and was switched off` : "cannot work";
1236
+ const alert = {
1237
+ id: `nc-rule-broken:${ruleId}`,
1238
+ category: require_dist.EventCategory.NotificationRuleBroken,
1239
+ severity: "warning",
1240
+ title: "Notification rule broken",
1241
+ message: `Rule "${ruleName}" ${what}.`,
1242
+ status: "active",
1243
+ read: false,
1244
+ createdAt: Date.now(),
1245
+ updatedAt: Date.now(),
1246
+ source: {
1247
+ type: "addon",
1248
+ id: "notification-center"
1249
+ },
1250
+ metadata: {
1251
+ ruleId,
1252
+ ruleName,
1253
+ reason,
1254
+ offendingIds,
1255
+ reasons: event.data["reasons"]
1256
+ }
1257
+ };
1258
+ await this.emitAlert(alert);
1259
+ }
1260
+ /** The rule works again — drop its broken-rule card. */
1261
+ async handleRuleRepaired(event) {
1262
+ const ruleId = event.data["ruleId"];
1263
+ if (typeof ruleId !== "string" || ruleId.length === 0) return;
1264
+ const stableId = `nc-rule-broken:${ruleId}`;
1265
+ try {
1266
+ await this.dismiss(stableId);
1267
+ } catch (err) {
1268
+ this.ctx.logger?.debug("NotificationRuleRepaired: dismiss failed (likely already dismissed)", { meta: {
1269
+ stableId,
1270
+ error: require_dist.errMsg(err)
1271
+ } });
1272
+ }
1273
+ }
1211
1274
  /** Stream online after an outage — drop the matching offline card. */
1212
1275
  async handleStreamOnline(event) {
1213
1276
  const deviceId = event.data["deviceId"];
@@ -1,4 +1,4 @@
1
- import { $r as errMsg, Bi as createEvent, Ca as EventCategory, St as alertsCapability, Ui as defineRecordKinds, bn as isAlertEpisodeSeverity, bt as alertEpisodeId, ei as BaseAddon, i as AlertSchema, xt as alertEpisodePayload, yn as isAlertEpisodeOpen } from "../../dist-C2OBCa-A.mjs";
1
+ import { $r as BaseAddon, Gi as defineRecordKinds, Hi as createEvent, Qr as errMsg, Ta as EventCategory, bt as alertEpisodePayload, i as AlertSchema, vn as isAlertEpisodeOpen, xt as alertsCapability, yn as isAlertEpisodeSeverity, yt as alertEpisodeId } from "../../dist-CfjkLTZV.mjs";
2
2
  import { t as require_read_all_rows } from "../../read-all-rows-TaPqdWNF.mjs";
3
3
  //#region src/builtins/alerts/alert-episode-policy.ts
4
4
  /**
@@ -503,6 +503,10 @@ var CATEGORY_MAPPINGS = {
503
503
  severity: "warning",
504
504
  titleTemplate: "Stream offline"
505
505
  },
506
+ "notification.rule-broken": {
507
+ severity: "warning",
508
+ titleTemplate: "Notification rule broken"
509
+ },
506
510
  "backup.restored": {
507
511
  severity: "info",
508
512
  titleTemplate: "Backup restored"
@@ -521,7 +525,8 @@ var SILENT_TRACKED_CATEGORIES = [
521
525
  "process.state-changed",
522
526
  "addon.load-recovered",
523
527
  "system.liveness-recovered",
524
- "stream.online"
528
+ "stream.online",
529
+ "notification.rule-repaired"
525
530
  ];
526
531
  /** The `stream.offline` reasons that are an outage (D883) — mirrors the broker's `isStreamOutageReason`. */
527
532
  var STREAM_OUTAGE_REASONS = [
@@ -788,6 +793,14 @@ var AlertCenterAddon = class extends BaseAddon {
788
793
  await this.handleStreamOnline(event);
789
794
  return;
790
795
  }
796
+ if (category === EventCategory.NotificationRuleBroken) {
797
+ await this.handleRuleBroken(event);
798
+ return;
799
+ }
800
+ if (category === EventCategory.NotificationRuleRepaired) {
801
+ await this.handleRuleRepaired(event);
802
+ return;
803
+ }
791
804
  const mapping = CATEGORY_MAPPINGS[category];
792
805
  if (!mapping) return;
793
806
  if (category === "addon.updated") {
@@ -1202,6 +1215,56 @@ var AlertCenterAddon = class extends BaseAddon {
1202
1215
  };
1203
1216
  await this.emitAlert(alert);
1204
1217
  }
1218
+ /**
1219
+ * A notification rule that cannot work (D905) — visible in-app even when no
1220
+ * rule listens for `rule-broken`. One card per RULE; a new reason updates it.
1221
+ */
1222
+ async handleRuleBroken(event) {
1223
+ const ruleId = event.data["ruleId"];
1224
+ if (typeof ruleId !== "string" || ruleId.length === 0) return;
1225
+ const ruleName = typeof event.data["ruleName"] === "string" ? event.data["ruleName"] : ruleId;
1226
+ const reason = typeof event.data["reason"] === "string" ? event.data["reason"] : "unknown";
1227
+ const listed = event.data["offendingIds"];
1228
+ const offendingIds = Array.isArray(listed) ? listed.filter((id) => typeof id === "string") : [];
1229
+ const what = reason === "unparseable" ? "cannot be loaded and sends nothing — open it and save it again" : reason === "device-deleted" ? `still names a deleted device (${offendingIds.join(", ")}) and was switched off` : reason === "target-deleted" ? `still sends to a deleted destination (${offendingIds.join(", ")}) and was switched off` : "cannot work";
1230
+ const alert = {
1231
+ id: `nc-rule-broken:${ruleId}`,
1232
+ category: EventCategory.NotificationRuleBroken,
1233
+ severity: "warning",
1234
+ title: "Notification rule broken",
1235
+ message: `Rule "${ruleName}" ${what}.`,
1236
+ status: "active",
1237
+ read: false,
1238
+ createdAt: Date.now(),
1239
+ updatedAt: Date.now(),
1240
+ source: {
1241
+ type: "addon",
1242
+ id: "notification-center"
1243
+ },
1244
+ metadata: {
1245
+ ruleId,
1246
+ ruleName,
1247
+ reason,
1248
+ offendingIds,
1249
+ reasons: event.data["reasons"]
1250
+ }
1251
+ };
1252
+ await this.emitAlert(alert);
1253
+ }
1254
+ /** The rule works again — drop its broken-rule card. */
1255
+ async handleRuleRepaired(event) {
1256
+ const ruleId = event.data["ruleId"];
1257
+ if (typeof ruleId !== "string" || ruleId.length === 0) return;
1258
+ const stableId = `nc-rule-broken:${ruleId}`;
1259
+ try {
1260
+ await this.dismiss(stableId);
1261
+ } catch (err) {
1262
+ this.ctx.logger?.debug("NotificationRuleRepaired: dismiss failed (likely already dismissed)", { meta: {
1263
+ stableId,
1264
+ error: errMsg(err)
1265
+ } });
1266
+ }
1267
+ }
1205
1268
  /** Stream online after an outage — drop the matching offline card. */
1206
1269
  async handleStreamOnline(event) {
1207
1270
  const deviceId = event.data["deviceId"];
@@ -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-D9aw_d0G.js");
6
+ const require_dist = require("../../dist-QyW9hVO2.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 { $r as errMsg, Ca as EventCategory, Et as bareAddonId, L as FIRST_LEVEL_MACRO_CLASSES, Xi as isEvent, ei as BaseAddon, tr as ptzAutotrackCapability } from "../../dist-C2OBCa-A.mjs";
1
+ import { $r as BaseAddon, I as FIRST_LEVEL_MACRO_CLASSES, Qi as isEvent, Qr as errMsg, Ta as EventCategory, Tt as bareAddonId, er as ptzAutotrackCapability } from "../../dist-CfjkLTZV.mjs";
2
2
  //#region src/builtins/autotrack/autotrack-config.ts
3
3
  var DEFAULT_AUTOTRACK_LOOP_CONFIG = {
4
4
  deadZoneFraction: .5,
@@ -3,9 +3,9 @@ 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-D9aw_d0G.js");
6
+ const require_dist = require("../../dist-QyW9hVO2.js");
7
7
  const require_read_all_rows$1 = require("../../read-all-rows-CVoO1ONM.js");
8
- const require_restore_archive = require("../../restore-archive-6zkRREHO.js");
8
+ const require_restore_archive = require("../../restore-archive-DMgpNgX5.js");
9
9
  let node_crypto = require("node:crypto");
10
10
  let node_fs_promises = require("node:fs/promises");
11
11
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -1,10 +1,10 @@
1
- import { Ca as EventCategory, Er as storageOccupancyCapability, Tt as backupCapability, Vn as mayWriteToLocation, ei as BaseAddon, ia as nodePin, va as toNodeId } from "../../dist-C2OBCa-A.mjs";
1
+ import { $r as BaseAddon, Bn as mayWriteToLocation, Ta as EventCategory, Tr as storageOccupancyCapability, ba as toNodeId, oa as nodePin, wt as backupCapability } from "../../dist-CfjkLTZV.mjs";
2
2
  import { t as require_read_all_rows } from "../../read-all-rows-TaPqdWNF.mjs";
3
- import { _ as backupRecordStoresOf, a as BackupSnapshotRefusedError, d as ENCRYPTED_BACKUP_SUFFIX, f as generateBackupKeyPair, g as backupOrchestratorRecordKinds, i as BackupCancelledError, l as BackupKeyFormatError, m as parseBackupSecretKey, n as precheckRestoreKey, o as DEFAULT_BACKUP_DATABASES, p as parseBackupPublicKey, r as prepareRestoreArchive, s as SystemBackupService } from "../../restore-archive-D6sS7Gt2.mjs";
3
+ import { _ as backupRecordStoresOf, a as BackupSnapshotRefusedError, d as ENCRYPTED_BACKUP_SUFFIX, f as generateBackupKeyPair, g as backupOrchestratorRecordKinds, i as BackupCancelledError, l as BackupKeyFormatError, m as parseBackupSecretKey, n as precheckRestoreKey, o as DEFAULT_BACKUP_DATABASES, p as parseBackupPublicKey, r as prepareRestoreArchive, s as SystemBackupService } from "../../restore-archive-BmHNBgte.mjs";
4
4
  import { randomUUID } from "node:crypto";
5
5
  import * as fsp from "node:fs/promises";
6
6
  import * as path$1 from "node:path";
7
- import * as fs from "node:fs";
7
+ import * as fs$1 from "node:fs";
8
8
  //#region src/builtins/backup-orchestrator/backup-databases.ts
9
9
  /** Stable id of the seeded weekly schedule. */
10
10
  var WEEKLY_SCHEDULE_ID = "weekly-events-history";
@@ -1018,7 +1018,7 @@ async function downloadArchiveToCache(input) {
1018
1018
  location: input.locationId,
1019
1019
  relativePath: input.filename
1020
1020
  });
1021
- const writeStream = fs.createWriteStream(input.cachePath);
1021
+ const writeStream = fs$1.createWriteStream(input.cachePath);
1022
1022
  let offset = 0;
1023
1023
  try {
1024
1024
  while (offset < sizeBytes) {
@@ -2502,7 +2502,7 @@ var BackupOrchestratorAddon = class extends BaseAddon {
2502
2502
  });
2503
2503
  try {
2504
2504
  let offset = 0;
2505
- const stream = fs.createReadStream(input.cachePath, { highWaterMark: UPLOAD_CHUNK_BYTES });
2505
+ const stream = fs$1.createReadStream(input.cachePath, { highWaterMark: UPLOAD_CHUNK_BYTES });
2506
2506
  for await (const rawChunk of stream) {
2507
2507
  if (input.signal?.aborted) {
2508
2508
  stream.destroy();
@@ -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-D9aw_d0G.js");
6
+ const require_dist = require("../../dist-QyW9hVO2.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let zod = require("zod");
9
9
  //#region src/builtins/calendars/calendar-color.ts
@@ -1,4 +1,4 @@
1
- import { Mt as calendarsCapability, Ui as defineRecordKinds, _ as CalendarPreferencesSchema, ei as BaseAddon } from "../../dist-C2OBCa-A.mjs";
1
+ import { $r as BaseAddon, Gi as defineRecordKinds, g as CalendarPreferencesSchema, jt as calendarsCapability } from "../../dist-CfjkLTZV.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { z } from "zod";
4
4
  //#region src/builtins/calendars/calendar-color.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-D9aw_d0G.js");
6
+ const require_dist = require("../../dist-QyW9hVO2.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 { $r as errMsg, Bi as createEvent, Ca as EventCategory, E as DERIVED_CAMERA_SILENCED_CAP_NAMES, Gn as motionCapability, Hn as memoizePinnedFfmpeg, Ji as hydrateSchema, Nt as cameraGridLayoutCapability, Or as streamCatalogCapability, P as DeclaredDevices, Qr as DeviceType, X as MOTION_CLOSE_AFTER_MS, Xr as DeviceFeature, ei as BaseAddon, o as BaseDevice, qt as declarationOwnerNodeId, xr as snapshotCapability, zr as buildFfmpegArgs } from "../../dist-C2OBCa-A.mjs";
1
+ import { $r as BaseAddon, Dr as streamCatalogCapability, Hi as createEvent, Kt as declarationOwnerNodeId, Mt as cameraGridLayoutCapability, N as DeclaredDevices, Qr as errMsg, Rr as buildFfmpegArgs, T as DERIVED_CAMERA_SILENCED_CAP_NAMES, Ta as EventCategory, Vn as memoizePinnedFfmpeg, Wn as motionCapability, Xi as hydrateSchema, Y as MOTION_CLOSE_AFTER_MS, Yr as DeviceFeature, Zr as DeviceType, a as BaseDevice, br as snapshotCapability } from "../../dist-CfjkLTZV.mjs";
2
2
  import { z } from "zod";
3
3
  import { FfmpegProcess } from "@camstack/types/node";
4
4
  import { join } 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-D9aw_d0G.js");
7
- const require_composition_sources = require("../../composition-sources-oXvmbMHX.js");
6
+ const require_dist = require("../../dist-QyW9hVO2.js");
7
+ const require_composition_sources = require("../../composition-sources-DqHwltDV.js");
8
8
  let zod = require("zod");
9
9
  //#region src/builtins/shared/device-state-changed.ts
10
10
  /** Structural narrowing helper for untrusted bus payloads. */
@@ -1,5 +1,5 @@
1
- import { $r as errMsg, Bi as createEvent, Br as cloneStatefulExpressionMemory, Ca as EventCategory, Gr as compositionSliceKey, Hr as composedDeviceStableId, It as composerCapability, Jr as disarmRoseMemory, Kr as compositionSourceKey, Lt as compositionFieldKey, Ot as buildCapabilityLookup, P as DeclaredDevices, Qn as planComposition, Qr as DeviceType, Rr as COMPOSER_ADDON_ID, Ur as compositionFeatureEnabled, Vr as composedDeviceRef, Wr as compositionItemFieldPath, Yr as toExpressionValue, cn as evaluateCompositionField, dn as expressionContainsBuiltinCall, ei as BaseAddon, f as COMPOSED_ITEM_FIXED_FIELDS, o as BaseDevice, qr as createStatefulExpressionMemory, r as ALL_CAPABILITY_DEFINITIONS } from "../../dist-C2OBCa-A.mjs";
2
- import { n as normalizedNativeOwner } from "../../composition-sources-CGtooHSL.mjs";
1
+ import { $r as BaseAddon, Br as composedDeviceRef, Dt as buildCapabilityLookup, Ft as composerCapability, Gr as compositionSourceKey, Hi as createEvent, Hr as compositionFeatureEnabled, It as compositionFieldKey, Jr as toExpressionValue, Kr as createStatefulExpressionMemory, Lr as COMPOSER_ADDON_ID, N as DeclaredDevices, Qr as errMsg, Ta as EventCategory, Ur as compositionItemFieldPath, Vr as composedDeviceStableId, Wr as compositionSliceKey, Zn as planComposition, Zr as DeviceType, a as BaseDevice, d as COMPOSED_ITEM_FIXED_FIELDS, qr as disarmRoseMemory, r as ALL_CAPABILITY_DEFINITIONS, sn as evaluateCompositionField, un as expressionContainsBuiltinCall, zr as cloneStatefulExpressionMemory } from "../../dist-CfjkLTZV.mjs";
2
+ import { n as normalizedNativeOwner } from "../../composition-sources-f74jlgRO.mjs";
3
3
  import { z } from "zod";
4
4
  //#region src/builtins/shared/device-state-changed.ts
5
5
  /** Structural narrowing helper for untrusted bus payloads. */
@@ -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-D9aw_d0G.js");
6
+ const require_dist = require("../../dist-QyW9hVO2.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 { Ln as logDestinationCapability, ei as BaseAddon } from "../../dist-C2OBCa-A.mjs";
1
+ import { $r as BaseAddon, In as logDestinationCapability } from "../../dist-CfjkLTZV.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,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("../../chunk-Cek0wNdY.js");
3
- const require_dist = require("../../dist-D9aw_d0G.js");
3
+ const require_dist = require("../../dist-QyW9hVO2.js");
4
4
  const require_read_all_rows$1 = require("../../read-all-rows-CVoO1ONM.js");
5
- const require_composition_sources = require("../../composition-sources-oXvmbMHX.js");
5
+ const require_composition_sources = require("../../composition-sources-DqHwltDV.js");
6
6
  const require_prefix_range = require("../../prefix-range-D_KueXbQ.js");
7
7
  const require_prefix_walk = require("../../prefix-walk-Dv6MLZlM.js");
8
8
  let zod = require("zod");
@@ -1,6 +1,6 @@
1
- import { $i as isSecretMarker, $r as errMsg, Bt as coreBlockComposition, Ht as coreBlockSourceKind, Ji as hydrateSchema, Kn as normalizeCoreBlockWrite, Kr as compositionSourceKey, Mr as validateComposition, Ot as buildCapabilityLookup, P as DeclaredDevices, Qn as planComposition, Ri as collectSecretMarkerRefs, Rt as compositionSourceRefs, Ui as defineRecordKinds, Ut as coreBlocksCapability, Vr as composedDeviceRef, Vt as coreBlockIdFromAddonId, Zt as describeComposableCaps, ar as replacedFieldKeys, ba as transformSecretWrite, cr as resolveCoreBlockEntry, ei as BaseAddon, ga as secretTreeFromSchema, h as CORE_BLOCK_ADDON_PREFIX, lr as resolveCoreBlockFiles, m as CORE_BLOCKS_ADDON_ID, p as COMPOSER_RUNNER_ID, pa as resolveSecretMarkers, r as ALL_CAPABILITY_DEFINITIONS, ta as isSecretRefOwnedBy, y as CoreBlockSchema, zt as coreBlockAddonId } from "../../dist-C2OBCa-A.mjs";
1
+ import { $r as BaseAddon, Bi as collectSecretMarkerRefs, Br as composedDeviceRef, Bt as coreBlockIdFromAddonId, Dt as buildCapabilityLookup, Gi as defineRecordKinds, Gn as normalizeCoreBlockWrite, Gr as compositionSourceKey, Ht as coreBlocksCapability, Lt as compositionSourceRefs, N as DeclaredDevices, Qr as errMsg, Rt as coreBlockAddonId, Sa as transformSecretWrite, Vt as coreBlockSourceKind, Xi as hydrateSchema, Xt as describeComposableCaps, Zn as planComposition, cr as resolveCoreBlockFiles, f as COMPOSER_RUNNER_ID, ha as resolveSecretMarkers, ir as replacedFieldKeys, jr as validateComposition, m as CORE_BLOCK_ADDON_PREFIX, p as CORE_BLOCKS_ADDON_ID, r as ALL_CAPABILITY_DEFINITIONS, ra as isSecretRefOwnedBy, sr as resolveCoreBlockEntry, ta as isSecretMarker, v as CoreBlockSchema, va as secretTreeFromSchema, zt as coreBlockComposition } from "../../dist-CfjkLTZV.mjs";
2
2
  import { t as require_read_all_rows } from "../../read-all-rows-TaPqdWNF.mjs";
3
- import { t as describeCompositionSources } from "../../composition-sources-CGtooHSL.mjs";
3
+ import { t as describeCompositionSources } from "../../composition-sources-f74jlgRO.mjs";
4
4
  import { t as prefixRange } from "../../prefix-range-Dl0znowN.mjs";
5
5
  import { n as unwrapStoredValue, t as loadPrefixed } from "../../prefix-walk-DAOBSyH1.mjs";
6
6
  import { createRequire } from "node:module";
@@ -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-D9aw_d0G.js");
6
+ const require_dist = require("../../dist-QyW9hVO2.js");
7
7
  //#region src/builtins/device-history/time/bucket-time.ts
8
8
  /**
9
9
  * Bucket arithmetic for the three rollup tiers (D850, plan §4/§5.5).
@@ -1,4 +1,4 @@
1
- import { B as HISTORY_CATALOG, Ca as EventCategory, Ct as armRemovalReconcile, Gi as emitReadiness, O as DEVICE_HISTORY_ENERGY_KEY, Qr as DeviceType, ei as BaseAddon, en as deviceHistoryCapability, li as HISTORY_DEFAULT_MIN_INTERVAL_MS, nn as deviceRemovalHookCapability } from "../../dist-C2OBCa-A.mjs";
1
+ import { $r as BaseAddon, $t as deviceHistoryCapability, D as DEVICE_HISTORY_ENERGY_KEY, St as armRemovalReconcile, Ta as EventCategory, Zr as DeviceType, ci as HISTORY_DEFAULT_MIN_INTERVAL_MS, qi as emitReadiness, tn as deviceRemovalHookCapability, z as HISTORY_CATALOG } from "../../dist-CfjkLTZV.mjs";
2
2
  //#region src/builtins/device-history/time/bucket-time.ts
3
3
  /**
4
4
  * Bucket arithmetic for the three rollup tiers (D850, plan §4/§5.5).
@@ -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-D9aw_d0G.js");
6
+ const require_dist = require("../../dist-QyW9hVO2.js");
7
7
  const require_read_all_rows$1 = require("../../read-all-rows-CVoO1ONM.js");
8
8
  const require_prefix_range = require("../../prefix-range-D_KueXbQ.js");
9
9
  const require_prefix_walk = require("../../prefix-walk-Dv6MLZlM.js");
@@ -1,4 +1,4 @@
1
- import { $i as isSecretMarker, $r as errMsg, $t as deviceExtensionCapability, Ai as WELL_KNOWN_TAB_MAP, Ca as EventCategory, Di as SECRET_CLEAR, F as DeviceStatusSchema, I as DeviceTombstoneSchema, In as locationIconKey, Mn as legacyAutoLinkIds, Pt as canonicalIconKey, Qi as isSecretClear, Qr as DeviceType, R as FieldClaimModeSchema, T as DAY_NAMES, Ui as defineRecordKinds, Wt as createDeviceExtensionProvider, Xn as parseStreamParamsFormPatch, Xr as DeviceFeature, Y as MINUTES_PER_DAY, Yi as isDeviceConfigCap, Yt as defineExtensionSlotProvider, Zi as isKeychainStoredField, Zr as DeviceRole, _a as sleep$1, ba as transformSecretWrite, br as siteZoneKey, c as CAMERA_SWITCH_ORDER, ea as isSecretMarkerLike, ei as BaseAddon, gn as formatMinutes, ha as secretTreeFromPaths, in as deviceStatusCapability, jt as buildStreamParamsConfigSchema, mr as runtimeStatePolicyFor, on as enumerateItemArrayFields, ot as STREAM_PROFILE_META, pa as resolveSecretMarkers, qn as normalizeUnit, r as ALL_CAPABILITY_DEFINITIONS, rn as deviceStateCapability, sn as enumerateSchemaFields, tn as deviceManagerCapability, u as CAP_NAMES_WITH_STATUS, un as expandContainer, xa as userError, ya as toSecretFieldView, z as FieldClaimSchema, zi as collectZodSecretPaths } from "../../dist-C2OBCa-A.mjs";
1
+ import { $i as isKeychainStoredField, $r as BaseAddon, At as buildStreamParamsConfigSchema, Ca as userError, Ei as SECRET_CLEAR, F as DeviceTombstoneSchema, Fn as locationIconKey, Gi as defineRecordKinds, J as MINUTES_PER_DAY, Jt as defineExtensionSlotProvider, Kn as normalizeUnit, L as FieldClaimModeSchema, Nt as canonicalIconKey, P as DeviceStatusSchema, Qr as errMsg, Qt as deviceExtensionCapability, R as FieldClaimSchema, Sa as transformSecretWrite, Ta as EventCategory, Ut as createDeviceExtensionProvider, Vi as collectZodSecretPaths, Xr as DeviceRole, Yn as parseStreamParamsFormPatch, Yr as DeviceFeature, Zi as isDeviceConfigCap, Zr as DeviceType, _a as secretTreeFromPaths, an as enumerateItemArrayFields, at as STREAM_PROFILE_META, ea as isSecretClear, en as deviceManagerCapability, ha as resolveSecretMarkers, hn as formatMinutes, ji as WELL_KNOWN_TAB_MAP, jn as legacyAutoLinkIds, l as CAP_NAMES_WITH_STATUS, ln as expandContainer, na as isSecretMarkerLike, nn as deviceStateCapability, on as enumerateSchemaFields, pr as runtimeStatePolicyFor, r as ALL_CAPABILITY_DEFINITIONS, rn as deviceStatusCapability, s as CAMERA_SWITCH_ORDER, ta as isSecretMarker, w as DAY_NAMES, xa as toSecretFieldView, ya as sleep$1, yr as siteZoneKey } from "../../dist-CfjkLTZV.mjs";
2
2
  import { t as require_read_all_rows } from "../../read-all-rows-TaPqdWNF.mjs";
3
3
  import { t as prefixRange } from "../../prefix-range-Dl0znowN.mjs";
4
4
  import { t as loadPrefixed } from "../../prefix-walk-DAOBSyH1.mjs";
@@ -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-D9aw_d0G.js");
6
+ const require_dist = require("../../dist-QyW9hVO2.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 { Ln as logDestinationCapability, ei as BaseAddon } from "../../dist-C2OBCa-A.mjs";
1
+ import { $r as BaseAddon, In as logDestinationCapability } from "../../dist-CfjkLTZV.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;
@@ -3,10 +3,10 @@ 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-D9aw_d0G.js");
6
+ const require_dist = require("../../dist-QyW9hVO2.js");
7
+ const require_device_ca = require("../../device-ca-DpvQ5wrb.js");
7
8
  const require_read_all_rows$1 = require("../../read-all-rows-CVoO1ONM.js");
8
- const require_device_ca = require("../../device-ca-B3xUzps7.js");
9
- const require_constants = require("../../constants-5mrGZxwS.js");
9
+ const require_constants = require("../../constants-CdgJF4V6.js");
10
10
  const require_platform_key_source = require("../../platform-key-source-Di7HrlGR.js");
11
11
  let node_crypto = require("node:crypto");
12
12
  let _camstack_types_node = require("@camstack/types/node");
@@ -1,7 +1,7 @@
1
- import { An as keychainAdminCapability, Ca as EventCategory, G as KeychainResetRecordSchema, U as KEYCHAIN_RESET_TRIGGER_ACTOR, Ui as defineRecordKinds, W as KeychainAuditEntrySchema, ei as BaseAddon, jn as keychainCapability, la as parseSecretRef, oa as normalizeSecretOwner, qi as formatSecretScope } from "../../dist-C2OBCa-A.mjs";
1
+ import { $r as BaseAddon, An as keychainCapability, Gi as defineRecordKinds, H as KEYCHAIN_RESET_TRIGGER_ACTOR, Ta as EventCategory, U as KeychainAuditEntrySchema, W as KeychainResetRecordSchema, Yi as formatSecretScope, ca as normalizeSecretOwner, da as parseSecretRef, kn as keychainAdminCapability } from "../../dist-CfjkLTZV.mjs";
2
+ import { d as JWT_SIGNING_KEY_REF, n as DEVICE_CA_KEY_REF, p as SYSTEM_SECRET_OWNER } from "../../device-ca-B16Mr3EY.mjs";
2
3
  import { t as require_read_all_rows } from "../../read-all-rows-TaPqdWNF.mjs";
3
- import { d as JWT_SIGNING_KEY_REF, n as DEVICE_CA_KEY_REF, p as SYSTEM_SECRET_OWNER } from "../../device-ca-DZHKlZlD.mjs";
4
- import { a as MESH_CA_KEY_REF } from "../../constants-CdutnpL9.mjs";
4
+ import { a as MESH_CA_KEY_REF } from "../../constants-Dknv37yZ.mjs";
5
5
  import { n as getPlatformKeychainKey } from "../../platform-key-source-BWlq0jjn.mjs";
6
6
  import { createCipheriv, createDecipheriv, createHmac, randomBytes, randomUUID, timingSafeEqual } from "node:crypto";
7
7
  import { restrictDirToOwnerSync, restrictFileToOwnerSync, writeOwnerOnlyFileSync } from "@camstack/types/node";
@@ -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-D9aw_d0G.js");
3
+ const require_dist = require("../../dist-QyW9hVO2.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";