@camstack/addon-smtp-nodemailer 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.
@@ -15832,16 +15832,16 @@ DeviceType.AlarmPanel, method(object({
15832
15832
  code: string().min(1).optional()
15833
15833
  }), _void(), {
15834
15834
  kind: "mutation",
15835
- auth: "admin"
15835
+ auth: "protected"
15836
15836
  }), method(object({
15837
15837
  deviceId: number().int().nonnegative(),
15838
15838
  code: string().min(1).optional()
15839
15839
  }), _void(), {
15840
15840
  kind: "mutation",
15841
- auth: "admin"
15841
+ auth: "protected"
15842
15842
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
15843
15843
  kind: "mutation",
15844
- auth: "admin"
15844
+ auth: "protected"
15845
15845
  });
15846
15846
  /**
15847
15847
  * Shared geometry vocabulary for on-frame shape caps — privacy-mask,
@@ -23509,7 +23509,7 @@ DeviceType.Light, method(object({
23509
23509
  percentage: number().min(0).max(100)
23510
23510
  }), _void(), {
23511
23511
  kind: "mutation",
23512
- auth: "admin"
23512
+ auth: "protected"
23513
23513
  }), object({
23514
23514
  deviceId: number(),
23515
23515
  percentage: number().min(0).max(100),
@@ -23517,7 +23517,7 @@ DeviceType.Light, method(object({
23517
23517
  });
23518
23518
  DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _void(), {
23519
23519
  kind: "mutation",
23520
- auth: "admin"
23520
+ auth: "protected"
23521
23521
  });
23522
23522
  /**
23523
23523
  * camera-credentials — device-scoped cap exposing the camera's network
@@ -23676,50 +23676,50 @@ DeviceType.Thermostat, DeviceType.Climate, method(object({
23676
23676
  mode: HvacModeSchema
23677
23677
  }), _void(), {
23678
23678
  kind: "mutation",
23679
- auth: "admin"
23679
+ auth: "protected"
23680
23680
  }), method(object({
23681
23681
  deviceId: number().int().nonnegative(),
23682
23682
  fanMode: string().min(1)
23683
23683
  }), _void(), {
23684
23684
  kind: "mutation",
23685
- auth: "admin"
23685
+ auth: "protected"
23686
23686
  }), method(object({
23687
23687
  deviceId: number().int().nonnegative(),
23688
23688
  preset: string().min(1)
23689
23689
  }), _void(), {
23690
23690
  kind: "mutation",
23691
- auth: "admin"
23691
+ auth: "protected"
23692
23692
  }), method(object({
23693
23693
  deviceId: number().int().nonnegative(),
23694
23694
  target: number()
23695
23695
  }), _void(), {
23696
23696
  kind: "mutation",
23697
- auth: "admin"
23697
+ auth: "protected"
23698
23698
  }), method(object({
23699
23699
  deviceId: number().int().nonnegative(),
23700
23700
  targetLow: number(),
23701
23701
  targetHigh: number()
23702
23702
  }), _void(), {
23703
23703
  kind: "mutation",
23704
- auth: "admin"
23704
+ auth: "protected"
23705
23705
  }), method(object({
23706
23706
  deviceId: number().int().nonnegative(),
23707
23707
  targetHumidity: number().min(0).max(100)
23708
23708
  }), _void(), {
23709
23709
  kind: "mutation",
23710
- auth: "admin"
23710
+ auth: "protected"
23711
23711
  }), method(object({
23712
23712
  deviceId: number().int().nonnegative(),
23713
23713
  on: boolean()
23714
23714
  }), _void(), {
23715
23715
  kind: "mutation",
23716
- auth: "admin"
23716
+ auth: "protected"
23717
23717
  }), method(object({
23718
23718
  deviceId: number().int().nonnegative(),
23719
23719
  on: boolean()
23720
23720
  }), _void(), {
23721
23721
  kind: "mutation",
23722
- auth: "admin"
23722
+ auth: "protected"
23723
23723
  });
23724
23724
  /**
23725
23725
  * Color-light cap. Coexists with `switch` (on/off) and `brightness`
@@ -23794,7 +23794,7 @@ DeviceType.Light, method(object({
23794
23794
  color: ColorInputSchema
23795
23795
  }), _void(), {
23796
23796
  kind: "mutation",
23797
- auth: "admin"
23797
+ auth: "protected"
23798
23798
  }), object({
23799
23799
  deviceId: number(),
23800
23800
  mode: _enum([
@@ -23943,7 +23943,7 @@ DeviceType.Control, method(object({
23943
23943
  control: ControlSetValueInputSchema
23944
23944
  }), _void(), {
23945
23945
  kind: "mutation",
23946
- auth: "admin"
23946
+ auth: "protected"
23947
23947
  });
23948
23948
  object({
23949
23949
  /** Lifecycle state of the cover. */
@@ -23964,25 +23964,25 @@ object({
23964
23964
  });
23965
23965
  DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _void(), {
23966
23966
  kind: "mutation",
23967
- auth: "admin"
23967
+ auth: "protected"
23968
23968
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
23969
23969
  kind: "mutation",
23970
- auth: "admin"
23970
+ auth: "protected"
23971
23971
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
23972
23972
  kind: "mutation",
23973
- auth: "admin"
23973
+ auth: "protected"
23974
23974
  }), method(object({
23975
23975
  deviceId: number().int().nonnegative(),
23976
23976
  position: number().min(0).max(100)
23977
23977
  }), _void(), {
23978
23978
  kind: "mutation",
23979
- auth: "admin"
23979
+ auth: "protected"
23980
23980
  }), method(object({
23981
23981
  deviceId: number().int().nonnegative(),
23982
23982
  tiltPosition: number().min(0).max(100)
23983
23983
  }), _void(), {
23984
23984
  kind: "mutation",
23985
- auth: "admin"
23985
+ auth: "protected"
23986
23986
  });
23987
23987
  /**
23988
23988
  * Vendor-neutral day/night (IR-cut) control — the per-camera config cap
@@ -24187,6 +24187,59 @@ var IdentitySampleInfoSchema = object({
24187
24187
  deviceId: number().int().optional(),
24188
24188
  base64: string().optional()
24189
24189
  });
24190
+ /**
24191
+ * One enrolled sample, judged against the gallery it lives in.
24192
+ *
24193
+ * The gallery is the one input to recognition nobody re-reads: a sample
24194
+ * enrolled from the wrong face keeps voting forever, and because the matches it
24195
+ * pulls then look confident, nobody goes back. The 2026-09-08 audit found
24196
+ * exactly one such pair on this cluster — a sample scoring 0.61 against three
24197
+ * samples of ANOTHER person, enrolled from the same camera in the same minute,
24198
+ * where every other cross-identity pair sits under 0.50.
24199
+ */
24200
+ var IdentitySampleAuditRowSchema = object({
24201
+ sampleId: string(),
24202
+ enrolledAt: number().int(),
24203
+ deviceId: number().int().optional(),
24204
+ source: _enum(["detected", "photo"]),
24205
+ /** The enrolled crop's media key, so the panel can show the evidence. */
24206
+ mediaKey: string().optional(),
24207
+ /**
24208
+ * False = the sample is stamped with a DIFFERENT face model, and a cosine
24209
+ * across feature spaces is a well-formed float with no meaning. Every number
24210
+ * below then says nothing — it must read as "cannot say", never as an
24211
+ * accusation and never as a clean bill: this list ends in a Remove button.
24212
+ */
24213
+ comparable: boolean(),
24214
+ /** Mean cosine against this person's other samples. Null when there are none
24215
+ * to compare with — never 0, which would read as "opposite". */
24216
+ selfMean: number().nullable(),
24217
+ /** The other person this sample looks most like, when it looks like one.
24218
+ * This is the half that convicts: not looking like yourself can be a hard
24219
+ * angle; looking like someone the gallery can NAME is a mis-enrolment. */
24220
+ bestForeign: object({
24221
+ identityId: string(),
24222
+ name: string(),
24223
+ score: number()
24224
+ }).optional(),
24225
+ /** 0 = nothing to say. Higher = look at this one sooner. */
24226
+ suspicion: number()
24227
+ });
24228
+ var IdentitySampleAuditSchema = object({
24229
+ identityId: string(),
24230
+ name: string(),
24231
+ /** The cluster face model every comparison was made in. */
24232
+ modelId: string(),
24233
+ totalSamples: number().int(),
24234
+ comparableSamples: number().int(),
24235
+ flagged: number().int(),
24236
+ /** The bar `flagged` counts against, so the panel states the RULE and not
24237
+ * only its current result. */
24238
+ flagThreshold: number(),
24239
+ /** Worst first. A row with nothing to say still appears, at the bottom: the
24240
+ * operator asked to see the gallery, not only its accusations. */
24241
+ rows: array(IdentitySampleAuditRowSchema).readonly()
24242
+ });
24190
24243
  var FaceInfoSchema = object({
24191
24244
  faceId: string(),
24192
24245
  deviceId: number().int(),
@@ -24338,7 +24391,7 @@ includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly
24338
24391
  }), method(object({ id: string() }), _void(), {
24339
24392
  kind: "mutation",
24340
24393
  auth: "admin"
24341
- }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({
24394
+ }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({ identityId: string().min(1) }), IdentitySampleAuditSchema, { auth: "admin" }), method(object({
24342
24395
  identityId: string(),
24343
24396
  sampleId: string()
24344
24397
  }), _void(), {
@@ -24524,25 +24577,25 @@ DeviceType.Fan, method(object({
24524
24577
  percentage: number().min(0).max(100)
24525
24578
  }), _void(), {
24526
24579
  kind: "mutation",
24527
- auth: "admin"
24580
+ auth: "protected"
24528
24581
  }), method(object({
24529
24582
  deviceId: number().int().nonnegative(),
24530
24583
  preset: string().min(1)
24531
24584
  }), _void(), {
24532
24585
  kind: "mutation",
24533
- auth: "admin"
24586
+ auth: "protected"
24534
24587
  }), method(object({
24535
24588
  deviceId: number().int().nonnegative(),
24536
24589
  direction: FanDirectionSchema
24537
24590
  }), _void(), {
24538
24591
  kind: "mutation",
24539
- auth: "admin"
24592
+ auth: "protected"
24540
24593
  }), method(object({
24541
24594
  deviceId: number().int().nonnegative(),
24542
24595
  oscillating: boolean()
24543
24596
  }), _void(), {
24544
24597
  kind: "mutation",
24545
- auth: "admin"
24598
+ auth: "protected"
24546
24599
  });
24547
24600
  /**
24548
24601
  * Per-device feature/identity probe slice. Holds the runtime-resolved
@@ -24645,19 +24698,19 @@ DeviceType.Humidifier, method(object({
24645
24698
  on: boolean()
24646
24699
  }), _void(), {
24647
24700
  kind: "mutation",
24648
- auth: "admin"
24701
+ auth: "protected"
24649
24702
  }), method(object({
24650
24703
  deviceId: number().int().nonnegative(),
24651
24704
  humidity: number().min(0).max(100)
24652
24705
  }), _void(), {
24653
24706
  kind: "mutation",
24654
- auth: "admin"
24707
+ auth: "protected"
24655
24708
  }), method(object({
24656
24709
  deviceId: number().int().nonnegative(),
24657
24710
  mode: string().min(1)
24658
24711
  }), _void(), {
24659
24712
  kind: "mutation",
24660
- auth: "admin"
24713
+ auth: "protected"
24661
24714
  });
24662
24715
  object({
24663
24716
  /** Current relative humidity, 0..100. */
@@ -25119,13 +25172,13 @@ object({
25119
25172
  });
25120
25173
  DeviceType.LawnMower, method(object({ deviceId: number().int().nonnegative() }), _void(), {
25121
25174
  kind: "mutation",
25122
- auth: "admin"
25175
+ auth: "protected"
25123
25176
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25124
25177
  kind: "mutation",
25125
- auth: "admin"
25178
+ auth: "protected"
25126
25179
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25127
25180
  kind: "mutation",
25128
- auth: "admin"
25181
+ auth: "protected"
25129
25182
  });
25130
25183
  /**
25131
25184
  * local-network — hub-only singleton.
@@ -25385,16 +25438,16 @@ DeviceType.Lock, method(object({
25385
25438
  code: string().min(1).optional()
25386
25439
  }), _void(), {
25387
25440
  kind: "mutation",
25388
- auth: "admin"
25441
+ auth: "protected"
25389
25442
  }), method(object({
25390
25443
  deviceId: number().int().nonnegative(),
25391
25444
  code: string().min(1).optional()
25392
25445
  }), _void(), {
25393
25446
  kind: "mutation",
25394
- auth: "admin"
25447
+ auth: "protected"
25395
25448
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25396
25449
  kind: "mutation",
25397
- auth: "admin"
25450
+ auth: "protected"
25398
25451
  });
25399
25452
  /**
25400
25453
  * Media-player cap. Models HA `media_player.*` (Sonos, Chromecast,
@@ -25468,55 +25521,55 @@ object({
25468
25521
  });
25469
25522
  DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }), _void(), {
25470
25523
  kind: "mutation",
25471
- auth: "admin"
25524
+ auth: "protected"
25472
25525
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25473
25526
  kind: "mutation",
25474
- auth: "admin"
25527
+ auth: "protected"
25475
25528
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25476
25529
  kind: "mutation",
25477
- auth: "admin"
25530
+ auth: "protected"
25478
25531
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25479
25532
  kind: "mutation",
25480
- auth: "admin"
25533
+ auth: "protected"
25481
25534
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25482
25535
  kind: "mutation",
25483
- auth: "admin"
25536
+ auth: "protected"
25484
25537
  }), method(object({
25485
25538
  deviceId: number().int().nonnegative(),
25486
25539
  positionMs: number().int().nonnegative()
25487
25540
  }), _void(), {
25488
25541
  kind: "mutation",
25489
- auth: "admin"
25542
+ auth: "protected"
25490
25543
  }), method(object({
25491
25544
  deviceId: number().int().nonnegative(),
25492
25545
  volumeLevel: number().min(0).max(100)
25493
25546
  }), _void(), {
25494
25547
  kind: "mutation",
25495
- auth: "admin"
25548
+ auth: "protected"
25496
25549
  }), method(object({
25497
25550
  deviceId: number().int().nonnegative(),
25498
25551
  muted: boolean()
25499
25552
  }), _void(), {
25500
25553
  kind: "mutation",
25501
- auth: "admin"
25554
+ auth: "protected"
25502
25555
  }), method(object({
25503
25556
  deviceId: number().int().nonnegative(),
25504
25557
  shuffle: boolean()
25505
25558
  }), _void(), {
25506
25559
  kind: "mutation",
25507
- auth: "admin"
25560
+ auth: "protected"
25508
25561
  }), method(object({
25509
25562
  deviceId: number().int().nonnegative(),
25510
25563
  repeat: MediaPlayerRepeatSchema
25511
25564
  }), _void(), {
25512
25565
  kind: "mutation",
25513
- auth: "admin"
25566
+ auth: "protected"
25514
25567
  }), method(object({
25515
25568
  deviceId: number().int().nonnegative(),
25516
25569
  source: string().min(1)
25517
25570
  }), _void(), {
25518
25571
  kind: "mutation",
25519
- auth: "admin"
25572
+ auth: "protected"
25520
25573
  }), method(object({
25521
25574
  deviceId: number().int().nonnegative(),
25522
25575
  /** Media identifier / URL. */
@@ -25526,7 +25579,7 @@ DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }
25526
25579
  mediaType: string().min(1)
25527
25580
  }), _void(), {
25528
25581
  kind: "mutation",
25529
- auth: "admin"
25582
+ auth: "protected"
25530
25583
  });
25531
25584
  /**
25532
25585
  * mesh-network — collection cap for mesh-VPN providers.
@@ -26692,49 +26745,49 @@ DeviceType.PetFeeder, method(object({
26692
26745
  hopper2: gramsPortion.optional()
26693
26746
  }), _void(), {
26694
26747
  kind: "mutation",
26695
- auth: "admin"
26748
+ auth: "protected"
26696
26749
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26697
26750
  kind: "mutation",
26698
- auth: "admin"
26751
+ auth: "protected"
26699
26752
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26700
26753
  kind: "mutation",
26701
- auth: "admin"
26754
+ auth: "protected"
26702
26755
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26703
26756
  kind: "mutation",
26704
- auth: "admin"
26757
+ auth: "protected"
26705
26758
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26706
26759
  kind: "mutation",
26707
- auth: "admin"
26760
+ auth: "protected"
26708
26761
  }), method(object({
26709
26762
  deviceId: number().int().nonnegative(),
26710
26763
  soundId: number().int().nonnegative()
26711
26764
  }), _void(), {
26712
26765
  kind: "mutation",
26713
- auth: "admin"
26766
+ auth: "protected"
26714
26767
  }), method(object({
26715
26768
  deviceId: number().int().nonnegative(),
26716
26769
  on: boolean()
26717
26770
  }), _void(), {
26718
26771
  kind: "mutation",
26719
- auth: "admin"
26772
+ auth: "protected"
26720
26773
  }), method(object({
26721
26774
  deviceId: number().int().nonnegative(),
26722
26775
  on: boolean()
26723
26776
  }), _void(), {
26724
26777
  kind: "mutation",
26725
- auth: "admin"
26778
+ auth: "protected"
26726
26779
  }), method(object({
26727
26780
  deviceId: number().int().nonnegative(),
26728
26781
  on: boolean()
26729
26782
  }), _void(), {
26730
26783
  kind: "mutation",
26731
- auth: "admin"
26784
+ auth: "protected"
26732
26785
  }), method(object({
26733
26786
  deviceId: number().int().nonnegative(),
26734
26787
  level: number().int().nonnegative()
26735
26788
  }), _void(), {
26736
26789
  kind: "mutation",
26737
- auth: "admin"
26790
+ auth: "protected"
26738
26791
  });
26739
26792
  var VehicleSchema = object({
26740
26793
  id: string(),
@@ -28521,7 +28574,7 @@ DeviceType.Switch, DeviceType.Siren, DeviceType.Light, method(object({
28521
28574
  on: boolean()
28522
28575
  }), _void(), {
28523
28576
  kind: "mutation",
28524
- auth: "admin"
28577
+ auth: "protected"
28525
28578
  }), object({
28526
28579
  deviceId: number(),
28527
28580
  on: boolean(),
@@ -29378,25 +29431,25 @@ object({
29378
29431
  });
29379
29432
  DeviceType.Vacuum, method(object({ deviceId: number().int().nonnegative() }), _void(), {
29380
29433
  kind: "mutation",
29381
- auth: "admin"
29434
+ auth: "protected"
29382
29435
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29383
29436
  kind: "mutation",
29384
- auth: "admin"
29437
+ auth: "protected"
29385
29438
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29386
29439
  kind: "mutation",
29387
- auth: "admin"
29440
+ auth: "protected"
29388
29441
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29389
29442
  kind: "mutation",
29390
- auth: "admin"
29443
+ auth: "protected"
29391
29444
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29392
29445
  kind: "mutation",
29393
- auth: "admin"
29446
+ auth: "protected"
29394
29447
  }), method(object({
29395
29448
  deviceId: number().int().nonnegative(),
29396
29449
  speed: string().min(1)
29397
29450
  }), _void(), {
29398
29451
  kind: "mutation",
29399
- auth: "admin"
29452
+ auth: "protected"
29400
29453
  });
29401
29454
  object({
29402
29455
  /** Lifecycle state of the valve. */
@@ -29415,19 +29468,19 @@ object({
29415
29468
  });
29416
29469
  DeviceType.Valve, method(object({ deviceId: number().int().nonnegative() }), _void(), {
29417
29470
  kind: "mutation",
29418
- auth: "admin"
29471
+ auth: "protected"
29419
29472
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29420
29473
  kind: "mutation",
29421
- auth: "admin"
29474
+ auth: "protected"
29422
29475
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29423
29476
  kind: "mutation",
29424
- auth: "admin"
29477
+ auth: "protected"
29425
29478
  }), method(object({
29426
29479
  deviceId: number().int().nonnegative(),
29427
29480
  position: number().min(0).max(100)
29428
29481
  }), _void(), {
29429
29482
  kind: "mutation",
29430
- auth: "admin"
29483
+ auth: "protected"
29431
29484
  });
29432
29485
  object({
29433
29486
  detected: boolean(),
@@ -29461,19 +29514,19 @@ DeviceType.WaterHeater, method(object({
29461
29514
  temp: number().finite()
29462
29515
  }), _void(), {
29463
29516
  kind: "mutation",
29464
- auth: "admin"
29517
+ auth: "protected"
29465
29518
  }), method(object({
29466
29519
  deviceId: number().int().nonnegative(),
29467
29520
  mode: string().min(1)
29468
29521
  }), _void(), {
29469
29522
  kind: "mutation",
29470
- auth: "admin"
29523
+ auth: "protected"
29471
29524
  }), method(object({
29472
29525
  deviceId: number().int().nonnegative(),
29473
29526
  on: boolean()
29474
29527
  }), _void(), {
29475
29528
  kind: "mutation",
29476
- auth: "admin"
29529
+ auth: "protected"
29477
29530
  });
29478
29531
  object({
29479
29532
  /** Verbatim HA condition state (`sunny`, `cloudy`, `rainy`, …). Null
@@ -31565,6 +31618,12 @@ Object.freeze({
31565
31618
  addonId: null,
31566
31619
  access: "create"
31567
31620
  },
31621
+ "faceGallery.auditIdentitySamples": {
31622
+ capName: "face-gallery",
31623
+ capScope: "system",
31624
+ addonId: null,
31625
+ access: "view"
31626
+ },
31568
31627
  "faceGallery.createIdentity": {
31569
31628
  capName: "face-gallery",
31570
31629
  capScope: "system",
@@ -15830,16 +15830,16 @@ DeviceType.AlarmPanel, method(object({
15830
15830
  code: string().min(1).optional()
15831
15831
  }), _void(), {
15832
15832
  kind: "mutation",
15833
- auth: "admin"
15833
+ auth: "protected"
15834
15834
  }), method(object({
15835
15835
  deviceId: number().int().nonnegative(),
15836
15836
  code: string().min(1).optional()
15837
15837
  }), _void(), {
15838
15838
  kind: "mutation",
15839
- auth: "admin"
15839
+ auth: "protected"
15840
15840
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
15841
15841
  kind: "mutation",
15842
- auth: "admin"
15842
+ auth: "protected"
15843
15843
  });
15844
15844
  /**
15845
15845
  * Shared geometry vocabulary for on-frame shape caps — privacy-mask,
@@ -23507,7 +23507,7 @@ DeviceType.Light, method(object({
23507
23507
  percentage: number().min(0).max(100)
23508
23508
  }), _void(), {
23509
23509
  kind: "mutation",
23510
- auth: "admin"
23510
+ auth: "protected"
23511
23511
  }), object({
23512
23512
  deviceId: number(),
23513
23513
  percentage: number().min(0).max(100),
@@ -23515,7 +23515,7 @@ DeviceType.Light, method(object({
23515
23515
  });
23516
23516
  DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _void(), {
23517
23517
  kind: "mutation",
23518
- auth: "admin"
23518
+ auth: "protected"
23519
23519
  });
23520
23520
  /**
23521
23521
  * camera-credentials — device-scoped cap exposing the camera's network
@@ -23674,50 +23674,50 @@ DeviceType.Thermostat, DeviceType.Climate, method(object({
23674
23674
  mode: HvacModeSchema
23675
23675
  }), _void(), {
23676
23676
  kind: "mutation",
23677
- auth: "admin"
23677
+ auth: "protected"
23678
23678
  }), method(object({
23679
23679
  deviceId: number().int().nonnegative(),
23680
23680
  fanMode: string().min(1)
23681
23681
  }), _void(), {
23682
23682
  kind: "mutation",
23683
- auth: "admin"
23683
+ auth: "protected"
23684
23684
  }), method(object({
23685
23685
  deviceId: number().int().nonnegative(),
23686
23686
  preset: string().min(1)
23687
23687
  }), _void(), {
23688
23688
  kind: "mutation",
23689
- auth: "admin"
23689
+ auth: "protected"
23690
23690
  }), method(object({
23691
23691
  deviceId: number().int().nonnegative(),
23692
23692
  target: number()
23693
23693
  }), _void(), {
23694
23694
  kind: "mutation",
23695
- auth: "admin"
23695
+ auth: "protected"
23696
23696
  }), method(object({
23697
23697
  deviceId: number().int().nonnegative(),
23698
23698
  targetLow: number(),
23699
23699
  targetHigh: number()
23700
23700
  }), _void(), {
23701
23701
  kind: "mutation",
23702
- auth: "admin"
23702
+ auth: "protected"
23703
23703
  }), method(object({
23704
23704
  deviceId: number().int().nonnegative(),
23705
23705
  targetHumidity: number().min(0).max(100)
23706
23706
  }), _void(), {
23707
23707
  kind: "mutation",
23708
- auth: "admin"
23708
+ auth: "protected"
23709
23709
  }), method(object({
23710
23710
  deviceId: number().int().nonnegative(),
23711
23711
  on: boolean()
23712
23712
  }), _void(), {
23713
23713
  kind: "mutation",
23714
- auth: "admin"
23714
+ auth: "protected"
23715
23715
  }), method(object({
23716
23716
  deviceId: number().int().nonnegative(),
23717
23717
  on: boolean()
23718
23718
  }), _void(), {
23719
23719
  kind: "mutation",
23720
- auth: "admin"
23720
+ auth: "protected"
23721
23721
  });
23722
23722
  /**
23723
23723
  * Color-light cap. Coexists with `switch` (on/off) and `brightness`
@@ -23792,7 +23792,7 @@ DeviceType.Light, method(object({
23792
23792
  color: ColorInputSchema
23793
23793
  }), _void(), {
23794
23794
  kind: "mutation",
23795
- auth: "admin"
23795
+ auth: "protected"
23796
23796
  }), object({
23797
23797
  deviceId: number(),
23798
23798
  mode: _enum([
@@ -23941,7 +23941,7 @@ DeviceType.Control, method(object({
23941
23941
  control: ControlSetValueInputSchema
23942
23942
  }), _void(), {
23943
23943
  kind: "mutation",
23944
- auth: "admin"
23944
+ auth: "protected"
23945
23945
  });
23946
23946
  object({
23947
23947
  /** Lifecycle state of the cover. */
@@ -23962,25 +23962,25 @@ object({
23962
23962
  });
23963
23963
  DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _void(), {
23964
23964
  kind: "mutation",
23965
- auth: "admin"
23965
+ auth: "protected"
23966
23966
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
23967
23967
  kind: "mutation",
23968
- auth: "admin"
23968
+ auth: "protected"
23969
23969
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
23970
23970
  kind: "mutation",
23971
- auth: "admin"
23971
+ auth: "protected"
23972
23972
  }), method(object({
23973
23973
  deviceId: number().int().nonnegative(),
23974
23974
  position: number().min(0).max(100)
23975
23975
  }), _void(), {
23976
23976
  kind: "mutation",
23977
- auth: "admin"
23977
+ auth: "protected"
23978
23978
  }), method(object({
23979
23979
  deviceId: number().int().nonnegative(),
23980
23980
  tiltPosition: number().min(0).max(100)
23981
23981
  }), _void(), {
23982
23982
  kind: "mutation",
23983
- auth: "admin"
23983
+ auth: "protected"
23984
23984
  });
23985
23985
  /**
23986
23986
  * Vendor-neutral day/night (IR-cut) control — the per-camera config cap
@@ -24185,6 +24185,59 @@ var IdentitySampleInfoSchema = object({
24185
24185
  deviceId: number().int().optional(),
24186
24186
  base64: string().optional()
24187
24187
  });
24188
+ /**
24189
+ * One enrolled sample, judged against the gallery it lives in.
24190
+ *
24191
+ * The gallery is the one input to recognition nobody re-reads: a sample
24192
+ * enrolled from the wrong face keeps voting forever, and because the matches it
24193
+ * pulls then look confident, nobody goes back. The 2026-09-08 audit found
24194
+ * exactly one such pair on this cluster — a sample scoring 0.61 against three
24195
+ * samples of ANOTHER person, enrolled from the same camera in the same minute,
24196
+ * where every other cross-identity pair sits under 0.50.
24197
+ */
24198
+ var IdentitySampleAuditRowSchema = object({
24199
+ sampleId: string(),
24200
+ enrolledAt: number().int(),
24201
+ deviceId: number().int().optional(),
24202
+ source: _enum(["detected", "photo"]),
24203
+ /** The enrolled crop's media key, so the panel can show the evidence. */
24204
+ mediaKey: string().optional(),
24205
+ /**
24206
+ * False = the sample is stamped with a DIFFERENT face model, and a cosine
24207
+ * across feature spaces is a well-formed float with no meaning. Every number
24208
+ * below then says nothing — it must read as "cannot say", never as an
24209
+ * accusation and never as a clean bill: this list ends in a Remove button.
24210
+ */
24211
+ comparable: boolean(),
24212
+ /** Mean cosine against this person's other samples. Null when there are none
24213
+ * to compare with — never 0, which would read as "opposite". */
24214
+ selfMean: number().nullable(),
24215
+ /** The other person this sample looks most like, when it looks like one.
24216
+ * This is the half that convicts: not looking like yourself can be a hard
24217
+ * angle; looking like someone the gallery can NAME is a mis-enrolment. */
24218
+ bestForeign: object({
24219
+ identityId: string(),
24220
+ name: string(),
24221
+ score: number()
24222
+ }).optional(),
24223
+ /** 0 = nothing to say. Higher = look at this one sooner. */
24224
+ suspicion: number()
24225
+ });
24226
+ var IdentitySampleAuditSchema = object({
24227
+ identityId: string(),
24228
+ name: string(),
24229
+ /** The cluster face model every comparison was made in. */
24230
+ modelId: string(),
24231
+ totalSamples: number().int(),
24232
+ comparableSamples: number().int(),
24233
+ flagged: number().int(),
24234
+ /** The bar `flagged` counts against, so the panel states the RULE and not
24235
+ * only its current result. */
24236
+ flagThreshold: number(),
24237
+ /** Worst first. A row with nothing to say still appears, at the bottom: the
24238
+ * operator asked to see the gallery, not only its accusations. */
24239
+ rows: array(IdentitySampleAuditRowSchema).readonly()
24240
+ });
24188
24241
  var FaceInfoSchema = object({
24189
24242
  faceId: string(),
24190
24243
  deviceId: number().int(),
@@ -24336,7 +24389,7 @@ includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly
24336
24389
  }), method(object({ id: string() }), _void(), {
24337
24390
  kind: "mutation",
24338
24391
  auth: "admin"
24339
- }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({
24392
+ }), method(object({ identityId: string() }), array(IdentitySampleInfoSchema).readonly()), method(object({ identityId: string().min(1) }), IdentitySampleAuditSchema, { auth: "admin" }), method(object({
24340
24393
  identityId: string(),
24341
24394
  sampleId: string()
24342
24395
  }), _void(), {
@@ -24522,25 +24575,25 @@ DeviceType.Fan, method(object({
24522
24575
  percentage: number().min(0).max(100)
24523
24576
  }), _void(), {
24524
24577
  kind: "mutation",
24525
- auth: "admin"
24578
+ auth: "protected"
24526
24579
  }), method(object({
24527
24580
  deviceId: number().int().nonnegative(),
24528
24581
  preset: string().min(1)
24529
24582
  }), _void(), {
24530
24583
  kind: "mutation",
24531
- auth: "admin"
24584
+ auth: "protected"
24532
24585
  }), method(object({
24533
24586
  deviceId: number().int().nonnegative(),
24534
24587
  direction: FanDirectionSchema
24535
24588
  }), _void(), {
24536
24589
  kind: "mutation",
24537
- auth: "admin"
24590
+ auth: "protected"
24538
24591
  }), method(object({
24539
24592
  deviceId: number().int().nonnegative(),
24540
24593
  oscillating: boolean()
24541
24594
  }), _void(), {
24542
24595
  kind: "mutation",
24543
- auth: "admin"
24596
+ auth: "protected"
24544
24597
  });
24545
24598
  /**
24546
24599
  * Per-device feature/identity probe slice. Holds the runtime-resolved
@@ -24643,19 +24696,19 @@ DeviceType.Humidifier, method(object({
24643
24696
  on: boolean()
24644
24697
  }), _void(), {
24645
24698
  kind: "mutation",
24646
- auth: "admin"
24699
+ auth: "protected"
24647
24700
  }), method(object({
24648
24701
  deviceId: number().int().nonnegative(),
24649
24702
  humidity: number().min(0).max(100)
24650
24703
  }), _void(), {
24651
24704
  kind: "mutation",
24652
- auth: "admin"
24705
+ auth: "protected"
24653
24706
  }), method(object({
24654
24707
  deviceId: number().int().nonnegative(),
24655
24708
  mode: string().min(1)
24656
24709
  }), _void(), {
24657
24710
  kind: "mutation",
24658
- auth: "admin"
24711
+ auth: "protected"
24659
24712
  });
24660
24713
  object({
24661
24714
  /** Current relative humidity, 0..100. */
@@ -25117,13 +25170,13 @@ object({
25117
25170
  });
25118
25171
  DeviceType.LawnMower, method(object({ deviceId: number().int().nonnegative() }), _void(), {
25119
25172
  kind: "mutation",
25120
- auth: "admin"
25173
+ auth: "protected"
25121
25174
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25122
25175
  kind: "mutation",
25123
- auth: "admin"
25176
+ auth: "protected"
25124
25177
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25125
25178
  kind: "mutation",
25126
- auth: "admin"
25179
+ auth: "protected"
25127
25180
  });
25128
25181
  /**
25129
25182
  * local-network — hub-only singleton.
@@ -25383,16 +25436,16 @@ DeviceType.Lock, method(object({
25383
25436
  code: string().min(1).optional()
25384
25437
  }), _void(), {
25385
25438
  kind: "mutation",
25386
- auth: "admin"
25439
+ auth: "protected"
25387
25440
  }), method(object({
25388
25441
  deviceId: number().int().nonnegative(),
25389
25442
  code: string().min(1).optional()
25390
25443
  }), _void(), {
25391
25444
  kind: "mutation",
25392
- auth: "admin"
25445
+ auth: "protected"
25393
25446
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25394
25447
  kind: "mutation",
25395
- auth: "admin"
25448
+ auth: "protected"
25396
25449
  });
25397
25450
  /**
25398
25451
  * Media-player cap. Models HA `media_player.*` (Sonos, Chromecast,
@@ -25466,55 +25519,55 @@ object({
25466
25519
  });
25467
25520
  DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }), _void(), {
25468
25521
  kind: "mutation",
25469
- auth: "admin"
25522
+ auth: "protected"
25470
25523
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25471
25524
  kind: "mutation",
25472
- auth: "admin"
25525
+ auth: "protected"
25473
25526
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25474
25527
  kind: "mutation",
25475
- auth: "admin"
25528
+ auth: "protected"
25476
25529
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25477
25530
  kind: "mutation",
25478
- auth: "admin"
25531
+ auth: "protected"
25479
25532
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
25480
25533
  kind: "mutation",
25481
- auth: "admin"
25534
+ auth: "protected"
25482
25535
  }), method(object({
25483
25536
  deviceId: number().int().nonnegative(),
25484
25537
  positionMs: number().int().nonnegative()
25485
25538
  }), _void(), {
25486
25539
  kind: "mutation",
25487
- auth: "admin"
25540
+ auth: "protected"
25488
25541
  }), method(object({
25489
25542
  deviceId: number().int().nonnegative(),
25490
25543
  volumeLevel: number().min(0).max(100)
25491
25544
  }), _void(), {
25492
25545
  kind: "mutation",
25493
- auth: "admin"
25546
+ auth: "protected"
25494
25547
  }), method(object({
25495
25548
  deviceId: number().int().nonnegative(),
25496
25549
  muted: boolean()
25497
25550
  }), _void(), {
25498
25551
  kind: "mutation",
25499
- auth: "admin"
25552
+ auth: "protected"
25500
25553
  }), method(object({
25501
25554
  deviceId: number().int().nonnegative(),
25502
25555
  shuffle: boolean()
25503
25556
  }), _void(), {
25504
25557
  kind: "mutation",
25505
- auth: "admin"
25558
+ auth: "protected"
25506
25559
  }), method(object({
25507
25560
  deviceId: number().int().nonnegative(),
25508
25561
  repeat: MediaPlayerRepeatSchema
25509
25562
  }), _void(), {
25510
25563
  kind: "mutation",
25511
- auth: "admin"
25564
+ auth: "protected"
25512
25565
  }), method(object({
25513
25566
  deviceId: number().int().nonnegative(),
25514
25567
  source: string().min(1)
25515
25568
  }), _void(), {
25516
25569
  kind: "mutation",
25517
- auth: "admin"
25570
+ auth: "protected"
25518
25571
  }), method(object({
25519
25572
  deviceId: number().int().nonnegative(),
25520
25573
  /** Media identifier / URL. */
@@ -25524,7 +25577,7 @@ DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }
25524
25577
  mediaType: string().min(1)
25525
25578
  }), _void(), {
25526
25579
  kind: "mutation",
25527
- auth: "admin"
25580
+ auth: "protected"
25528
25581
  });
25529
25582
  /**
25530
25583
  * mesh-network — collection cap for mesh-VPN providers.
@@ -26690,49 +26743,49 @@ DeviceType.PetFeeder, method(object({
26690
26743
  hopper2: gramsPortion.optional()
26691
26744
  }), _void(), {
26692
26745
  kind: "mutation",
26693
- auth: "admin"
26746
+ auth: "protected"
26694
26747
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26695
26748
  kind: "mutation",
26696
- auth: "admin"
26749
+ auth: "protected"
26697
26750
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26698
26751
  kind: "mutation",
26699
- auth: "admin"
26752
+ auth: "protected"
26700
26753
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26701
26754
  kind: "mutation",
26702
- auth: "admin"
26755
+ auth: "protected"
26703
26756
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
26704
26757
  kind: "mutation",
26705
- auth: "admin"
26758
+ auth: "protected"
26706
26759
  }), method(object({
26707
26760
  deviceId: number().int().nonnegative(),
26708
26761
  soundId: number().int().nonnegative()
26709
26762
  }), _void(), {
26710
26763
  kind: "mutation",
26711
- auth: "admin"
26764
+ auth: "protected"
26712
26765
  }), method(object({
26713
26766
  deviceId: number().int().nonnegative(),
26714
26767
  on: boolean()
26715
26768
  }), _void(), {
26716
26769
  kind: "mutation",
26717
- auth: "admin"
26770
+ auth: "protected"
26718
26771
  }), method(object({
26719
26772
  deviceId: number().int().nonnegative(),
26720
26773
  on: boolean()
26721
26774
  }), _void(), {
26722
26775
  kind: "mutation",
26723
- auth: "admin"
26776
+ auth: "protected"
26724
26777
  }), method(object({
26725
26778
  deviceId: number().int().nonnegative(),
26726
26779
  on: boolean()
26727
26780
  }), _void(), {
26728
26781
  kind: "mutation",
26729
- auth: "admin"
26782
+ auth: "protected"
26730
26783
  }), method(object({
26731
26784
  deviceId: number().int().nonnegative(),
26732
26785
  level: number().int().nonnegative()
26733
26786
  }), _void(), {
26734
26787
  kind: "mutation",
26735
- auth: "admin"
26788
+ auth: "protected"
26736
26789
  });
26737
26790
  var VehicleSchema = object({
26738
26791
  id: string(),
@@ -28519,7 +28572,7 @@ DeviceType.Switch, DeviceType.Siren, DeviceType.Light, method(object({
28519
28572
  on: boolean()
28520
28573
  }), _void(), {
28521
28574
  kind: "mutation",
28522
- auth: "admin"
28575
+ auth: "protected"
28523
28576
  }), object({
28524
28577
  deviceId: number(),
28525
28578
  on: boolean(),
@@ -29376,25 +29429,25 @@ object({
29376
29429
  });
29377
29430
  DeviceType.Vacuum, method(object({ deviceId: number().int().nonnegative() }), _void(), {
29378
29431
  kind: "mutation",
29379
- auth: "admin"
29432
+ auth: "protected"
29380
29433
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29381
29434
  kind: "mutation",
29382
- auth: "admin"
29435
+ auth: "protected"
29383
29436
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29384
29437
  kind: "mutation",
29385
- auth: "admin"
29438
+ auth: "protected"
29386
29439
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29387
29440
  kind: "mutation",
29388
- auth: "admin"
29441
+ auth: "protected"
29389
29442
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29390
29443
  kind: "mutation",
29391
- auth: "admin"
29444
+ auth: "protected"
29392
29445
  }), method(object({
29393
29446
  deviceId: number().int().nonnegative(),
29394
29447
  speed: string().min(1)
29395
29448
  }), _void(), {
29396
29449
  kind: "mutation",
29397
- auth: "admin"
29450
+ auth: "protected"
29398
29451
  });
29399
29452
  object({
29400
29453
  /** Lifecycle state of the valve. */
@@ -29413,19 +29466,19 @@ object({
29413
29466
  });
29414
29467
  DeviceType.Valve, method(object({ deviceId: number().int().nonnegative() }), _void(), {
29415
29468
  kind: "mutation",
29416
- auth: "admin"
29469
+ auth: "protected"
29417
29470
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29418
29471
  kind: "mutation",
29419
- auth: "admin"
29472
+ auth: "protected"
29420
29473
  }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
29421
29474
  kind: "mutation",
29422
- auth: "admin"
29475
+ auth: "protected"
29423
29476
  }), method(object({
29424
29477
  deviceId: number().int().nonnegative(),
29425
29478
  position: number().min(0).max(100)
29426
29479
  }), _void(), {
29427
29480
  kind: "mutation",
29428
- auth: "admin"
29481
+ auth: "protected"
29429
29482
  });
29430
29483
  object({
29431
29484
  detected: boolean(),
@@ -29459,19 +29512,19 @@ DeviceType.WaterHeater, method(object({
29459
29512
  temp: number().finite()
29460
29513
  }), _void(), {
29461
29514
  kind: "mutation",
29462
- auth: "admin"
29515
+ auth: "protected"
29463
29516
  }), method(object({
29464
29517
  deviceId: number().int().nonnegative(),
29465
29518
  mode: string().min(1)
29466
29519
  }), _void(), {
29467
29520
  kind: "mutation",
29468
- auth: "admin"
29521
+ auth: "protected"
29469
29522
  }), method(object({
29470
29523
  deviceId: number().int().nonnegative(),
29471
29524
  on: boolean()
29472
29525
  }), _void(), {
29473
29526
  kind: "mutation",
29474
- auth: "admin"
29527
+ auth: "protected"
29475
29528
  });
29476
29529
  object({
29477
29530
  /** Verbatim HA condition state (`sunny`, `cloudy`, `rainy`, …). Null
@@ -31563,6 +31616,12 @@ Object.freeze({
31563
31616
  addonId: null,
31564
31617
  access: "create"
31565
31618
  },
31619
+ "faceGallery.auditIdentitySamples": {
31620
+ capName: "face-gallery",
31621
+ capScope: "system",
31622
+ addonId: null,
31623
+ access: "view"
31624
+ },
31566
31625
  "faceGallery.createIdentity": {
31567
31626
  capName: "face-gallery",
31568
31627
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-smtp-nodemailer",
3
- "version": "1.2.83",
3
+ "version": "1.2.85",
4
4
  "description": "SMTP email provider addon for CamStack — wraps `nodemailer` and registers a `smtp-provider` cap collection entry. Used by magic-link login + notifier addons.",
5
5
  "keywords": [
6
6
  "camstack",