@camstack/addon-provider-onvif 1.2.83 → 1.2.85

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 (3) hide show
  1. package/dist/addon.js +129 -70
  2. package/dist/addon.mjs +129 -70
  3. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -15891,16 +15891,16 @@ DeviceType.AlarmPanel, method(object({
15891
15891
  code: string().min(1).optional()
15892
15892
  }), _void(), {
15893
15893
  kind: "mutation",
15894
- auth: "admin"
15894
+ auth: "protected"
15895
15895
  }), method(object({
15896
15896
  deviceId: number().int().nonnegative(),
15897
15897
  code: string().min(1).optional()
15898
15898
  }), _void(), {
15899
15899
  kind: "mutation",
15900
- auth: "admin"
15900
+ auth: "protected"
15901
15901
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
15902
15902
  kind: "mutation",
15903
- auth: "admin"
15903
+ auth: "protected"
15904
15904
  });
15905
15905
  /**
15906
15906
  * Shared geometry vocabulary for on-frame shape caps — privacy-mask,
@@ -23659,7 +23659,7 @@ DeviceType.Light, method(object({
23659
23659
  percentage: number().min(0).max(100)
23660
23660
  }), _void(), {
23661
23661
  kind: "mutation",
23662
- auth: "admin"
23662
+ auth: "protected"
23663
23663
  }), object({
23664
23664
  deviceId: number(),
23665
23665
  percentage: number().min(0).max(100),
@@ -23667,7 +23667,7 @@ DeviceType.Light, method(object({
23667
23667
  });
23668
23668
  DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _void(), {
23669
23669
  kind: "mutation",
23670
- auth: "admin"
23670
+ auth: "protected"
23671
23671
  });
23672
23672
  /**
23673
23673
  * camera-credentials — device-scoped cap exposing the camera's network
@@ -23826,50 +23826,50 @@ DeviceType.Thermostat, DeviceType.Climate, method(object({
23826
23826
  mode: HvacModeSchema
23827
23827
  }), _void(), {
23828
23828
  kind: "mutation",
23829
- auth: "admin"
23829
+ auth: "protected"
23830
23830
  }), method(object({
23831
23831
  deviceId: number().int().nonnegative(),
23832
23832
  fanMode: string().min(1)
23833
23833
  }), _void(), {
23834
23834
  kind: "mutation",
23835
- auth: "admin"
23835
+ auth: "protected"
23836
23836
  }), method(object({
23837
23837
  deviceId: number().int().nonnegative(),
23838
23838
  preset: string().min(1)
23839
23839
  }), _void(), {
23840
23840
  kind: "mutation",
23841
- auth: "admin"
23841
+ auth: "protected"
23842
23842
  }), method(object({
23843
23843
  deviceId: number().int().nonnegative(),
23844
23844
  target: number()
23845
23845
  }), _void(), {
23846
23846
  kind: "mutation",
23847
- auth: "admin"
23847
+ auth: "protected"
23848
23848
  }), method(object({
23849
23849
  deviceId: number().int().nonnegative(),
23850
23850
  targetLow: number(),
23851
23851
  targetHigh: number()
23852
23852
  }), _void(), {
23853
23853
  kind: "mutation",
23854
- auth: "admin"
23854
+ auth: "protected"
23855
23855
  }), method(object({
23856
23856
  deviceId: number().int().nonnegative(),
23857
23857
  targetHumidity: number().min(0).max(100)
23858
23858
  }), _void(), {
23859
23859
  kind: "mutation",
23860
- auth: "admin"
23860
+ auth: "protected"
23861
23861
  }), method(object({
23862
23862
  deviceId: number().int().nonnegative(),
23863
23863
  on: boolean()
23864
23864
  }), _void(), {
23865
23865
  kind: "mutation",
23866
- auth: "admin"
23866
+ auth: "protected"
23867
23867
  }), method(object({
23868
23868
  deviceId: number().int().nonnegative(),
23869
23869
  on: boolean()
23870
23870
  }), _void(), {
23871
23871
  kind: "mutation",
23872
- auth: "admin"
23872
+ auth: "protected"
23873
23873
  });
23874
23874
  /**
23875
23875
  * Color-light cap. Coexists with `switch` (on/off) and `brightness`
@@ -23944,7 +23944,7 @@ DeviceType.Light, method(object({
23944
23944
  color: ColorInputSchema
23945
23945
  }), _void(), {
23946
23946
  kind: "mutation",
23947
- auth: "admin"
23947
+ auth: "protected"
23948
23948
  }), object({
23949
23949
  deviceId: number(),
23950
23950
  mode: _enum([
@@ -24093,7 +24093,7 @@ DeviceType.Control, method(object({
24093
24093
  control: ControlSetValueInputSchema
24094
24094
  }), _void(), {
24095
24095
  kind: "mutation",
24096
- auth: "admin"
24096
+ auth: "protected"
24097
24097
  });
24098
24098
  object({
24099
24099
  /** Lifecycle state of the cover. */
@@ -24114,25 +24114,25 @@ object({
24114
24114
  });
24115
24115
  DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _void(), {
24116
24116
  kind: "mutation",
24117
- auth: "admin"
24117
+ auth: "protected"
24118
24118
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
24119
24119
  kind: "mutation",
24120
- auth: "admin"
24120
+ auth: "protected"
24121
24121
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
24122
24122
  kind: "mutation",
24123
- auth: "admin"
24123
+ auth: "protected"
24124
24124
  }), method(object({
24125
24125
  deviceId: number().int().nonnegative(),
24126
24126
  position: number().min(0).max(100)
24127
24127
  }), _void(), {
24128
24128
  kind: "mutation",
24129
- auth: "admin"
24129
+ auth: "protected"
24130
24130
  }), method(object({
24131
24131
  deviceId: number().int().nonnegative(),
24132
24132
  tiltPosition: number().min(0).max(100)
24133
24133
  }), _void(), {
24134
24134
  kind: "mutation",
24135
- auth: "admin"
24135
+ auth: "protected"
24136
24136
  });
24137
24137
  /**
24138
24138
  * Vendor-neutral day/night (IR-cut) control — the per-camera config cap
@@ -24337,6 +24337,59 @@ var IdentitySampleInfoSchema = object({
24337
24337
  deviceId: number().int().optional(),
24338
24338
  base64: string().optional()
24339
24339
  });
24340
+ /**
24341
+ * One enrolled sample, judged against the gallery it lives in.
24342
+ *
24343
+ * The gallery is the one input to recognition nobody re-reads: a sample
24344
+ * enrolled from the wrong face keeps voting forever, and because the matches it
24345
+ * pulls then look confident, nobody goes back. The 2026-09-08 audit found
24346
+ * exactly one such pair on this cluster — a sample scoring 0.61 against three
24347
+ * samples of ANOTHER person, enrolled from the same camera in the same minute,
24348
+ * where every other cross-identity pair sits under 0.50.
24349
+ */
24350
+ var IdentitySampleAuditRowSchema = object({
24351
+ sampleId: string(),
24352
+ enrolledAt: number().int(),
24353
+ deviceId: number().int().optional(),
24354
+ source: _enum(["detected", "photo"]),
24355
+ /** The enrolled crop's media key, so the panel can show the evidence. */
24356
+ mediaKey: string().optional(),
24357
+ /**
24358
+ * False = the sample is stamped with a DIFFERENT face model, and a cosine
24359
+ * across feature spaces is a well-formed float with no meaning. Every number
24360
+ * below then says nothing — it must read as "cannot say", never as an
24361
+ * accusation and never as a clean bill: this list ends in a Remove button.
24362
+ */
24363
+ comparable: boolean(),
24364
+ /** Mean cosine against this person's other samples. Null when there are none
24365
+ * to compare with — never 0, which would read as "opposite". */
24366
+ selfMean: number().nullable(),
24367
+ /** The other person this sample looks most like, when it looks like one.
24368
+ * This is the half that convicts: not looking like yourself can be a hard
24369
+ * angle; looking like someone the gallery can NAME is a mis-enrolment. */
24370
+ bestForeign: object({
24371
+ identityId: string(),
24372
+ name: string(),
24373
+ score: number()
24374
+ }).optional(),
24375
+ /** 0 = nothing to say. Higher = look at this one sooner. */
24376
+ suspicion: number()
24377
+ });
24378
+ var IdentitySampleAuditSchema = object({
24379
+ identityId: string(),
24380
+ name: string(),
24381
+ /** The cluster face model every comparison was made in. */
24382
+ modelId: string(),
24383
+ totalSamples: number().int(),
24384
+ comparableSamples: number().int(),
24385
+ flagged: number().int(),
24386
+ /** The bar `flagged` counts against, so the panel states the RULE and not
24387
+ * only its current result. */
24388
+ flagThreshold: number(),
24389
+ /** Worst first. A row with nothing to say still appears, at the bottom: the
24390
+ * operator asked to see the gallery, not only its accusations. */
24391
+ rows: array(IdentitySampleAuditRowSchema).readonly()
24392
+ });
24340
24393
  var FaceInfoSchema = object({
24341
24394
  faceId: string(),
24342
24395
  deviceId: number().int(),
@@ -24488,7 +24541,7 @@ includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly
24488
24541
  }), method(object({ id: string() }), _void(), {
24489
24542
  kind: "mutation",
24490
24543
  auth: "admin"
24491
- }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({
24544
+ }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({ identityId: string().min(1) }), IdentitySampleAuditSchema, { auth: "admin" }), method(object({
24492
24545
  identityId: string(),
24493
24546
  sampleId: string()
24494
24547
  }), _void(), {
@@ -24674,25 +24727,25 @@ DeviceType.Fan, method(object({
24674
24727
  percentage: number().min(0).max(100)
24675
24728
  }), _void(), {
24676
24729
  kind: "mutation",
24677
- auth: "admin"
24730
+ auth: "protected"
24678
24731
  }), method(object({
24679
24732
  deviceId: number().int().nonnegative(),
24680
24733
  preset: string().min(1)
24681
24734
  }), _void(), {
24682
24735
  kind: "mutation",
24683
- auth: "admin"
24736
+ auth: "protected"
24684
24737
  }), method(object({
24685
24738
  deviceId: number().int().nonnegative(),
24686
24739
  direction: FanDirectionSchema
24687
24740
  }), _void(), {
24688
24741
  kind: "mutation",
24689
- auth: "admin"
24742
+ auth: "protected"
24690
24743
  }), method(object({
24691
24744
  deviceId: number().int().nonnegative(),
24692
24745
  oscillating: boolean()
24693
24746
  }), _void(), {
24694
24747
  kind: "mutation",
24695
- auth: "admin"
24748
+ auth: "protected"
24696
24749
  });
24697
24750
  /**
24698
24751
  * Per-device feature/identity probe slice. Holds the runtime-resolved
@@ -24795,19 +24848,19 @@ DeviceType.Humidifier, method(object({
24795
24848
  on: boolean()
24796
24849
  }), _void(), {
24797
24850
  kind: "mutation",
24798
- auth: "admin"
24851
+ auth: "protected"
24799
24852
  }), method(object({
24800
24853
  deviceId: number().int().nonnegative(),
24801
24854
  humidity: number().min(0).max(100)
24802
24855
  }), _void(), {
24803
24856
  kind: "mutation",
24804
- auth: "admin"
24857
+ auth: "protected"
24805
24858
  }), method(object({
24806
24859
  deviceId: number().int().nonnegative(),
24807
24860
  mode: string().min(1)
24808
24861
  }), _void(), {
24809
24862
  kind: "mutation",
24810
- auth: "admin"
24863
+ auth: "protected"
24811
24864
  });
24812
24865
  object({
24813
24866
  /** Current relative humidity, 0..100. */
@@ -25269,13 +25322,13 @@ object({
25269
25322
  });
25270
25323
  DeviceType.LawnMower, method(object({ deviceId: number().int().nonnegative() }), _void(), {
25271
25324
  kind: "mutation",
25272
- auth: "admin"
25325
+ auth: "protected"
25273
25326
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25274
25327
  kind: "mutation",
25275
- auth: "admin"
25328
+ auth: "protected"
25276
25329
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25277
25330
  kind: "mutation",
25278
- auth: "admin"
25331
+ auth: "protected"
25279
25332
  });
25280
25333
  /**
25281
25334
  * local-network — hub-only singleton.
@@ -25535,16 +25588,16 @@ DeviceType.Lock, method(object({
25535
25588
  code: string().min(1).optional()
25536
25589
  }), _void(), {
25537
25590
  kind: "mutation",
25538
- auth: "admin"
25591
+ auth: "protected"
25539
25592
  }), method(object({
25540
25593
  deviceId: number().int().nonnegative(),
25541
25594
  code: string().min(1).optional()
25542
25595
  }), _void(), {
25543
25596
  kind: "mutation",
25544
- auth: "admin"
25597
+ auth: "protected"
25545
25598
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25546
25599
  kind: "mutation",
25547
- auth: "admin"
25600
+ auth: "protected"
25548
25601
  });
25549
25602
  /**
25550
25603
  * Media-player cap. Models HA `media_player.*` (Sonos, Chromecast,
@@ -25618,55 +25671,55 @@ object({
25618
25671
  });
25619
25672
  DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }), _void(), {
25620
25673
  kind: "mutation",
25621
- auth: "admin"
25674
+ auth: "protected"
25622
25675
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25623
25676
  kind: "mutation",
25624
- auth: "admin"
25677
+ auth: "protected"
25625
25678
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25626
25679
  kind: "mutation",
25627
- auth: "admin"
25680
+ auth: "protected"
25628
25681
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25629
25682
  kind: "mutation",
25630
- auth: "admin"
25683
+ auth: "protected"
25631
25684
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25632
25685
  kind: "mutation",
25633
- auth: "admin"
25686
+ auth: "protected"
25634
25687
  }), method(object({
25635
25688
  deviceId: number().int().nonnegative(),
25636
25689
  positionMs: number().int().nonnegative()
25637
25690
  }), _void(), {
25638
25691
  kind: "mutation",
25639
- auth: "admin"
25692
+ auth: "protected"
25640
25693
  }), method(object({
25641
25694
  deviceId: number().int().nonnegative(),
25642
25695
  volumeLevel: number().min(0).max(100)
25643
25696
  }), _void(), {
25644
25697
  kind: "mutation",
25645
- auth: "admin"
25698
+ auth: "protected"
25646
25699
  }), method(object({
25647
25700
  deviceId: number().int().nonnegative(),
25648
25701
  muted: boolean()
25649
25702
  }), _void(), {
25650
25703
  kind: "mutation",
25651
- auth: "admin"
25704
+ auth: "protected"
25652
25705
  }), method(object({
25653
25706
  deviceId: number().int().nonnegative(),
25654
25707
  shuffle: boolean()
25655
25708
  }), _void(), {
25656
25709
  kind: "mutation",
25657
- auth: "admin"
25710
+ auth: "protected"
25658
25711
  }), method(object({
25659
25712
  deviceId: number().int().nonnegative(),
25660
25713
  repeat: MediaPlayerRepeatSchema
25661
25714
  }), _void(), {
25662
25715
  kind: "mutation",
25663
- auth: "admin"
25716
+ auth: "protected"
25664
25717
  }), method(object({
25665
25718
  deviceId: number().int().nonnegative(),
25666
25719
  source: string().min(1)
25667
25720
  }), _void(), {
25668
25721
  kind: "mutation",
25669
- auth: "admin"
25722
+ auth: "protected"
25670
25723
  }), method(object({
25671
25724
  deviceId: number().int().nonnegative(),
25672
25725
  /** Media identifier / URL. */
@@ -25676,7 +25729,7 @@ DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }
25676
25729
  mediaType: string().min(1)
25677
25730
  }), _void(), {
25678
25731
  kind: "mutation",
25679
- auth: "admin"
25732
+ auth: "protected"
25680
25733
  });
25681
25734
  /**
25682
25735
  * mesh-network — collection cap for mesh-VPN providers.
@@ -26842,49 +26895,49 @@ DeviceType.PetFeeder, method(object({
26842
26895
  hopper2: gramsPortion.optional()
26843
26896
  }), _void(), {
26844
26897
  kind: "mutation",
26845
- auth: "admin"
26898
+ auth: "protected"
26846
26899
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26847
26900
  kind: "mutation",
26848
- auth: "admin"
26901
+ auth: "protected"
26849
26902
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26850
26903
  kind: "mutation",
26851
- auth: "admin"
26904
+ auth: "protected"
26852
26905
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26853
26906
  kind: "mutation",
26854
- auth: "admin"
26907
+ auth: "protected"
26855
26908
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26856
26909
  kind: "mutation",
26857
- auth: "admin"
26910
+ auth: "protected"
26858
26911
  }), method(object({
26859
26912
  deviceId: number().int().nonnegative(),
26860
26913
  soundId: number().int().nonnegative()
26861
26914
  }), _void(), {
26862
26915
  kind: "mutation",
26863
- auth: "admin"
26916
+ auth: "protected"
26864
26917
  }), method(object({
26865
26918
  deviceId: number().int().nonnegative(),
26866
26919
  on: boolean()
26867
26920
  }), _void(), {
26868
26921
  kind: "mutation",
26869
- auth: "admin"
26922
+ auth: "protected"
26870
26923
  }), method(object({
26871
26924
  deviceId: number().int().nonnegative(),
26872
26925
  on: boolean()
26873
26926
  }), _void(), {
26874
26927
  kind: "mutation",
26875
- auth: "admin"
26928
+ auth: "protected"
26876
26929
  }), method(object({
26877
26930
  deviceId: number().int().nonnegative(),
26878
26931
  on: boolean()
26879
26932
  }), _void(), {
26880
26933
  kind: "mutation",
26881
- auth: "admin"
26934
+ auth: "protected"
26882
26935
  }), method(object({
26883
26936
  deviceId: number().int().nonnegative(),
26884
26937
  level: number().int().nonnegative()
26885
26938
  }), _void(), {
26886
26939
  kind: "mutation",
26887
- auth: "admin"
26940
+ auth: "protected"
26888
26941
  });
26889
26942
  var VehicleSchema = object({
26890
26943
  id: string(),
@@ -28713,7 +28766,7 @@ DeviceType.Switch, DeviceType.Siren, DeviceType.Light, method(object({
28713
28766
  on: boolean()
28714
28767
  }), _void(), {
28715
28768
  kind: "mutation",
28716
- auth: "admin"
28769
+ auth: "protected"
28717
28770
  }), object({
28718
28771
  deviceId: number(),
28719
28772
  on: boolean(),
@@ -29570,25 +29623,25 @@ object({
29570
29623
  });
29571
29624
  DeviceType.Vacuum, method(object({ deviceId: number().int().nonnegative() }), _void(), {
29572
29625
  kind: "mutation",
29573
- auth: "admin"
29626
+ auth: "protected"
29574
29627
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29575
29628
  kind: "mutation",
29576
- auth: "admin"
29629
+ auth: "protected"
29577
29630
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29578
29631
  kind: "mutation",
29579
- auth: "admin"
29632
+ auth: "protected"
29580
29633
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29581
29634
  kind: "mutation",
29582
- auth: "admin"
29635
+ auth: "protected"
29583
29636
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29584
29637
  kind: "mutation",
29585
- auth: "admin"
29638
+ auth: "protected"
29586
29639
  }), method(object({
29587
29640
  deviceId: number().int().nonnegative(),
29588
29641
  speed: string().min(1)
29589
29642
  }), _void(), {
29590
29643
  kind: "mutation",
29591
- auth: "admin"
29644
+ auth: "protected"
29592
29645
  });
29593
29646
  object({
29594
29647
  /** Lifecycle state of the valve. */
@@ -29607,19 +29660,19 @@ object({
29607
29660
  });
29608
29661
  DeviceType.Valve, method(object({ deviceId: number().int().nonnegative() }), _void(), {
29609
29662
  kind: "mutation",
29610
- auth: "admin"
29663
+ auth: "protected"
29611
29664
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29612
29665
  kind: "mutation",
29613
- auth: "admin"
29666
+ auth: "protected"
29614
29667
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29615
29668
  kind: "mutation",
29616
- auth: "admin"
29669
+ auth: "protected"
29617
29670
  }), method(object({
29618
29671
  deviceId: number().int().nonnegative(),
29619
29672
  position: number().min(0).max(100)
29620
29673
  }), _void(), {
29621
29674
  kind: "mutation",
29622
- auth: "admin"
29675
+ auth: "protected"
29623
29676
  });
29624
29677
  object({
29625
29678
  detected: boolean(),
@@ -29653,19 +29706,19 @@ DeviceType.WaterHeater, method(object({
29653
29706
  temp: number().finite()
29654
29707
  }), _void(), {
29655
29708
  kind: "mutation",
29656
- auth: "admin"
29709
+ auth: "protected"
29657
29710
  }), method(object({
29658
29711
  deviceId: number().int().nonnegative(),
29659
29712
  mode: string().min(1)
29660
29713
  }), _void(), {
29661
29714
  kind: "mutation",
29662
- auth: "admin"
29715
+ auth: "protected"
29663
29716
  }), method(object({
29664
29717
  deviceId: number().int().nonnegative(),
29665
29718
  on: boolean()
29666
29719
  }), _void(), {
29667
29720
  kind: "mutation",
29668
- auth: "admin"
29721
+ auth: "protected"
29669
29722
  });
29670
29723
  object({
29671
29724
  /** Verbatim HA condition state (`sunny`, `cloudy`, `rainy`, …). Null
@@ -32583,6 +32636,12 @@ Object.freeze({
32583
32636
  addonId: null,
32584
32637
  access: "create"
32585
32638
  },
32639
+ "faceGallery.auditIdentitySamples": {
32640
+ capName: "face-gallery",
32641
+ capScope: "system",
32642
+ addonId: null,
32643
+ access: "view"
32644
+ },
32586
32645
  "faceGallery.createIdentity": {
32587
32646
  capName: "face-gallery",
32588
32647
  capScope: "system",
package/dist/addon.mjs CHANGED
@@ -15892,16 +15892,16 @@ DeviceType.AlarmPanel, method(object({
15892
15892
  code: string().min(1).optional()
15893
15893
  }), _void(), {
15894
15894
  kind: "mutation",
15895
- auth: "admin"
15895
+ auth: "protected"
15896
15896
  }), method(object({
15897
15897
  deviceId: number().int().nonnegative(),
15898
15898
  code: string().min(1).optional()
15899
15899
  }), _void(), {
15900
15900
  kind: "mutation",
15901
- auth: "admin"
15901
+ auth: "protected"
15902
15902
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
15903
15903
  kind: "mutation",
15904
- auth: "admin"
15904
+ auth: "protected"
15905
15905
  });
15906
15906
  /**
15907
15907
  * Shared geometry vocabulary for on-frame shape caps — privacy-mask,
@@ -23660,7 +23660,7 @@ DeviceType.Light, method(object({
23660
23660
  percentage: number().min(0).max(100)
23661
23661
  }), _void(), {
23662
23662
  kind: "mutation",
23663
- auth: "admin"
23663
+ auth: "protected"
23664
23664
  }), object({
23665
23665
  deviceId: number(),
23666
23666
  percentage: number().min(0).max(100),
@@ -23668,7 +23668,7 @@ DeviceType.Light, method(object({
23668
23668
  });
23669
23669
  DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _void(), {
23670
23670
  kind: "mutation",
23671
- auth: "admin"
23671
+ auth: "protected"
23672
23672
  });
23673
23673
  /**
23674
23674
  * camera-credentials — device-scoped cap exposing the camera's network
@@ -23827,50 +23827,50 @@ DeviceType.Thermostat, DeviceType.Climate, method(object({
23827
23827
  mode: HvacModeSchema
23828
23828
  }), _void(), {
23829
23829
  kind: "mutation",
23830
- auth: "admin"
23830
+ auth: "protected"
23831
23831
  }), method(object({
23832
23832
  deviceId: number().int().nonnegative(),
23833
23833
  fanMode: string().min(1)
23834
23834
  }), _void(), {
23835
23835
  kind: "mutation",
23836
- auth: "admin"
23836
+ auth: "protected"
23837
23837
  }), method(object({
23838
23838
  deviceId: number().int().nonnegative(),
23839
23839
  preset: string().min(1)
23840
23840
  }), _void(), {
23841
23841
  kind: "mutation",
23842
- auth: "admin"
23842
+ auth: "protected"
23843
23843
  }), method(object({
23844
23844
  deviceId: number().int().nonnegative(),
23845
23845
  target: number()
23846
23846
  }), _void(), {
23847
23847
  kind: "mutation",
23848
- auth: "admin"
23848
+ auth: "protected"
23849
23849
  }), method(object({
23850
23850
  deviceId: number().int().nonnegative(),
23851
23851
  targetLow: number(),
23852
23852
  targetHigh: number()
23853
23853
  }), _void(), {
23854
23854
  kind: "mutation",
23855
- auth: "admin"
23855
+ auth: "protected"
23856
23856
  }), method(object({
23857
23857
  deviceId: number().int().nonnegative(),
23858
23858
  targetHumidity: number().min(0).max(100)
23859
23859
  }), _void(), {
23860
23860
  kind: "mutation",
23861
- auth: "admin"
23861
+ auth: "protected"
23862
23862
  }), method(object({
23863
23863
  deviceId: number().int().nonnegative(),
23864
23864
  on: boolean()
23865
23865
  }), _void(), {
23866
23866
  kind: "mutation",
23867
- auth: "admin"
23867
+ auth: "protected"
23868
23868
  }), method(object({
23869
23869
  deviceId: number().int().nonnegative(),
23870
23870
  on: boolean()
23871
23871
  }), _void(), {
23872
23872
  kind: "mutation",
23873
- auth: "admin"
23873
+ auth: "protected"
23874
23874
  });
23875
23875
  /**
23876
23876
  * Color-light cap. Coexists with `switch` (on/off) and `brightness`
@@ -23945,7 +23945,7 @@ DeviceType.Light, method(object({
23945
23945
  color: ColorInputSchema
23946
23946
  }), _void(), {
23947
23947
  kind: "mutation",
23948
- auth: "admin"
23948
+ auth: "protected"
23949
23949
  }), object({
23950
23950
  deviceId: number(),
23951
23951
  mode: _enum([
@@ -24094,7 +24094,7 @@ DeviceType.Control, method(object({
24094
24094
  control: ControlSetValueInputSchema
24095
24095
  }), _void(), {
24096
24096
  kind: "mutation",
24097
- auth: "admin"
24097
+ auth: "protected"
24098
24098
  });
24099
24099
  object({
24100
24100
  /** Lifecycle state of the cover. */
@@ -24115,25 +24115,25 @@ object({
24115
24115
  });
24116
24116
  DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _void(), {
24117
24117
  kind: "mutation",
24118
- auth: "admin"
24118
+ auth: "protected"
24119
24119
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
24120
24120
  kind: "mutation",
24121
- auth: "admin"
24121
+ auth: "protected"
24122
24122
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
24123
24123
  kind: "mutation",
24124
- auth: "admin"
24124
+ auth: "protected"
24125
24125
  }), method(object({
24126
24126
  deviceId: number().int().nonnegative(),
24127
24127
  position: number().min(0).max(100)
24128
24128
  }), _void(), {
24129
24129
  kind: "mutation",
24130
- auth: "admin"
24130
+ auth: "protected"
24131
24131
  }), method(object({
24132
24132
  deviceId: number().int().nonnegative(),
24133
24133
  tiltPosition: number().min(0).max(100)
24134
24134
  }), _void(), {
24135
24135
  kind: "mutation",
24136
- auth: "admin"
24136
+ auth: "protected"
24137
24137
  });
24138
24138
  /**
24139
24139
  * Vendor-neutral day/night (IR-cut) control — the per-camera config cap
@@ -24338,6 +24338,59 @@ var IdentitySampleInfoSchema = object({
24338
24338
  deviceId: number().int().optional(),
24339
24339
  base64: string().optional()
24340
24340
  });
24341
+ /**
24342
+ * One enrolled sample, judged against the gallery it lives in.
24343
+ *
24344
+ * The gallery is the one input to recognition nobody re-reads: a sample
24345
+ * enrolled from the wrong face keeps voting forever, and because the matches it
24346
+ * pulls then look confident, nobody goes back. The 2026-09-08 audit found
24347
+ * exactly one such pair on this cluster — a sample scoring 0.61 against three
24348
+ * samples of ANOTHER person, enrolled from the same camera in the same minute,
24349
+ * where every other cross-identity pair sits under 0.50.
24350
+ */
24351
+ var IdentitySampleAuditRowSchema = object({
24352
+ sampleId: string(),
24353
+ enrolledAt: number().int(),
24354
+ deviceId: number().int().optional(),
24355
+ source: _enum(["detected", "photo"]),
24356
+ /** The enrolled crop's media key, so the panel can show the evidence. */
24357
+ mediaKey: string().optional(),
24358
+ /**
24359
+ * False = the sample is stamped with a DIFFERENT face model, and a cosine
24360
+ * across feature spaces is a well-formed float with no meaning. Every number
24361
+ * below then says nothing — it must read as "cannot say", never as an
24362
+ * accusation and never as a clean bill: this list ends in a Remove button.
24363
+ */
24364
+ comparable: boolean(),
24365
+ /** Mean cosine against this person's other samples. Null when there are none
24366
+ * to compare with — never 0, which would read as "opposite". */
24367
+ selfMean: number().nullable(),
24368
+ /** The other person this sample looks most like, when it looks like one.
24369
+ * This is the half that convicts: not looking like yourself can be a hard
24370
+ * angle; looking like someone the gallery can NAME is a mis-enrolment. */
24371
+ bestForeign: object({
24372
+ identityId: string(),
24373
+ name: string(),
24374
+ score: number()
24375
+ }).optional(),
24376
+ /** 0 = nothing to say. Higher = look at this one sooner. */
24377
+ suspicion: number()
24378
+ });
24379
+ var IdentitySampleAuditSchema = object({
24380
+ identityId: string(),
24381
+ name: string(),
24382
+ /** The cluster face model every comparison was made in. */
24383
+ modelId: string(),
24384
+ totalSamples: number().int(),
24385
+ comparableSamples: number().int(),
24386
+ flagged: number().int(),
24387
+ /** The bar `flagged` counts against, so the panel states the RULE and not
24388
+ * only its current result. */
24389
+ flagThreshold: number(),
24390
+ /** Worst first. A row with nothing to say still appears, at the bottom: the
24391
+ * operator asked to see the gallery, not only its accusations. */
24392
+ rows: array(IdentitySampleAuditRowSchema).readonly()
24393
+ });
24341
24394
  var FaceInfoSchema = object({
24342
24395
  faceId: string(),
24343
24396
  deviceId: number().int(),
@@ -24489,7 +24542,7 @@ includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly
24489
24542
  }), method(object({ id: string() }), _void(), {
24490
24543
  kind: "mutation",
24491
24544
  auth: "admin"
24492
- }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({
24545
+ }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({ identityId: string().min(1) }), IdentitySampleAuditSchema, { auth: "admin" }), method(object({
24493
24546
  identityId: string(),
24494
24547
  sampleId: string()
24495
24548
  }), _void(), {
@@ -24675,25 +24728,25 @@ DeviceType.Fan, method(object({
24675
24728
  percentage: number().min(0).max(100)
24676
24729
  }), _void(), {
24677
24730
  kind: "mutation",
24678
- auth: "admin"
24731
+ auth: "protected"
24679
24732
  }), method(object({
24680
24733
  deviceId: number().int().nonnegative(),
24681
24734
  preset: string().min(1)
24682
24735
  }), _void(), {
24683
24736
  kind: "mutation",
24684
- auth: "admin"
24737
+ auth: "protected"
24685
24738
  }), method(object({
24686
24739
  deviceId: number().int().nonnegative(),
24687
24740
  direction: FanDirectionSchema
24688
24741
  }), _void(), {
24689
24742
  kind: "mutation",
24690
- auth: "admin"
24743
+ auth: "protected"
24691
24744
  }), method(object({
24692
24745
  deviceId: number().int().nonnegative(),
24693
24746
  oscillating: boolean()
24694
24747
  }), _void(), {
24695
24748
  kind: "mutation",
24696
- auth: "admin"
24749
+ auth: "protected"
24697
24750
  });
24698
24751
  /**
24699
24752
  * Per-device feature/identity probe slice. Holds the runtime-resolved
@@ -24796,19 +24849,19 @@ DeviceType.Humidifier, method(object({
24796
24849
  on: boolean()
24797
24850
  }), _void(), {
24798
24851
  kind: "mutation",
24799
- auth: "admin"
24852
+ auth: "protected"
24800
24853
  }), method(object({
24801
24854
  deviceId: number().int().nonnegative(),
24802
24855
  humidity: number().min(0).max(100)
24803
24856
  }), _void(), {
24804
24857
  kind: "mutation",
24805
- auth: "admin"
24858
+ auth: "protected"
24806
24859
  }), method(object({
24807
24860
  deviceId: number().int().nonnegative(),
24808
24861
  mode: string().min(1)
24809
24862
  }), _void(), {
24810
24863
  kind: "mutation",
24811
- auth: "admin"
24864
+ auth: "protected"
24812
24865
  });
24813
24866
  object({
24814
24867
  /** Current relative humidity, 0..100. */
@@ -25270,13 +25323,13 @@ object({
25270
25323
  });
25271
25324
  DeviceType.LawnMower, method(object({ deviceId: number().int().nonnegative() }), _void(), {
25272
25325
  kind: "mutation",
25273
- auth: "admin"
25326
+ auth: "protected"
25274
25327
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25275
25328
  kind: "mutation",
25276
- auth: "admin"
25329
+ auth: "protected"
25277
25330
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25278
25331
  kind: "mutation",
25279
- auth: "admin"
25332
+ auth: "protected"
25280
25333
  });
25281
25334
  /**
25282
25335
  * local-network — hub-only singleton.
@@ -25536,16 +25589,16 @@ DeviceType.Lock, method(object({
25536
25589
  code: string().min(1).optional()
25537
25590
  }), _void(), {
25538
25591
  kind: "mutation",
25539
- auth: "admin"
25592
+ auth: "protected"
25540
25593
  }), method(object({
25541
25594
  deviceId: number().int().nonnegative(),
25542
25595
  code: string().min(1).optional()
25543
25596
  }), _void(), {
25544
25597
  kind: "mutation",
25545
- auth: "admin"
25598
+ auth: "protected"
25546
25599
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25547
25600
  kind: "mutation",
25548
- auth: "admin"
25601
+ auth: "protected"
25549
25602
  });
25550
25603
  /**
25551
25604
  * Media-player cap. Models HA `media_player.*` (Sonos, Chromecast,
@@ -25619,55 +25672,55 @@ object({
25619
25672
  });
25620
25673
  DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }), _void(), {
25621
25674
  kind: "mutation",
25622
- auth: "admin"
25675
+ auth: "protected"
25623
25676
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25624
25677
  kind: "mutation",
25625
- auth: "admin"
25678
+ auth: "protected"
25626
25679
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25627
25680
  kind: "mutation",
25628
- auth: "admin"
25681
+ auth: "protected"
25629
25682
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25630
25683
  kind: "mutation",
25631
- auth: "admin"
25684
+ auth: "protected"
25632
25685
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25633
25686
  kind: "mutation",
25634
- auth: "admin"
25687
+ auth: "protected"
25635
25688
  }), method(object({
25636
25689
  deviceId: number().int().nonnegative(),
25637
25690
  positionMs: number().int().nonnegative()
25638
25691
  }), _void(), {
25639
25692
  kind: "mutation",
25640
- auth: "admin"
25693
+ auth: "protected"
25641
25694
  }), method(object({
25642
25695
  deviceId: number().int().nonnegative(),
25643
25696
  volumeLevel: number().min(0).max(100)
25644
25697
  }), _void(), {
25645
25698
  kind: "mutation",
25646
- auth: "admin"
25699
+ auth: "protected"
25647
25700
  }), method(object({
25648
25701
  deviceId: number().int().nonnegative(),
25649
25702
  muted: boolean()
25650
25703
  }), _void(), {
25651
25704
  kind: "mutation",
25652
- auth: "admin"
25705
+ auth: "protected"
25653
25706
  }), method(object({
25654
25707
  deviceId: number().int().nonnegative(),
25655
25708
  shuffle: boolean()
25656
25709
  }), _void(), {
25657
25710
  kind: "mutation",
25658
- auth: "admin"
25711
+ auth: "protected"
25659
25712
  }), method(object({
25660
25713
  deviceId: number().int().nonnegative(),
25661
25714
  repeat: MediaPlayerRepeatSchema
25662
25715
  }), _void(), {
25663
25716
  kind: "mutation",
25664
- auth: "admin"
25717
+ auth: "protected"
25665
25718
  }), method(object({
25666
25719
  deviceId: number().int().nonnegative(),
25667
25720
  source: string().min(1)
25668
25721
  }), _void(), {
25669
25722
  kind: "mutation",
25670
- auth: "admin"
25723
+ auth: "protected"
25671
25724
  }), method(object({
25672
25725
  deviceId: number().int().nonnegative(),
25673
25726
  /** Media identifier / URL. */
@@ -25677,7 +25730,7 @@ DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }
25677
25730
  mediaType: string().min(1)
25678
25731
  }), _void(), {
25679
25732
  kind: "mutation",
25680
- auth: "admin"
25733
+ auth: "protected"
25681
25734
  });
25682
25735
  /**
25683
25736
  * mesh-network — collection cap for mesh-VPN providers.
@@ -26843,49 +26896,49 @@ DeviceType.PetFeeder, method(object({
26843
26896
  hopper2: gramsPortion.optional()
26844
26897
  }), _void(), {
26845
26898
  kind: "mutation",
26846
- auth: "admin"
26899
+ auth: "protected"
26847
26900
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26848
26901
  kind: "mutation",
26849
- auth: "admin"
26902
+ auth: "protected"
26850
26903
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26851
26904
  kind: "mutation",
26852
- auth: "admin"
26905
+ auth: "protected"
26853
26906
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26854
26907
  kind: "mutation",
26855
- auth: "admin"
26908
+ auth: "protected"
26856
26909
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26857
26910
  kind: "mutation",
26858
- auth: "admin"
26911
+ auth: "protected"
26859
26912
  }), method(object({
26860
26913
  deviceId: number().int().nonnegative(),
26861
26914
  soundId: number().int().nonnegative()
26862
26915
  }), _void(), {
26863
26916
  kind: "mutation",
26864
- auth: "admin"
26917
+ auth: "protected"
26865
26918
  }), method(object({
26866
26919
  deviceId: number().int().nonnegative(),
26867
26920
  on: boolean()
26868
26921
  }), _void(), {
26869
26922
  kind: "mutation",
26870
- auth: "admin"
26923
+ auth: "protected"
26871
26924
  }), method(object({
26872
26925
  deviceId: number().int().nonnegative(),
26873
26926
  on: boolean()
26874
26927
  }), _void(), {
26875
26928
  kind: "mutation",
26876
- auth: "admin"
26929
+ auth: "protected"
26877
26930
  }), method(object({
26878
26931
  deviceId: number().int().nonnegative(),
26879
26932
  on: boolean()
26880
26933
  }), _void(), {
26881
26934
  kind: "mutation",
26882
- auth: "admin"
26935
+ auth: "protected"
26883
26936
  }), method(object({
26884
26937
  deviceId: number().int().nonnegative(),
26885
26938
  level: number().int().nonnegative()
26886
26939
  }), _void(), {
26887
26940
  kind: "mutation",
26888
- auth: "admin"
26941
+ auth: "protected"
26889
26942
  });
26890
26943
  var VehicleSchema = object({
26891
26944
  id: string(),
@@ -28714,7 +28767,7 @@ DeviceType.Switch, DeviceType.Siren, DeviceType.Light, method(object({
28714
28767
  on: boolean()
28715
28768
  }), _void(), {
28716
28769
  kind: "mutation",
28717
- auth: "admin"
28770
+ auth: "protected"
28718
28771
  }), object({
28719
28772
  deviceId: number(),
28720
28773
  on: boolean(),
@@ -29571,25 +29624,25 @@ object({
29571
29624
  });
29572
29625
  DeviceType.Vacuum, method(object({ deviceId: number().int().nonnegative() }), _void(), {
29573
29626
  kind: "mutation",
29574
- auth: "admin"
29627
+ auth: "protected"
29575
29628
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29576
29629
  kind: "mutation",
29577
- auth: "admin"
29630
+ auth: "protected"
29578
29631
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29579
29632
  kind: "mutation",
29580
- auth: "admin"
29633
+ auth: "protected"
29581
29634
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29582
29635
  kind: "mutation",
29583
- auth: "admin"
29636
+ auth: "protected"
29584
29637
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29585
29638
  kind: "mutation",
29586
- auth: "admin"
29639
+ auth: "protected"
29587
29640
  }), method(object({
29588
29641
  deviceId: number().int().nonnegative(),
29589
29642
  speed: string().min(1)
29590
29643
  }), _void(), {
29591
29644
  kind: "mutation",
29592
- auth: "admin"
29645
+ auth: "protected"
29593
29646
  });
29594
29647
  object({
29595
29648
  /** Lifecycle state of the valve. */
@@ -29608,19 +29661,19 @@ object({
29608
29661
  });
29609
29662
  DeviceType.Valve, method(object({ deviceId: number().int().nonnegative() }), _void(), {
29610
29663
  kind: "mutation",
29611
- auth: "admin"
29664
+ auth: "protected"
29612
29665
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29613
29666
  kind: "mutation",
29614
- auth: "admin"
29667
+ auth: "protected"
29615
29668
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29616
29669
  kind: "mutation",
29617
- auth: "admin"
29670
+ auth: "protected"
29618
29671
  }), method(object({
29619
29672
  deviceId: number().int().nonnegative(),
29620
29673
  position: number().min(0).max(100)
29621
29674
  }), _void(), {
29622
29675
  kind: "mutation",
29623
- auth: "admin"
29676
+ auth: "protected"
29624
29677
  });
29625
29678
  object({
29626
29679
  detected: boolean(),
@@ -29654,19 +29707,19 @@ DeviceType.WaterHeater, method(object({
29654
29707
  temp: number().finite()
29655
29708
  }), _void(), {
29656
29709
  kind: "mutation",
29657
- auth: "admin"
29710
+ auth: "protected"
29658
29711
  }), method(object({
29659
29712
  deviceId: number().int().nonnegative(),
29660
29713
  mode: string().min(1)
29661
29714
  }), _void(), {
29662
29715
  kind: "mutation",
29663
- auth: "admin"
29716
+ auth: "protected"
29664
29717
  }), method(object({
29665
29718
  deviceId: number().int().nonnegative(),
29666
29719
  on: boolean()
29667
29720
  }), _void(), {
29668
29721
  kind: "mutation",
29669
- auth: "admin"
29722
+ auth: "protected"
29670
29723
  });
29671
29724
  object({
29672
29725
  /** Verbatim HA condition state (`sunny`, `cloudy`, `rainy`, …). Null
@@ -32584,6 +32637,12 @@ Object.freeze({
32584
32637
  addonId: null,
32585
32638
  access: "create"
32586
32639
  },
32640
+ "faceGallery.auditIdentitySamples": {
32641
+ capName: "face-gallery",
32642
+ capScope: "system",
32643
+ addonId: null,
32644
+ access: "view"
32645
+ },
32587
32646
  "faceGallery.createIdentity": {
32588
32647
  capName: "face-gallery",
32589
32648
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-onvif",
3
- "version": "1.2.83",
3
+ "version": "1.2.85",
4
4
  "description": "ONVIF camera device provider addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",