@camstack/types 1.2.387 → 1.2.388

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/addon.js +24 -14
  2. package/dist/addon.mjs +24 -14
  3. package/dist/capabilities/alarm-panel.cap.d.ts +10 -2
  4. package/dist/capabilities/capability-definition.d.ts +21 -3
  5. package/dist/capabilities/connectivity.cap.d.ts +10 -2
  6. package/dist/capabilities/device-history.cap.d.ts +195 -3
  7. package/dist/capabilities/dishwasher.cap.d.ts +17 -0
  8. package/dist/capabilities/enum-sensor.cap.d.ts +12 -2
  9. package/dist/capabilities/index.d.ts +4 -3
  10. package/dist/capabilities/lock-control.cap.d.ts +9 -2
  11. package/dist/capabilities/log-destination.cap.d.ts +148 -19
  12. package/dist/capabilities/media-player.cap.d.ts +15 -2
  13. package/dist/capabilities/notification-rules.cap.d.ts +213 -13
  14. package/dist/capabilities/stream-params.cap.d.ts +24 -2
  15. package/dist/client.js +75 -6
  16. package/dist/client.mjs +75 -6
  17. package/dist/device/base-device.d.ts +34 -1
  18. package/dist/device/index.d.ts +2 -2
  19. package/dist/generated/addon-api.d.ts +89 -12
  20. package/dist/generated/cap-input-defaults.d.ts +1 -1
  21. package/dist/generated/collection-array-methods.d.ts +2 -2
  22. package/dist/generated/history-catalog.d.ts +1 -1
  23. package/dist/generated/method-access-map.d.ts +1 -1
  24. package/dist/generated/method-device-selectors.d.ts +2 -2
  25. package/dist/generated/system-proxy.d.ts +1 -1
  26. package/dist/index.d.ts +3 -2
  27. package/dist/index.js +584 -53
  28. package/dist/index.mjs +568 -54
  29. package/dist/interfaces/logging.d.ts +16 -1
  30. package/dist/notification/media-image.d.ts +67 -0
  31. package/dist/{sleep-yKL5gfrH.mjs → sleep-BSuCCFjf.mjs} +3 -1
  32. package/dist/{sleep-6sOPE0EV.js → sleep-DKtoyk6X.js} +3 -1
  33. package/package.json +1 -1
@@ -996,6 +996,34 @@ export declare const NcRuleTargetSchema: z.ZodObject<{
996
996
  }, z.core.$strip>;
997
997
  export type NcRuleTarget = z.infer<typeof NcRuleTargetSchema>;
998
998
  /**
999
+ * WHAT THE NOTIFICATION'S PICTURE IS (D897) — the ONE media choice of a rule.
1000
+ *
1001
+ * Every mode starts from the same CLEAN source frame of the trigger moment
1002
+ * (keyFrame → sceneFrame → lastSceneFrame, narrowed to the trigger instant and
1003
+ * to the zone that fired the rule) and renders it once at send time:
1004
+ * - `scene-boxes` — the whole scene, the subject outlined thick in the accent
1005
+ * colour and every OTHER track visible at that instant outlined thin, each
1006
+ * labelled with class and confidence ("dog 87%").
1007
+ * - `crop` — the subject cut out of that frame around its box at that instant.
1008
+ * - `clean` — the whole scene with nothing drawn on it.
1009
+ * - `none` — no picture.
1010
+ *
1011
+ * A mode that cannot be honoured (no box at that instant, a photograph with no
1012
+ * tracked subject) ships `clean` and names the reason in the log, per camera.
1013
+ * It replaces the `attach` × `frame` × `zoneCrop` triple, which let one rule
1014
+ * ship a crop on one event and a boxed scene on the next depending on which
1015
+ * stored kind had landed.
1016
+ */
1017
+ export declare const NcMediaImageSchema: z.ZodEnum<{
1018
+ clean: "clean";
1019
+ crop: "crop";
1020
+ none: "none";
1021
+ "scene-boxes": "scene-boxes";
1022
+ }>;
1023
+ export type NcMediaImage = z.infer<typeof NcMediaImageSchema>;
1024
+ /**
1025
+ * @deprecated Read only by `normalizeNcMediaPolicy` (D897) — see {@link NcMediaImageSchema}.
1026
+ *
999
1027
  * Media attachment policy (P1 still-image subset).
1000
1028
  * - `best` — the best AVAILABLE subject image at dispatch time (D-3).
1001
1029
  * - `best-matching` — the media that explains WHY the rule fired: a rule
@@ -1009,6 +1037,8 @@ export type NcRuleTarget = z.infer<typeof NcRuleTargetSchema>;
1009
1037
  * - `none` — no attachment.
1010
1038
  */
1011
1039
  /**
1040
+ * @deprecated Read only by `normalizeNcMediaPolicy` (D897) — see {@link NcMediaImageSchema}.
1041
+ *
1012
1042
  * WHAT THE PICTURE SHOWS — chosen explicitly, because the implicit ladders
1013
1043
  * conflate it with the selection strategy and betray the request: asking for
1014
1044
  * the clean scene frame on an object-event owner used to start at
@@ -1060,7 +1090,14 @@ export type NcLinkedCameraMode = z.infer<typeof NcLinkedCameraModeSchema>;
1060
1090
  export declare const NC_CLIP_PRE_ROLL_DEFAULT_SEC = 4;
1061
1091
  export declare const NC_CLIP_POST_ROLL_DEFAULT_SEC = 6;
1062
1092
  export declare const NcMediaPolicySchema: z.ZodObject<{
1063
- attach: z.ZodDefault<z.ZodEnum<{
1093
+ image: z.ZodOptional<z.ZodEnum<{
1094
+ clean: "clean";
1095
+ crop: "crop";
1096
+ none: "none";
1097
+ "scene-boxes": "scene-boxes";
1098
+ }>>;
1099
+ showTriggerZone: z.ZodOptional<z.ZodBoolean>;
1100
+ attach: z.ZodOptional<z.ZodEnum<{
1064
1101
  best: "best";
1065
1102
  "best-matching": "best-matching";
1066
1103
  keyFrame: "keyFrame";
@@ -1390,7 +1427,14 @@ export declare const NcRuleInputSchema: z.ZodObject<{
1390
1427
  }, z.core.$strip>>;
1391
1428
  targetUsers: z.ZodOptional<z.ZodArray<z.ZodString>>;
1392
1429
  media: z.ZodDefault<z.ZodObject<{
1393
- attach: z.ZodDefault<z.ZodEnum<{
1430
+ image: z.ZodOptional<z.ZodEnum<{
1431
+ clean: "clean";
1432
+ crop: "crop";
1433
+ none: "none";
1434
+ "scene-boxes": "scene-boxes";
1435
+ }>>;
1436
+ showTriggerZone: z.ZodOptional<z.ZodBoolean>;
1437
+ attach: z.ZodOptional<z.ZodEnum<{
1394
1438
  best: "best";
1395
1439
  "best-matching": "best-matching";
1396
1440
  keyFrame: "keyFrame";
@@ -1873,7 +1917,14 @@ export declare const NcRulePatchSchema: z.ZodObject<{
1873
1917
  }, z.core.$strip>>;
1874
1918
  }, z.core.$strip>>;
1875
1919
  media: z.ZodOptional<z.ZodObject<{
1876
- attach: z.ZodDefault<z.ZodEnum<{
1920
+ image: z.ZodOptional<z.ZodEnum<{
1921
+ clean: "clean";
1922
+ crop: "crop";
1923
+ none: "none";
1924
+ "scene-boxes": "scene-boxes";
1925
+ }>>;
1926
+ showTriggerZone: z.ZodOptional<z.ZodBoolean>;
1927
+ attach: z.ZodOptional<z.ZodEnum<{
1877
1928
  best: "best";
1878
1929
  "best-matching": "best-matching";
1879
1930
  keyFrame: "keyFrame";
@@ -2265,7 +2316,14 @@ export declare const NcRuleUpdateInputSchema: z.ZodObject<{
2265
2316
  }, z.core.$strip>>;
2266
2317
  }, z.core.$strip>>;
2267
2318
  media: z.ZodOptional<z.ZodObject<{
2268
- attach: z.ZodDefault<z.ZodEnum<{
2319
+ image: z.ZodOptional<z.ZodEnum<{
2320
+ clean: "clean";
2321
+ crop: "crop";
2322
+ none: "none";
2323
+ "scene-boxes": "scene-boxes";
2324
+ }>>;
2325
+ showTriggerZone: z.ZodOptional<z.ZodBoolean>;
2326
+ attach: z.ZodOptional<z.ZodEnum<{
2269
2327
  best: "best";
2270
2328
  "best-matching": "best-matching";
2271
2329
  keyFrame: "keyFrame";
@@ -2510,7 +2568,14 @@ export declare const NcRuleSchema: z.ZodObject<{
2510
2568
  }, z.core.$strip>>;
2511
2569
  targetUsers: z.ZodOptional<z.ZodArray<z.ZodString>>;
2512
2570
  media: z.ZodDefault<z.ZodObject<{
2513
- attach: z.ZodDefault<z.ZodEnum<{
2571
+ image: z.ZodOptional<z.ZodEnum<{
2572
+ clean: "clean";
2573
+ crop: "crop";
2574
+ none: "none";
2575
+ "scene-boxes": "scene-boxes";
2576
+ }>>;
2577
+ showTriggerZone: z.ZodOptional<z.ZodBoolean>;
2578
+ attach: z.ZodOptional<z.ZodEnum<{
2514
2579
  best: "best";
2515
2580
  "best-matching": "best-matching";
2516
2581
  keyFrame: "keyFrame";
@@ -4075,6 +4140,21 @@ export declare const NcAlarmModeOpeningsSchema: z.ZodObject<{
4075
4140
  unknown: z.ZodArray<z.ZodNumber>;
4076
4141
  }, z.core.$strip>;
4077
4142
  export type NcAlarmModeOpenings = z.infer<typeof NcAlarmModeOpeningsSchema>;
4143
+ /**
4144
+ * One alarm INPUT — a (rule, device) pair — the operator bypassed until the
4145
+ * next disarm ("Bypass this input until disarm" on a trigger notification, or
4146
+ * `nc.bypassAlarmInput`). Reported so an armed alarm with a silenced input
4147
+ * never looks fully armed (D62: off must never look like broken).
4148
+ */
4149
+ export declare const NcAlarmInputBypassViewSchema: z.ZodObject<{
4150
+ ruleId: z.ZodString;
4151
+ ruleName: z.ZodString;
4152
+ deviceId: z.ZodNumber;
4153
+ name: z.ZodString;
4154
+ since: z.ZodNumber;
4155
+ dropped: z.ZodNumber;
4156
+ }, z.core.$strip>;
4157
+ export type NcAlarmInputBypassView = z.infer<typeof NcAlarmInputBypassViewSchema>;
4078
4158
  export declare const NcAlarmLiveSchema: z.ZodObject<{
4079
4159
  state: z.ZodEnum<{
4080
4160
  armed_away: "armed_away";
@@ -4126,6 +4206,14 @@ export declare const NcAlarmLiveSchema: z.ZodObject<{
4126
4206
  open: "open";
4127
4207
  }>;
4128
4208
  }, z.core.$strip>>;
4209
+ bypassedInputs: z.ZodDefault<z.ZodArray<z.ZodObject<{
4210
+ ruleId: z.ZodString;
4211
+ ruleName: z.ZodString;
4212
+ deviceId: z.ZodNumber;
4213
+ name: z.ZodString;
4214
+ since: z.ZodNumber;
4215
+ dropped: z.ZodNumber;
4216
+ }, z.core.$strip>>>;
4129
4217
  }, z.core.$strip>;
4130
4218
  export type NcAlarmLive = z.infer<typeof NcAlarmLiveSchema>;
4131
4219
  export declare const NcAlarmConfigSchema: z.ZodObject<{
@@ -4281,6 +4369,14 @@ export declare const NcAlarmConfigSchema: z.ZodObject<{
4281
4369
  open: "open";
4282
4370
  }>;
4283
4371
  }, z.core.$strip>>;
4372
+ bypassedInputs: z.ZodDefault<z.ZodArray<z.ZodObject<{
4373
+ ruleId: z.ZodString;
4374
+ ruleName: z.ZodString;
4375
+ deviceId: z.ZodNumber;
4376
+ name: z.ZodString;
4377
+ since: z.ZodNumber;
4378
+ dropped: z.ZodNumber;
4379
+ }, z.core.$strip>>>;
4284
4380
  }, z.core.$strip>>;
4285
4381
  }, z.core.$strip>;
4286
4382
  export type NcAlarmConfig = z.infer<typeof NcAlarmConfigSchema>;
@@ -4603,7 +4699,14 @@ export declare const notificationRulesCapability: {
4603
4699
  }, z.core.$strip>>;
4604
4700
  targetUsers: z.ZodOptional<z.ZodArray<z.ZodString>>;
4605
4701
  media: z.ZodDefault<z.ZodObject<{
4606
- attach: z.ZodDefault<z.ZodEnum<{
4702
+ image: z.ZodOptional<z.ZodEnum<{
4703
+ clean: "clean";
4704
+ crop: "crop";
4705
+ none: "none";
4706
+ "scene-boxes": "scene-boxes";
4707
+ }>>;
4708
+ showTriggerZone: z.ZodOptional<z.ZodBoolean>;
4709
+ attach: z.ZodOptional<z.ZodEnum<{
4607
4710
  best: "best";
4608
4711
  "best-matching": "best-matching";
4609
4712
  keyFrame: "keyFrame";
@@ -4963,7 +5066,14 @@ export declare const notificationRulesCapability: {
4963
5066
  }, z.core.$strip>>;
4964
5067
  targetUsers: z.ZodOptional<z.ZodArray<z.ZodString>>;
4965
5068
  media: z.ZodDefault<z.ZodObject<{
4966
- attach: z.ZodDefault<z.ZodEnum<{
5069
+ image: z.ZodOptional<z.ZodEnum<{
5070
+ clean: "clean";
5071
+ crop: "crop";
5072
+ none: "none";
5073
+ "scene-boxes": "scene-boxes";
5074
+ }>>;
5075
+ showTriggerZone: z.ZodOptional<z.ZodBoolean>;
5076
+ attach: z.ZodOptional<z.ZodEnum<{
4967
5077
  best: "best";
4968
5078
  "best-matching": "best-matching";
4969
5079
  keyFrame: "keyFrame";
@@ -5321,7 +5431,14 @@ export declare const notificationRulesCapability: {
5321
5431
  }, z.core.$strip>>;
5322
5432
  targetUsers: z.ZodOptional<z.ZodArray<z.ZodString>>;
5323
5433
  media: z.ZodDefault<z.ZodObject<{
5324
- attach: z.ZodDefault<z.ZodEnum<{
5434
+ image: z.ZodOptional<z.ZodEnum<{
5435
+ clean: "clean";
5436
+ crop: "crop";
5437
+ none: "none";
5438
+ "scene-boxes": "scene-boxes";
5439
+ }>>;
5440
+ showTriggerZone: z.ZodOptional<z.ZodBoolean>;
5441
+ attach: z.ZodOptional<z.ZodEnum<{
5325
5442
  best: "best";
5326
5443
  "best-matching": "best-matching";
5327
5444
  keyFrame: "keyFrame";
@@ -5673,7 +5790,14 @@ export declare const notificationRulesCapability: {
5673
5790
  }, z.core.$strip>>;
5674
5791
  targetUsers: z.ZodOptional<z.ZodArray<z.ZodString>>;
5675
5792
  media: z.ZodDefault<z.ZodObject<{
5676
- attach: z.ZodDefault<z.ZodEnum<{
5793
+ image: z.ZodOptional<z.ZodEnum<{
5794
+ clean: "clean";
5795
+ crop: "crop";
5796
+ none: "none";
5797
+ "scene-boxes": "scene-boxes";
5798
+ }>>;
5799
+ showTriggerZone: z.ZodOptional<z.ZodBoolean>;
5800
+ attach: z.ZodOptional<z.ZodEnum<{
5677
5801
  best: "best";
5678
5802
  "best-matching": "best-matching";
5679
5803
  keyFrame: "keyFrame";
@@ -6156,7 +6280,14 @@ export declare const notificationRulesCapability: {
6156
6280
  }, z.core.$strip>>;
6157
6281
  }, z.core.$strip>>;
6158
6282
  media: z.ZodOptional<z.ZodObject<{
6159
- attach: z.ZodDefault<z.ZodEnum<{
6283
+ image: z.ZodOptional<z.ZodEnum<{
6284
+ clean: "clean";
6285
+ crop: "crop";
6286
+ none: "none";
6287
+ "scene-boxes": "scene-boxes";
6288
+ }>>;
6289
+ showTriggerZone: z.ZodOptional<z.ZodBoolean>;
6290
+ attach: z.ZodOptional<z.ZodEnum<{
6160
6291
  best: "best";
6161
6292
  "best-matching": "best-matching";
6162
6293
  keyFrame: "keyFrame";
@@ -6399,7 +6530,14 @@ export declare const notificationRulesCapability: {
6399
6530
  }, z.core.$strip>>;
6400
6531
  targetUsers: z.ZodOptional<z.ZodArray<z.ZodString>>;
6401
6532
  media: z.ZodDefault<z.ZodObject<{
6402
- attach: z.ZodDefault<z.ZodEnum<{
6533
+ image: z.ZodOptional<z.ZodEnum<{
6534
+ clean: "clean";
6535
+ crop: "crop";
6536
+ none: "none";
6537
+ "scene-boxes": "scene-boxes";
6538
+ }>>;
6539
+ showTriggerZone: z.ZodOptional<z.ZodBoolean>;
6540
+ attach: z.ZodOptional<z.ZodEnum<{
6403
6541
  best: "best";
6404
6542
  "best-matching": "best-matching";
6405
6543
  keyFrame: "keyFrame";
@@ -6950,7 +7088,14 @@ export declare const notificationRulesCapability: {
6950
7088
  }, z.core.$strip>>;
6951
7089
  targetUsers: z.ZodOptional<z.ZodArray<z.ZodString>>;
6952
7090
  media: z.ZodDefault<z.ZodObject<{
6953
- attach: z.ZodDefault<z.ZodEnum<{
7091
+ image: z.ZodOptional<z.ZodEnum<{
7092
+ clean: "clean";
7093
+ crop: "crop";
7094
+ none: "none";
7095
+ "scene-boxes": "scene-boxes";
7096
+ }>>;
7097
+ showTriggerZone: z.ZodOptional<z.ZodBoolean>;
7098
+ attach: z.ZodOptional<z.ZodEnum<{
6954
7099
  best: "best";
6955
7100
  "best-matching": "best-matching";
6956
7101
  keyFrame: "keyFrame";
@@ -7327,7 +7472,14 @@ export declare const notificationRulesCapability: {
7327
7472
  }, z.core.$strip>>;
7328
7473
  targetUsers: z.ZodOptional<z.ZodArray<z.ZodString>>;
7329
7474
  media: z.ZodDefault<z.ZodObject<{
7330
- attach: z.ZodDefault<z.ZodEnum<{
7475
+ image: z.ZodOptional<z.ZodEnum<{
7476
+ clean: "clean";
7477
+ crop: "crop";
7478
+ none: "none";
7479
+ "scene-boxes": "scene-boxes";
7480
+ }>>;
7481
+ showTriggerZone: z.ZodOptional<z.ZodBoolean>;
7482
+ attach: z.ZodOptional<z.ZodEnum<{
7331
7483
  best: "best";
7332
7484
  "best-matching": "best-matching";
7333
7485
  keyFrame: "keyFrame";
@@ -8240,6 +8392,14 @@ export declare const notificationRulesCapability: {
8240
8392
  open: "open";
8241
8393
  }>;
8242
8394
  }, z.core.$strip>>;
8395
+ bypassedInputs: z.ZodDefault<z.ZodArray<z.ZodObject<{
8396
+ ruleId: z.ZodString;
8397
+ ruleName: z.ZodString;
8398
+ deviceId: z.ZodNumber;
8399
+ name: z.ZodString;
8400
+ since: z.ZodNumber;
8401
+ dropped: z.ZodNumber;
8402
+ }, z.core.$strip>>>;
8243
8403
  }, z.core.$strip>>;
8244
8404
  }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
8245
8405
  /**
@@ -8509,6 +8669,14 @@ export declare const notificationRulesCapability: {
8509
8669
  open: "open";
8510
8670
  }>;
8511
8671
  }, z.core.$strip>>;
8672
+ bypassedInputs: z.ZodDefault<z.ZodArray<z.ZodObject<{
8673
+ ruleId: z.ZodString;
8674
+ ruleName: z.ZodString;
8675
+ deviceId: z.ZodNumber;
8676
+ name: z.ZodString;
8677
+ since: z.ZodNumber;
8678
+ dropped: z.ZodNumber;
8679
+ }, z.core.$strip>>>;
8512
8680
  }, z.core.$strip>>;
8513
8681
  }, z.core.$strip>, "mutation">;
8514
8682
  /**
@@ -8672,6 +8840,14 @@ export declare const notificationRulesCapability: {
8672
8840
  open: "open";
8673
8841
  }>;
8674
8842
  }, z.core.$strip>>;
8843
+ bypassedInputs: z.ZodDefault<z.ZodArray<z.ZodObject<{
8844
+ ruleId: z.ZodString;
8845
+ ruleName: z.ZodString;
8846
+ deviceId: z.ZodNumber;
8847
+ name: z.ZodString;
8848
+ since: z.ZodNumber;
8849
+ dropped: z.ZodNumber;
8850
+ }, z.core.$strip>>>;
8675
8851
  }, z.core.$strip>>;
8676
8852
  }, z.core.$strip>, "mutation">;
8677
8853
  /** Rename a profile (Default included — only the name, never the id). */
@@ -8831,6 +9007,14 @@ export declare const notificationRulesCapability: {
8831
9007
  open: "open";
8832
9008
  }>;
8833
9009
  }, z.core.$strip>>;
9010
+ bypassedInputs: z.ZodDefault<z.ZodArray<z.ZodObject<{
9011
+ ruleId: z.ZodString;
9012
+ ruleName: z.ZodString;
9013
+ deviceId: z.ZodNumber;
9014
+ name: z.ZodString;
9015
+ since: z.ZodNumber;
9016
+ dropped: z.ZodNumber;
9017
+ }, z.core.$strip>>>;
8834
9018
  }, z.core.$strip>>;
8835
9019
  }, z.core.$strip>, "mutation">;
8836
9020
  /**
@@ -8992,6 +9176,14 @@ export declare const notificationRulesCapability: {
8992
9176
  open: "open";
8993
9177
  }>;
8994
9178
  }, z.core.$strip>>;
9179
+ bypassedInputs: z.ZodDefault<z.ZodArray<z.ZodObject<{
9180
+ ruleId: z.ZodString;
9181
+ ruleName: z.ZodString;
9182
+ deviceId: z.ZodNumber;
9183
+ name: z.ZodString;
9184
+ since: z.ZodNumber;
9185
+ dropped: z.ZodNumber;
9186
+ }, z.core.$strip>>>;
8995
9187
  }, z.core.$strip>>;
8996
9188
  }, z.core.$strip>, "mutation">;
8997
9189
  /**
@@ -9153,6 +9345,14 @@ export declare const notificationRulesCapability: {
9153
9345
  open: "open";
9154
9346
  }>;
9155
9347
  }, z.core.$strip>>;
9348
+ bypassedInputs: z.ZodDefault<z.ZodArray<z.ZodObject<{
9349
+ ruleId: z.ZodString;
9350
+ ruleName: z.ZodString;
9351
+ deviceId: z.ZodNumber;
9352
+ name: z.ZodString;
9353
+ since: z.ZodNumber;
9354
+ dropped: z.ZodNumber;
9355
+ }, z.core.$strip>>>;
9156
9356
  }, z.core.$strip>>;
9157
9357
  }, z.core.$strip>, "mutation">;
9158
9358
  /**
@@ -489,9 +489,31 @@ export declare const streamParamsCapability: {
489
489
  */
490
490
  readonly durability: 'restored';
491
491
  /**
492
- * History (D850): none — encoder configuration.
492
+ * History (D850): the configured bitrate and frame rate of the main and sub
493
+ * profiles. Configuration, so change-only on the default floor: a point is an
494
+ * operator's (or a tuner's) edit, which is exactly what a chart of a stream's
495
+ * quality over time must show.
493
496
  */
494
- readonly history: 'none';
497
+ readonly history: {
498
+ readonly fields: {
499
+ readonly 'main.bitrate': {
500
+ readonly kind: 'gauge';
501
+ readonly unit: 'kbps';
502
+ };
503
+ readonly 'main.framerate': {
504
+ readonly kind: 'gauge';
505
+ readonly unit: 'fps';
506
+ };
507
+ readonly 'sub.bitrate': {
508
+ readonly kind: 'gauge';
509
+ readonly unit: 'kbps';
510
+ };
511
+ readonly 'sub.framerate': {
512
+ readonly kind: 'gauge';
513
+ readonly unit: 'fps';
514
+ };
515
+ };
516
+ };
495
517
  /** Clock fields: written, but excluded from the compare that decides
496
518
  * whether persisting is worth a SQLite commit. */
497
519
  readonly volatileStateFields: readonly ["lastFetchedAt"];
package/dist/client.js CHANGED
@@ -23038,6 +23038,33 @@ var NcRuleTargetSchema = zod.z.object({
23038
23038
  params: zod.z.record(zod.z.string(), zod.z.unknown()).optional()
23039
23039
  });
23040
23040
  /**
23041
+ * WHAT THE NOTIFICATION'S PICTURE IS (D897) — the ONE media choice of a rule.
23042
+ *
23043
+ * Every mode starts from the same CLEAN source frame of the trigger moment
23044
+ * (keyFrame → sceneFrame → lastSceneFrame, narrowed to the trigger instant and
23045
+ * to the zone that fired the rule) and renders it once at send time:
23046
+ * - `scene-boxes` — the whole scene, the subject outlined thick in the accent
23047
+ * colour and every OTHER track visible at that instant outlined thin, each
23048
+ * labelled with class and confidence ("dog 87%").
23049
+ * - `crop` — the subject cut out of that frame around its box at that instant.
23050
+ * - `clean` — the whole scene with nothing drawn on it.
23051
+ * - `none` — no picture.
23052
+ *
23053
+ * A mode that cannot be honoured (no box at that instant, a photograph with no
23054
+ * tracked subject) ships `clean` and names the reason in the log, per camera.
23055
+ * It replaces the `attach` × `frame` × `zoneCrop` triple, which let one rule
23056
+ * ship a crop on one event and a boxed scene on the next depending on which
23057
+ * stored kind had landed.
23058
+ */
23059
+ var NcMediaImageSchema = zod.z.enum([
23060
+ "scene-boxes",
23061
+ "crop",
23062
+ "clean",
23063
+ "none"
23064
+ ]);
23065
+ /**
23066
+ * @deprecated Read only by `normalizeNcMediaPolicy` (D897) — see {@link NcMediaImageSchema}.
23067
+ *
23041
23068
  * Media attachment policy (P1 still-image subset).
23042
23069
  * - `best` — the best AVAILABLE subject image at dispatch time (D-3).
23043
23070
  * - `best-matching` — the media that explains WHY the rule fired: a rule
@@ -23051,6 +23078,8 @@ var NcRuleTargetSchema = zod.z.object({
23051
23078
  * - `none` — no attachment.
23052
23079
  */
23053
23080
  /**
23081
+ * @deprecated Read only by `normalizeNcMediaPolicy` (D897) — see {@link NcMediaImageSchema}.
23082
+ *
23054
23083
  * WHAT THE PICTURE SHOWS — chosen explicitly, because the implicit ladders
23055
23084
  * conflate it with the selection strategy and betray the request: asking for
23056
23085
  * the clean scene frame on an object-event owner used to start at
@@ -23079,16 +23108,29 @@ var NcMediaFrameSchema = zod.z.enum([
23079
23108
  */
23080
23109
  var NcLinkedCameraModeSchema = zod.z.enum(["mosaic", "each"]);
23081
23110
  var NcMediaPolicySchema = zod.z.object({
23111
+ /**
23112
+ * The picture — see {@link NcMediaImageSchema}. Absent on a rule nobody has
23113
+ * saved since D897: `normalizeNcMediaPolicy` derives it from the legacy
23114
+ * triple below, at load and at every write, and the store keeps only this.
23115
+ */
23116
+ image: NcMediaImageSchema.optional(),
23117
+ /**
23118
+ * Draw the zone that FIRED the rule on the picture (`scene-boxes` / `clean`;
23119
+ * a `crop` never shows it). Valid only on a rule whose trigger is a zone —
23120
+ * `conditions.zones` or an occupancy zone — and refused on save otherwise.
23121
+ * Replaces `zoneCrop`.
23122
+ */
23123
+ showTriggerZone: zod.z.boolean().optional(),
23124
+ /** @deprecated D897 — accepted from an editor that predates `image`, folded into it on save. */
23082
23125
  attach: zod.z.enum([
23083
23126
  "best",
23084
23127
  "best-matching",
23085
23128
  "keyFrame",
23086
23129
  "none"
23087
- ]).default("best"),
23088
- /** What the still shows. Absent = `cropped` (the historical `best` shape). */
23130
+ ]).optional(),
23131
+ /** @deprecated D897 — accepted from an editor that predates `image`, folded into it on save. */
23089
23132
  frame: NcMediaFrameSchema.optional(),
23090
- /** Crop the attached still to the rule's condition-zone bbox (padded) —
23091
- * "show me the ZONE", not the whole scene or the subject crop. */
23133
+ /** @deprecated D897 — folded into `image: 'clean'` + `showTriggerZone` on save. */
23092
23134
  zoneCrop: zod.z.boolean().optional(),
23093
23135
  /**
23094
23136
  * Also attach a short GIF cut from the stream broker's clip ring around the
@@ -23273,7 +23315,9 @@ var NcRuleInputSchema = zod.z.object({
23273
23315
  * targets.
23274
23316
  */
23275
23317
  targetUsers: zod.z.array(zod.z.string()).optional(),
23276
- media: NcMediaPolicySchema.default({ attach: "best" }),
23318
+ /** Absent = the kind's default picture (`resolveNcMediaImage`): the subject crop for a
23319
+ * detection, the clean scene for a sensor or a sound. Set explicitly on save (D897). */
23320
+ media: NcMediaPolicySchema.default({}),
23277
23321
  throttle: NcThrottleSchema.default({
23278
23322
  cooldownSec: 60,
23279
23323
  scope: "rule-device"
@@ -24233,13 +24277,37 @@ var NcAlarmModeOpeningsSchema = zod.z.object({
24233
24277
  /** Covered devices whose state could not be read (D49): neither open nor closed. */
24234
24278
  unknown: zod.z.array(zod.z.number().int())
24235
24279
  });
24280
+ /**
24281
+ * One alarm INPUT — a (rule, device) pair — the operator bypassed until the
24282
+ * next disarm ("Bypass this input until disarm" on a trigger notification, or
24283
+ * `nc.bypassAlarmInput`). Reported so an armed alarm with a silenced input
24284
+ * never looks fully armed (D62: off must never look like broken).
24285
+ */
24286
+ var NcAlarmInputBypassViewSchema = zod.z.object({
24287
+ ruleId: zod.z.string(),
24288
+ /** The rule's current name (its frozen name when the rule is gone). */
24289
+ ruleName: zod.z.string(),
24290
+ /** The input: the sensor of the match, else its camera. */
24291
+ deviceId: zod.z.number().int(),
24292
+ /** The input's current name. */
24293
+ name: zod.z.string(),
24294
+ /** When it was bypassed (ms epoch). */
24295
+ since: zod.z.number(),
24296
+ /** Triggers from this input dropped since. */
24297
+ dropped: zod.z.number().int().min(0)
24298
+ });
24236
24299
  var NcAlarmLiveSchema = zod.z.object({
24237
24300
  state: AlarmStateSchema,
24238
24301
  /** The mode being armed into (exit delay) or held; null when disarmed. */
24239
24302
  targetMode: AlarmArmModeSchema.nullable(),
24240
24303
  availableModes: zod.z.array(AlarmArmModeSchema),
24241
24304
  openings: zod.z.array(NcAlarmModeOpeningsSchema),
24242
- exclusions: zod.z.array(NcAlarmExclusionViewSchema)
24305
+ exclusions: zod.z.array(NcAlarmExclusionViewSchema),
24306
+ /**
24307
+ * Inputs bypassed for the rest of this arm session; cleared on disarm.
24308
+ * Defaulted so an older hub answer still parses (as "none known").
24309
+ */
24310
+ bypassedInputs: zod.z.array(NcAlarmInputBypassViewSchema).default([])
24243
24311
  });
24244
24312
  var NcAlarmConfigSchema = zod.z.object({
24245
24313
  /**
@@ -27736,6 +27804,7 @@ function createSystemProxy(api) {
27736
27804
  deviceHistory: {
27737
27805
  listNodeSeries: (input) => dispatch("deviceHistory", "listNodeSeries", "query", input),
27738
27806
  queryNode: (input) => dispatch("deviceHistory", "queryNode", "query", input),
27807
+ queryMany: (input) => dispatch("deviceHistory", "queryMany", "query", input),
27739
27808
  declareSeries: (input) => dispatch("deviceHistory", "declareSeries", "mutation", input),
27740
27809
  record: (input) => dispatch("deviceHistory", "record", "mutation", input),
27741
27810
  recordBuckets: (input) => dispatch("deviceHistory", "recordBuckets", "mutation", input),