@camstack/addon-pipeline 1.2.290 → 1.2.291

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 (33) hide show
  1. package/dist/audio-analyzer/index.js +2 -2
  2. package/dist/audio-analyzer/index.mjs +2 -2
  3. package/dist/{default-detection-model-B64MIW2h.mjs → default-detection-model-DcTy-nJl.mjs} +1 -1
  4. package/dist/{default-detection-model-CN_Iu8NF.js → default-detection-model-jjdmKKr3.js} +1 -1
  5. package/dist/detection-pipeline/index.js +4 -4
  6. package/dist/detection-pipeline/index.mjs +4 -4
  7. package/dist/{dist-C4JqXCw-.mjs → dist-Bn6BQW8q.mjs} +487 -60
  8. package/dist/{dist-BIlnUdBn.js → dist-D7FonEUB.js} +487 -60
  9. package/dist/motion-wasm/index.js +1 -1
  10. package/dist/motion-wasm/index.mjs +1 -1
  11. package/dist/{node-C-WfKJ6b.mjs → node-BN0Na3HN.mjs} +1 -1
  12. package/dist/{node-CVlJhqng.js → node-D3C1krEi.js} +1 -1
  13. package/dist/pipeline-runner/index.js +3 -3
  14. package/dist/pipeline-runner/index.mjs +3 -3
  15. package/dist/{process-memory-CJKKFNar.mjs → process-memory-CeZ8ms80.mjs} +1 -1
  16. package/dist/{process-memory-ZUucMC8Z.js → process-memory-DI4jrCtX.js} +1 -1
  17. package/dist/recorder/index.js +8 -2
  18. package/dist/recorder/index.mjs +8 -2
  19. package/dist/{segment-demux-js-4OAHyQ3t.mjs → segment-demux-js-CNPzlcyO.mjs} +1 -1
  20. package/dist/{segment-demux-js-D0mqN4RC.js → segment-demux-js-COooJ-t0.js} +1 -1
  21. package/dist/stream-broker/_stub.js +2 -2
  22. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-r5TULO-I.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-BrD7TK3W.mjs} +2 -2
  23. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-pSFdAaR0.mjs +26 -0
  24. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DhImOdbA.mjs +26 -0
  25. package/dist/stream-broker/demux-worker-child.js +1 -1
  26. package/dist/stream-broker/demux-worker-child.mjs +1 -1
  27. package/dist/stream-broker/{hostInit-DPdwl8-T.mjs → hostInit-CbSGtrCj.mjs} +2 -2
  28. package/dist/stream-broker/index.js +1056 -92
  29. package/dist/stream-broker/index.mjs +1056 -92
  30. package/dist/stream-broker/remoteEntry.js +1 -1
  31. package/package.json +1 -1
  32. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D7VLO8g1.mjs +0 -26
  33. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-UqRrHdtw.mjs +0 -26
@@ -5360,7 +5360,7 @@ var ZodIssueCode = {
5360
5360
  var ZodFirstPartyTypeKind;
5361
5361
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5362
5362
  //#endregion
5363
- //#region ../types/dist/sleep-PEo0-Fz9.mjs
5363
+ //#region ../types/dist/sleep-D_4W7xuQ.mjs
5364
5364
  /**
5365
5365
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5366
5366
  * window to float samples (D455).
@@ -7534,11 +7534,17 @@ var RawStateResultSchema = object({
7534
7534
  method(object({ deviceId: number() }), array(StreamSourceEntrySchema)), method(object({ deviceId: number() }), array(ConfigEntrySchema$1)), method(object({
7535
7535
  deviceId: number(),
7536
7536
  values: record(string(), unknown())
7537
- }), _void(), { kind: "mutation" }), method(object({
7537
+ }), _void(), {
7538
+ kind: "mutation",
7539
+ auth: "admin"
7540
+ }), method(object({
7538
7541
  deviceId: number(),
7539
7542
  action: string().min(1),
7540
7543
  input: unknown()
7541
- }), unknown(), { kind: "mutation" }), method(object({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), unknown().nullable()), method(object({ deviceId: number() }), RawStateResultSchema.nullable(), { auth: "protected" });
7544
+ }), unknown(), { kind: "mutation" }), method(object({ deviceId: number() }), _void(), {
7545
+ kind: "mutation",
7546
+ auth: "admin"
7547
+ }), method(object({ deviceId: number() }), unknown().nullable()), method(object({ deviceId: number() }), RawStateResultSchema.nullable(), { auth: "protected" });
7542
7548
  /**
7543
7549
  * The ONE retry schedule for work that can fail simply because the node was
7544
7550
  * still booting.
@@ -13608,7 +13614,7 @@ method(ListInputSchema, array(BrokerInfoSchema$1)), method(GetInputSchema, Broke
13608
13614
  }), method(UnsubscribeInputSchema, _void(), {
13609
13615
  kind: "mutation",
13610
13616
  auth: "admin"
13611
- }), method(GetStateInputSchema, unknown().nullable()), method(_void(), RegistryStatusSchema);
13617
+ }), method(GetStateInputSchema, unknown().nullable(), { auth: "admin" }), method(_void(), RegistryStatusSchema);
13612
13618
  DeviceType.Camera;
13613
13619
  /** Stream delivery format. (Relocated from the retired `streaming-engine` cap.) */
13614
13620
  var StreamFormatSchema = _enum([
@@ -15043,17 +15049,20 @@ method(object({
15043
15049
  namespace: string().optional(),
15044
15050
  collection: string(),
15045
15051
  key: string()
15046
- }), unknown()), method(object({
15052
+ }), unknown(), { auth: "admin" }), method(object({
15047
15053
  namespace: string().optional(),
15048
15054
  collection: string(),
15049
15055
  key: string(),
15050
15056
  value: unknown()
15051
- }), _void(), { kind: "mutation" }), method(object({
15057
+ }), _void(), {
15058
+ kind: "mutation",
15059
+ auth: "admin"
15060
+ }), method(object({
15052
15061
  namespace: string().optional(),
15053
15062
  collection: string(),
15054
15063
  filter: QueryFilterSchema.optional(),
15055
15064
  columns: array(string()).readonly().optional()
15056
- }), array(SettingsRecordSchema).readonly()), method(object({
15065
+ }), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
15057
15066
  namespace: string().optional(),
15058
15067
  collection: string(),
15059
15068
  /** Declared columns identifying the slot; must be covered by a UNIQUE
@@ -15063,7 +15072,10 @@ method(object({
15063
15072
  }), object({
15064
15073
  /** The id the row HAS: assigned by SQLite on an insert, or the existing
15065
15074
  * row's own id on an update. */
15066
- id: union([string(), number()]) }), { kind: "mutation" }), method(object({
15075
+ id: union([string(), number()]) }), {
15076
+ kind: "mutation",
15077
+ auth: "admin"
15078
+ }), method(object({
15067
15079
  namespace: string().optional(),
15068
15080
  collection: string(),
15069
15081
  record: object({
@@ -15076,38 +15088,56 @@ id: union([string(), number()]) }), { kind: "mutation" }), method(object({
15076
15088
  * for an absent one, or the ROWID SQLite assigned on an `INTEGER`
15077
15089
  * primary key — which is the only place an auto key is knowable.
15078
15090
  */
15079
- id: union([string(), number()]) }), { kind: "mutation" }), method(object({
15091
+ id: union([string(), number()]) }), {
15092
+ kind: "mutation",
15093
+ auth: "admin"
15094
+ }), method(object({
15080
15095
  namespace: string().optional(),
15081
15096
  collection: string(),
15082
15097
  records: array(BulkRecordSchema).readonly()
15083
- }), object({ inserted: number().int() }), { kind: "mutation" }), method(object({
15098
+ }), object({ inserted: number().int() }), {
15099
+ kind: "mutation",
15100
+ auth: "admin"
15101
+ }), method(object({
15084
15102
  namespace: string().optional(),
15085
15103
  collection: string(),
15086
15104
  id: string(),
15087
15105
  data: record(string(), unknown())
15088
- }), _void(), { kind: "mutation" }), method(object({
15106
+ }), _void(), {
15107
+ kind: "mutation",
15108
+ auth: "admin"
15109
+ }), method(object({
15089
15110
  namespace: string().optional(),
15090
15111
  collection: string(),
15091
15112
  key: string()
15092
- }), _void(), { kind: "mutation" }), method(object({
15113
+ }), _void(), {
15114
+ kind: "mutation",
15115
+ auth: "admin"
15116
+ }), method(object({
15093
15117
  namespace: string().optional(),
15094
15118
  collection: string(),
15095
15119
  filter: MutationFilterSchema
15096
- }), object({ deleted: number().int() }), { kind: "mutation" }), method(object({
15120
+ }), object({ deleted: number().int() }), {
15121
+ kind: "mutation",
15122
+ auth: "admin"
15123
+ }), method(object({
15097
15124
  namespace: string().optional(),
15098
15125
  collection: string(),
15099
15126
  filter: MutationFilterSchema,
15100
15127
  data: record(string(), unknown())
15101
- }), object({ updated: number().int() }), { kind: "mutation" }), method(object({
15128
+ }), object({ updated: number().int() }), {
15129
+ kind: "mutation",
15130
+ auth: "admin"
15131
+ }), method(object({
15102
15132
  namespace: string().optional(),
15103
15133
  collection: string(),
15104
15134
  filter: QueryFilterSchema.optional()
15105
- }), number()), method(object({
15135
+ }), number(), { auth: "admin" }), method(object({
15106
15136
  namespace: string().optional(),
15107
15137
  collection: string(),
15108
15138
  fields: array(AggregateFieldSchema).readonly(),
15109
15139
  filter: QueryFilterSchema.optional()
15110
- }), AggregateResultSchema), method(object({
15140
+ }), AggregateResultSchema, { auth: "admin" }), method(object({
15111
15141
  namespace: string().optional(),
15112
15142
  collection: string(),
15113
15143
  field: string(),
@@ -15117,15 +15147,18 @@ id: union([string(), number()]) }), { kind: "mutation" }), method(object({
15117
15147
  }), array(object({
15118
15148
  bucket: number().int(),
15119
15149
  count: number().int()
15120
- })).readonly()), method(object({
15150
+ })).readonly(), { auth: "admin" }), method(object({
15121
15151
  namespace: string().optional(),
15122
15152
  collection: string()
15123
- }), boolean()), method(object({
15153
+ }), boolean(), { auth: "admin" }), method(object({
15124
15154
  namespace: string().optional(),
15125
15155
  collection: string(),
15126
15156
  columns: array(CollectionColumnSchema).readonly(),
15127
15157
  indexes: array(CollectionIndexSchema).readonly().optional()
15128
- }), _void(), { kind: "mutation" });
15158
+ }), _void(), {
15159
+ kind: "mutation",
15160
+ auth: "admin"
15161
+ });
15129
15162
  /**
15130
15163
  * What one engine says about itself. The orchestrator uses `kind` to pick
15131
15164
  * a registrant for a collection; `engineId` is what a log line names when
@@ -15840,7 +15873,13 @@ var ExposeInputSchema = object({
15840
15873
  capabilities: array(string()).optional()
15841
15874
  });
15842
15875
  var UnexposeInputSchema = object({ deviceId: string() });
15843
- method(_void(), DeviceExportStatusSchema), method(_void(), array(DeviceKindSchema)), method(_void(), array(ExposedDeviceSchema)), method(ExposeInputSchema, _void(), { kind: "mutation" }), method(UnexposeInputSchema, _void(), { kind: "mutation" });
15876
+ method(_void(), DeviceExportStatusSchema), method(_void(), array(DeviceKindSchema)), method(_void(), array(ExposedDeviceSchema)), method(ExposeInputSchema, _void(), {
15877
+ kind: "mutation",
15878
+ auth: "admin"
15879
+ }), method(UnexposeInputSchema, _void(), {
15880
+ kind: "mutation",
15881
+ auth: "admin"
15882
+ });
15844
15883
  /** Wire/storage schema for one icon id. */
15845
15884
  var LocationIconIdSchema = _enum([
15846
15885
  "map-pin",
@@ -16344,7 +16383,10 @@ method(object({
16344
16383
  kind: "mutation",
16345
16384
  auth: "admin",
16346
16385
  timeoutMs: 12 * 6e4
16347
- }), method(DeviceRegisterPayloadSchema, _void(), { kind: "mutation" }), method(DeviceRemovePayloadSchema, _void(), { kind: "mutation" }), method(DevicePersistConfigPayloadSchema, _void(), { kind: "mutation" }), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), record(string(), unknown())), method(object({ deviceId: number() }), DeviceMetaSchema.nullable()), method(object({
16386
+ }), method(DeviceRegisterPayloadSchema, _void(), { kind: "mutation" }), method(DeviceRemovePayloadSchema, _void(), { kind: "mutation" }), method(DevicePersistConfigPayloadSchema, _void(), {
16387
+ kind: "mutation",
16388
+ auth: "admin"
16389
+ }), method(object({ deviceId: number() }), record(string(), unknown()), { auth: "admin" }), method(object({ deviceId: number() }), record(string(), unknown()), { auth: "admin" }), method(object({ deviceId: number() }), DeviceMetaSchema.nullable()), method(object({
16348
16390
  deviceId: number(),
16349
16391
  name: string()
16350
16392
  }), _void(), {
@@ -16549,7 +16591,7 @@ method(object({
16549
16591
  }), method(object({ deviceId: number() }), array(StreamProbeResultSchema), {
16550
16592
  kind: "mutation",
16551
16593
  auth: "admin"
16552
- }), method(object({ deviceId: number() }), DeviceBindingsForDeviceSchema), method(object({ deviceIds: array(number()) }), array(DeviceBindingsForDeviceSchema)), method(object({}), array(DeviceBindingsForDeviceSchema)), method(object({
16594
+ }), method(object({ deviceId: number() }), DeviceBindingsForDeviceSchema), method(object({ deviceIds: array(number()) }), array(DeviceBindingsForDeviceSchema)), method(object({}), array(DeviceBindingsForDeviceSchema)), method(object({ capNames: array(string().min(1)).min(1).max(16) }), array(number())), method(object({
16553
16595
  deviceId: number(),
16554
16596
  capName: string(),
16555
16597
  wrapperAddonId: string(),
@@ -18167,7 +18209,22 @@ var StatusSchema = object({
18167
18209
  brokerCount: number(),
18168
18210
  embeddedRunning: boolean()
18169
18211
  });
18170
- method(_void(), array(BrokerInfoSchema)), method(IdInputSchema, BrokerConnectionDetailsSchema), method(AddBrokerInputSchema, AddBrokerResultSchema, { kind: "mutation" }), method(IdInputSchema, _void(), { kind: "mutation" }), method(IdInputSchema, TestResultSchema$1, { kind: "mutation" }), method(StartEmbeddedInputSchema, StartEmbeddedResultSchema, { kind: "mutation" }), method(IdInputSchema, _void(), { kind: "mutation" }), method(_void(), StatusSchema);
18212
+ method(_void(), array(BrokerInfoSchema)), method(IdInputSchema, BrokerConnectionDetailsSchema, { auth: "admin" }), method(AddBrokerInputSchema, AddBrokerResultSchema, {
18213
+ kind: "mutation",
18214
+ auth: "admin"
18215
+ }), method(IdInputSchema, _void(), {
18216
+ kind: "mutation",
18217
+ auth: "admin"
18218
+ }), method(IdInputSchema, TestResultSchema$1, {
18219
+ kind: "mutation",
18220
+ auth: "admin"
18221
+ }), method(StartEmbeddedInputSchema, StartEmbeddedResultSchema, {
18222
+ kind: "mutation",
18223
+ auth: "admin"
18224
+ }), method(IdInputSchema, _void(), {
18225
+ kind: "mutation",
18226
+ auth: "admin"
18227
+ }), method(_void(), StatusSchema);
18171
18228
  var NetworkEndpointSchema = object({
18172
18229
  url: string(),
18173
18230
  hostname: string(),
@@ -18462,6 +18519,18 @@ var TargetKindSchema = object({
18462
18519
  */
18463
18520
  iconMediaType: string().optional(),
18464
18521
  configSchema: ConfigSchemaPassthrough,
18522
+ /**
18523
+ * The config keys that decide WHERE this kind's secrets are sent (server,
18524
+ * base URL, instance, chat, recipient). A save that changes any of them
18525
+ * while leaving a secret redacted is refused by the provider (D634), so an
18526
+ * editor uses this to ask for the secret on exactly those edits instead of
18527
+ * on every edit.
18528
+ *
18529
+ * Optional: absent from a provider that holds no secret (the Home Assistant
18530
+ * kinds) and from a provider older than this field — an editor that finds
18531
+ * it absent must assume ANY edit may need the secret.
18532
+ */
18533
+ destinationKeys: array(string()).optional(),
18465
18534
  supportsDiscovery: boolean(),
18466
18535
  caps: TargetKindCapsSchema
18467
18536
  });
@@ -18500,19 +18569,34 @@ var SendResultSchema = object({
18500
18569
  });
18501
18570
  /** Same shape as SendResult — kept as a distinct name for the test panel. */
18502
18571
  var TestResultSchema = SendResultSchema;
18503
- method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSchema)), method(object({
18572
+ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSchema), { auth: "admin" }), method(object({
18504
18573
  kind: string(),
18505
18574
  config: record(string(), unknown()).optional()
18506
- }), array(DiscoveredTargetSchema)), method(object({
18575
+ }), array(DiscoveredTargetSchema), { auth: "admin" }), method(object({
18507
18576
  targetId: string(),
18508
18577
  notification: NotificationSchema
18509
- }), SendResultSchema, { kind: "mutation" }), method(object({
18578
+ }), SendResultSchema, {
18579
+ kind: "mutation",
18580
+ auth: "admin"
18581
+ }), method(object({
18510
18582
  targetId: string(),
18511
18583
  sample: NotificationSchema.optional()
18512
- }), TestResultSchema, { kind: "mutation" }), method(object({ target: TargetSchema }), TargetSchema, { kind: "mutation" }), method(object({ targetId: string() }), _void(), { kind: "mutation" }), method(object({
18584
+ }), TestResultSchema, {
18585
+ kind: "mutation",
18586
+ auth: "admin"
18587
+ }), method(object({ target: TargetSchema }), TargetSchema, {
18588
+ kind: "mutation",
18589
+ auth: "admin"
18590
+ }), method(object({ targetId: string() }), _void(), {
18591
+ kind: "mutation",
18592
+ auth: "admin"
18593
+ }), method(object({
18513
18594
  targetId: string(),
18514
18595
  enabled: boolean()
18515
- }), _void(), { kind: "mutation" });
18596
+ }), _void(), {
18597
+ kind: "mutation",
18598
+ auth: "admin"
18599
+ });
18516
18600
  var COCO_80_LABELS = [
18517
18601
  {
18518
18602
  id: "person",
@@ -19359,6 +19443,7 @@ sub("presence", "sensor", "sensor", "#22c55e", "presence", "Presence");
19359
19443
  sub("enum-sensor", "sensor", "sensor", TAXONOMY_COLORS.sensor, "generic", "Sensor state");
19360
19444
  sub("device-event", "sensor", "sensor", "#10b981", "button", "Device event");
19361
19445
  sub("lock", "control", "control", "#0ea5e9", "lock", "Lock");
19446
+ sub("cover", "control", "control", "#0ea5e9", "door", "Cover");
19362
19447
  sub("switch", "control", "control", TAXONOMY_COLORS.control, "switch", "Switch");
19363
19448
  sub("siren", "control", "control", "#dc2626", "siren", "Siren");
19364
19449
  sub("button", "control", "control", "#10b981", "button", "Button");
@@ -19639,6 +19724,10 @@ var NcSystemEventKindSchema = _enum([
19639
19724
  "alarm-disarmed",
19640
19725
  "alarm-arming",
19641
19726
  "alarm-arm-refused",
19727
+ "alarm-pending",
19728
+ "alarm-rearmed",
19729
+ "alarm-sensor-bypass",
19730
+ "alarm-check-failed",
19642
19731
  "addon-updated",
19643
19732
  "server-updated",
19644
19733
  "export-completed",
@@ -19676,6 +19765,19 @@ var NcSystemEventConditionSchema = object({
19676
19765
  * does not carry) matches no `deviceTypes` list.
19677
19766
  */
19678
19767
  deviceTypes: array(string().min(1)).min(1).optional(),
19768
+ /**
19769
+ * Devices this rule NEVER speaks about, whatever else matched. Scoped to the
19770
+ * same kind family as `deviceIds` (`systemEventFilterApplies(kind,
19771
+ * 'deviceIds')`) and applied AFTER it: include first, then exclude. A
19772
+ * consumable subject (`consumable:<id>:<key>`) is excluded by its device id.
19773
+ *
19774
+ * It never fails closed: a subject that carries no device id is not in the
19775
+ * list, so it is not excluded. "Every battery except the one thermometer that
19776
+ * reads 0 % forever" is the question this answers — expressed as an include
19777
+ * list it would have to name every other battery device, and every device
19778
+ * adopted later would be silently left out (D636).
19779
+ */
19780
+ excludeDeviceIds: array(number().int()).min(1).optional(),
19679
19781
  nodeIds: array(string().min(1)).min(1).optional(),
19680
19782
  packageNames: array(string().min(1)).min(1).optional()
19681
19783
  });
@@ -20234,6 +20336,19 @@ var NcMediaFrameSchema = _enum([
20234
20336
  "full",
20235
20337
  "boxed"
20236
20338
  ]);
20339
+ /**
20340
+ * How a SENSOR notification shows the cameras that link the sensor.
20341
+ *
20342
+ * `mosaic` — one image composed of every linked camera's photograph, taken at
20343
+ * the trigger. `each` — one image per camera where the target takes several
20344
+ * attachments; a target that takes one keeps the first camera's (the degrade
20345
+ * engine drops the rest by order). Either way ONE notification per event.
20346
+ * Absent = `mosaic`, applied by the Notification Center and deliberately NOT
20347
+ * a Zod default (see NcRulePatchSchema: a default materialises on every
20348
+ * partial patch). Meaningless for a rule whose subject is not a sensor, and a
20349
+ * sensor linked to one camera ships that camera's plain snapshot either way.
20350
+ */
20351
+ var NcLinkedCameraModeSchema = _enum(["mosaic", "each"]);
20237
20352
  var NcMediaPolicySchema = object({
20238
20353
  attach: _enum([
20239
20354
  "best",
@@ -20279,7 +20394,9 @@ var NcMediaPolicySchema = object({
20279
20394
  * A profile that is not assigned falls back to the cheapest, and the render
20280
20395
  * reports which one actually ran.
20281
20396
  */
20282
- profile: CamProfileSchema.optional()
20397
+ profile: CamProfileSchema.optional(),
20398
+ /** See {@link NcLinkedCameraModeSchema}. */
20399
+ linkedCameras: NcLinkedCameraModeSchema.optional()
20283
20400
  });
20284
20401
  /**
20285
20402
  * Cooldown GRANULARITY over the subject's class — how much a fired
@@ -20399,7 +20516,7 @@ var NcRuleInputSchema = object({
20399
20516
  cooldownSec: 60,
20400
20517
  scope: "rule-device"
20401
20518
  }),
20402
- /** `{{var}}` templating over camera/class/label/zones/confidence/time. */
20519
+ /** `{{var}}` title/body. The variables are declared in `NC_TEMPLATE_VARS` (@camstack/types) and depend on the rule kind — see `templateVarsFor`. */
20403
20520
  template: object({
20404
20521
  title: string().max(500).optional(),
20405
20522
  body: string().max(2e3).optional()
@@ -20579,6 +20696,22 @@ var NcRulePatchSchema = NcRuleInputSchema.partial().extend({
20579
20696
  throttle: NcThrottleSchema.optional(),
20580
20697
  priority: number().int().min(1).max(5).optional()
20581
20698
  });
20699
+ var NcRuleClearableKeySchema = _enum([
20700
+ "template",
20701
+ "schedule",
20702
+ "targetUsers",
20703
+ "snoozeOptions",
20704
+ "snoozeAllowGlobal",
20705
+ "waitForEnhancement",
20706
+ "actions",
20707
+ "confirm",
20708
+ "groupIdleSec"
20709
+ ]);
20710
+ var NcRuleUpdateInputSchema = object({
20711
+ ruleId: string(),
20712
+ patch: NcRulePatchSchema,
20713
+ clear: array(NcRuleClearableKeySchema).optional()
20714
+ });
20582
20715
  /** A persisted rule. */
20583
20716
  var NcRuleSchema = NcRuleInputSchema.extend({
20584
20717
  id: string(),
@@ -20610,6 +20743,85 @@ var NcTestResultSchema = object({
20610
20743
  className: string().optional(),
20611
20744
  label: string().optional()
20612
20745
  });
20746
+ /** The five rule kinds, as data. `NcRuleKind` in `notification/rule-kinds.ts`
20747
+ * is the same union; the template-vars spec pins the two together. */
20748
+ var NcRuleKindSchema = _enum([
20749
+ "detection",
20750
+ "sensor",
20751
+ "occupancy",
20752
+ "sound",
20753
+ "system"
20754
+ ]);
20755
+ /** Which producer renders a template: an ordinary rule, a timelapse, a digest. */
20756
+ var NcTemplateFamilySchema = _enum([
20757
+ "rule",
20758
+ "timelapse",
20759
+ "summary"
20760
+ ]);
20761
+ /** Which text field of that producer. `previewText` is the timelapse frame
20762
+ * caption, `captionText` the digest mosaic caption — both see fewer vars. */
20763
+ var NcTemplateFieldSchema = _enum([
20764
+ "title",
20765
+ "body",
20766
+ "previewText",
20767
+ "captionText"
20768
+ ]);
20769
+ var NcTemplateVarGroupSchema = _enum([
20770
+ "subject",
20771
+ "place",
20772
+ "time",
20773
+ "rule",
20774
+ "occupancy",
20775
+ "sound",
20776
+ "sensor",
20777
+ "system",
20778
+ "digest",
20779
+ "ai"
20780
+ ]);
20781
+ /**
20782
+ * ONE `{{var}}` a notification template may name.
20783
+ *
20784
+ * `families` / `fields` / `kinds` / `deliveries` / `systemEventKinds` say WHERE
20785
+ * it has a value; absent = no restriction on that axis. `systemEventKinds` is
20786
+ * read only for a `system` rule. `dynamic` declares a FAMILY of names
20787
+ * (`count_<class>`): the descriptor's `name` is the example member.
20788
+ */
20789
+ var NcTemplateVarDescriptorSchema = object({
20790
+ name: string().regex(/^\w+$/),
20791
+ label: string(),
20792
+ description: string().optional(),
20793
+ example: string(),
20794
+ group: NcTemplateVarGroupSchema,
20795
+ families: array(NcTemplateFamilySchema).min(1),
20796
+ fields: array(NcTemplateFieldSchema).optional(),
20797
+ kinds: array(NcRuleKindSchema).optional(),
20798
+ deliveries: array(NcDeliverySchema).optional(),
20799
+ systemEventKinds: array(NcSystemEventKindSchema).optional(),
20800
+ dynamic: object({
20801
+ prefix: literal("count_"),
20802
+ from: literal("classes")
20803
+ }).optional()
20804
+ });
20805
+ /** Input to `previewTemplate` — the editor's own context, plus the draft text. */
20806
+ var NcTemplatePreviewInputSchema = object({
20807
+ context: object({
20808
+ family: NcTemplateFamilySchema,
20809
+ field: NcTemplateFieldSchema,
20810
+ kind: NcRuleKindSchema.optional(),
20811
+ delivery: NcDeliverySchema.optional(),
20812
+ systemEventKinds: array(NcSystemEventKindSchema).optional()
20813
+ }),
20814
+ template: object({
20815
+ title: string().max(500).optional(),
20816
+ body: string().max(2e3).optional()
20817
+ })
20818
+ });
20819
+ var NcTemplatePreviewSchema = object({
20820
+ title: string().nullable(),
20821
+ body: string().nullable(),
20822
+ /** Names the template uses that this context never fills — they render empty. */
20823
+ unknown: array(string())
20824
+ });
20613
20825
  var NcConditionDescriptorSchema = object({
20614
20826
  /** Field id inside `NcConditions` (or `'schedule'` for the rule-level group). */
20615
20827
  id: string(),
@@ -20875,8 +21087,17 @@ object({
20875
21087
  lastAt: number()
20876
21088
  });
20877
21089
  /**
20878
- * The three durations the panel's state machine runs on, plus who hears about
20879
- * an arm.
21090
+ * The per-mode lists, at most one per mode. Two lists for one mode have no
21091
+ * meaning a reader could agree on (union? the last one?), so they are refused
21092
+ * at the boundary rather than interpreted.
21093
+ */
21094
+ var NcAlarmNonBlockingListSchema = array(object({
21095
+ mode: AlarmArmModeSchema,
21096
+ deviceIds: array(number().int()).max(200)
21097
+ })).max(8).refine((lists) => new Set(lists.map((l) => l.mode)).size === lists.length, { message: "nonBlocking: at most one list per arm mode" });
21098
+ /**
21099
+ * The three durations the panel's state machine runs on, who hears about its
21100
+ * transitions, and which openings each mode tolerates.
20880
21101
  *
20881
21102
  * They live on the NOTIFICATION-RULES cap, not on `alarm-panel`, on purpose:
20882
21103
  * `alarm-panel` is `deviceNative` and its other provider mirrors somebody
@@ -20895,21 +21116,39 @@ var NcAlarmSettingsSchema = object({
20895
21116
  * existed, and therefore what an untouched install keeps doing.
20896
21117
  */
20897
21118
  triggeredDurationSec: number().int().min(0).max(3600),
20898
- /** Send a notification when a mode takes effect. */
20899
- announceArm: boolean(),
20900
21119
  /**
20901
- * Where that notification goes. Target ids from `notification-output`.
21120
+ * Deprecated by D630 — every transition is announced. Parsed, never read;
21121
+ * remove after one release. Optional so an older admin's patch (which still
21122
+ * sends it) parses rather than failing the whole save.
21123
+ */
21124
+ announceArm: boolean().optional(),
21125
+ /**
21126
+ * Target ids from `notification-output`: every alarm transition goes here.
20902
21127
  *
20903
- * Explicit rather than "everyone": an arm announcement is a household
21128
+ * Explicit rather than "everyone": an alarm announcement is a household
20904
21129
  * message, and broadcasting it to every configured endpoint (including a
20905
21130
  * webhook wired to something else) is not a default anybody would choose.
20906
- * Empty with `announceArm: true` sends nothing, and the server logs that —
20907
- * silence must be attributable.
21131
+ * Empty sends nothing, and the server logs that — silence must be
21132
+ * attributable.
21133
+ */
21134
+ announceTargets: array(string().min(1)).max(16),
21135
+ /**
21136
+ * Per arm mode, the covered devices whose being OPEN does not refuse the
21137
+ * arm (a window left ajar for the cat under `home`, say). At most one entry
21138
+ * per mode is meaningful. Defaulted to `[]` so a blob stored before D630
21139
+ * parses as "every opening blocks" — the behaviour it was written under.
20908
21140
  */
20909
- announceTargets: array(string().min(1)).max(16)
21141
+ nonBlocking: NcAlarmNonBlockingListSchema.default([])
20910
21142
  });
20911
- /** Every field optional — a tab edits one control at a time. */
20912
- var NcAlarmSettingsPatchSchema = NcAlarmSettingsSchema.partial();
21143
+ /**
21144
+ * Every field optional — a tab edits one control at a time.
21145
+ *
21146
+ * `nonBlocking` is re-declared WITHOUT its default: `.partial()` does not
21147
+ * remove an inner `.default()`, so a patch that never named the field would
21148
+ * parse to `nonBlocking: []` and wipe every mode's list on an unrelated edit
21149
+ * (the same trap {@link NcRulePatchSchema} documents).
21150
+ */
21151
+ var NcAlarmSettingsPatchSchema = NcAlarmSettingsSchema.extend({ nonBlocking: NcAlarmNonBlockingListSchema }).partial();
20913
21152
  /**
20914
21153
  * What one arm mode actually arms, DERIVED from the enabled rules gated on it.
20915
21154
  * Never authored, never stored — see `alarm-mode-coverage.ts` for why a stored
@@ -20954,6 +21193,36 @@ var NcAlarmModeCoverageSchema = object({
20954
21193
  */
20955
21194
  skippedDevices: array(NcAlarmSkippedDeviceSchema).default([])
20956
21195
  });
21196
+ /** One covered device that reads open, and whether that refuses the arm. */
21197
+ var NcAlarmOpeningSchema = object({
21198
+ deviceId: number().int(),
21199
+ name: string(),
21200
+ /** The device's state word as read (`open`, `unlocked`, …). */
21201
+ state: string(),
21202
+ /** False when the mode's non-blocking list names this device. */
21203
+ blocking: boolean()
21204
+ });
21205
+ /** A device the panel is currently ignoring, and which side of it it is on. */
21206
+ var NcAlarmExclusionViewSchema = object({
21207
+ deviceId: number().int(),
21208
+ name: string(),
21209
+ phase: _enum(["open", "closed"])
21210
+ });
21211
+ /** One mode's openings: devices read open, plus those whose state is unknown. */
21212
+ var NcAlarmModeOpeningsSchema = object({
21213
+ mode: AlarmArmModeSchema,
21214
+ devices: array(NcAlarmOpeningSchema),
21215
+ /** Covered devices whose state could not be read (D49): neither open nor closed. */
21216
+ unknown: array(number().int())
21217
+ });
21218
+ var NcAlarmLiveSchema = object({
21219
+ state: AlarmStateSchema,
21220
+ /** The mode being armed into (exit delay) or held; null when disarmed. */
21221
+ targetMode: AlarmArmModeSchema.nullable(),
21222
+ availableModes: array(AlarmArmModeSchema),
21223
+ openings: array(NcAlarmModeOpeningsSchema),
21224
+ exclusions: array(NcAlarmExclusionViewSchema)
21225
+ });
20957
21226
  var NcAlarmConfigSchema = object({
20958
21227
  /**
20959
21228
  * The panel's device id, or null when this install has no panel (the ensure
@@ -20963,7 +21232,13 @@ var NcAlarmConfigSchema = object({
20963
21232
  */
20964
21233
  deviceId: number().int().nullable(),
20965
21234
  settings: NcAlarmSettingsSchema,
20966
- coverage: array(NcAlarmModeCoverageSchema)
21235
+ coverage: array(NcAlarmModeCoverageSchema),
21236
+ /**
21237
+ * The panel as it is NOW — state, what each mode would find open, what is
21238
+ * excluded. Optional: a panel-less hub answers without it, and a client
21239
+ * must not read its absence as "nothing is open".
21240
+ */
21241
+ live: NcAlarmLiveSchema.optional()
20967
21242
  });
20968
21243
  /**
20969
21244
  * ONE rule's demand on ONE camera's clip ring.
@@ -21011,10 +21286,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
21011
21286
  kind: "mutation",
21012
21287
  auth: "admin",
21013
21288
  caller: "required"
21014
- }), method(object({
21015
- ruleId: string(),
21016
- patch: NcRulePatchSchema
21017
- }), object({ rule: NcRuleSchema }), {
21289
+ }), method(NcRuleUpdateInputSchema, object({ rule: NcRuleSchema }), {
21018
21290
  kind: "mutation",
21019
21291
  auth: "admin",
21020
21292
  caller: "required"
@@ -21042,7 +21314,10 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
21042
21314
  }), method(object({}), object({
21043
21315
  catalog: array(NcConditionDescriptorSchema),
21044
21316
  taxonomy: NcTaxonomySchema.optional()
21045
- })), method(object({ filter: NcHistoryFilterSchema.default({ limit: 100 }) }), object({ entries: array(NcHistoryEntrySchema) }), { auth: "admin" }), method(object({ artifactId: string().min(1) }), object({ url: string().nullable() }), { auth: "admin" }), method(object({}), object({ snoozes: array(NcSnoozeSchema) }), { caller: "required" }), method(object({ snooze: NcSnoozeInputSchema }), object({ snooze: NcSnoozeSchema }), {
21317
+ })), method(object({}), object({ vars: array(NcTemplateVarDescriptorSchema) })), method(NcTemplatePreviewInputSchema, NcTemplatePreviewSchema, {
21318
+ kind: "mutation",
21319
+ access: "view"
21320
+ }), method(object({ filter: NcHistoryFilterSchema.default({ limit: 100 }) }), object({ entries: array(NcHistoryEntrySchema) }), { auth: "admin" }), method(object({ artifactId: string().min(1) }), object({ url: string().nullable() }), { auth: "admin" }), method(object({}), object({ snoozes: array(NcSnoozeSchema) }), { caller: "required" }), method(object({ snooze: NcSnoozeInputSchema }), object({ snooze: NcSnoozeSchema }), {
21046
21321
  kind: "mutation",
21047
21322
  caller: "required"
21048
21323
  }), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
@@ -25851,6 +26126,7 @@ var CAP_TO_KIND = {
25851
26126
  "enum-sensor": "enum-sensor",
25852
26127
  "event-emitter": "device-event",
25853
26128
  "lock-control": "lock",
26129
+ cover: "cover",
25854
26130
  switch: "switch",
25855
26131
  button: "button",
25856
26132
  doorbell: "doorbell"
@@ -26411,41 +26687,65 @@ var ProviderListEntrySchema = discriminatedUnion("shouldSaveDiskSpace", [object(
26411
26687
  method(object({
26412
26688
  location: StorageLocationRefSchema,
26413
26689
  relativePath: string()
26414
- }), string()), method(object({
26690
+ }), string(), { auth: "admin" }), method(object({
26415
26691
  location: StorageLocationRefSchema,
26416
26692
  relativePath: string(),
26417
26693
  data: _instanceof(Uint8Array)
26418
- }), _void(), { kind: "mutation" }), method(object({
26694
+ }), _void(), {
26695
+ kind: "mutation",
26696
+ auth: "admin"
26697
+ }), method(object({
26419
26698
  location: StorageLocationRefSchema,
26420
26699
  relativePath: string()
26421
- }), _instanceof(Uint8Array)), method(object({
26700
+ }), _instanceof(Uint8Array), { auth: "admin" }), method(object({
26422
26701
  location: StorageLocationRefSchema,
26423
26702
  relativePath: string()
26424
- }), boolean()), method(object({
26703
+ }), boolean(), { auth: "admin" }), method(object({
26425
26704
  location: StorageLocationRefSchema,
26426
26705
  prefix: string().optional()
26427
- }), array(string()).readonly()), method(object({
26706
+ }), array(string()).readonly(), { auth: "admin" }), method(object({
26428
26707
  location: StorageLocationRefSchema,
26429
26708
  relativePath: string()
26430
- }), _void(), { kind: "mutation" }), method(object({ location: StorageLocationRefSchema }), number().nullable()), method(object({
26709
+ }), _void(), {
26710
+ kind: "mutation",
26711
+ auth: "admin"
26712
+ }), method(object({ location: StorageLocationRefSchema }), number().nullable()), method(object({
26431
26713
  location: StorageLocationRefSchema,
26432
26714
  relativePath: string(),
26433
26715
  sizeBytes: number().optional()
26434
- }), object({ uploadId: string() }), { kind: "mutation" }), method(object({
26716
+ }), object({ uploadId: string() }), {
26717
+ kind: "mutation",
26718
+ auth: "admin"
26719
+ }), method(object({
26435
26720
  uploadId: string(),
26436
26721
  offset: number(),
26437
26722
  data: _instanceof(Uint8Array)
26438
- }), _void(), { kind: "mutation" }), method(object({ uploadId: string() }), _void(), { kind: "mutation" }), method(object({ uploadId: string() }), _void(), { kind: "mutation" }), method(object({
26723
+ }), _void(), {
26724
+ kind: "mutation",
26725
+ auth: "admin"
26726
+ }), method(object({ uploadId: string() }), _void(), {
26727
+ kind: "mutation",
26728
+ auth: "admin"
26729
+ }), method(object({ uploadId: string() }), _void(), {
26730
+ kind: "mutation",
26731
+ auth: "admin"
26732
+ }), method(object({
26439
26733
  location: StorageLocationRefSchema,
26440
26734
  relativePath: string()
26441
26735
  }), object({
26442
26736
  downloadId: string(),
26443
26737
  sizeBytes: number()
26444
- }), { kind: "mutation" }), method(object({
26738
+ }), {
26739
+ kind: "mutation",
26740
+ auth: "admin"
26741
+ }), method(object({
26445
26742
  downloadId: string(),
26446
26743
  offset: number(),
26447
26744
  length: number()
26448
- }), _instanceof(Uint8Array)), method(object({ downloadId: string() }), _void(), { kind: "mutation" }), method(object({ type: StorageLocationTypeSchema.optional() }), array(StorageLocationSchema).readonly()), method(_void(), array(StorageLocationDeclarationSchema).readonly()), method(StorageLocationSchema.omit({
26745
+ }), _instanceof(Uint8Array), { auth: "admin" }), method(object({ downloadId: string() }), _void(), {
26746
+ kind: "mutation",
26747
+ auth: "admin"
26748
+ }), method(object({ type: StorageLocationTypeSchema.optional() }), array(StorageLocationSchema).readonly()), method(_void(), array(StorageLocationDeclarationSchema).readonly()), method(StorageLocationSchema.omit({
26449
26749
  createdAt: true,
26450
26750
  updatedAt: true
26451
26751
  }), StorageLocationSchema, {
@@ -28317,7 +28617,67 @@ var WebrtcLadderDecisionSchema = object({
28317
28617
  serverSending: boolean().nullable(),
28318
28618
  /** Epoch ms. The overlay prints its age; a decision from 40 minutes ago
28319
28619
  * must not read like one from this second. */
28320
- at: number()
28620
+ at: number(),
28621
+ /** The broker's own cause when it is finer than `cause` can carry, e.g.
28622
+ * `trial-revert` (reported as `stall`/`loss` for older consumers). Optional:
28623
+ * an older server strips it instead of rejecting the answer. */
28624
+ causeDetail: string().optional()
28625
+ });
28626
+ var WebrtcClimbHoldSchema = object({
28627
+ /** `stall-building` — the client receives ≪ what is sent; `delivery` — the
28628
+ * current rung is not landing whole; `no-evidence` — no receiver feedback;
28629
+ * `warming` — healthy, accumulating the streak; `cooldown` — too soon after
28630
+ * a change; `capacity` — a MEASURED probe below the next rung's bar;
28631
+ * `try-unclean` — no capacity evidence, and the path is not clean enough to
28632
+ * try; `try-backoff` — a try reverted, waiting out its backoff; `trial` —
28633
+ * this rung IS a try, reverting if it does not land; `suspended` —
28634
+ * recorded playback on the track. */
28635
+ code: string(),
28636
+ /** The rung a climb would go to. */
28637
+ nextTier: CamProfileSchema,
28638
+ /** Bytes received ÷ bytes sent over the delivery window (≥ one GOP). */
28639
+ deliveryRatio: number().nullable(),
28640
+ deliveryWindowMs: number().nullable(),
28641
+ /** The ratio a climb requires. */
28642
+ climbDeliveryRatio: number(),
28643
+ /** The receiver's bandwidth estimate (REMB), kbps. Capped by what is sent. */
28644
+ capacityKbps: number().nullable(),
28645
+ /** The viewer's downlink probe for this session, kbps. */
28646
+ probeKbps: number().nullable(),
28647
+ /** The next rung's measured bitrate, kbps. */
28648
+ nextTierKbps: number().nullable(),
28649
+ capacityMargin: number(),
28650
+ /** The capacity a climb to `nextTier` needs, kbps (bitrate × margin, or the
28651
+ * client ladder threshold when the rung has measured nothing). */
28652
+ neededKbps: number().nullable(),
28653
+ /** For `try-unclean`: which clean-path condition failed (a `WebrtcTryBlocker`,
28654
+ * carried as a string for the same reason as `code`). */
28655
+ tryBlockedBy: string().nullable(),
28656
+ /** The delivery ratio and the loss ratio a try requires / must stay under.
28657
+ * Optional, like every field added to this schema after it first shipped:
28658
+ * the router validates output, so a REQUIRED new field makes a newer server
28659
+ * reject an older broker's whole answer (review m1). */
28660
+ tryDeliveryRatio: number().optional(),
28661
+ tryMaxLossRatio: number().optional(),
28662
+ /** For `try-backoff`: time until the next try, ms. */
28663
+ retryInMs: number().nullable(),
28664
+ /** The last try that reverted in this viewer session. */
28665
+ lastRevert: object({
28666
+ tier: CamProfileSchema,
28667
+ deliveryRatio: number().nullable(),
28668
+ stalled: boolean(),
28669
+ at: number()
28670
+ }).nullable(),
28671
+ /** For `trial`: how long this rung has been on trial, and for how long it must hold. */
28672
+ trialForMs: number().nullable(),
28673
+ trialMs: number().nullable(),
28674
+ healthyForMs: number().nullable(),
28675
+ requiredHealthyMs: number().nullable(),
28676
+ /** Epoch ms this hold's code began. */
28677
+ since: number(),
28678
+ /** The same one-line account the broker logs, e.g.
28679
+ * `held: delivery 0.97 over 4.0s ok, REMB 480 kbps < mid 1800 kbps × 1.2`. */
28680
+ summary: string()
28321
28681
  });
28322
28682
  /** Per-tier count of MEASURED downgrades this viewer session has suffered. */
28323
28683
  var WebrtcTierFailureSchema = object({
@@ -28381,7 +28741,12 @@ var WebrtcSessionDebugSchema = object({
28381
28741
  tierFailures: array(WebrtcTierFailureSchema),
28382
28742
  /** Successful promotions in this viewer session (drives the progressive
28383
28743
  * healthy timer). Null when no ladder is running. */
28384
- upgradeCount: number().nullable()
28744
+ upgradeCount: number().nullable(),
28745
+ /** Why the ladder is not climbing right now. Null when no ladder runs, it
28746
+ * is at the top rung, or it just moved. Optional because this output is
28747
+ * validated by the router: a server carrying this schema must still accept
28748
+ * the answer of a stream-broker deployed before the field existed. */
28749
+ climbHold: WebrtcClimbHoldSchema.nullable().optional()
28385
28750
  });
28386
28751
  /**
28387
28752
  * WebRTC session — device-scoped facade over the system `webrtc` cap.
@@ -32262,6 +32627,11 @@ var ClientNetworkStatsSchema = object({
32262
32627
  jitterMs: number(),
32263
32628
  estimatedBandwidthKbps: number(),
32264
32629
  packetLossPercent: number().min(0).max(100),
32630
+ /** The viewer's latest `/adaptive-probe` reading, Mbps — whatever it read
32631
+ * (D635 I4). Absent when it never probed or the probe failed (unknown). */
32632
+ downlinkMbps: number().optional(),
32633
+ /** Age of that reading when this report was sent, ms. */
32634
+ downlinkAgeMs: number().optional(),
32265
32635
  lastUpdated: number()
32266
32636
  });
32267
32637
  var DeviceNetworkStatsSchema = object({
@@ -32274,7 +32644,11 @@ method(object({ deviceId: number() }), DeviceNetworkStatsSchema.nullable()), met
32274
32644
  rttMs: number().min(0).max(6e4),
32275
32645
  jitterMs: number().min(0).max(1e4),
32276
32646
  estimatedBandwidthKbps: number().min(0).max(1e6),
32277
- packetLossPercent: number().min(0).max(100)
32647
+ packetLossPercent: number().min(0).max(100),
32648
+ /** Latest downlink probe, Mbps, whatever it read; absent = never / failed. */
32649
+ downlinkMbps: number().min(0).max(1e5).optional(),
32650
+ /** Age of that probe when this report is sent, ms. */
32651
+ downlinkAgeMs: number().min(0).max(864e5).optional()
32278
32652
  }), _void(), { kind: "mutation" });
32279
32653
  /**
32280
32654
  * nodes — system-scoped singleton capability for cluster topology
@@ -40535,6 +40909,12 @@ Object.freeze({
40535
40909
  addonId: null,
40536
40910
  access: "view"
40537
40911
  },
40912
+ "deviceManager.listDeviceIdsByCaps": {
40913
+ capName: "device-manager",
40914
+ capScope: "system",
40915
+ addonId: null,
40916
+ access: "view"
40917
+ },
40538
40918
  "deviceManager.listLocationDescriptions": {
40539
40919
  capName: "device-manager",
40540
40920
  capScope: "system",
@@ -42341,6 +42721,12 @@ Object.freeze({
42341
42721
  addonId: null,
42342
42722
  access: "view"
42343
42723
  },
42724
+ "notificationRules.getTemplateCatalog": {
42725
+ capName: "notification-rules",
42726
+ capScope: "system",
42727
+ addonId: null,
42728
+ access: "view"
42729
+ },
42344
42730
  "notificationRules.listDeviceMutes": {
42345
42731
  capName: "notification-rules",
42346
42732
  capScope: "system",
@@ -42359,6 +42745,12 @@ Object.freeze({
42359
42745
  addonId: null,
42360
42746
  access: "view"
42361
42747
  },
42748
+ "notificationRules.previewTemplate": {
42749
+ capName: "notification-rules",
42750
+ capScope: "system",
42751
+ addonId: null,
42752
+ access: "view"
42753
+ },
42362
42754
  "notificationRules.resolveArtifactUrl": {
42363
42755
  capName: "notification-rules",
42364
42756
  capScope: "system",
@@ -47976,6 +48368,41 @@ var NC_AUDIO_DEFAULTS = {
47976
48368
  };
47977
48369
  new Set(["devices", "classes"]);
47978
48370
  NC_AUDIO_DEFAULTS.hitPercent, NC_AUDIO_DEFAULTS.samplingSeconds;
48371
+ var RULE_BODY_ONLY = ["body"];
48372
+ var RULE_TEXT = ["title", "body"];
48373
+ var BATTERY = ["device-battery-low", "device-battery-normal"];
48374
+ var CONSUMABLE = ["device-consumable-low", "device-consumable-normal"];
48375
+ var UPDATES = [
48376
+ "addon-update-available",
48377
+ "server-update-available",
48378
+ "wrapper-update-available"
48379
+ ];
48380
+ var PACKAGE_UPDATES = ["addon-update-available", "server-update-available"];
48381
+ var ALARM = [
48382
+ "alarm-triggered",
48383
+ "alarm-armed",
48384
+ "alarm-disarmed",
48385
+ "alarm-arming",
48386
+ "alarm-arm-refused",
48387
+ "alarm-pending",
48388
+ "alarm-rearmed",
48389
+ "alarm-sensor-bypass",
48390
+ "alarm-check-failed"
48391
+ ];
48392
+ var COMBINED_ALARM = ["alarm-triggered"];
48393
+ var DEVICE_EVENTS = [
48394
+ "device-online",
48395
+ "device-offline",
48396
+ "device-disabled",
48397
+ "device-enabled",
48398
+ ...BATTERY,
48399
+ ...CONSUMABLE,
48400
+ "stream-online",
48401
+ "stream-offline",
48402
+ "detection-blind",
48403
+ ...ALARM
48404
+ ];
48405
+ [...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];
47979
48406
  /**
47980
48407
  * TimelapseRule — the STANDALONE scheduled timelapse producer's rule model.
47981
48408
  *