camstack 1.2.201 → 1.2.202

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -37,7 +37,7 @@ async function runServe(args) {
37
37
  ...typeof values.data === "string" ? { data: values.data } : {}
38
38
  };
39
39
  Object.assign(process.env, buildServeEnv(opts));
40
- await import("./launcher-SOSAKLLX.js");
40
+ await import("./launcher-R27OU5QD.js");
41
41
  }
42
42
 
43
43
  // src/commands/agent.ts
@@ -82,7 +82,7 @@ async function runAgent(args) {
82
82
  ...typeof values.port === "string" ? { port: values.port } : {}
83
83
  };
84
84
  Object.assign(process.env, buildAgentEnv(opts));
85
- await import("./launcher-SOSAKLLX.js");
85
+ await import("./launcher-R27OU5QD.js");
86
86
  }
87
87
 
88
88
  // src/commands/setup.ts
@@ -91,7 +91,7 @@ import * as path from "path";
91
91
  import * as fs from "fs";
92
92
  import { parseArgs as parseArgs3 } from "util";
93
93
 
94
- // ../types/dist/event-category-DOl51-Ij.mjs
94
+ // ../types/dist/event-category-7pZEBmVg.mjs
95
95
  var EventCategory = /* @__PURE__ */ (function(EventCategory2) {
96
96
  EventCategory2["SystemBoot"] = "system.boot";
97
97
  EventCategory2["SystemAddonsReady"] = "system.addons-ready";
@@ -244,6 +244,8 @@ var EventCategory = /* @__PURE__ */ (function(EventCategory2) {
244
244
  EventCategory2["BackupRestored"] = "backup.restored";
245
245
  EventCategory2["NotificationDispatched"] = "notification.dispatched";
246
246
  EventCategory2["NotificationFailed"] = "notification.failed";
247
+ EventCategory2["NotificationRuleBroken"] = "notification.rule-broken";
248
+ EventCategory2["NotificationRuleRepaired"] = "notification.rule-repaired";
247
249
  EventCategory2["DeviceUpdated"] = "device.updated";
248
250
  EventCategory2["DeviceOnline"] = "device.online";
249
251
  EventCategory2["DeviceOffline"] = "device.offline";
@@ -14773,7 +14775,7 @@ function date4(params) {
14773
14775
  // ../../node_modules/zod/v4/classic/external.js
14774
14776
  config(en_default());
14775
14777
 
14776
- // ../types/dist/sleep-_sV1BE2f.mjs
14778
+ // ../types/dist/sleep-CueztlR1.mjs
14777
14779
  var AUDIO_CHUNK_FORMATS = [
14778
14780
  "f32le",
14779
14781
  "pcmu",
@@ -48899,6 +48901,8 @@ var NcSystemEventKindSchema = external_exports.enum([
48899
48901
  "alert-critical",
48900
48902
  "alert-error",
48901
48903
  "alert-critical-resolved",
48904
+ "rule-broken",
48905
+ "rule-repaired",
48902
48906
  "camera-online",
48903
48907
  "camera-offline",
48904
48908
  "camera-disabled",
@@ -83603,6 +83607,8 @@ var NC_SYSTEM_EVENT_FAMILY = {
83603
83607
  "alert-critical": "system",
83604
83608
  "alert-error": "system",
83605
83609
  "alert-critical-resolved": "system",
83610
+ "rule-broken": "system",
83611
+ "rule-repaired": "system",
83606
83612
  "storage-location-low": "system",
83607
83613
  "storage-location-critical": "system",
83608
83614
  "storage-location-ok": "system",
@@ -83738,6 +83744,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
83738
83744
  "alert-critical-resolved"
83739
83745
  ]
83740
83746
  },
83747
+ {
83748
+ id: "rule-health",
83749
+ family: "system",
83750
+ label: "Notification rules",
83751
+ kinds: ["rule-broken", "rule-repaired"]
83752
+ },
83741
83753
  {
83742
83754
  id: "alarm",
83743
83755
  family: "alarm",
@@ -84402,6 +84414,47 @@ var NC_TEMPLATE_VARS = [
84402
84414
  kinds: ["system"],
84403
84415
  systemEventKinds: ["recording-degraded", ...ALERT_EPISODE]
84404
84416
  },
84417
+ {
84418
+ name: "ruleName",
84419
+ label: "Rule name",
84420
+ example: "Robot",
84421
+ group: "system",
84422
+ families: ["rule"],
84423
+ fields: [...RULE_TEXT],
84424
+ kinds: ["system"],
84425
+ systemEventKinds: ["rule-broken", "rule-repaired"]
84426
+ },
84427
+ {
84428
+ name: "ruleId",
84429
+ label: "Rule id",
84430
+ example: "3db3e226-9b82-4681-a200-de13b260aa48",
84431
+ group: "system",
84432
+ families: ["rule"],
84433
+ fields: [...RULE_TEXT],
84434
+ kinds: ["system"],
84435
+ systemEventKinds: ["rule-broken", "rule-repaired"]
84436
+ },
84437
+ {
84438
+ name: "brokenReason",
84439
+ label: "Why the rule is broken",
84440
+ description: "unparseable, device-deleted or target-deleted",
84441
+ example: "device-deleted",
84442
+ group: "system",
84443
+ families: ["rule"],
84444
+ fields: [...RULE_TEXT],
84445
+ kinds: ["system"],
84446
+ systemEventKinds: ["rule-broken"]
84447
+ },
84448
+ {
84449
+ name: "offendingIds",
84450
+ label: "Deleted devices or destinations",
84451
+ example: "4483",
84452
+ group: "system",
84453
+ families: ["rule"],
84454
+ fields: [...RULE_TEXT],
84455
+ kinds: ["system"],
84456
+ systemEventKinds: ["rule-broken"]
84457
+ },
84405
84458
  {
84406
84459
  name: "locationName",
84407
84460
  label: "Storage location",
@@ -84834,6 +84887,108 @@ var NC_TEMPLATE_VARS = [
84834
84887
  },
84835
84888
  ...STATE_SUMMARY_VARS
84836
84889
  ];
84890
+ var NC_SYSTEM_EVENT_CLASS_SPECS = [
84891
+ {
84892
+ id: "device-connectivity",
84893
+ family: "device-events",
84894
+ label: "Device connectivity (offline / back online)",
84895
+ bad: ["device-offline"],
84896
+ recovery: ["device-online"],
84897
+ snapshotLabel: "Devices offline now",
84898
+ snapshotSection: "device-state"
84899
+ },
84900
+ {
84901
+ id: "device-switch",
84902
+ family: "device-events",
84903
+ label: "Device switched off / back on",
84904
+ bad: ["device-disabled"],
84905
+ recovery: ["device-enabled"],
84906
+ snapshotLabel: "Devices switched off now",
84907
+ snapshotSection: "device-state"
84908
+ },
84909
+ {
84910
+ id: "stream-connectivity",
84911
+ family: "device-events",
84912
+ label: "Stream connectivity (offline / back online)",
84913
+ bad: ["stream-offline"],
84914
+ recovery: ["stream-online"],
84915
+ snapshotLabel: "Streams offline now",
84916
+ snapshotSection: "streams"
84917
+ },
84918
+ {
84919
+ id: "battery",
84920
+ family: "device-events",
84921
+ label: "Battery (low / back to normal)",
84922
+ bad: ["device-battery-low"],
84923
+ recovery: ["device-battery-normal"],
84924
+ snapshotLabel: "Batteries low now",
84925
+ snapshotSection: "battery"
84926
+ },
84927
+ {
84928
+ id: "consumables",
84929
+ family: "device-events",
84930
+ label: "Consumables (low / replaced)",
84931
+ bad: ["device-consumable-low"],
84932
+ recovery: ["device-consumable-normal"],
84933
+ snapshotLabel: "Consumables low now",
84934
+ snapshotSection: "consumables"
84935
+ },
84936
+ {
84937
+ id: "tanks",
84938
+ family: "device-events",
84939
+ label: "Tanks (low or full / back to normal)",
84940
+ bad: ["device-tank-low", "device-tank-full"],
84941
+ recovery: ["device-tank-normal"],
84942
+ snapshotLabel: "Tanks low or full now",
84943
+ snapshotSection: "tanks"
84944
+ },
84945
+ {
84946
+ id: "recording-health",
84947
+ family: "device-events",
84948
+ label: "Recording health (stalled or degraded / recording again)",
84949
+ bad: ["recording-stalled", "recording-degraded"],
84950
+ recovery: ["recording-healthy"],
84951
+ snapshotLabel: "Recordings stalled now",
84952
+ snapshotSection: null
84953
+ },
84954
+ {
84955
+ id: "node-connectivity",
84956
+ family: "system",
84957
+ label: "Node connectivity (offline / back online)",
84958
+ bad: ["node-offline"],
84959
+ recovery: ["node-online"],
84960
+ snapshotLabel: "Nodes offline now",
84961
+ snapshotSection: "nodes"
84962
+ },
84963
+ {
84964
+ id: "storage-space",
84965
+ family: "system",
84966
+ label: "Storage space (low or critical / ok again)",
84967
+ bad: ["storage-location-low", "storage-location-critical"],
84968
+ recovery: ["storage-location-ok"],
84969
+ snapshotLabel: "Storage locations low now",
84970
+ snapshotSection: null
84971
+ },
84972
+ {
84973
+ id: "critical-alerts",
84974
+ family: "system",
84975
+ label: "Critical alerts (raised / resolved)",
84976
+ bad: ["alert-critical"],
84977
+ recovery: ["alert-critical-resolved"],
84978
+ snapshotLabel: "Critical alerts open now",
84979
+ snapshotSection: null
84980
+ },
84981
+ {
84982
+ id: "rule-health",
84983
+ family: "system",
84984
+ label: "Rule health (broken / repaired)",
84985
+ bad: ["rule-broken"],
84986
+ recovery: ["rule-repaired"],
84987
+ snapshotLabel: "Notification rules broken now",
84988
+ snapshotSection: null
84989
+ }
84990
+ ];
84991
+ var CLASS_BY_KIND = new Map(NC_SYSTEM_EVENT_CLASS_SPECS.flatMap((spec) => [...spec.bad, ...spec.recovery].map((kind) => [kind, spec])));
84837
84992
  var STATE_LABEL_KEYS = [
84838
84993
  "disarmed",
84839
84994
  "armed_home",
@@ -24024,9 +24024,9 @@ var require_zod = __commonJS({
24024
24024
  }
24025
24025
  });
24026
24026
 
24027
- // ../system/dist/dist-D9aw_d0G.js
24028
- var require_dist_D9aw_d0G = __commonJS({
24029
- "../system/dist/dist-D9aw_d0G.js"(exports) {
24027
+ // ../system/dist/dist-Dwi4JA96.js
24028
+ var require_dist_Dwi4JA96 = __commonJS({
24029
+ "../system/dist/dist-Dwi4JA96.js"(exports) {
24030
24030
  "use strict";
24031
24031
  var zod = require_zod();
24032
24032
  __require("crypto");
@@ -24182,6 +24182,8 @@ var require_dist_D9aw_d0G = __commonJS({
24182
24182
  EventCategory2["BackupRestored"] = "backup.restored";
24183
24183
  EventCategory2["NotificationDispatched"] = "notification.dispatched";
24184
24184
  EventCategory2["NotificationFailed"] = "notification.failed";
24185
+ EventCategory2["NotificationRuleBroken"] = "notification.rule-broken";
24186
+ EventCategory2["NotificationRuleRepaired"] = "notification.rule-repaired";
24185
24187
  EventCategory2["DeviceUpdated"] = "device.updated";
24186
24188
  EventCategory2["DeviceOnline"] = "device.online";
24187
24189
  EventCategory2["DeviceOffline"] = "device.offline";
@@ -63118,6 +63120,8 @@ var require_dist_D9aw_d0G = __commonJS({
63118
63120
  "alert-critical",
63119
63121
  "alert-error",
63120
63122
  "alert-critical-resolved",
63123
+ "rule-broken",
63124
+ "rule-repaired",
63121
63125
  "camera-online",
63122
63126
  "camera-offline",
63123
63127
  "camera-disabled",
@@ -99717,6 +99721,8 @@ var require_dist_D9aw_d0G = __commonJS({
99717
99721
  "alert-critical": "system",
99718
99722
  "alert-error": "system",
99719
99723
  "alert-critical-resolved": "system",
99724
+ "rule-broken": "system",
99725
+ "rule-repaired": "system",
99720
99726
  "storage-location-low": "system",
99721
99727
  "storage-location-critical": "system",
99722
99728
  "storage-location-ok": "system",
@@ -99851,6 +99857,12 @@ var require_dist_D9aw_d0G = __commonJS({
99851
99857
  "alert-critical-resolved"
99852
99858
  ]
99853
99859
  },
99860
+ {
99861
+ id: "rule-health",
99862
+ family: "system",
99863
+ label: "Notification rules",
99864
+ kinds: ["rule-broken", "rule-repaired"]
99865
+ },
99854
99866
  {
99855
99867
  id: "alarm",
99856
99868
  family: "alarm",
@@ -100137,6 +100149,10 @@ var require_dist_D9aw_d0G = __commonJS({
100137
100149
  [...RULE_TEXT],
100138
100150
  [...RULE_TEXT],
100139
100151
  [...RULE_TEXT],
100152
+ [...RULE_TEXT],
100153
+ [...RULE_TEXT],
100154
+ [...RULE_TEXT],
100155
+ [...RULE_TEXT],
100140
100156
  ([...RULE_TEXT], [...UPDATES]),
100141
100157
  ([...RULE_TEXT], [...PACKAGE_UPDATES]),
100142
100158
  ([...RULE_TEXT], [...PACKAGE_UPDATES]),
@@ -100175,6 +100191,107 @@ var require_dist_D9aw_d0G = __commonJS({
100175
100191
  [...RULE_TEXT],
100176
100192
  ...STATE_SUMMARY_VARS
100177
100193
  ];
100194
+ new Map([
100195
+ {
100196
+ id: "device-connectivity",
100197
+ family: "device-events",
100198
+ label: "Device connectivity (offline / back online)",
100199
+ bad: ["device-offline"],
100200
+ recovery: ["device-online"],
100201
+ snapshotLabel: "Devices offline now",
100202
+ snapshotSection: "device-state"
100203
+ },
100204
+ {
100205
+ id: "device-switch",
100206
+ family: "device-events",
100207
+ label: "Device switched off / back on",
100208
+ bad: ["device-disabled"],
100209
+ recovery: ["device-enabled"],
100210
+ snapshotLabel: "Devices switched off now",
100211
+ snapshotSection: "device-state"
100212
+ },
100213
+ {
100214
+ id: "stream-connectivity",
100215
+ family: "device-events",
100216
+ label: "Stream connectivity (offline / back online)",
100217
+ bad: ["stream-offline"],
100218
+ recovery: ["stream-online"],
100219
+ snapshotLabel: "Streams offline now",
100220
+ snapshotSection: "streams"
100221
+ },
100222
+ {
100223
+ id: "battery",
100224
+ family: "device-events",
100225
+ label: "Battery (low / back to normal)",
100226
+ bad: ["device-battery-low"],
100227
+ recovery: ["device-battery-normal"],
100228
+ snapshotLabel: "Batteries low now",
100229
+ snapshotSection: "battery"
100230
+ },
100231
+ {
100232
+ id: "consumables",
100233
+ family: "device-events",
100234
+ label: "Consumables (low / replaced)",
100235
+ bad: ["device-consumable-low"],
100236
+ recovery: ["device-consumable-normal"],
100237
+ snapshotLabel: "Consumables low now",
100238
+ snapshotSection: "consumables"
100239
+ },
100240
+ {
100241
+ id: "tanks",
100242
+ family: "device-events",
100243
+ label: "Tanks (low or full / back to normal)",
100244
+ bad: ["device-tank-low", "device-tank-full"],
100245
+ recovery: ["device-tank-normal"],
100246
+ snapshotLabel: "Tanks low or full now",
100247
+ snapshotSection: "tanks"
100248
+ },
100249
+ {
100250
+ id: "recording-health",
100251
+ family: "device-events",
100252
+ label: "Recording health (stalled or degraded / recording again)",
100253
+ bad: ["recording-stalled", "recording-degraded"],
100254
+ recovery: ["recording-healthy"],
100255
+ snapshotLabel: "Recordings stalled now",
100256
+ snapshotSection: null
100257
+ },
100258
+ {
100259
+ id: "node-connectivity",
100260
+ family: "system",
100261
+ label: "Node connectivity (offline / back online)",
100262
+ bad: ["node-offline"],
100263
+ recovery: ["node-online"],
100264
+ snapshotLabel: "Nodes offline now",
100265
+ snapshotSection: "nodes"
100266
+ },
100267
+ {
100268
+ id: "storage-space",
100269
+ family: "system",
100270
+ label: "Storage space (low or critical / ok again)",
100271
+ bad: ["storage-location-low", "storage-location-critical"],
100272
+ recovery: ["storage-location-ok"],
100273
+ snapshotLabel: "Storage locations low now",
100274
+ snapshotSection: null
100275
+ },
100276
+ {
100277
+ id: "critical-alerts",
100278
+ family: "system",
100279
+ label: "Critical alerts (raised / resolved)",
100280
+ bad: ["alert-critical"],
100281
+ recovery: ["alert-critical-resolved"],
100282
+ snapshotLabel: "Critical alerts open now",
100283
+ snapshotSection: null
100284
+ },
100285
+ {
100286
+ id: "rule-health",
100287
+ family: "system",
100288
+ label: "Rule health (broken / repaired)",
100289
+ bad: ["rule-broken"],
100290
+ recovery: ["rule-repaired"],
100291
+ snapshotLabel: "Notification rules broken now",
100292
+ snapshotSection: null
100293
+ }
100294
+ ].flatMap((spec) => [...spec.bad, ...spec.recovery].map((kind) => [kind, spec])));
100178
100295
  var CATALOG_LANGS = AppPageLangSchema.options;
100179
100296
  var CatalogFileSchema = zod.z.record(zod.z.string().min(1), zod.z.string());
100180
100297
  function interpolate(template, params) {
@@ -114024,11 +114141,11 @@ ${values.join("\n")}` : `${blockName} :`;
114024
114141
  }
114025
114142
  });
114026
114143
 
114027
- // ../system/dist/device-ca-B3xUzps7.js
114028
- var require_device_ca_B3xUzps7 = __commonJS({
114029
- "../system/dist/device-ca-B3xUzps7.js"(exports) {
114144
+ // ../system/dist/device-ca-B-Txwl4W.js
114145
+ var require_device_ca_B_Txwl4W = __commonJS({
114146
+ "../system/dist/device-ca-B-Txwl4W.js"(exports) {
114030
114147
  "use strict";
114031
- var require_dist10 = require_dist_D9aw_d0G();
114148
+ var require_dist10 = require_dist_Dwi4JA96();
114032
114149
  var require_x509_es = require_x509_es_C4cOo48M();
114033
114150
  var node_crypto = __require("crypto");
114034
114151
  var SYSTEM_SECRET_OWNER = "system";
@@ -114452,7 +114569,7 @@ var require_alerts_addon = __commonJS({
114452
114569
  [Symbol.toStringTag]: { value: "Module" }
114453
114570
  });
114454
114571
  require_chunk_Cek0wNdY();
114455
- var require_dist10 = require_dist_D9aw_d0G();
114572
+ var require_dist10 = require_dist_Dwi4JA96();
114456
114573
  var require_read_all_rows$1 = require_read_all_rows_CVoO1ONM();
114457
114574
  function nextEpisodeId(input) {
114458
114575
  const { previous } = input;
@@ -114897,6 +115014,10 @@ var require_alerts_addon = __commonJS({
114897
115014
  severity: "warning",
114898
115015
  titleTemplate: "Stream offline"
114899
115016
  },
115017
+ "notification.rule-broken": {
115018
+ severity: "warning",
115019
+ titleTemplate: "Notification rule broken"
115020
+ },
114900
115021
  "backup.restored": {
114901
115022
  severity: "info",
114902
115023
  titleTemplate: "Backup restored"
@@ -114910,7 +115031,8 @@ var require_alerts_addon = __commonJS({
114910
115031
  "process.state-changed",
114911
115032
  "addon.load-recovered",
114912
115033
  "system.liveness-recovered",
114913
- "stream.online"
115034
+ "stream.online",
115035
+ "notification.rule-repaired"
114914
115036
  ];
114915
115037
  var STREAM_OUTAGE_REASONS = [
114916
115038
  "stale-timeout",
@@ -115150,6 +115272,14 @@ var require_alerts_addon = __commonJS({
115150
115272
  await this.handleStreamOnline(event);
115151
115273
  return;
115152
115274
  }
115275
+ if (category === require_dist10.EventCategory.NotificationRuleBroken) {
115276
+ await this.handleRuleBroken(event);
115277
+ return;
115278
+ }
115279
+ if (category === require_dist10.EventCategory.NotificationRuleRepaired) {
115280
+ await this.handleRuleRepaired(event);
115281
+ return;
115282
+ }
115153
115283
  const mapping = CATEGORY_MAPPINGS[category];
115154
115284
  if (!mapping) return;
115155
115285
  if (category === "addon.updated") {
@@ -115564,6 +115694,56 @@ var require_alerts_addon = __commonJS({
115564
115694
  };
115565
115695
  await this.emitAlert(alert);
115566
115696
  }
115697
+ /**
115698
+ * A notification rule that cannot work (D905) — visible in-app even when no
115699
+ * rule listens for `rule-broken`. One card per RULE; a new reason updates it.
115700
+ */
115701
+ async handleRuleBroken(event) {
115702
+ const ruleId = event.data["ruleId"];
115703
+ if (typeof ruleId !== "string" || ruleId.length === 0) return;
115704
+ const ruleName = typeof event.data["ruleName"] === "string" ? event.data["ruleName"] : ruleId;
115705
+ const reason = typeof event.data["reason"] === "string" ? event.data["reason"] : "unknown";
115706
+ const listed = event.data["offendingIds"];
115707
+ const offendingIds = Array.isArray(listed) ? listed.filter((id) => typeof id === "string") : [];
115708
+ const what = reason === "unparseable" ? "cannot be loaded and sends nothing \u2014 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";
115709
+ const alert = {
115710
+ id: `nc-rule-broken:${ruleId}`,
115711
+ category: require_dist10.EventCategory.NotificationRuleBroken,
115712
+ severity: "warning",
115713
+ title: "Notification rule broken",
115714
+ message: `Rule "${ruleName}" ${what}.`,
115715
+ status: "active",
115716
+ read: false,
115717
+ createdAt: Date.now(),
115718
+ updatedAt: Date.now(),
115719
+ source: {
115720
+ type: "addon",
115721
+ id: "notification-center"
115722
+ },
115723
+ metadata: {
115724
+ ruleId,
115725
+ ruleName,
115726
+ reason,
115727
+ offendingIds,
115728
+ reasons: event.data["reasons"]
115729
+ }
115730
+ };
115731
+ await this.emitAlert(alert);
115732
+ }
115733
+ /** The rule works again — drop its broken-rule card. */
115734
+ async handleRuleRepaired(event) {
115735
+ const ruleId = event.data["ruleId"];
115736
+ if (typeof ruleId !== "string" || ruleId.length === 0) return;
115737
+ const stableId = `nc-rule-broken:${ruleId}`;
115738
+ try {
115739
+ await this.dismiss(stableId);
115740
+ } catch (err) {
115741
+ this.ctx.logger?.debug("NotificationRuleRepaired: dismiss failed (likely already dismissed)", { meta: {
115742
+ stableId,
115743
+ error: require_dist10.errMsg(err)
115744
+ } });
115745
+ }
115746
+ }
115567
115747
  /** Stream online after an outage — drop the matching offline card. */
115568
115748
  async handleStreamOnline(event) {
115569
115749
  const deviceId = event.data["deviceId"];
@@ -115857,7 +116037,7 @@ var require_calendars_addon = __commonJS({
115857
116037
  [Symbol.toStringTag]: { value: "Module" }
115858
116038
  });
115859
116039
  require_chunk_Cek0wNdY();
115860
- var require_dist10 = require_dist_D9aw_d0G();
116040
+ var require_dist10 = require_dist_Dwi4JA96();
115861
116041
  var require_settle_sources = require_settle_sources_Bhsy57y();
115862
116042
  var zod = require_zod();
115863
116043
  var CALENDAR_COLOR_PALETTE = [
@@ -116073,11 +116253,11 @@ var require_calendars = __commonJS({
116073
116253
  }
116074
116254
  });
116075
116255
 
116076
- // ../system/dist/composition-sources-oXvmbMHX.js
116077
- var require_composition_sources_oXvmbMHX = __commonJS({
116078
- "../system/dist/composition-sources-oXvmbMHX.js"(exports) {
116256
+ // ../system/dist/composition-sources-BG0E76VO.js
116257
+ var require_composition_sources_BG0E76VO = __commonJS({
116258
+ "../system/dist/composition-sources-BG0E76VO.js"(exports) {
116079
116259
  "use strict";
116080
- var require_dist10 = require_dist_D9aw_d0G();
116260
+ var require_dist10 = require_dist_Dwi4JA96();
116081
116261
  function normalizedNativeOwner(owner) {
116082
116262
  const trimmed = owner?.trim();
116083
116263
  return trimmed ? trimmed : null;
@@ -116192,8 +116372,8 @@ var require_composer_addon = __commonJS({
116192
116372
  [Symbol.toStringTag]: { value: "Module" }
116193
116373
  });
116194
116374
  require_chunk_Cek0wNdY();
116195
- var require_dist10 = require_dist_D9aw_d0G();
116196
- var require_composition_sources = require_composition_sources_oXvmbMHX();
116375
+ var require_dist10 = require_dist_Dwi4JA96();
116376
+ var require_composition_sources = require_composition_sources_BG0E76VO();
116197
116377
  var zod = require_zod();
116198
116378
  function isRecord$2(value) {
116199
116379
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -120003,7 +120183,7 @@ var require_console_logging = __commonJS({
120003
120183
  [Symbol.toStringTag]: { value: "Module" }
120004
120184
  });
120005
120185
  require_chunk_Cek0wNdY();
120006
- var require_dist10 = require_dist_D9aw_d0G();
120186
+ var require_dist10 = require_dist_Dwi4JA96();
120007
120187
  var require_formatter = require_formatter_DqAKDlvN();
120008
120188
  var LEVEL_RANK = {
120009
120189
  debug: 0,
@@ -124667,9 +124847,9 @@ var require_core_blocks_addon = __commonJS({
124667
124847
  "use strict";
124668
124848
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
124669
124849
  var require_chunk = require_chunk_Cek0wNdY();
124670
- var require_dist10 = require_dist_D9aw_d0G();
124850
+ var require_dist10 = require_dist_Dwi4JA96();
124671
124851
  var require_read_all_rows$1 = require_read_all_rows_CVoO1ONM();
124672
- var require_composition_sources = require_composition_sources_oXvmbMHX();
124852
+ var require_composition_sources = require_composition_sources_BG0E76VO();
124673
124853
  var require_prefix_range = require_prefix_range_D_KueXbQ();
124674
124854
  var require_prefix_walk = require_prefix_walk_Dv6MLZlM();
124675
124855
  var zod = require_zod();
@@ -126867,9 +127047,9 @@ var require_core_blocks = __commonJS({
126867
127047
  }
126868
127048
  });
126869
127049
 
126870
- // ../types/dist/event-category-eSqkye-K.js
126871
- var require_event_category_eSqkye_K = __commonJS({
126872
- "../types/dist/event-category-eSqkye-K.js"(exports) {
127050
+ // ../types/dist/event-category-kpu1bZMs.js
127051
+ var require_event_category_kpu1bZMs = __commonJS({
127052
+ "../types/dist/event-category-kpu1bZMs.js"(exports) {
126873
127053
  "use strict";
126874
127054
  var EventCategory = /* @__PURE__ */ (function(EventCategory2) {
126875
127055
  EventCategory2["SystemBoot"] = "system.boot";
@@ -127023,6 +127203,8 @@ var require_event_category_eSqkye_K = __commonJS({
127023
127203
  EventCategory2["BackupRestored"] = "backup.restored";
127024
127204
  EventCategory2["NotificationDispatched"] = "notification.dispatched";
127025
127205
  EventCategory2["NotificationFailed"] = "notification.failed";
127206
+ EventCategory2["NotificationRuleBroken"] = "notification.rule-broken";
127207
+ EventCategory2["NotificationRuleRepaired"] = "notification.rule-repaired";
127026
127208
  EventCategory2["DeviceUpdated"] = "device.updated";
127027
127209
  EventCategory2["DeviceOnline"] = "device.online";
127028
127210
  EventCategory2["DeviceOffline"] = "device.offline";
@@ -127072,11 +127254,11 @@ var require_event_category_eSqkye_K = __commonJS({
127072
127254
  }
127073
127255
  });
127074
127256
 
127075
- // ../types/dist/sleep-Re8daN0Y.js
127076
- var require_sleep_Re8daN0Y = __commonJS({
127077
- "../types/dist/sleep-Re8daN0Y.js"(exports) {
127257
+ // ../types/dist/sleep-Bo7fq491.js
127258
+ var require_sleep_Bo7fq491 = __commonJS({
127259
+ "../types/dist/sleep-Bo7fq491.js"(exports) {
127078
127260
  "use strict";
127079
- var require_event_category = require_event_category_eSqkye_K();
127261
+ var require_event_category = require_event_category_kpu1bZMs();
127080
127262
  var zod = require_zod();
127081
127263
  var AUDIO_CHUNK_FORMATS = [
127082
127264
  "f32le",
@@ -135083,8 +135265,8 @@ var require_addon = __commonJS({
135083
135265
  "../types/dist/addon.js"(exports) {
135084
135266
  "use strict";
135085
135267
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
135086
- var require_sleep = require_sleep_Re8daN0Y();
135087
- var require_event_category = require_event_category_eSqkye_K();
135268
+ var require_sleep = require_sleep_Bo7fq491();
135269
+ var require_event_category = require_event_category_kpu1bZMs();
135088
135270
  var require_err_msg = require_err_msg_BhVbr0NX();
135089
135271
  var CAP_INPUT_DEFAULTS = Object.freeze({
135090
135272
  "addons": { "getLogs": { "limit": 100 } },
@@ -137726,7 +137908,7 @@ var require_device_manager_addon = __commonJS({
137726
137908
  [Symbol.toStringTag]: { value: "Module" }
137727
137909
  });
137728
137910
  require_chunk_Cek0wNdY();
137729
- var require_dist10 = require_dist_D9aw_d0G();
137911
+ var require_dist10 = require_dist_Dwi4JA96();
137730
137912
  var require_read_all_rows$1 = require_read_all_rows_CVoO1ONM();
137731
137913
  var require_prefix_range = require_prefix_range_D_KueXbQ();
137732
137914
  var require_prefix_walk = require_prefix_walk_Dv6MLZlM();
@@ -146798,7 +146980,7 @@ var require_hub_forwarder = __commonJS({
146798
146980
  [Symbol.toStringTag]: { value: "Module" }
146799
146981
  });
146800
146982
  require_chunk_Cek0wNdY();
146801
- var require_dist10 = require_dist_D9aw_d0G();
146983
+ var require_dist10 = require_dist_Dwi4JA96();
146802
146984
  var require_formatter = require_formatter_DqAKDlvN();
146803
146985
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
146804
146986
  var HubForwarderDestination = class {
@@ -146932,7 +147114,7 @@ var require_liveness_monitor_addon = __commonJS({
146932
147114
  "use strict";
146933
147115
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
146934
147116
  require_chunk_Cek0wNdY();
146935
- var require_dist10 = require_dist_D9aw_d0G();
147117
+ var require_dist10 = require_dist_Dwi4JA96();
146936
147118
  var NO_DEVICES = "liveness:no-devices";
146937
147119
  var ALL_OFFLINE = "liveness:all-devices-offline";
146938
147120
  var NO_FOOTAGE_PREFIX = "liveness:no-footage:";
@@ -147295,11 +147477,11 @@ var require_local_auth_addon = __commonJS({
147295
147477
  [Symbol.toStringTag]: { value: "Module" }
147296
147478
  });
147297
147479
  var require_chunk = require_chunk_Cek0wNdY();
147298
- var require_dist10 = require_dist_D9aw_d0G();
147480
+ var require_dist10 = require_dist_Dwi4JA96();
147299
147481
  var require_read_all_rows$1 = require_read_all_rows_CVoO1ONM();
147300
147482
  var require_safe_buffer$1 = require_safe_buffer_D3aoa_7X();
147301
147483
  var require_ms$1 = require_ms_LB3giGoU();
147302
- var require_device_ca = require_device_ca_B3xUzps7();
147484
+ var require_device_ca = require_device_ca_B_Txwl4W();
147303
147485
  var zod = require_zod();
147304
147486
  var node_crypto = __require("crypto");
147305
147487
  node_crypto = require_chunk.__toESM(node_crypto);
@@ -157831,7 +158013,7 @@ var require_loki_logging = __commonJS({
157831
158013
  [Symbol.toStringTag]: { value: "Module" }
157832
158014
  });
157833
158015
  require_chunk_Cek0wNdY();
157834
- var require_dist10 = require_dist_D9aw_d0G();
158016
+ var require_dist10 = require_dist_Dwi4JA96();
157835
158017
  var require_log_read_filter = require_log_read_filter_Bi066jwU();
157836
158018
  var zod = require_zod();
157837
158019
  function sanitizeLabelName(raw) {
@@ -158792,7 +158974,7 @@ var require_native_metrics_addon = __commonJS({
158792
158974
  [Symbol.toStringTag]: { value: "Module" }
158793
158975
  });
158794
158976
  var require_chunk = require_chunk_Cek0wNdY();
158795
- var require_dist10 = require_dist_D9aw_d0G();
158977
+ var require_dist10 = require_dist_Dwi4JA96();
158796
158978
  var node_fs_promises = __require("fs/promises");
158797
158979
  var node_util = __require("util");
158798
158980
  var node_os = __require("os");
@@ -161359,7 +161541,7 @@ var require_device_history_addon = __commonJS({
161359
161541
  [Symbol.toStringTag]: { value: "Module" }
161360
161542
  });
161361
161543
  require_chunk_Cek0wNdY();
161362
- var require_dist10 = require_dist_D9aw_d0G();
161544
+ var require_dist10 = require_dist_Dwi4JA96();
161363
161545
  var FIVE_MINUTES_MS = 5 * 6e4;
161364
161546
  var HOUR_MS = 60 * 6e4;
161365
161547
  var DAY_MS = 24 * HOUR_MS;
@@ -164405,7 +164587,7 @@ var require_filesystem_storage_addon = __commonJS({
164405
164587
  [Symbol.toStringTag]: { value: "Module" }
164406
164588
  });
164407
164589
  var require_chunk = require_chunk_Cek0wNdY();
164408
- var require_dist10 = require_dist_D9aw_d0G();
164590
+ var require_dist10 = require_dist_Dwi4JA96();
164409
164591
  var node_crypto = __require("crypto");
164410
164592
  var node_fs_promises = __require("fs/promises");
164411
164593
  var node_path = __require("path");
@@ -165515,12 +165697,12 @@ var require_lib = __commonJS({
165515
165697
  }
165516
165698
  });
165517
165699
 
165518
- // ../system/dist/wal-maintenance-jXcOxm2T.js
165519
- var require_wal_maintenance_jXcOxm2T = __commonJS({
165520
- "../system/dist/wal-maintenance-jXcOxm2T.js"(exports) {
165700
+ // ../system/dist/wal-maintenance-BQlvAduo.js
165701
+ var require_wal_maintenance_BQlvAduo = __commonJS({
165702
+ "../system/dist/wal-maintenance-BQlvAduo.js"(exports) {
165521
165703
  "use strict";
165522
165704
  var require_chunk = require_chunk_Cek0wNdY();
165523
- var require_dist10 = require_dist_D9aw_d0G();
165705
+ var require_dist10 = require_dist_Dwi4JA96();
165524
165706
  var require_prefix_range = require_prefix_range_D_KueXbQ();
165525
165707
  var node_crypto = __require("crypto");
165526
165708
  var node_module = __require("module");
@@ -169637,9 +169819,9 @@ var require_sqlite_settings_addon = __commonJS({
169637
169819
  [Symbol.toStringTag]: { value: "Module" }
169638
169820
  });
169639
169821
  var require_chunk = require_chunk_Cek0wNdY();
169640
- var require_dist10 = require_dist_D9aw_d0G();
169822
+ var require_dist10 = require_dist_Dwi4JA96();
169641
169823
  var require_retired_settings_keys = require_retired_settings_keys_CGUqX_Oz();
169642
- var require_wal_maintenance = require_wal_maintenance_jXcOxm2T();
169824
+ var require_wal_maintenance = require_wal_maintenance_BQlvAduo();
169643
169825
  var require_sqlite_snapshot_protocol = require_sqlite_snapshot_protocol_B9OndqZv();
169644
169826
  var require_wal_checkpoint_policy = require_wal_checkpoint_policy_d2z2qPqx();
169645
169827
  var node_fs_promises = __require("fs/promises");
@@ -171252,7 +171434,7 @@ var require_sqlite_storage = __commonJS({
171252
171434
  });
171253
171435
  require_chunk_Cek0wNdY();
171254
171436
  var require_builtins_sqlite_storage_filesystem_storage_addon = require_filesystem_storage_addon();
171255
- var require_wal_maintenance = require_wal_maintenance_jXcOxm2T();
171437
+ var require_wal_maintenance = require_wal_maintenance_BQlvAduo();
171256
171438
  var require_builtins_sqlite_storage_sqlite_settings_addon = require_sqlite_settings_addon();
171257
171439
  var ConfigStore = class {
171258
171440
  db;
@@ -171336,7 +171518,7 @@ var require_storage_orchestrator_addon = __commonJS({
171336
171518
  [Symbol.toStringTag]: { value: "Module" }
171337
171519
  });
171338
171520
  var require_chunk = require_chunk_Cek0wNdY();
171339
- var require_dist10 = require_dist_D9aw_d0G();
171521
+ var require_dist10 = require_dist_Dwi4JA96();
171340
171522
  var require_read_all_rows$1 = require_read_all_rows_CVoO1ONM();
171341
171523
  var zod = require_zod();
171342
171524
  var node_crypto = __require("crypto");
@@ -175923,12 +176105,12 @@ var require_storage_orchestrator = __commonJS({
175923
176105
  }
175924
176106
  });
175925
176107
 
175926
- // ../system/dist/agent-https-DhFIbEwN.js
175927
- var require_agent_https_DhFIbEwN = __commonJS({
175928
- "../system/dist/agent-https-DhFIbEwN.js"(exports) {
176108
+ // ../system/dist/agent-https-CzA1AmyI.js
176109
+ var require_agent_https_CzA1AmyI = __commonJS({
176110
+ "../system/dist/agent-https-CzA1AmyI.js"(exports) {
175929
176111
  "use strict";
175930
176112
  var require_chunk = require_chunk_Cek0wNdY();
175931
- var require_dist10 = require_dist_D9aw_d0G();
176113
+ var require_dist10 = require_dist_Dwi4JA96();
175932
176114
  var require_x509_es = require_x509_es_C4cOo48M();
175933
176115
  var zod = require_zod();
175934
176116
  var node_crypto = __require("crypto");
@@ -176986,11 +177168,11 @@ var require_agent_https_DhFIbEwN = __commonJS({
176986
177168
  }
176987
177169
  });
176988
177170
 
176989
- // ../system/dist/constants-5mrGZxwS.js
176990
- var require_constants_5mrGZxwS = __commonJS({
176991
- "../system/dist/constants-5mrGZxwS.js"(exports) {
177171
+ // ../system/dist/constants-BYJ4ni7h.js
177172
+ var require_constants_BYJ4ni7h = __commonJS({
177173
+ "../system/dist/constants-BYJ4ni7h.js"(exports) {
176992
177174
  "use strict";
176993
- var MESH_CA_KEY_REF = require_dist_D9aw_d0G().buildSecretRef({
177175
+ var MESH_CA_KEY_REF = require_dist_Dwi4JA96().buildSecretRef({
176994
177176
  owner: "system",
176995
177177
  scope: { kind: "global" },
176996
177178
  fieldPath: "meshCaKey"
@@ -194087,11 +194269,11 @@ var require_system_config_addon = __commonJS({
194087
194269
  [Symbol.toStringTag]: { value: "Module" }
194088
194270
  });
194089
194271
  var require_chunk = require_chunk_Cek0wNdY();
194090
- var require_dist10 = require_dist_D9aw_d0G();
194272
+ var require_dist10 = require_dist_Dwi4JA96();
194091
194273
  var require_safe_buffer$1 = require_safe_buffer_D3aoa_7X();
194092
194274
  var require_x509_es = require_x509_es_C4cOo48M();
194093
- var require_agent_https = require_agent_https_DhFIbEwN();
194094
- var require_constants$8 = require_constants_5mrGZxwS();
194275
+ var require_agent_https = require_agent_https_CzA1AmyI();
194276
+ var require_constants$8 = require_constants_BYJ4ni7h();
194095
194277
  var require_src$1 = require_src_CnAqG6EF();
194096
194278
  var zod = require_zod();
194097
194279
  var node_crypto = __require("crypto");
@@ -275143,7 +275325,7 @@ var require_winston_logging = __commonJS({
275143
275325
  [Symbol.toStringTag]: { value: "Module" }
275144
275326
  });
275145
275327
  var require_chunk = require_chunk_Cek0wNdY();
275146
- var require_dist10 = require_dist_D9aw_d0G();
275328
+ var require_dist10 = require_dist_Dwi4JA96();
275147
275329
  var require_formatter = require_formatter_DqAKDlvN();
275148
275330
  var require_log_file_read_protocol = require_log_file_read_protocol_D0WcLbIV();
275149
275331
  var node_path = __require("path");
@@ -282946,14 +283128,14 @@ var require_lib_8oZrELLm = __commonJS({
282946
283128
  }
282947
283129
  });
282948
283130
 
282949
- // ../system/dist/hub-mdns-ciao-CFlhVKK6.js
282950
- var require_hub_mdns_ciao_CFlhVKK6 = __commonJS({
282951
- "../system/dist/hub-mdns-ciao-CFlhVKK6.js"(exports) {
283131
+ // ../system/dist/hub-mdns-ciao-3qdHbtyp.js
283132
+ var require_hub_mdns_ciao_3qdHbtyp = __commonJS({
283133
+ "../system/dist/hub-mdns-ciao-3qdHbtyp.js"(exports) {
282952
283134
  "use strict";
282953
283135
  var require_chunk = require_chunk_Cek0wNdY();
282954
- var require_dist10 = require_dist_D9aw_d0G();
283136
+ var require_dist10 = require_dist_Dwi4JA96();
282955
283137
  var require_x509_es = require_x509_es_C4cOo48M();
282956
- var require_agent_https = require_agent_https_DhFIbEwN();
283138
+ var require_agent_https = require_agent_https_CzA1AmyI();
282957
283139
  var node_crypto = __require("crypto");
282958
283140
  var _camstack_types_node = require_node();
282959
283141
  var node_fs_promises = __require("fs/promises");
@@ -283965,12 +284147,12 @@ var require_platform_key_source_Di7HrlGR = __commonJS({
283965
284147
  }
283966
284148
  });
283967
284149
 
283968
- // ../system/dist/restore-archive-6zkRREHO.js
283969
- var require_restore_archive_6zkRREHO = __commonJS({
283970
- "../system/dist/restore-archive-6zkRREHO.js"(exports) {
284150
+ // ../system/dist/restore-archive-D1uxP8Eb.js
284151
+ var require_restore_archive_D1uxP8Eb = __commonJS({
284152
+ "../system/dist/restore-archive-D1uxP8Eb.js"(exports) {
283971
284153
  "use strict";
283972
284154
  var require_chunk = require_chunk_Cek0wNdY();
283973
- var require_dist10 = require_dist_D9aw_d0G();
284155
+ var require_dist10 = require_dist_Dwi4JA96();
283974
284156
  var zod = require_zod();
283975
284157
  var node_crypto = __require("crypto");
283976
284158
  var buffer = __require("buffer");
@@ -295211,9 +295393,9 @@ var require_dist3 = __commonJS({
295211
295393
  "use strict";
295212
295394
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
295213
295395
  var require_chunk = require_chunk_Cek0wNdY();
295214
- var require_dist10 = require_dist_D9aw_d0G();
295396
+ var require_dist10 = require_dist_Dwi4JA96();
295215
295397
  var require_read_all_rows$1 = require_read_all_rows_CVoO1ONM();
295216
- var require_device_ca = require_device_ca_B3xUzps7();
295398
+ var require_device_ca = require_device_ca_B_Txwl4W();
295217
295399
  var require_builtins_alerts_alerts_addon = require_alerts_addon();
295218
295400
  require_alerts();
295219
295401
  var require_builtins_calendars_calendars_addon = require_calendars_addon();
@@ -295237,21 +295419,21 @@ var require_dist3 = __commonJS({
295237
295419
  var require_builtins_native_metrics_native_metrics_addon = require_native_metrics_addon();
295238
295420
  var require_builtins_device_history_device_history_addon = require_device_history_addon();
295239
295421
  var require_builtins_sqlite_storage_filesystem_storage_addon = require_filesystem_storage_addon();
295240
- var require_wal_maintenance = require_wal_maintenance_jXcOxm2T();
295422
+ var require_wal_maintenance = require_wal_maintenance_BQlvAduo();
295241
295423
  var require_builtins_sqlite_storage_sqlite_settings_addon = require_sqlite_settings_addon();
295242
295424
  var require_builtins_sqlite_storage_index = require_sqlite_storage();
295243
295425
  var require_builtins_storage_orchestrator_storage_orchestrator_addon = require_storage_orchestrator_addon();
295244
295426
  require_storage_orchestrator();
295245
- var require_agent_https = require_agent_https_DhFIbEwN();
295246
- var require_constants15 = require_constants_5mrGZxwS();
295427
+ var require_agent_https = require_agent_https_CzA1AmyI();
295428
+ var require_constants15 = require_constants_BYJ4ni7h();
295247
295429
  var require_builtins_system_config_system_config_addon = require_system_config_addon();
295248
295430
  require_system_config();
295249
295431
  var require_builtins_winston_logging_index = require_winston_logging();
295250
295432
  var require_custom_action_registry = require_custom_action_registry_MRyes5j0();
295251
- var require_hub_mdns_ciao = require_hub_mdns_ciao_CFlhVKK6();
295433
+ var require_hub_mdns_ciao = require_hub_mdns_ciao_3qdHbtyp();
295252
295434
  var require_platform_key_source = require_platform_key_source_Di7HrlGR();
295253
295435
  var require_resource_monitor = require_resource_monitor_mio9dSCT();
295254
- var require_restore_archive = require_restore_archive_6zkRREHO();
295436
+ var require_restore_archive = require_restore_archive_D1uxP8Eb();
295255
295437
  var require_coral_accelerators = require_coral_accelerators_oUXmmbc2();
295256
295438
  var zod = require_zod();
295257
295439
  var node_crypto = __require("crypto");
@@ -318675,7 +318857,7 @@ var require_enums = __commonJS({
318675
318857
  "../types/dist/enums.js"(exports) {
318676
318858
  "use strict";
318677
318859
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
318678
- var require_event_category = require_event_category_eSqkye_K();
318860
+ var require_event_category = require_event_category_kpu1bZMs();
318679
318861
  var EventSourceType = /* @__PURE__ */ (function(EventSourceType2) {
318680
318862
  EventSourceType2["Addon"] = "addon";
318681
318863
  EventSourceType2["Core"] = "core";
@@ -318695,8 +318877,8 @@ var require_dist4 = __commonJS({
318695
318877
  "../types/dist/index.js"(exports) {
318696
318878
  "use strict";
318697
318879
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
318698
- var require_sleep = require_sleep_Re8daN0Y();
318699
- var require_event_category = require_event_category_eSqkye_K();
318880
+ var require_sleep = require_sleep_Bo7fq491();
318881
+ var require_event_category = require_event_category_kpu1bZMs();
318700
318882
  var require_composition = require_composition_eoYYVfOp();
318701
318883
  var require_node_color2 = require_node_color();
318702
318884
  var require_err_msg = require_err_msg_BhVbr0NX();
@@ -356018,6 +356200,8 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
356018
356200
  "alert-critical",
356019
356201
  "alert-error",
356020
356202
  "alert-critical-resolved",
356203
+ "rule-broken",
356204
+ "rule-repaired",
356021
356205
  "camera-online",
356022
356206
  "camera-offline",
356023
356207
  "camera-disabled",
@@ -357198,6 +357382,14 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
357198
357382
  value: "alert-critical-resolved",
357199
357383
  label: "Critical alert resolved"
357200
357384
  },
357385
+ {
357386
+ value: "rule-broken",
357387
+ label: "Notification rule broken"
357388
+ },
357389
+ {
357390
+ value: "rule-repaired",
357391
+ label: "Notification rule repaired"
357392
+ },
357201
357393
  {
357202
357394
  value: "alarm-arm-refused",
357203
357395
  label: "Alarm arm refused"
@@ -399920,6 +400112,8 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
399920
400112
  "alert-critical": "system",
399921
400113
  "alert-error": "system",
399922
400114
  "alert-critical-resolved": "system",
400115
+ "rule-broken": "system",
400116
+ "rule-repaired": "system",
399923
400117
  "storage-location-low": "system",
399924
400118
  "storage-location-critical": "system",
399925
400119
  "storage-location-ok": "system",
@@ -400065,6 +400259,12 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
400065
400259
  "alert-critical-resolved"
400066
400260
  ]
400067
400261
  },
400262
+ {
400263
+ id: "rule-health",
400264
+ family: "system",
400265
+ label: "Notification rules",
400266
+ kinds: ["rule-broken", "rule-repaired"]
400267
+ },
400068
400268
  {
400069
400269
  id: "alarm",
400070
400270
  family: "alarm",
@@ -402054,6 +402254,47 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
402054
402254
  kinds: ["system"],
402055
402255
  systemEventKinds: ["recording-degraded", ...ALERT_EPISODE]
402056
402256
  },
402257
+ {
402258
+ name: "ruleName",
402259
+ label: "Rule name",
402260
+ example: "Robot",
402261
+ group: "system",
402262
+ families: ["rule"],
402263
+ fields: [...RULE_TEXT],
402264
+ kinds: ["system"],
402265
+ systemEventKinds: ["rule-broken", "rule-repaired"]
402266
+ },
402267
+ {
402268
+ name: "ruleId",
402269
+ label: "Rule id",
402270
+ example: "3db3e226-9b82-4681-a200-de13b260aa48",
402271
+ group: "system",
402272
+ families: ["rule"],
402273
+ fields: [...RULE_TEXT],
402274
+ kinds: ["system"],
402275
+ systemEventKinds: ["rule-broken", "rule-repaired"]
402276
+ },
402277
+ {
402278
+ name: "brokenReason",
402279
+ label: "Why the rule is broken",
402280
+ description: "unparseable, device-deleted or target-deleted",
402281
+ example: "device-deleted",
402282
+ group: "system",
402283
+ families: ["rule"],
402284
+ fields: [...RULE_TEXT],
402285
+ kinds: ["system"],
402286
+ systemEventKinds: ["rule-broken"]
402287
+ },
402288
+ {
402289
+ name: "offendingIds",
402290
+ label: "Deleted devices or destinations",
402291
+ example: "4483",
402292
+ group: "system",
402293
+ families: ["rule"],
402294
+ fields: [...RULE_TEXT],
402295
+ kinds: ["system"],
402296
+ systemEventKinds: ["rule-broken"]
402297
+ },
402057
402298
  {
402058
402299
  name: "locationName",
402059
402300
  label: "Storage location",
@@ -402494,7 +402735,9 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
402494
402735
  "node-updating",
402495
402736
  "alert-critical",
402496
402737
  "alert-error",
402497
- "alert-critical-resolved"
402738
+ "alert-critical-resolved",
402739
+ "rule-broken",
402740
+ "rule-repaired"
402498
402741
  ];
402499
402742
  function servedTemplateVars() {
402500
402743
  return NC_TEMPLATE_VARS.filter((d) => !isHeldBackTemplateVar(d)).map((d) => d.systemEventKinds === void 0 ? d : {
@@ -402551,6 +402794,161 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
402551
402794
  function isKnownTemplateVar(name, ctx) {
402552
402795
  return templateVarsFor(ctx).some((d) => d.dynamic !== void 0 ? name.startsWith(d.dynamic.prefix) && name.length > d.dynamic.prefix.length : d.name === name);
402553
402796
  }
402797
+ var NC_SYSTEM_EVENT_CLASS_SPECS = [
402798
+ {
402799
+ id: "device-connectivity",
402800
+ family: "device-events",
402801
+ label: "Device connectivity (offline / back online)",
402802
+ bad: ["device-offline"],
402803
+ recovery: ["device-online"],
402804
+ snapshotLabel: "Devices offline now",
402805
+ snapshotSection: "device-state"
402806
+ },
402807
+ {
402808
+ id: "device-switch",
402809
+ family: "device-events",
402810
+ label: "Device switched off / back on",
402811
+ bad: ["device-disabled"],
402812
+ recovery: ["device-enabled"],
402813
+ snapshotLabel: "Devices switched off now",
402814
+ snapshotSection: "device-state"
402815
+ },
402816
+ {
402817
+ id: "stream-connectivity",
402818
+ family: "device-events",
402819
+ label: "Stream connectivity (offline / back online)",
402820
+ bad: ["stream-offline"],
402821
+ recovery: ["stream-online"],
402822
+ snapshotLabel: "Streams offline now",
402823
+ snapshotSection: "streams"
402824
+ },
402825
+ {
402826
+ id: "battery",
402827
+ family: "device-events",
402828
+ label: "Battery (low / back to normal)",
402829
+ bad: ["device-battery-low"],
402830
+ recovery: ["device-battery-normal"],
402831
+ snapshotLabel: "Batteries low now",
402832
+ snapshotSection: "battery"
402833
+ },
402834
+ {
402835
+ id: "consumables",
402836
+ family: "device-events",
402837
+ label: "Consumables (low / replaced)",
402838
+ bad: ["device-consumable-low"],
402839
+ recovery: ["device-consumable-normal"],
402840
+ snapshotLabel: "Consumables low now",
402841
+ snapshotSection: "consumables"
402842
+ },
402843
+ {
402844
+ id: "tanks",
402845
+ family: "device-events",
402846
+ label: "Tanks (low or full / back to normal)",
402847
+ bad: ["device-tank-low", "device-tank-full"],
402848
+ recovery: ["device-tank-normal"],
402849
+ snapshotLabel: "Tanks low or full now",
402850
+ snapshotSection: "tanks"
402851
+ },
402852
+ {
402853
+ id: "recording-health",
402854
+ family: "device-events",
402855
+ label: "Recording health (stalled or degraded / recording again)",
402856
+ bad: ["recording-stalled", "recording-degraded"],
402857
+ recovery: ["recording-healthy"],
402858
+ snapshotLabel: "Recordings stalled now",
402859
+ snapshotSection: null
402860
+ },
402861
+ {
402862
+ id: "node-connectivity",
402863
+ family: "system",
402864
+ label: "Node connectivity (offline / back online)",
402865
+ bad: ["node-offline"],
402866
+ recovery: ["node-online"],
402867
+ snapshotLabel: "Nodes offline now",
402868
+ snapshotSection: "nodes"
402869
+ },
402870
+ {
402871
+ id: "storage-space",
402872
+ family: "system",
402873
+ label: "Storage space (low or critical / ok again)",
402874
+ bad: ["storage-location-low", "storage-location-critical"],
402875
+ recovery: ["storage-location-ok"],
402876
+ snapshotLabel: "Storage locations low now",
402877
+ snapshotSection: null
402878
+ },
402879
+ {
402880
+ id: "critical-alerts",
402881
+ family: "system",
402882
+ label: "Critical alerts (raised / resolved)",
402883
+ bad: ["alert-critical"],
402884
+ recovery: ["alert-critical-resolved"],
402885
+ snapshotLabel: "Critical alerts open now",
402886
+ snapshotSection: null
402887
+ },
402888
+ {
402889
+ id: "rule-health",
402890
+ family: "system",
402891
+ label: "Rule health (broken / repaired)",
402892
+ bad: ["rule-broken"],
402893
+ recovery: ["rule-repaired"],
402894
+ snapshotLabel: "Notification rules broken now",
402895
+ snapshotSection: null
402896
+ }
402897
+ ];
402898
+ var CLASS_BY_KIND = new Map(NC_SYSTEM_EVENT_CLASS_SPECS.flatMap((spec) => [...spec.bad, ...spec.recovery].map((kind) => [kind, spec])));
402899
+ function systemEventClassKinds(spec) {
402900
+ return [...spec.bad, ...spec.recovery];
402901
+ }
402902
+ function systemEventClassOf(kind) {
402903
+ return CLASS_BY_KIND.get(kind);
402904
+ }
402905
+ function isSystemEventRecoveryKind(kind) {
402906
+ return systemEventClassOf(kind)?.recovery.some((k) => k === kind) ?? false;
402907
+ }
402908
+ function systemEventClassesFor(family) {
402909
+ return NC_SYSTEM_EVENT_CLASS_SPECS.filter((spec) => spec.family === family);
402910
+ }
402911
+ function expandSystemEventClasses(kinds) {
402912
+ const out = [];
402913
+ const seen = /* @__PURE__ */ new Set();
402914
+ const push = (kind) => {
402915
+ if (seen.has(kind)) return;
402916
+ seen.add(kind);
402917
+ out.push(kind);
402918
+ };
402919
+ const listed = new Set(kinds);
402920
+ for (const kind of kinds) {
402921
+ push(kind);
402922
+ const spec = systemEventClassOf(kind);
402923
+ if (spec === void 0) continue;
402924
+ const hasBad = spec.bad.some((k) => listed.has(k));
402925
+ if (spec.bad.some((k) => k === kind)) for (const edge of spec.recovery) push(edge);
402926
+ else if (!hasBad) for (const edge of spec.bad) push(edge);
402927
+ }
402928
+ return out;
402929
+ }
402930
+ function isInstantSystemRule(rule) {
402931
+ if (rule.delivery !== "system-event") return false;
402932
+ return rule.systemEventDelivery?.mode !== "summary";
402933
+ }
402934
+ function withSystemEventClasses(rule) {
402935
+ const condition = rule.conditions.systemEvent;
402936
+ if (condition === void 0 || !isInstantSystemRule(rule)) return rule;
402937
+ const families = new Set(condition.kinds.map((kind) => NC_SYSTEM_EVENT_FAMILY[kind]));
402938
+ if (families.size !== 1 || families.has(null)) return rule;
402939
+ const kinds = expandSystemEventClasses(condition.kinds);
402940
+ if (kinds.length === condition.kinds.length) return rule;
402941
+ return {
402942
+ ...rule,
402943
+ conditions: {
402944
+ ...rule.conditions,
402945
+ systemEvent: {
402946
+ ...condition,
402947
+ kinds
402948
+ }
402949
+ }
402950
+ };
402951
+ }
402554
402952
  var NC_SYSTEM_EVENT_SUMMARY_FAMILIES = ["device-events", "system"];
402555
402953
  function systemEventSummaryScheduleOf(rule) {
402556
402954
  if (!isSystemDelivery(rule.delivery)) return null;
@@ -407626,6 +408024,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
407626
408024
  exports.NC_SERVER_PACKAGE_NAME = NC_SERVER_PACKAGE_NAME;
407627
408025
  exports.NC_SNOOZE_MAX_MINUTES = NC_SNOOZE_MAX_MINUTES;
407628
408026
  exports.NC_SYSTEM_DELIVERY = NC_SYSTEM_DELIVERY;
408027
+ exports.NC_SYSTEM_EVENT_CLASS_SPECS = NC_SYSTEM_EVENT_CLASS_SPECS;
407629
408028
  exports.NC_SYSTEM_EVENT_CONDITION_FILTER_KEYS = NC_SYSTEM_EVENT_CONDITION_FILTER_KEYS;
407630
408029
  exports.NC_SYSTEM_EVENT_FAMILIES = NC_SYSTEM_EVENT_FAMILIES;
407631
408030
  exports.NC_SYSTEM_EVENT_FAMILY = NC_SYSTEM_EVENT_FAMILY;
@@ -408797,6 +409196,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
408797
409196
  exports.expandAudioChunkToF32le = require_sleep.expandAudioChunkToF32le;
408798
409197
  exports.expandCapMethods = require_sleep.expandCapMethods;
408799
409198
  exports.expandContainer = expandContainer;
409199
+ exports.expandSystemEventClasses = expandSystemEventClasses;
408800
409200
  exports.exportSubjectOf = exportSubjectOf;
408801
409201
  exports.exposeBlockDevices = exposeBlockDevices;
408802
409202
  exports.expressionContainsBuiltinCall = expressionContainsBuiltinCall;
@@ -408938,6 +409338,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
408938
409338
  exports.isStorageLocationMode = isStorageLocationMode;
408939
409339
  exports.isSystemDelivery = isSystemDelivery;
408940
409340
  exports.isSystemEventFamily = isSystemEventFamily;
409341
+ exports.isSystemEventRecoveryKind = isSystemEventRecoveryKind;
408941
409342
  exports.isSystemEventSummaryRule = isSystemEventSummaryRule;
408942
409343
  exports.isSystemRuleKind = isSystemRuleKind;
408943
409344
  exports.isVectorIndexDimConflict = isVectorIndexDimConflict;
@@ -409305,6 +409706,9 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
409305
409706
  exports.syncActiveAlarmProfileSettings = syncActiveAlarmProfileSettings;
409306
409707
  exports.synthesizeSourceInfo = synthesizeSourceInfo;
409307
409708
  exports.systemCapability = systemCapability;
409709
+ exports.systemEventClassKinds = systemEventClassKinds;
409710
+ exports.systemEventClassOf = systemEventClassOf;
409711
+ exports.systemEventClassesFor = systemEventClassesFor;
409308
409712
  exports.systemEventDeliveryProblems = systemEventDeliveryProblems;
409309
409713
  exports.systemEventFamilyOf = systemEventFamilyOf;
409310
409714
  exports.systemEventFamilyProblems = systemEventFamilyProblems;
@@ -409382,6 +409786,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
409382
409786
  exports.wiringProbeResultSchema = wiringProbeResultSchema;
409383
409787
  exports.withFieldFrom = withFieldFrom;
409384
409788
  exports.withLocationMode = withLocationMode;
409789
+ exports.withSystemEventClasses = withSystemEventClasses;
409385
409790
  exports.withoutCallerStamp = require_sleep.withoutCallerStamp;
409386
409791
  exports.withoutField = withoutField;
409387
409792
  exports.writeModelBoundSetting = writeModelBoundSetting;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "camstack",
3
- "version": "1.2.201",
3
+ "version": "1.2.202",
4
4
  "description": "CLI tool for managing and running CamStack server",
5
5
  "keywords": [
6
6
  "camstack",