@camstack/addon-export-hap 1.2.118 → 1.2.119

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.
@@ -14136,6 +14136,70 @@ var LocationIconAssignmentSchema = object({
14136
14136
  locationKey: string(),
14137
14137
  icon: LocationIconIdSchema
14138
14138
  });
14139
+ /**
14140
+ * One (location, description) assignment as it travels.
14141
+ *
14142
+ * Same key discipline as {@link LocationIconAssignmentSchema}, and for the same
14143
+ * reason: this lived for a while in the post-analysis addon's own settings,
14144
+ * keyed by a HAND-TYPED label matched exactly and case-sensitively. A rename in
14145
+ * the Locations page carried the icon and silently orphaned the description —
14146
+ * two authorities for one thing, joined by two different rules. Now both hang
14147
+ * off the location itself, on `locationIconKey`.
14148
+ */
14149
+ var LocationDescriptionAssignmentSchema = object({
14150
+ locationKey: string(),
14151
+ description: string()
14152
+ });
14153
+ /**
14154
+ * A SITE ZONE — a named part of the property that several locations belong to.
14155
+ *
14156
+ * "Zona notte" holds every bedroom; "Zona giorno" the living room and the
14157
+ * kitchen. A camera belongs to exactly one location, and a location to at most
14158
+ * one zone, so a camera's zone is derived and never stored on the device: the
14159
+ * whole point of this entity is that grouping rooms touches no device row.
14160
+ *
14161
+ * ## Why not `zone`
14162
+ *
14163
+ * Because `zone` is already the most loaded word in this product: 612 source
14164
+ * files and 24 Italian strings where it means a DETECTION zone drawn on a
14165
+ * camera. The two are unrelated — one is a polygon in a frame, the other is a
14166
+ * set of rooms — and a reader who confuses them will look for a camera's
14167
+ * bedrooms. So the code says `siteZone` everywhere, and the UI frees the plain
14168
+ * word by calling the drawn one what it actually is: a detection zone.
14169
+ *
14170
+ * ## The key
14171
+ *
14172
+ * `siteZoneKey(label)` — trimmed, lower-cased, the SAME derivation locations
14173
+ * use (`locationIconKey`). Membership and the icon both hang off it, so a
14174
+ * case-only rename keeps them, which is exactly the orphaning that cost us a
14175
+ * silently-dropped location description.
14176
+ *
14177
+ * The icon vocabulary is the location one, unchanged: a zone is drawn on the
14178
+ * same two surfaces by the same glyph map, so a second vocabulary would be a
14179
+ * second thing to keep drawable (`scripts/check-location-icons-drawable.ts`).
14180
+ */
14181
+ /**
14182
+ * One zone as it travels: its key, the label the operator typed, its icon and
14183
+ * the locations inside it.
14184
+ *
14185
+ * The LABEL is carried alongside the key because the key is lossy on purpose —
14186
+ * a surface must show "Zona notte", not "zona notte". Locations are carried
14187
+ * here, rather than left to a second call, because every consumer wants both
14188
+ * at once and a viewer that asked twice could render a zone whose membership
14189
+ * it has not fetched yet.
14190
+ *
14191
+ * `icon: null` means nobody chose one, which is NOT the fallback pin: only one
14192
+ * of those two is a choice, and a picker has to draw them differently.
14193
+ */
14194
+ var SiteZoneSchema = object({
14195
+ zoneKey: string(),
14196
+ label: string(),
14197
+ icon: LocationIconIdSchema.nullable(),
14198
+ /** Folded location keys, sorted. A location listed here need not be
14199
+ * REGISTERED — devices carry labels nobody registered, and those rooms are
14200
+ * the ones that most want grouping. */
14201
+ locationKeys: array(string())
14202
+ });
14139
14203
  var ProviderStatusSchema = object({
14140
14204
  connected: boolean(),
14141
14205
  deviceCount: number(),
@@ -14653,6 +14717,33 @@ method(object({
14653
14717
  }), _void(), {
14654
14718
  kind: "mutation",
14655
14719
  auth: "admin"
14720
+ }), method(_void(), array(LocationDescriptionAssignmentSchema)), method(object({
14721
+ location: string(),
14722
+ description: string().max(400).nullable()
14723
+ }), _void(), {
14724
+ kind: "mutation",
14725
+ auth: "admin"
14726
+ }), method(_void(), array(SiteZoneSchema)), method(object({
14727
+ name: string(),
14728
+ icon: LocationIconIdSchema.nullable().optional()
14729
+ }), _void(), {
14730
+ kind: "mutation",
14731
+ auth: "admin"
14732
+ }), method(object({ name: string() }), _void(), {
14733
+ kind: "mutation",
14734
+ auth: "admin"
14735
+ }), method(object({
14736
+ from: string(),
14737
+ to: string()
14738
+ }), _void(), {
14739
+ kind: "mutation",
14740
+ auth: "admin"
14741
+ }), method(object({
14742
+ location: string(),
14743
+ zone: string().nullable()
14744
+ }), _void(), {
14745
+ kind: "mutation",
14746
+ auth: "admin"
14656
14747
  }), method(object({
14657
14748
  deviceId: number(),
14658
14749
  disabled: boolean()
@@ -33537,6 +33628,12 @@ Object.freeze({
33537
33628
  addonId: null,
33538
33629
  access: "view"
33539
33630
  },
33631
+ "deviceManager.listLocationDescriptions": {
33632
+ capName: "device-manager",
33633
+ capScope: "system",
33634
+ addonId: null,
33635
+ access: "view"
33636
+ },
33540
33637
  "deviceManager.listLocationIcons": {
33541
33638
  capName: "device-manager",
33542
33639
  capScope: "system",
@@ -33555,6 +33652,12 @@ Object.freeze({
33555
33652
  addonId: null,
33556
33653
  access: "view"
33557
33654
  },
33655
+ "deviceManager.listSiteZones": {
33656
+ capName: "device-manager",
33657
+ capScope: "system",
33658
+ addonId: null,
33659
+ access: "view"
33660
+ },
33558
33661
  "deviceManager.listWrappersForCap": {
33559
33662
  capName: "device-manager",
33560
33663
  capScope: "system",
@@ -33639,12 +33742,24 @@ Object.freeze({
33639
33742
  addonId: null,
33640
33743
  access: "delete"
33641
33744
  },
33745
+ "deviceManager.removeSiteZone": {
33746
+ capName: "device-manager",
33747
+ capScope: "system",
33748
+ addonId: null,
33749
+ access: "delete"
33750
+ },
33642
33751
  "deviceManager.renameLocation": {
33643
33752
  capName: "device-manager",
33644
33753
  capScope: "system",
33645
33754
  addonId: null,
33646
33755
  access: "create"
33647
33756
  },
33757
+ "deviceManager.renameSiteZone": {
33758
+ capName: "device-manager",
33759
+ capScope: "system",
33760
+ addonId: null,
33761
+ access: "create"
33762
+ },
33648
33763
  "deviceManager.runDeviceAction": {
33649
33764
  capName: "device-manager",
33650
33765
  capScope: "system",
@@ -33687,12 +33802,24 @@ Object.freeze({
33687
33802
  addonId: null,
33688
33803
  access: "create"
33689
33804
  },
33805
+ "deviceManager.setLocationDescription": {
33806
+ capName: "device-manager",
33807
+ capScope: "system",
33808
+ addonId: null,
33809
+ access: "create"
33810
+ },
33690
33811
  "deviceManager.setLocationIcon": {
33691
33812
  capName: "device-manager",
33692
33813
  capScope: "system",
33693
33814
  addonId: null,
33694
33815
  access: "create"
33695
33816
  },
33817
+ "deviceManager.setLocationZone": {
33818
+ capName: "device-manager",
33819
+ capScope: "system",
33820
+ addonId: null,
33821
+ access: "create"
33822
+ },
33696
33823
  "deviceManager.setMetadata": {
33697
33824
  capName: "device-manager",
33698
33825
  capScope: "system",
@@ -33723,6 +33850,12 @@ Object.freeze({
33723
33850
  addonId: null,
33724
33851
  access: "create"
33725
33852
  },
33853
+ "deviceManager.setSiteZone": {
33854
+ capName: "device-manager",
33855
+ capScope: "system",
33856
+ addonId: null,
33857
+ access: "create"
33858
+ },
33726
33859
  "deviceManager.setStreamProfileMap": {
33727
33860
  capName: "device-manager",
33728
33861
  capScope: "system",
@@ -14124,6 +14124,70 @@ var LocationIconAssignmentSchema = object({
14124
14124
  locationKey: string(),
14125
14125
  icon: LocationIconIdSchema
14126
14126
  });
14127
+ /**
14128
+ * One (location, description) assignment as it travels.
14129
+ *
14130
+ * Same key discipline as {@link LocationIconAssignmentSchema}, and for the same
14131
+ * reason: this lived for a while in the post-analysis addon's own settings,
14132
+ * keyed by a HAND-TYPED label matched exactly and case-sensitively. A rename in
14133
+ * the Locations page carried the icon and silently orphaned the description —
14134
+ * two authorities for one thing, joined by two different rules. Now both hang
14135
+ * off the location itself, on `locationIconKey`.
14136
+ */
14137
+ var LocationDescriptionAssignmentSchema = object({
14138
+ locationKey: string(),
14139
+ description: string()
14140
+ });
14141
+ /**
14142
+ * A SITE ZONE — a named part of the property that several locations belong to.
14143
+ *
14144
+ * "Zona notte" holds every bedroom; "Zona giorno" the living room and the
14145
+ * kitchen. A camera belongs to exactly one location, and a location to at most
14146
+ * one zone, so a camera's zone is derived and never stored on the device: the
14147
+ * whole point of this entity is that grouping rooms touches no device row.
14148
+ *
14149
+ * ## Why not `zone`
14150
+ *
14151
+ * Because `zone` is already the most loaded word in this product: 612 source
14152
+ * files and 24 Italian strings where it means a DETECTION zone drawn on a
14153
+ * camera. The two are unrelated — one is a polygon in a frame, the other is a
14154
+ * set of rooms — and a reader who confuses them will look for a camera's
14155
+ * bedrooms. So the code says `siteZone` everywhere, and the UI frees the plain
14156
+ * word by calling the drawn one what it actually is: a detection zone.
14157
+ *
14158
+ * ## The key
14159
+ *
14160
+ * `siteZoneKey(label)` — trimmed, lower-cased, the SAME derivation locations
14161
+ * use (`locationIconKey`). Membership and the icon both hang off it, so a
14162
+ * case-only rename keeps them, which is exactly the orphaning that cost us a
14163
+ * silently-dropped location description.
14164
+ *
14165
+ * The icon vocabulary is the location one, unchanged: a zone is drawn on the
14166
+ * same two surfaces by the same glyph map, so a second vocabulary would be a
14167
+ * second thing to keep drawable (`scripts/check-location-icons-drawable.ts`).
14168
+ */
14169
+ /**
14170
+ * One zone as it travels: its key, the label the operator typed, its icon and
14171
+ * the locations inside it.
14172
+ *
14173
+ * The LABEL is carried alongside the key because the key is lossy on purpose —
14174
+ * a surface must show "Zona notte", not "zona notte". Locations are carried
14175
+ * here, rather than left to a second call, because every consumer wants both
14176
+ * at once and a viewer that asked twice could render a zone whose membership
14177
+ * it has not fetched yet.
14178
+ *
14179
+ * `icon: null` means nobody chose one, which is NOT the fallback pin: only one
14180
+ * of those two is a choice, and a picker has to draw them differently.
14181
+ */
14182
+ var SiteZoneSchema = object({
14183
+ zoneKey: string(),
14184
+ label: string(),
14185
+ icon: LocationIconIdSchema.nullable(),
14186
+ /** Folded location keys, sorted. A location listed here need not be
14187
+ * REGISTERED — devices carry labels nobody registered, and those rooms are
14188
+ * the ones that most want grouping. */
14189
+ locationKeys: array(string())
14190
+ });
14127
14191
  var ProviderStatusSchema = object({
14128
14192
  connected: boolean(),
14129
14193
  deviceCount: number(),
@@ -14641,6 +14705,33 @@ method(object({
14641
14705
  }), _void(), {
14642
14706
  kind: "mutation",
14643
14707
  auth: "admin"
14708
+ }), method(_void(), array(LocationDescriptionAssignmentSchema)), method(object({
14709
+ location: string(),
14710
+ description: string().max(400).nullable()
14711
+ }), _void(), {
14712
+ kind: "mutation",
14713
+ auth: "admin"
14714
+ }), method(_void(), array(SiteZoneSchema)), method(object({
14715
+ name: string(),
14716
+ icon: LocationIconIdSchema.nullable().optional()
14717
+ }), _void(), {
14718
+ kind: "mutation",
14719
+ auth: "admin"
14720
+ }), method(object({ name: string() }), _void(), {
14721
+ kind: "mutation",
14722
+ auth: "admin"
14723
+ }), method(object({
14724
+ from: string(),
14725
+ to: string()
14726
+ }), _void(), {
14727
+ kind: "mutation",
14728
+ auth: "admin"
14729
+ }), method(object({
14730
+ location: string(),
14731
+ zone: string().nullable()
14732
+ }), _void(), {
14733
+ kind: "mutation",
14734
+ auth: "admin"
14644
14735
  }), method(object({
14645
14736
  deviceId: number(),
14646
14737
  disabled: boolean()
@@ -33525,6 +33616,12 @@ Object.freeze({
33525
33616
  addonId: null,
33526
33617
  access: "view"
33527
33618
  },
33619
+ "deviceManager.listLocationDescriptions": {
33620
+ capName: "device-manager",
33621
+ capScope: "system",
33622
+ addonId: null,
33623
+ access: "view"
33624
+ },
33528
33625
  "deviceManager.listLocationIcons": {
33529
33626
  capName: "device-manager",
33530
33627
  capScope: "system",
@@ -33543,6 +33640,12 @@ Object.freeze({
33543
33640
  addonId: null,
33544
33641
  access: "view"
33545
33642
  },
33643
+ "deviceManager.listSiteZones": {
33644
+ capName: "device-manager",
33645
+ capScope: "system",
33646
+ addonId: null,
33647
+ access: "view"
33648
+ },
33546
33649
  "deviceManager.listWrappersForCap": {
33547
33650
  capName: "device-manager",
33548
33651
  capScope: "system",
@@ -33627,12 +33730,24 @@ Object.freeze({
33627
33730
  addonId: null,
33628
33731
  access: "delete"
33629
33732
  },
33733
+ "deviceManager.removeSiteZone": {
33734
+ capName: "device-manager",
33735
+ capScope: "system",
33736
+ addonId: null,
33737
+ access: "delete"
33738
+ },
33630
33739
  "deviceManager.renameLocation": {
33631
33740
  capName: "device-manager",
33632
33741
  capScope: "system",
33633
33742
  addonId: null,
33634
33743
  access: "create"
33635
33744
  },
33745
+ "deviceManager.renameSiteZone": {
33746
+ capName: "device-manager",
33747
+ capScope: "system",
33748
+ addonId: null,
33749
+ access: "create"
33750
+ },
33636
33751
  "deviceManager.runDeviceAction": {
33637
33752
  capName: "device-manager",
33638
33753
  capScope: "system",
@@ -33675,12 +33790,24 @@ Object.freeze({
33675
33790
  addonId: null,
33676
33791
  access: "create"
33677
33792
  },
33793
+ "deviceManager.setLocationDescription": {
33794
+ capName: "device-manager",
33795
+ capScope: "system",
33796
+ addonId: null,
33797
+ access: "create"
33798
+ },
33678
33799
  "deviceManager.setLocationIcon": {
33679
33800
  capName: "device-manager",
33680
33801
  capScope: "system",
33681
33802
  addonId: null,
33682
33803
  access: "create"
33683
33804
  },
33805
+ "deviceManager.setLocationZone": {
33806
+ capName: "device-manager",
33807
+ capScope: "system",
33808
+ addonId: null,
33809
+ access: "create"
33810
+ },
33684
33811
  "deviceManager.setMetadata": {
33685
33812
  capName: "device-manager",
33686
33813
  capScope: "system",
@@ -33711,6 +33838,12 @@ Object.freeze({
33711
33838
  addonId: null,
33712
33839
  access: "create"
33713
33840
  },
33841
+ "deviceManager.setSiteZone": {
33842
+ capName: "device-manager",
33843
+ capScope: "system",
33844
+ addonId: null,
33845
+ access: "create"
33846
+ },
33714
33847
  "deviceManager.setStreamProfileMap": {
33715
33848
  capName: "device-manager",
33716
33849
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-export-hap",
3
- "version": "1.2.118",
3
+ "version": "1.2.119",
4
4
  "description": "HomeKit (HAP) exporter for CamStack devices. Publishes each exposed device as its own HomeKit accessory: cameras and doorbells with SRTP streaming, HomeKit Secure Video, motion, two-way audio, PTZ and battery; switches, lights, locks and sensors through a capability→service table.",
5
5
  "keywords": [
6
6
  "camstack",