@camstack/addon-provider-hikvision 1.2.113 → 1.2.115

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.
package/dist/addon.js CHANGED
@@ -13767,6 +13767,107 @@ var ExposeInputSchema = object({
13767
13767
  });
13768
13768
  var UnexposeInputSchema = object({ deviceId: string() });
13769
13769
  method(_void(), DeviceExportStatusSchema), method(_void(), array(DeviceKindSchema)), method(_void(), array(ExposedDeviceSchema)), method(ExposeInputSchema, _void(), { kind: "mutation" }), method(UnexposeInputSchema, _void(), { kind: "mutation" });
13770
+ /** Wire/storage schema for one icon id. */
13771
+ var LocationIconIdSchema = _enum([
13772
+ "map-pin",
13773
+ "house",
13774
+ "door-open",
13775
+ "sofa",
13776
+ "utensils",
13777
+ "bed-double",
13778
+ "bath",
13779
+ "briefcase",
13780
+ "car",
13781
+ "circle-parking",
13782
+ "route",
13783
+ "trees",
13784
+ "umbrella",
13785
+ "waves-ladder",
13786
+ "fence",
13787
+ "package",
13788
+ "warehouse",
13789
+ "store",
13790
+ "sun",
13791
+ "radar"
13792
+ ]);
13793
+ /**
13794
+ * One (location, icon) assignment as it travels.
13795
+ *
13796
+ * `locationKey` is ALWAYS {@link locationIconKey} of the label — never the
13797
+ * operator's casing. The registry matches labels trimmed + case-insensitively
13798
+ * everywhere (`addLocation`, `removeLocation`, `renameLocation`), and a
13799
+ * case-only rename (`cucina` → `Cucina`) is a real edit this repo supports; a
13800
+ * map keyed on the displayed casing would orphan its entry on exactly that
13801
+ * edit. Consumers join by keying their own label through `locationIconKey`.
13802
+ */
13803
+ var LocationIconAssignmentSchema = object({
13804
+ locationKey: string(),
13805
+ icon: LocationIconIdSchema
13806
+ });
13807
+ /**
13808
+ * One (location, description) assignment as it travels.
13809
+ *
13810
+ * Same key discipline as {@link LocationIconAssignmentSchema}, and for the same
13811
+ * reason: this lived for a while in the post-analysis addon's own settings,
13812
+ * keyed by a HAND-TYPED label matched exactly and case-sensitively. A rename in
13813
+ * the Locations page carried the icon and silently orphaned the description —
13814
+ * two authorities for one thing, joined by two different rules. Now both hang
13815
+ * off the location itself, on `locationIconKey`.
13816
+ */
13817
+ var LocationDescriptionAssignmentSchema = object({
13818
+ locationKey: string(),
13819
+ description: string()
13820
+ });
13821
+ /**
13822
+ * A SITE ZONE — a named part of the property that several locations belong to.
13823
+ *
13824
+ * "Zona notte" holds every bedroom; "Zona giorno" the living room and the
13825
+ * kitchen. A camera belongs to exactly one location, and a location to at most
13826
+ * one zone, so a camera's zone is derived and never stored on the device: the
13827
+ * whole point of this entity is that grouping rooms touches no device row.
13828
+ *
13829
+ * ## Why not `zone`
13830
+ *
13831
+ * Because `zone` is already the most loaded word in this product: 612 source
13832
+ * files and 24 Italian strings where it means a DETECTION zone drawn on a
13833
+ * camera. The two are unrelated — one is a polygon in a frame, the other is a
13834
+ * set of rooms — and a reader who confuses them will look for a camera's
13835
+ * bedrooms. So the code says `siteZone` everywhere, and the UI frees the plain
13836
+ * word by calling the drawn one what it actually is: a detection zone.
13837
+ *
13838
+ * ## The key
13839
+ *
13840
+ * `siteZoneKey(label)` — trimmed, lower-cased, the SAME derivation locations
13841
+ * use (`locationIconKey`). Membership and the icon both hang off it, so a
13842
+ * case-only rename keeps them, which is exactly the orphaning that cost us a
13843
+ * silently-dropped location description.
13844
+ *
13845
+ * The icon vocabulary is the location one, unchanged: a zone is drawn on the
13846
+ * same two surfaces by the same glyph map, so a second vocabulary would be a
13847
+ * second thing to keep drawable (`scripts/check-location-icons-drawable.ts`).
13848
+ */
13849
+ /**
13850
+ * One zone as it travels: its key, the label the operator typed, its icon and
13851
+ * the locations inside it.
13852
+ *
13853
+ * The LABEL is carried alongside the key because the key is lossy on purpose —
13854
+ * a surface must show "Zona notte", not "zona notte". Locations are carried
13855
+ * here, rather than left to a second call, because every consumer wants both
13856
+ * at once and a viewer that asked twice could render a zone whose membership
13857
+ * it has not fetched yet.
13858
+ *
13859
+ * `icon: null` means nobody chose one, which is NOT the fallback pin: only one
13860
+ * of those two is a choice, and a picker has to draw them differently.
13861
+ */
13862
+ var SiteZoneSchema = object({
13863
+ zoneKey: string(),
13864
+ label: string(),
13865
+ icon: LocationIconIdSchema.nullable(),
13866
+ /** Folded location keys, sorted. A location listed here need not be
13867
+ * REGISTERED — devices carry labels nobody registered, and those rooms are
13868
+ * the ones that most want grouping. */
13869
+ locationKeys: array(string())
13870
+ });
13770
13871
  var ProviderStatusSchema = object({
13771
13872
  connected: boolean(),
13772
13873
  deviceCount: number(),
@@ -14359,6 +14460,39 @@ method(object({
14359
14460
  }), object({ moved: number() }), {
14360
14461
  kind: "mutation",
14361
14462
  auth: "admin"
14463
+ }), method(_void(), array(LocationIconAssignmentSchema)), method(object({
14464
+ location: string(),
14465
+ icon: LocationIconIdSchema.nullable()
14466
+ }), _void(), {
14467
+ kind: "mutation",
14468
+ auth: "admin"
14469
+ }), method(_void(), array(LocationDescriptionAssignmentSchema)), method(object({
14470
+ location: string(),
14471
+ description: string().max(400).nullable()
14472
+ }), _void(), {
14473
+ kind: "mutation",
14474
+ auth: "admin"
14475
+ }), method(_void(), array(SiteZoneSchema)), method(object({
14476
+ name: string(),
14477
+ icon: LocationIconIdSchema.nullable().optional()
14478
+ }), _void(), {
14479
+ kind: "mutation",
14480
+ auth: "admin"
14481
+ }), method(object({ name: string() }), _void(), {
14482
+ kind: "mutation",
14483
+ auth: "admin"
14484
+ }), method(object({
14485
+ from: string(),
14486
+ to: string()
14487
+ }), _void(), {
14488
+ kind: "mutation",
14489
+ auth: "admin"
14490
+ }), method(object({
14491
+ location: string(),
14492
+ zone: string().nullable()
14493
+ }), _void(), {
14494
+ kind: "mutation",
14495
+ auth: "admin"
14362
14496
  }), method(object({
14363
14497
  deviceId: number(),
14364
14498
  disabled: boolean()
@@ -37981,6 +38115,18 @@ Object.freeze({
37981
38115
  addonId: null,
37982
38116
  access: "view"
37983
38117
  },
38118
+ "deviceManager.listLocationDescriptions": {
38119
+ capName: "device-manager",
38120
+ capScope: "system",
38121
+ addonId: null,
38122
+ access: "view"
38123
+ },
38124
+ "deviceManager.listLocationIcons": {
38125
+ capName: "device-manager",
38126
+ capScope: "system",
38127
+ addonId: null,
38128
+ access: "view"
38129
+ },
37984
38130
  "deviceManager.listLocations": {
37985
38131
  capName: "device-manager",
37986
38132
  capScope: "system",
@@ -37993,6 +38139,12 @@ Object.freeze({
37993
38139
  addonId: null,
37994
38140
  access: "view"
37995
38141
  },
38142
+ "deviceManager.listSiteZones": {
38143
+ capName: "device-manager",
38144
+ capScope: "system",
38145
+ addonId: null,
38146
+ access: "view"
38147
+ },
37996
38148
  "deviceManager.listWrappersForCap": {
37997
38149
  capName: "device-manager",
37998
38150
  capScope: "system",
@@ -38077,12 +38229,24 @@ Object.freeze({
38077
38229
  addonId: null,
38078
38230
  access: "delete"
38079
38231
  },
38232
+ "deviceManager.removeSiteZone": {
38233
+ capName: "device-manager",
38234
+ capScope: "system",
38235
+ addonId: null,
38236
+ access: "delete"
38237
+ },
38080
38238
  "deviceManager.renameLocation": {
38081
38239
  capName: "device-manager",
38082
38240
  capScope: "system",
38083
38241
  addonId: null,
38084
38242
  access: "create"
38085
38243
  },
38244
+ "deviceManager.renameSiteZone": {
38245
+ capName: "device-manager",
38246
+ capScope: "system",
38247
+ addonId: null,
38248
+ access: "create"
38249
+ },
38086
38250
  "deviceManager.runDeviceAction": {
38087
38251
  capName: "device-manager",
38088
38252
  capScope: "system",
@@ -38125,6 +38289,24 @@ Object.freeze({
38125
38289
  addonId: null,
38126
38290
  access: "create"
38127
38291
  },
38292
+ "deviceManager.setLocationDescription": {
38293
+ capName: "device-manager",
38294
+ capScope: "system",
38295
+ addonId: null,
38296
+ access: "create"
38297
+ },
38298
+ "deviceManager.setLocationIcon": {
38299
+ capName: "device-manager",
38300
+ capScope: "system",
38301
+ addonId: null,
38302
+ access: "create"
38303
+ },
38304
+ "deviceManager.setLocationZone": {
38305
+ capName: "device-manager",
38306
+ capScope: "system",
38307
+ addonId: null,
38308
+ access: "create"
38309
+ },
38128
38310
  "deviceManager.setMetadata": {
38129
38311
  capName: "device-manager",
38130
38312
  capScope: "system",
@@ -38155,6 +38337,12 @@ Object.freeze({
38155
38337
  addonId: null,
38156
38338
  access: "create"
38157
38339
  },
38340
+ "deviceManager.setSiteZone": {
38341
+ capName: "device-manager",
38342
+ capScope: "system",
38343
+ addonId: null,
38344
+ access: "create"
38345
+ },
38158
38346
  "deviceManager.setStreamProfileMap": {
38159
38347
  capName: "device-manager",
38160
38348
  capScope: "system",
package/dist/addon.mjs CHANGED
@@ -13768,6 +13768,107 @@ var ExposeInputSchema = object({
13768
13768
  });
13769
13769
  var UnexposeInputSchema = object({ deviceId: string() });
13770
13770
  method(_void(), DeviceExportStatusSchema), method(_void(), array(DeviceKindSchema)), method(_void(), array(ExposedDeviceSchema)), method(ExposeInputSchema, _void(), { kind: "mutation" }), method(UnexposeInputSchema, _void(), { kind: "mutation" });
13771
+ /** Wire/storage schema for one icon id. */
13772
+ var LocationIconIdSchema = _enum([
13773
+ "map-pin",
13774
+ "house",
13775
+ "door-open",
13776
+ "sofa",
13777
+ "utensils",
13778
+ "bed-double",
13779
+ "bath",
13780
+ "briefcase",
13781
+ "car",
13782
+ "circle-parking",
13783
+ "route",
13784
+ "trees",
13785
+ "umbrella",
13786
+ "waves-ladder",
13787
+ "fence",
13788
+ "package",
13789
+ "warehouse",
13790
+ "store",
13791
+ "sun",
13792
+ "radar"
13793
+ ]);
13794
+ /**
13795
+ * One (location, icon) assignment as it travels.
13796
+ *
13797
+ * `locationKey` is ALWAYS {@link locationIconKey} of the label — never the
13798
+ * operator's casing. The registry matches labels trimmed + case-insensitively
13799
+ * everywhere (`addLocation`, `removeLocation`, `renameLocation`), and a
13800
+ * case-only rename (`cucina` → `Cucina`) is a real edit this repo supports; a
13801
+ * map keyed on the displayed casing would orphan its entry on exactly that
13802
+ * edit. Consumers join by keying their own label through `locationIconKey`.
13803
+ */
13804
+ var LocationIconAssignmentSchema = object({
13805
+ locationKey: string(),
13806
+ icon: LocationIconIdSchema
13807
+ });
13808
+ /**
13809
+ * One (location, description) assignment as it travels.
13810
+ *
13811
+ * Same key discipline as {@link LocationIconAssignmentSchema}, and for the same
13812
+ * reason: this lived for a while in the post-analysis addon's own settings,
13813
+ * keyed by a HAND-TYPED label matched exactly and case-sensitively. A rename in
13814
+ * the Locations page carried the icon and silently orphaned the description —
13815
+ * two authorities for one thing, joined by two different rules. Now both hang
13816
+ * off the location itself, on `locationIconKey`.
13817
+ */
13818
+ var LocationDescriptionAssignmentSchema = object({
13819
+ locationKey: string(),
13820
+ description: string()
13821
+ });
13822
+ /**
13823
+ * A SITE ZONE — a named part of the property that several locations belong to.
13824
+ *
13825
+ * "Zona notte" holds every bedroom; "Zona giorno" the living room and the
13826
+ * kitchen. A camera belongs to exactly one location, and a location to at most
13827
+ * one zone, so a camera's zone is derived and never stored on the device: the
13828
+ * whole point of this entity is that grouping rooms touches no device row.
13829
+ *
13830
+ * ## Why not `zone`
13831
+ *
13832
+ * Because `zone` is already the most loaded word in this product: 612 source
13833
+ * files and 24 Italian strings where it means a DETECTION zone drawn on a
13834
+ * camera. The two are unrelated — one is a polygon in a frame, the other is a
13835
+ * set of rooms — and a reader who confuses them will look for a camera's
13836
+ * bedrooms. So the code says `siteZone` everywhere, and the UI frees the plain
13837
+ * word by calling the drawn one what it actually is: a detection zone.
13838
+ *
13839
+ * ## The key
13840
+ *
13841
+ * `siteZoneKey(label)` — trimmed, lower-cased, the SAME derivation locations
13842
+ * use (`locationIconKey`). Membership and the icon both hang off it, so a
13843
+ * case-only rename keeps them, which is exactly the orphaning that cost us a
13844
+ * silently-dropped location description.
13845
+ *
13846
+ * The icon vocabulary is the location one, unchanged: a zone is drawn on the
13847
+ * same two surfaces by the same glyph map, so a second vocabulary would be a
13848
+ * second thing to keep drawable (`scripts/check-location-icons-drawable.ts`).
13849
+ */
13850
+ /**
13851
+ * One zone as it travels: its key, the label the operator typed, its icon and
13852
+ * the locations inside it.
13853
+ *
13854
+ * The LABEL is carried alongside the key because the key is lossy on purpose —
13855
+ * a surface must show "Zona notte", not "zona notte". Locations are carried
13856
+ * here, rather than left to a second call, because every consumer wants both
13857
+ * at once and a viewer that asked twice could render a zone whose membership
13858
+ * it has not fetched yet.
13859
+ *
13860
+ * `icon: null` means nobody chose one, which is NOT the fallback pin: only one
13861
+ * of those two is a choice, and a picker has to draw them differently.
13862
+ */
13863
+ var SiteZoneSchema = object({
13864
+ zoneKey: string(),
13865
+ label: string(),
13866
+ icon: LocationIconIdSchema.nullable(),
13867
+ /** Folded location keys, sorted. A location listed here need not be
13868
+ * REGISTERED — devices carry labels nobody registered, and those rooms are
13869
+ * the ones that most want grouping. */
13870
+ locationKeys: array(string())
13871
+ });
13771
13872
  var ProviderStatusSchema = object({
13772
13873
  connected: boolean(),
13773
13874
  deviceCount: number(),
@@ -14360,6 +14461,39 @@ method(object({
14360
14461
  }), object({ moved: number() }), {
14361
14462
  kind: "mutation",
14362
14463
  auth: "admin"
14464
+ }), method(_void(), array(LocationIconAssignmentSchema)), method(object({
14465
+ location: string(),
14466
+ icon: LocationIconIdSchema.nullable()
14467
+ }), _void(), {
14468
+ kind: "mutation",
14469
+ auth: "admin"
14470
+ }), method(_void(), array(LocationDescriptionAssignmentSchema)), method(object({
14471
+ location: string(),
14472
+ description: string().max(400).nullable()
14473
+ }), _void(), {
14474
+ kind: "mutation",
14475
+ auth: "admin"
14476
+ }), method(_void(), array(SiteZoneSchema)), method(object({
14477
+ name: string(),
14478
+ icon: LocationIconIdSchema.nullable().optional()
14479
+ }), _void(), {
14480
+ kind: "mutation",
14481
+ auth: "admin"
14482
+ }), method(object({ name: string() }), _void(), {
14483
+ kind: "mutation",
14484
+ auth: "admin"
14485
+ }), method(object({
14486
+ from: string(),
14487
+ to: string()
14488
+ }), _void(), {
14489
+ kind: "mutation",
14490
+ auth: "admin"
14491
+ }), method(object({
14492
+ location: string(),
14493
+ zone: string().nullable()
14494
+ }), _void(), {
14495
+ kind: "mutation",
14496
+ auth: "admin"
14363
14497
  }), method(object({
14364
14498
  deviceId: number(),
14365
14499
  disabled: boolean()
@@ -37982,6 +38116,18 @@ Object.freeze({
37982
38116
  addonId: null,
37983
38117
  access: "view"
37984
38118
  },
38119
+ "deviceManager.listLocationDescriptions": {
38120
+ capName: "device-manager",
38121
+ capScope: "system",
38122
+ addonId: null,
38123
+ access: "view"
38124
+ },
38125
+ "deviceManager.listLocationIcons": {
38126
+ capName: "device-manager",
38127
+ capScope: "system",
38128
+ addonId: null,
38129
+ access: "view"
38130
+ },
37985
38131
  "deviceManager.listLocations": {
37986
38132
  capName: "device-manager",
37987
38133
  capScope: "system",
@@ -37994,6 +38140,12 @@ Object.freeze({
37994
38140
  addonId: null,
37995
38141
  access: "view"
37996
38142
  },
38143
+ "deviceManager.listSiteZones": {
38144
+ capName: "device-manager",
38145
+ capScope: "system",
38146
+ addonId: null,
38147
+ access: "view"
38148
+ },
37997
38149
  "deviceManager.listWrappersForCap": {
37998
38150
  capName: "device-manager",
37999
38151
  capScope: "system",
@@ -38078,12 +38230,24 @@ Object.freeze({
38078
38230
  addonId: null,
38079
38231
  access: "delete"
38080
38232
  },
38233
+ "deviceManager.removeSiteZone": {
38234
+ capName: "device-manager",
38235
+ capScope: "system",
38236
+ addonId: null,
38237
+ access: "delete"
38238
+ },
38081
38239
  "deviceManager.renameLocation": {
38082
38240
  capName: "device-manager",
38083
38241
  capScope: "system",
38084
38242
  addonId: null,
38085
38243
  access: "create"
38086
38244
  },
38245
+ "deviceManager.renameSiteZone": {
38246
+ capName: "device-manager",
38247
+ capScope: "system",
38248
+ addonId: null,
38249
+ access: "create"
38250
+ },
38087
38251
  "deviceManager.runDeviceAction": {
38088
38252
  capName: "device-manager",
38089
38253
  capScope: "system",
@@ -38126,6 +38290,24 @@ Object.freeze({
38126
38290
  addonId: null,
38127
38291
  access: "create"
38128
38292
  },
38293
+ "deviceManager.setLocationDescription": {
38294
+ capName: "device-manager",
38295
+ capScope: "system",
38296
+ addonId: null,
38297
+ access: "create"
38298
+ },
38299
+ "deviceManager.setLocationIcon": {
38300
+ capName: "device-manager",
38301
+ capScope: "system",
38302
+ addonId: null,
38303
+ access: "create"
38304
+ },
38305
+ "deviceManager.setLocationZone": {
38306
+ capName: "device-manager",
38307
+ capScope: "system",
38308
+ addonId: null,
38309
+ access: "create"
38310
+ },
38129
38311
  "deviceManager.setMetadata": {
38130
38312
  capName: "device-manager",
38131
38313
  capScope: "system",
@@ -38156,6 +38338,12 @@ Object.freeze({
38156
38338
  addonId: null,
38157
38339
  access: "create"
38158
38340
  },
38341
+ "deviceManager.setSiteZone": {
38342
+ capName: "device-manager",
38343
+ capScope: "system",
38344
+ addonId: null,
38345
+ access: "create"
38346
+ },
38159
38347
  "deviceManager.setStreamProfileMap": {
38160
38348
  capName: "device-manager",
38161
38349
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-hikvision",
3
- "version": "1.2.113",
3
+ "version": "1.2.115",
4
4
  "description": "Hikvision camera device provider addon for CamStack — ISAPI over HTTP(S) with digest auth (snapshot, alarm stream, RTSP discovery)",
5
5
  "keywords": [
6
6
  "camstack",