@camstack/system 1.2.292 → 1.2.293

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 (55) hide show
  1. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  2. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  3. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  4. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  5. package/dist/builtins/alerts/alerts.addon.js +1 -1
  6. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  7. package/dist/builtins/autotrack/index.js +1 -1
  8. package/dist/builtins/autotrack/index.mjs +1 -1
  9. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  10. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  11. package/dist/builtins/camera-grid/index.js +1 -1
  12. package/dist/builtins/camera-grid/index.mjs +1 -1
  13. package/dist/builtins/console-logging/index.js +1 -1
  14. package/dist/builtins/console-logging/index.mjs +1 -1
  15. package/dist/builtins/core-blocks/core-blocks.addon.js +1 -1
  16. package/dist/builtins/core-blocks/core-blocks.addon.mjs +1 -1
  17. package/dist/builtins/device-manager/device-manager.addon.js +2 -2
  18. package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
  19. package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
  20. package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
  21. package/dist/builtins/hub-forwarder/index.js +1 -1
  22. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  23. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  24. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  25. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  26. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  27. package/dist/builtins/local-network/local-network.addon.js +1 -1
  28. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  29. package/dist/builtins/loki-logging/index.js +1 -1
  30. package/dist/builtins/loki-logging/index.mjs +1 -1
  31. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  32. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  33. package/dist/builtins/platform-probe/index.js +1 -1
  34. package/dist/builtins/platform-probe/index.mjs +1 -1
  35. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  36. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  37. package/dist/builtins/snapshot/index.js +1 -1
  38. package/dist/builtins/snapshot/index.mjs +1 -1
  39. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  40. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  41. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  42. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  43. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  44. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  45. package/dist/builtins/system-config/system-config.addon.js +1 -1
  46. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  47. package/dist/builtins/winston-logging/index.js +1 -1
  48. package/dist/builtins/winston-logging/index.mjs +1 -1
  49. package/dist/{dist-D3zw1yHp.js → dist-CrL3PV53.js} +264 -21
  50. package/dist/{dist-DU72-y3J.mjs → dist-tccneRF3.mjs} +264 -21
  51. package/dist/index.js +1 -1
  52. package/dist/index.mjs +1 -1
  53. package/dist/{retired-settings-keys-t6UWp6mL.js → retired-settings-keys-BrOWH5-B.js} +1 -1
  54. package/dist/{retired-settings-keys-DLOBYMC4.mjs → retired-settings-keys-CcNuGSJ0.mjs} +1 -1
  55. package/package.json +1 -1
@@ -691,7 +691,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
691
691
  return EventCategory;
692
692
  }({});
693
693
  //#endregion
694
- //#region ../types/dist/sleep-PEo0-Fz9.mjs
694
+ //#region ../types/dist/sleep-pM_J7YnY.mjs
695
695
  /**
696
696
  * The audio chunk plane's byte format, and the ONE expansion from a coded
697
697
  * window to float samples (D455).
@@ -16341,6 +16341,7 @@ sub("presence", "sensor", "sensor", "#22c55e", "presence", "Presence");
16341
16341
  sub("enum-sensor", "sensor", "sensor", TAXONOMY_COLORS.sensor, "generic", "Sensor state");
16342
16342
  sub("device-event", "sensor", "sensor", "#10b981", "button", "Device event");
16343
16343
  sub("lock", "control", "control", "#0ea5e9", "lock", "Lock");
16344
+ sub("cover", "control", "control", "#0ea5e9", "door", "Cover");
16344
16345
  sub("switch", "control", "control", TAXONOMY_COLORS.control, "switch", "Switch");
16345
16346
  sub("siren", "control", "control", "#dc2626", "siren", "Siren");
16346
16347
  sub("button", "control", "control", "#10b981", "button", "Button");
@@ -16661,6 +16662,10 @@ var NcSystemEventKindSchema = z.enum([
16661
16662
  "alarm-disarmed",
16662
16663
  "alarm-arming",
16663
16664
  "alarm-arm-refused",
16665
+ "alarm-pending",
16666
+ "alarm-rearmed",
16667
+ "alarm-sensor-bypass",
16668
+ "alarm-check-failed",
16664
16669
  "addon-updated",
16665
16670
  "server-updated",
16666
16671
  "export-completed",
@@ -17258,6 +17263,19 @@ var NcMediaFrameSchema = z.enum([
17258
17263
  "full",
17259
17264
  "boxed"
17260
17265
  ]);
17266
+ /**
17267
+ * How a SENSOR notification shows the cameras that link the sensor.
17268
+ *
17269
+ * `mosaic` — one image composed of every linked camera's photograph, taken at
17270
+ * the trigger. `each` — one image per camera where the target takes several
17271
+ * attachments; a target that takes one keeps the first camera's (the degrade
17272
+ * engine drops the rest by order). Either way ONE notification per event.
17273
+ * Absent = `mosaic`, applied by the Notification Center and deliberately NOT
17274
+ * a Zod default (see NcRulePatchSchema: a default materialises on every
17275
+ * partial patch). Meaningless for a rule whose subject is not a sensor, and a
17276
+ * sensor linked to one camera ships that camera's plain snapshot either way.
17277
+ */
17278
+ var NcLinkedCameraModeSchema = z.enum(["mosaic", "each"]);
17261
17279
  var NcMediaPolicySchema = z.object({
17262
17280
  attach: z.enum([
17263
17281
  "best",
@@ -17303,7 +17321,9 @@ var NcMediaPolicySchema = z.object({
17303
17321
  * A profile that is not assigned falls back to the cheapest, and the render
17304
17322
  * reports which one actually ran.
17305
17323
  */
17306
- profile: CamProfileSchema.optional()
17324
+ profile: CamProfileSchema.optional(),
17325
+ /** See {@link NcLinkedCameraModeSchema}. */
17326
+ linkedCameras: NcLinkedCameraModeSchema.optional()
17307
17327
  });
17308
17328
  /**
17309
17329
  * Cooldown GRANULARITY over the subject's class — how much a fired
@@ -17423,7 +17443,7 @@ var NcRuleInputSchema = z.object({
17423
17443
  cooldownSec: 60,
17424
17444
  scope: "rule-device"
17425
17445
  }),
17426
- /** `{{var}}` templating over camera/class/label/zones/confidence/time. */
17446
+ /** `{{var}}` title/body. The variables are declared in `NC_TEMPLATE_VARS` (@camstack/types) and depend on the rule kind — see `templateVarsFor`. */
17427
17447
  template: z.object({
17428
17448
  title: z.string().max(500).optional(),
17429
17449
  body: z.string().max(2e3).optional()
@@ -17603,6 +17623,22 @@ var NcRulePatchSchema = NcRuleInputSchema.partial().extend({
17603
17623
  throttle: NcThrottleSchema.optional(),
17604
17624
  priority: z.number().int().min(1).max(5).optional()
17605
17625
  });
17626
+ var NcRuleClearableKeySchema = z.enum([
17627
+ "template",
17628
+ "schedule",
17629
+ "targetUsers",
17630
+ "snoozeOptions",
17631
+ "snoozeAllowGlobal",
17632
+ "waitForEnhancement",
17633
+ "actions",
17634
+ "confirm",
17635
+ "groupIdleSec"
17636
+ ]);
17637
+ var NcRuleUpdateInputSchema = z.object({
17638
+ ruleId: z.string(),
17639
+ patch: NcRulePatchSchema,
17640
+ clear: z.array(NcRuleClearableKeySchema).optional()
17641
+ });
17606
17642
  /** A persisted rule. */
17607
17643
  var NcRuleSchema = NcRuleInputSchema.extend({
17608
17644
  id: z.string(),
@@ -17634,6 +17670,87 @@ var NcTestResultSchema = z.object({
17634
17670
  className: z.string().optional(),
17635
17671
  label: z.string().optional()
17636
17672
  });
17673
+ /** The five rule kinds, as data. `NcRuleKind` in `notification/rule-kinds.ts`
17674
+ * is the same union; the template-vars spec pins the two together. */
17675
+ var NcRuleKindSchema = z.enum([
17676
+ "detection",
17677
+ "sensor",
17678
+ "occupancy",
17679
+ "sound",
17680
+ "system"
17681
+ ]);
17682
+ /** Which producer renders a template: an ordinary rule, a timelapse, a digest. */
17683
+ var NcTemplateFamilySchema = z.enum([
17684
+ "rule",
17685
+ "timelapse",
17686
+ "summary"
17687
+ ]);
17688
+ /** Which text field of that producer. `previewText` is the timelapse frame
17689
+ * caption, `captionText` the digest mosaic caption — both see fewer vars. */
17690
+ var NcTemplateFieldSchema = z.enum([
17691
+ "title",
17692
+ "body",
17693
+ "previewText",
17694
+ "captionText"
17695
+ ]);
17696
+ var NcTemplateVarGroupSchema = z.enum([
17697
+ "subject",
17698
+ "place",
17699
+ "time",
17700
+ "rule",
17701
+ "occupancy",
17702
+ "sound",
17703
+ "sensor",
17704
+ "system",
17705
+ "digest",
17706
+ "ai"
17707
+ ]);
17708
+ /**
17709
+ * ONE `{{var}}` a notification template may name.
17710
+ *
17711
+ * `families` / `fields` / `kinds` / `deliveries` / `systemEventKinds` say WHERE
17712
+ * it has a value; absent = no restriction on that axis. `systemEventKinds` is
17713
+ * read only for a `system` rule. `dynamic` declares a FAMILY of names
17714
+ * (`count_<class>`): the descriptor's `name` is the example member.
17715
+ */
17716
+ var NcTemplateVarDescriptorSchema = z.object({
17717
+ name: z.string().regex(/^\w+$/),
17718
+ label: z.string(),
17719
+ description: z.string().optional(),
17720
+ example: z.string(),
17721
+ group: NcTemplateVarGroupSchema,
17722
+ families: z.array(NcTemplateFamilySchema).min(1),
17723
+ fields: z.array(NcTemplateFieldSchema).optional(),
17724
+ kinds: z.array(NcRuleKindSchema).optional(),
17725
+ deliveries: z.array(NcDeliverySchema).optional(),
17726
+ systemEventKinds: z.array(NcSystemEventKindSchema).optional(),
17727
+ dynamic: z.object({
17728
+ prefix: z.literal("count_"),
17729
+ from: z.literal("classes")
17730
+ }).optional()
17731
+ });
17732
+ /** What an editor knows about the field being edited. */
17733
+ var NcTemplateVarContextSchema = z.object({
17734
+ family: NcTemplateFamilySchema,
17735
+ field: NcTemplateFieldSchema,
17736
+ kind: NcRuleKindSchema.optional(),
17737
+ delivery: NcDeliverySchema.optional(),
17738
+ systemEventKinds: z.array(NcSystemEventKindSchema).optional()
17739
+ });
17740
+ /** Input to `previewTemplate` — the editor's own context, plus the draft text. */
17741
+ var NcTemplatePreviewInputSchema = z.object({
17742
+ context: NcTemplateVarContextSchema,
17743
+ template: z.object({
17744
+ title: z.string().max(500).optional(),
17745
+ body: z.string().max(2e3).optional()
17746
+ })
17747
+ });
17748
+ var NcTemplatePreviewSchema = z.object({
17749
+ title: z.string().nullable(),
17750
+ body: z.string().nullable(),
17751
+ /** Names the template uses that this context never fills — they render empty. */
17752
+ unknown: z.array(z.string())
17753
+ });
17637
17754
  var NcConditionDescriptorSchema = z.object({
17638
17755
  /** Field id inside `NcConditions` (or `'schedule'` for the rule-level group). */
17639
17756
  id: z.string(),
@@ -17899,8 +18016,22 @@ z.object({
17899
18016
  lastAt: z.number()
17900
18017
  });
17901
18018
  /**
17902
- * The three durations the panel's state machine runs on, plus who hears about
17903
- * an arm.
18019
+ * One arm mode's non-blocking list: devices that may be open when that mode
18020
+ * arms, without the arm being refused.
18021
+ */
18022
+ var NcAlarmNonBlockingSchema = z.object({
18023
+ mode: AlarmArmModeSchema,
18024
+ deviceIds: z.array(z.number().int()).max(200)
18025
+ });
18026
+ /**
18027
+ * The per-mode lists, at most one per mode. Two lists for one mode have no
18028
+ * meaning a reader could agree on (union? the last one?), so they are refused
18029
+ * at the boundary rather than interpreted.
18030
+ */
18031
+ var NcAlarmNonBlockingListSchema = z.array(NcAlarmNonBlockingSchema).max(8).refine((lists) => new Set(lists.map((l) => l.mode)).size === lists.length, { message: "nonBlocking: at most one list per arm mode" });
18032
+ /**
18033
+ * The three durations the panel's state machine runs on, who hears about its
18034
+ * transitions, and which openings each mode tolerates.
17904
18035
  *
17905
18036
  * They live on the NOTIFICATION-RULES cap, not on `alarm-panel`, on purpose:
17906
18037
  * `alarm-panel` is `deviceNative` and its other provider mirrors somebody
@@ -17919,21 +18050,39 @@ var NcAlarmSettingsSchema = z.object({
17919
18050
  * existed, and therefore what an untouched install keeps doing.
17920
18051
  */
17921
18052
  triggeredDurationSec: z.number().int().min(0).max(3600),
17922
- /** Send a notification when a mode takes effect. */
17923
- announceArm: z.boolean(),
17924
18053
  /**
17925
- * Where that notification goes. Target ids from `notification-output`.
18054
+ * Deprecated by D630 — every transition is announced. Parsed, never read;
18055
+ * remove after one release. Optional so an older admin's patch (which still
18056
+ * sends it) parses rather than failing the whole save.
18057
+ */
18058
+ announceArm: z.boolean().optional(),
18059
+ /**
18060
+ * Target ids from `notification-output`: every alarm transition goes here.
17926
18061
  *
17927
- * Explicit rather than "everyone": an arm announcement is a household
18062
+ * Explicit rather than "everyone": an alarm announcement is a household
17928
18063
  * message, and broadcasting it to every configured endpoint (including a
17929
18064
  * webhook wired to something else) is not a default anybody would choose.
17930
- * Empty with `announceArm: true` sends nothing, and the server logs that —
17931
- * silence must be attributable.
18065
+ * Empty sends nothing, and the server logs that — silence must be
18066
+ * attributable.
17932
18067
  */
17933
- announceTargets: z.array(z.string().min(1)).max(16)
18068
+ announceTargets: z.array(z.string().min(1)).max(16),
18069
+ /**
18070
+ * Per arm mode, the covered devices whose being OPEN does not refuse the
18071
+ * arm (a window left ajar for the cat under `home`, say). At most one entry
18072
+ * per mode is meaningful. Defaulted to `[]` so a blob stored before D630
18073
+ * parses as "every opening blocks" — the behaviour it was written under.
18074
+ */
18075
+ nonBlocking: NcAlarmNonBlockingListSchema.default([])
17934
18076
  });
17935
- /** Every field optional — a tab edits one control at a time. */
17936
- var NcAlarmSettingsPatchSchema = NcAlarmSettingsSchema.partial();
18077
+ /**
18078
+ * Every field optional — a tab edits one control at a time.
18079
+ *
18080
+ * `nonBlocking` is re-declared WITHOUT its default: `.partial()` does not
18081
+ * remove an inner `.default()`, so a patch that never named the field would
18082
+ * parse to `nonBlocking: []` and wipe every mode's list on an unrelated edit
18083
+ * (the same trap {@link NcRulePatchSchema} documents).
18084
+ */
18085
+ var NcAlarmSettingsPatchSchema = NcAlarmSettingsSchema.extend({ nonBlocking: NcAlarmNonBlockingListSchema }).partial();
17937
18086
  /**
17938
18087
  * What one arm mode actually arms, DERIVED from the enabled rules gated on it.
17939
18088
  * Never authored, never stored — see `alarm-mode-coverage.ts` for why a stored
@@ -17978,6 +18127,36 @@ var NcAlarmModeCoverageSchema = z.object({
17978
18127
  */
17979
18128
  skippedDevices: z.array(NcAlarmSkippedDeviceSchema).default([])
17980
18129
  });
18130
+ /** One covered device that reads open, and whether that refuses the arm. */
18131
+ var NcAlarmOpeningSchema = z.object({
18132
+ deviceId: z.number().int(),
18133
+ name: z.string(),
18134
+ /** The device's state word as read (`open`, `unlocked`, …). */
18135
+ state: z.string(),
18136
+ /** False when the mode's non-blocking list names this device. */
18137
+ blocking: z.boolean()
18138
+ });
18139
+ /** A device the panel is currently ignoring, and which side of it it is on. */
18140
+ var NcAlarmExclusionViewSchema = z.object({
18141
+ deviceId: z.number().int(),
18142
+ name: z.string(),
18143
+ phase: z.enum(["open", "closed"])
18144
+ });
18145
+ /** One mode's openings: devices read open, plus those whose state is unknown. */
18146
+ var NcAlarmModeOpeningsSchema = z.object({
18147
+ mode: AlarmArmModeSchema,
18148
+ devices: z.array(NcAlarmOpeningSchema),
18149
+ /** Covered devices whose state could not be read (D49): neither open nor closed. */
18150
+ unknown: z.array(z.number().int())
18151
+ });
18152
+ var NcAlarmLiveSchema = z.object({
18153
+ state: AlarmStateSchema,
18154
+ /** The mode being armed into (exit delay) or held; null when disarmed. */
18155
+ targetMode: AlarmArmModeSchema.nullable(),
18156
+ availableModes: z.array(AlarmArmModeSchema),
18157
+ openings: z.array(NcAlarmModeOpeningsSchema),
18158
+ exclusions: z.array(NcAlarmExclusionViewSchema)
18159
+ });
17981
18160
  var NcAlarmConfigSchema = z.object({
17982
18161
  /**
17983
18162
  * The panel's device id, or null when this install has no panel (the ensure
@@ -17987,7 +18166,13 @@ var NcAlarmConfigSchema = z.object({
17987
18166
  */
17988
18167
  deviceId: z.number().int().nullable(),
17989
18168
  settings: NcAlarmSettingsSchema,
17990
- coverage: z.array(NcAlarmModeCoverageSchema)
18169
+ coverage: z.array(NcAlarmModeCoverageSchema),
18170
+ /**
18171
+ * The panel as it is NOW — state, what each mode would find open, what is
18172
+ * excluded. Optional: a panel-less hub answers without it, and a client
18173
+ * must not read its absence as "nothing is open".
18174
+ */
18175
+ live: NcAlarmLiveSchema.optional()
17991
18176
  });
17992
18177
  /**
17993
18178
  * ONE rule's demand on ONE camera's clip ring.
@@ -18043,10 +18228,7 @@ var notificationRulesCapability = {
18043
18228
  auth: "admin",
18044
18229
  caller: "required"
18045
18230
  }),
18046
- updateRule: method(z.object({
18047
- ruleId: z.string(),
18048
- patch: NcRulePatchSchema
18049
- }), z.object({ rule: NcRuleSchema }), {
18231
+ updateRule: method(NcRuleUpdateInputSchema, z.object({ rule: NcRuleSchema }), {
18050
18232
  kind: "mutation",
18051
18233
  auth: "admin",
18052
18234
  caller: "required"
@@ -18134,6 +18316,18 @@ var notificationRulesCapability = {
18134
18316
  catalog: z.array(NcConditionDescriptorSchema),
18135
18317
  taxonomy: NcTaxonomySchema.optional()
18136
18318
  })),
18319
+ /** The declared `{{var}}` vocabulary; editors filter it with `templateVarsFor`. */
18320
+ getTemplateCatalog: method(z.object({}), z.object({ vars: z.array(NcTemplateVarDescriptorSchema) })),
18321
+ /**
18322
+ * Render a template with example values, through the hub's text catalog.
18323
+ * Pure: sends nothing. A MUTATION only for transport — a 2.5k-char draft in
18324
+ * a batched GET URL risks length limits — so access stays `view`, the same
18325
+ * as `getTemplateCatalog`.
18326
+ */
18327
+ previewTemplate: method(NcTemplatePreviewInputSchema, NcTemplatePreviewSchema, {
18328
+ kind: "mutation",
18329
+ access: "view"
18330
+ }),
18137
18331
  /**
18138
18332
  * Queryable delivery history — a read-only view over the durable outbox
18139
18333
  * (fired rule, subject summary, target, status, timestamps, error on a
@@ -18188,7 +18382,10 @@ var notificationRulesCapability = {
18188
18382
  caller: "required"
18189
18383
  }),
18190
18384
  /**
18191
- * The alarm panel's durations, plus what each mode ACTUALLY arms.
18385
+ * The alarm panel's settings, what each mode ACTUALLY arms, and — when a
18386
+ * panel exists — its `live` state: current state and target mode, what
18387
+ * each mode would find open (blocking or not, and what is unknown), and
18388
+ * the devices currently excluded.
18192
18389
  *
18193
18390
  * Coverage is returned by the same call as the settings on purpose: they
18194
18391
  * are read together or not at all. An editor that showed the delays
@@ -18198,7 +18395,9 @@ var notificationRulesCapability = {
18198
18395
  */
18199
18396
  getAlarmConfig: method(z.object({}), NcAlarmConfigSchema, { auth: "admin" }),
18200
18397
  /**
18201
- * Patch the durations. Returns the WHOLE config, coverage included, so a
18398
+ * Patch the settings (durations, recipients, per-mode non-blocking lists;
18399
+ * `announceArm` is accepted and ignored — D630). Returns the WHOLE config,
18400
+ * coverage and `live` included, so a
18202
18401
  * client never has to guess what the server settled on — the panel clamps
18203
18402
  * and normalises, and a form that re-rendered from its own input would
18204
18403
  * show a value the alarm is not using.
@@ -24105,6 +24304,7 @@ var CAP_TO_KIND = {
24105
24304
  "enum-sensor": "enum-sensor",
24106
24305
  "event-emitter": "device-event",
24107
24306
  "lock-control": "lock",
24307
+ cover: "cover",
24108
24308
  switch: "switch",
24109
24309
  button: "button",
24110
24310
  doorbell: "doorbell"
@@ -46551,6 +46751,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
46551
46751
  addonId: null,
46552
46752
  access: "view"
46553
46753
  },
46754
+ "notificationRules.getTemplateCatalog": {
46755
+ capName: "notification-rules",
46756
+ capScope: "system",
46757
+ addonId: null,
46758
+ access: "view"
46759
+ },
46554
46760
  "notificationRules.listDeviceMutes": {
46555
46761
  capName: "notification-rules",
46556
46762
  capScope: "system",
@@ -46569,6 +46775,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
46569
46775
  addonId: null,
46570
46776
  access: "view"
46571
46777
  },
46778
+ "notificationRules.previewTemplate": {
46779
+ capName: "notification-rules",
46780
+ capScope: "system",
46781
+ addonId: null,
46782
+ access: "view"
46783
+ },
46572
46784
  "notificationRules.resolveArtifactUrl": {
46573
46785
  capName: "notification-rules",
46574
46786
  capScope: "system",
@@ -52436,6 +52648,37 @@ var NC_AUDIO_DEFAULTS = {
52436
52648
  };
52437
52649
  new Set(["devices", "classes"]);
52438
52650
  NC_AUDIO_DEFAULTS.hitPercent, NC_AUDIO_DEFAULTS.samplingSeconds;
52651
+ var RULE_BODY_ONLY = ["body"];
52652
+ var RULE_TEXT = ["title", "body"];
52653
+ var BATTERY = ["device-battery-low", "device-battery-normal"];
52654
+ var CONSUMABLE = ["device-consumable-low", "device-consumable-normal"];
52655
+ var UPDATES = [
52656
+ "addon-update-available",
52657
+ "server-update-available",
52658
+ "wrapper-update-available"
52659
+ ];
52660
+ var PACKAGE_UPDATES = ["addon-update-available", "server-update-available"];
52661
+ var ALARM = [
52662
+ "alarm-triggered",
52663
+ "alarm-armed",
52664
+ "alarm-disarmed",
52665
+ "alarm-arming",
52666
+ "alarm-arm-refused"
52667
+ ];
52668
+ var COMBINED_ALARM = ["alarm-triggered"];
52669
+ var DEVICE_EVENTS = [
52670
+ "device-online",
52671
+ "device-offline",
52672
+ "device-disabled",
52673
+ "device-enabled",
52674
+ ...BATTERY,
52675
+ ...CONSUMABLE,
52676
+ "stream-online",
52677
+ "stream-offline",
52678
+ "detection-blind",
52679
+ ...ALARM
52680
+ ];
52681
+ [...DEVICE_EVENTS], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...PACKAGE_UPDATES], [...RULE_TEXT], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...COMBINED_ALARM], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_BODY_ONLY], [...RULE_TEXT], [...RULE_TEXT], [...DEVICE_EVENTS], [...RULE_TEXT], [...DEVICE_EVENTS], [...RULE_TEXT], [...BATTERY, ...CONSUMABLE], [...RULE_TEXT], [...CONSUMABLE], [...RULE_TEXT], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...PACKAGE_UPDATES], [...RULE_TEXT], [...PACKAGE_UPDATES], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...UPDATES], [...RULE_TEXT], [...PACKAGE_UPDATES], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT], [...RULE_TEXT];
52439
52682
  /**
52440
52683
  * TimelapseRule — the STANDALONE scheduled timelapse producer's rule model.
52441
52684
  *
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("./chunk-Cek0wNdY.js");
3
- const require_dist = require("./dist-D3zw1yHp.js");
3
+ const require_dist = require("./dist-CrL3PV53.js");
4
4
  const require_builtins_alerts_alerts_addon = require("./builtins/alerts/alerts.addon.js");
5
5
  require("./builtins/alerts/index.js");
6
6
  const require_formatter = require("./formatter-DqAKDlvN.js");
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { a as __toCommonJS, i as __require, n as __esmMin, o as __toESM$1, r as __exportAll, t as __commonJSMin$1 } from "./chunk-CNf5ZN-e.mjs";
2
- import { At as logLevelAtMost, Bn as EventCategory$1, Cn as asJsonObject$1, Ct as kebabToCamel, Dn as emitDownForOwnedCaps, En as createEvent, Et as lifecycleJobSchema, Fn as parseJsonUnknown, Ht as procedureAuthKey, In as readinessKey, Ln as resolveCapMount, Pn as parseJsonObject, R as addonSettingsCapability, Rn as scopeKey, Rt as objectInputDeclaresAddonId, St as isVoidInput, T as RUNTIME_DEFAULTS, Tn as asString$1, Xt as scopesAllowDeviceCap, Yt as scopesAllowAddon, _ as LOG_LEVEL_RANK, _t as isCollectionArrayMethod, b as METHOD_ACCESS_MAP, bn as ReadinessRegistry, dn as errMsg$1, dt as extractNestedAddonId, gn as DEVICE_STATUS_METHOD, gt as isArrayOutputSchema, hn as DEVICE_SETTINGS_CONTRIBUTION_METHODS, jt as looseSchema, kn as expandCapMethods, mn as DATAPLANE_SECRET_HEADER$1, qt as resolveMethodAuth, t as ALL_CAPABILITY_DEFINITIONS, wn as asNumber, xn as ReadinessTimeoutError, yt as isObjectInput, zt as objectInputDeclaresRequiredDeviceId } from "./dist-DU72-y3J.mjs";
2
+ import { At as logLevelAtMost, Bn as EventCategory$1, Cn as asJsonObject$1, Ct as kebabToCamel, Dn as emitDownForOwnedCaps, En as createEvent, Et as lifecycleJobSchema, Fn as parseJsonUnknown, Ht as procedureAuthKey, In as readinessKey, Ln as resolveCapMount, Pn as parseJsonObject, R as addonSettingsCapability, Rn as scopeKey, Rt as objectInputDeclaresAddonId, St as isVoidInput, T as RUNTIME_DEFAULTS, Tn as asString$1, Xt as scopesAllowDeviceCap, Yt as scopesAllowAddon, _ as LOG_LEVEL_RANK, _t as isCollectionArrayMethod, b as METHOD_ACCESS_MAP, bn as ReadinessRegistry, dn as errMsg$1, dt as extractNestedAddonId, gn as DEVICE_STATUS_METHOD, gt as isArrayOutputSchema, hn as DEVICE_SETTINGS_CONTRIBUTION_METHODS, jt as looseSchema, kn as expandCapMethods, mn as DATAPLANE_SECRET_HEADER$1, qt as resolveMethodAuth, t as ALL_CAPABILITY_DEFINITIONS, wn as asNumber, xn as ReadinessTimeoutError, yt as isObjectInput, zt as objectInputDeclaresRequiredDeviceId } from "./dist-tccneRF3.mjs";
3
3
  import { AlertCenterAddon } from "./builtins/alerts/alerts.addon.mjs";
4
4
  import "./builtins/alerts/index.mjs";
5
5
  import { t as formatLogLine } from "./formatter-B7qW8bPJ.mjs";
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-D3zw1yHp.js");
1
+ const require_dist = require("./dist-CrL3PV53.js");
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?
@@ -1,4 +1,4 @@
1
- import { Cn as asJsonObject } from "./dist-DU72-y3J.mjs";
1
+ import { Cn as asJsonObject } from "./dist-tccneRF3.mjs";
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/system",
3
- "version": "1.2.292",
3
+ "version": "1.2.293",
4
4
  "description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
5
5
  "keywords": [
6
6
  "camstack",