@camstack/addon-notifiers 1.2.110 → 1.2.111
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 +133 -0
- package/dist/addon.mjs +133 -0
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -13450,6 +13450,70 @@ var LocationIconAssignmentSchema = object({
|
|
|
13450
13450
|
locationKey: string(),
|
|
13451
13451
|
icon: LocationIconIdSchema
|
|
13452
13452
|
});
|
|
13453
|
+
/**
|
|
13454
|
+
* One (location, description) assignment as it travels.
|
|
13455
|
+
*
|
|
13456
|
+
* Same key discipline as {@link LocationIconAssignmentSchema}, and for the same
|
|
13457
|
+
* reason: this lived for a while in the post-analysis addon's own settings,
|
|
13458
|
+
* keyed by a HAND-TYPED label matched exactly and case-sensitively. A rename in
|
|
13459
|
+
* the Locations page carried the icon and silently orphaned the description —
|
|
13460
|
+
* two authorities for one thing, joined by two different rules. Now both hang
|
|
13461
|
+
* off the location itself, on `locationIconKey`.
|
|
13462
|
+
*/
|
|
13463
|
+
var LocationDescriptionAssignmentSchema = object({
|
|
13464
|
+
locationKey: string(),
|
|
13465
|
+
description: string()
|
|
13466
|
+
});
|
|
13467
|
+
/**
|
|
13468
|
+
* A SITE ZONE — a named part of the property that several locations belong to.
|
|
13469
|
+
*
|
|
13470
|
+
* "Zona notte" holds every bedroom; "Zona giorno" the living room and the
|
|
13471
|
+
* kitchen. A camera belongs to exactly one location, and a location to at most
|
|
13472
|
+
* one zone, so a camera's zone is derived and never stored on the device: the
|
|
13473
|
+
* whole point of this entity is that grouping rooms touches no device row.
|
|
13474
|
+
*
|
|
13475
|
+
* ## Why not `zone`
|
|
13476
|
+
*
|
|
13477
|
+
* Because `zone` is already the most loaded word in this product: 612 source
|
|
13478
|
+
* files and 24 Italian strings where it means a DETECTION zone drawn on a
|
|
13479
|
+
* camera. The two are unrelated — one is a polygon in a frame, the other is a
|
|
13480
|
+
* set of rooms — and a reader who confuses them will look for a camera's
|
|
13481
|
+
* bedrooms. So the code says `siteZone` everywhere, and the UI frees the plain
|
|
13482
|
+
* word by calling the drawn one what it actually is: a detection zone.
|
|
13483
|
+
*
|
|
13484
|
+
* ## The key
|
|
13485
|
+
*
|
|
13486
|
+
* `siteZoneKey(label)` — trimmed, lower-cased, the SAME derivation locations
|
|
13487
|
+
* use (`locationIconKey`). Membership and the icon both hang off it, so a
|
|
13488
|
+
* case-only rename keeps them, which is exactly the orphaning that cost us a
|
|
13489
|
+
* silently-dropped location description.
|
|
13490
|
+
*
|
|
13491
|
+
* The icon vocabulary is the location one, unchanged: a zone is drawn on the
|
|
13492
|
+
* same two surfaces by the same glyph map, so a second vocabulary would be a
|
|
13493
|
+
* second thing to keep drawable (`scripts/check-location-icons-drawable.ts`).
|
|
13494
|
+
*/
|
|
13495
|
+
/**
|
|
13496
|
+
* One zone as it travels: its key, the label the operator typed, its icon and
|
|
13497
|
+
* the locations inside it.
|
|
13498
|
+
*
|
|
13499
|
+
* The LABEL is carried alongside the key because the key is lossy on purpose —
|
|
13500
|
+
* a surface must show "Zona notte", not "zona notte". Locations are carried
|
|
13501
|
+
* here, rather than left to a second call, because every consumer wants both
|
|
13502
|
+
* at once and a viewer that asked twice could render a zone whose membership
|
|
13503
|
+
* it has not fetched yet.
|
|
13504
|
+
*
|
|
13505
|
+
* `icon: null` means nobody chose one, which is NOT the fallback pin: only one
|
|
13506
|
+
* of those two is a choice, and a picker has to draw them differently.
|
|
13507
|
+
*/
|
|
13508
|
+
var SiteZoneSchema = object({
|
|
13509
|
+
zoneKey: string(),
|
|
13510
|
+
label: string(),
|
|
13511
|
+
icon: LocationIconIdSchema.nullable(),
|
|
13512
|
+
/** Folded location keys, sorted. A location listed here need not be
|
|
13513
|
+
* REGISTERED — devices carry labels nobody registered, and those rooms are
|
|
13514
|
+
* the ones that most want grouping. */
|
|
13515
|
+
locationKeys: array(string())
|
|
13516
|
+
});
|
|
13453
13517
|
var ProviderStatusSchema = object({
|
|
13454
13518
|
connected: boolean(),
|
|
13455
13519
|
deviceCount: number(),
|
|
@@ -13967,6 +14031,33 @@ method(object({
|
|
|
13967
14031
|
}), _void(), {
|
|
13968
14032
|
kind: "mutation",
|
|
13969
14033
|
auth: "admin"
|
|
14034
|
+
}), method(_void(), array(LocationDescriptionAssignmentSchema)), method(object({
|
|
14035
|
+
location: string(),
|
|
14036
|
+
description: string().max(400).nullable()
|
|
14037
|
+
}), _void(), {
|
|
14038
|
+
kind: "mutation",
|
|
14039
|
+
auth: "admin"
|
|
14040
|
+
}), method(_void(), array(SiteZoneSchema)), method(object({
|
|
14041
|
+
name: string(),
|
|
14042
|
+
icon: LocationIconIdSchema.nullable().optional()
|
|
14043
|
+
}), _void(), {
|
|
14044
|
+
kind: "mutation",
|
|
14045
|
+
auth: "admin"
|
|
14046
|
+
}), method(object({ name: string() }), _void(), {
|
|
14047
|
+
kind: "mutation",
|
|
14048
|
+
auth: "admin"
|
|
14049
|
+
}), method(object({
|
|
14050
|
+
from: string(),
|
|
14051
|
+
to: string()
|
|
14052
|
+
}), _void(), {
|
|
14053
|
+
kind: "mutation",
|
|
14054
|
+
auth: "admin"
|
|
14055
|
+
}), method(object({
|
|
14056
|
+
location: string(),
|
|
14057
|
+
zone: string().nullable()
|
|
14058
|
+
}), _void(), {
|
|
14059
|
+
kind: "mutation",
|
|
14060
|
+
auth: "admin"
|
|
13970
14061
|
}), method(object({
|
|
13971
14062
|
deviceId: number(),
|
|
13972
14063
|
disabled: boolean()
|
|
@@ -32804,6 +32895,12 @@ Object.freeze({
|
|
|
32804
32895
|
addonId: null,
|
|
32805
32896
|
access: "view"
|
|
32806
32897
|
},
|
|
32898
|
+
"deviceManager.listLocationDescriptions": {
|
|
32899
|
+
capName: "device-manager",
|
|
32900
|
+
capScope: "system",
|
|
32901
|
+
addonId: null,
|
|
32902
|
+
access: "view"
|
|
32903
|
+
},
|
|
32807
32904
|
"deviceManager.listLocationIcons": {
|
|
32808
32905
|
capName: "device-manager",
|
|
32809
32906
|
capScope: "system",
|
|
@@ -32822,6 +32919,12 @@ Object.freeze({
|
|
|
32822
32919
|
addonId: null,
|
|
32823
32920
|
access: "view"
|
|
32824
32921
|
},
|
|
32922
|
+
"deviceManager.listSiteZones": {
|
|
32923
|
+
capName: "device-manager",
|
|
32924
|
+
capScope: "system",
|
|
32925
|
+
addonId: null,
|
|
32926
|
+
access: "view"
|
|
32927
|
+
},
|
|
32825
32928
|
"deviceManager.listWrappersForCap": {
|
|
32826
32929
|
capName: "device-manager",
|
|
32827
32930
|
capScope: "system",
|
|
@@ -32906,12 +33009,24 @@ Object.freeze({
|
|
|
32906
33009
|
addonId: null,
|
|
32907
33010
|
access: "delete"
|
|
32908
33011
|
},
|
|
33012
|
+
"deviceManager.removeSiteZone": {
|
|
33013
|
+
capName: "device-manager",
|
|
33014
|
+
capScope: "system",
|
|
33015
|
+
addonId: null,
|
|
33016
|
+
access: "delete"
|
|
33017
|
+
},
|
|
32909
33018
|
"deviceManager.renameLocation": {
|
|
32910
33019
|
capName: "device-manager",
|
|
32911
33020
|
capScope: "system",
|
|
32912
33021
|
addonId: null,
|
|
32913
33022
|
access: "create"
|
|
32914
33023
|
},
|
|
33024
|
+
"deviceManager.renameSiteZone": {
|
|
33025
|
+
capName: "device-manager",
|
|
33026
|
+
capScope: "system",
|
|
33027
|
+
addonId: null,
|
|
33028
|
+
access: "create"
|
|
33029
|
+
},
|
|
32915
33030
|
"deviceManager.runDeviceAction": {
|
|
32916
33031
|
capName: "device-manager",
|
|
32917
33032
|
capScope: "system",
|
|
@@ -32954,12 +33069,24 @@ Object.freeze({
|
|
|
32954
33069
|
addonId: null,
|
|
32955
33070
|
access: "create"
|
|
32956
33071
|
},
|
|
33072
|
+
"deviceManager.setLocationDescription": {
|
|
33073
|
+
capName: "device-manager",
|
|
33074
|
+
capScope: "system",
|
|
33075
|
+
addonId: null,
|
|
33076
|
+
access: "create"
|
|
33077
|
+
},
|
|
32957
33078
|
"deviceManager.setLocationIcon": {
|
|
32958
33079
|
capName: "device-manager",
|
|
32959
33080
|
capScope: "system",
|
|
32960
33081
|
addonId: null,
|
|
32961
33082
|
access: "create"
|
|
32962
33083
|
},
|
|
33084
|
+
"deviceManager.setLocationZone": {
|
|
33085
|
+
capName: "device-manager",
|
|
33086
|
+
capScope: "system",
|
|
33087
|
+
addonId: null,
|
|
33088
|
+
access: "create"
|
|
33089
|
+
},
|
|
32963
33090
|
"deviceManager.setMetadata": {
|
|
32964
33091
|
capName: "device-manager",
|
|
32965
33092
|
capScope: "system",
|
|
@@ -32990,6 +33117,12 @@ Object.freeze({
|
|
|
32990
33117
|
addonId: null,
|
|
32991
33118
|
access: "create"
|
|
32992
33119
|
},
|
|
33120
|
+
"deviceManager.setSiteZone": {
|
|
33121
|
+
capName: "device-manager",
|
|
33122
|
+
capScope: "system",
|
|
33123
|
+
addonId: null,
|
|
33124
|
+
access: "create"
|
|
33125
|
+
},
|
|
32993
33126
|
"deviceManager.setStreamProfileMap": {
|
|
32994
33127
|
capName: "device-manager",
|
|
32995
33128
|
capScope: "system",
|
package/dist/addon.mjs
CHANGED
|
@@ -13423,6 +13423,70 @@ var LocationIconAssignmentSchema = object({
|
|
|
13423
13423
|
locationKey: string(),
|
|
13424
13424
|
icon: LocationIconIdSchema
|
|
13425
13425
|
});
|
|
13426
|
+
/**
|
|
13427
|
+
* One (location, description) assignment as it travels.
|
|
13428
|
+
*
|
|
13429
|
+
* Same key discipline as {@link LocationIconAssignmentSchema}, and for the same
|
|
13430
|
+
* reason: this lived for a while in the post-analysis addon's own settings,
|
|
13431
|
+
* keyed by a HAND-TYPED label matched exactly and case-sensitively. A rename in
|
|
13432
|
+
* the Locations page carried the icon and silently orphaned the description —
|
|
13433
|
+
* two authorities for one thing, joined by two different rules. Now both hang
|
|
13434
|
+
* off the location itself, on `locationIconKey`.
|
|
13435
|
+
*/
|
|
13436
|
+
var LocationDescriptionAssignmentSchema = object({
|
|
13437
|
+
locationKey: string(),
|
|
13438
|
+
description: string()
|
|
13439
|
+
});
|
|
13440
|
+
/**
|
|
13441
|
+
* A SITE ZONE — a named part of the property that several locations belong to.
|
|
13442
|
+
*
|
|
13443
|
+
* "Zona notte" holds every bedroom; "Zona giorno" the living room and the
|
|
13444
|
+
* kitchen. A camera belongs to exactly one location, and a location to at most
|
|
13445
|
+
* one zone, so a camera's zone is derived and never stored on the device: the
|
|
13446
|
+
* whole point of this entity is that grouping rooms touches no device row.
|
|
13447
|
+
*
|
|
13448
|
+
* ## Why not `zone`
|
|
13449
|
+
*
|
|
13450
|
+
* Because `zone` is already the most loaded word in this product: 612 source
|
|
13451
|
+
* files and 24 Italian strings where it means a DETECTION zone drawn on a
|
|
13452
|
+
* camera. The two are unrelated — one is a polygon in a frame, the other is a
|
|
13453
|
+
* set of rooms — and a reader who confuses them will look for a camera's
|
|
13454
|
+
* bedrooms. So the code says `siteZone` everywhere, and the UI frees the plain
|
|
13455
|
+
* word by calling the drawn one what it actually is: a detection zone.
|
|
13456
|
+
*
|
|
13457
|
+
* ## The key
|
|
13458
|
+
*
|
|
13459
|
+
* `siteZoneKey(label)` — trimmed, lower-cased, the SAME derivation locations
|
|
13460
|
+
* use (`locationIconKey`). Membership and the icon both hang off it, so a
|
|
13461
|
+
* case-only rename keeps them, which is exactly the orphaning that cost us a
|
|
13462
|
+
* silently-dropped location description.
|
|
13463
|
+
*
|
|
13464
|
+
* The icon vocabulary is the location one, unchanged: a zone is drawn on the
|
|
13465
|
+
* same two surfaces by the same glyph map, so a second vocabulary would be a
|
|
13466
|
+
* second thing to keep drawable (`scripts/check-location-icons-drawable.ts`).
|
|
13467
|
+
*/
|
|
13468
|
+
/**
|
|
13469
|
+
* One zone as it travels: its key, the label the operator typed, its icon and
|
|
13470
|
+
* the locations inside it.
|
|
13471
|
+
*
|
|
13472
|
+
* The LABEL is carried alongside the key because the key is lossy on purpose —
|
|
13473
|
+
* a surface must show "Zona notte", not "zona notte". Locations are carried
|
|
13474
|
+
* here, rather than left to a second call, because every consumer wants both
|
|
13475
|
+
* at once and a viewer that asked twice could render a zone whose membership
|
|
13476
|
+
* it has not fetched yet.
|
|
13477
|
+
*
|
|
13478
|
+
* `icon: null` means nobody chose one, which is NOT the fallback pin: only one
|
|
13479
|
+
* of those two is a choice, and a picker has to draw them differently.
|
|
13480
|
+
*/
|
|
13481
|
+
var SiteZoneSchema = object({
|
|
13482
|
+
zoneKey: string(),
|
|
13483
|
+
label: string(),
|
|
13484
|
+
icon: LocationIconIdSchema.nullable(),
|
|
13485
|
+
/** Folded location keys, sorted. A location listed here need not be
|
|
13486
|
+
* REGISTERED — devices carry labels nobody registered, and those rooms are
|
|
13487
|
+
* the ones that most want grouping. */
|
|
13488
|
+
locationKeys: array(string())
|
|
13489
|
+
});
|
|
13426
13490
|
var ProviderStatusSchema = object({
|
|
13427
13491
|
connected: boolean(),
|
|
13428
13492
|
deviceCount: number(),
|
|
@@ -13940,6 +14004,33 @@ method(object({
|
|
|
13940
14004
|
}), _void(), {
|
|
13941
14005
|
kind: "mutation",
|
|
13942
14006
|
auth: "admin"
|
|
14007
|
+
}), method(_void(), array(LocationDescriptionAssignmentSchema)), method(object({
|
|
14008
|
+
location: string(),
|
|
14009
|
+
description: string().max(400).nullable()
|
|
14010
|
+
}), _void(), {
|
|
14011
|
+
kind: "mutation",
|
|
14012
|
+
auth: "admin"
|
|
14013
|
+
}), method(_void(), array(SiteZoneSchema)), method(object({
|
|
14014
|
+
name: string(),
|
|
14015
|
+
icon: LocationIconIdSchema.nullable().optional()
|
|
14016
|
+
}), _void(), {
|
|
14017
|
+
kind: "mutation",
|
|
14018
|
+
auth: "admin"
|
|
14019
|
+
}), method(object({ name: string() }), _void(), {
|
|
14020
|
+
kind: "mutation",
|
|
14021
|
+
auth: "admin"
|
|
14022
|
+
}), method(object({
|
|
14023
|
+
from: string(),
|
|
14024
|
+
to: string()
|
|
14025
|
+
}), _void(), {
|
|
14026
|
+
kind: "mutation",
|
|
14027
|
+
auth: "admin"
|
|
14028
|
+
}), method(object({
|
|
14029
|
+
location: string(),
|
|
14030
|
+
zone: string().nullable()
|
|
14031
|
+
}), _void(), {
|
|
14032
|
+
kind: "mutation",
|
|
14033
|
+
auth: "admin"
|
|
13943
14034
|
}), method(object({
|
|
13944
14035
|
deviceId: number(),
|
|
13945
14036
|
disabled: boolean()
|
|
@@ -32777,6 +32868,12 @@ Object.freeze({
|
|
|
32777
32868
|
addonId: null,
|
|
32778
32869
|
access: "view"
|
|
32779
32870
|
},
|
|
32871
|
+
"deviceManager.listLocationDescriptions": {
|
|
32872
|
+
capName: "device-manager",
|
|
32873
|
+
capScope: "system",
|
|
32874
|
+
addonId: null,
|
|
32875
|
+
access: "view"
|
|
32876
|
+
},
|
|
32780
32877
|
"deviceManager.listLocationIcons": {
|
|
32781
32878
|
capName: "device-manager",
|
|
32782
32879
|
capScope: "system",
|
|
@@ -32795,6 +32892,12 @@ Object.freeze({
|
|
|
32795
32892
|
addonId: null,
|
|
32796
32893
|
access: "view"
|
|
32797
32894
|
},
|
|
32895
|
+
"deviceManager.listSiteZones": {
|
|
32896
|
+
capName: "device-manager",
|
|
32897
|
+
capScope: "system",
|
|
32898
|
+
addonId: null,
|
|
32899
|
+
access: "view"
|
|
32900
|
+
},
|
|
32798
32901
|
"deviceManager.listWrappersForCap": {
|
|
32799
32902
|
capName: "device-manager",
|
|
32800
32903
|
capScope: "system",
|
|
@@ -32879,12 +32982,24 @@ Object.freeze({
|
|
|
32879
32982
|
addonId: null,
|
|
32880
32983
|
access: "delete"
|
|
32881
32984
|
},
|
|
32985
|
+
"deviceManager.removeSiteZone": {
|
|
32986
|
+
capName: "device-manager",
|
|
32987
|
+
capScope: "system",
|
|
32988
|
+
addonId: null,
|
|
32989
|
+
access: "delete"
|
|
32990
|
+
},
|
|
32882
32991
|
"deviceManager.renameLocation": {
|
|
32883
32992
|
capName: "device-manager",
|
|
32884
32993
|
capScope: "system",
|
|
32885
32994
|
addonId: null,
|
|
32886
32995
|
access: "create"
|
|
32887
32996
|
},
|
|
32997
|
+
"deviceManager.renameSiteZone": {
|
|
32998
|
+
capName: "device-manager",
|
|
32999
|
+
capScope: "system",
|
|
33000
|
+
addonId: null,
|
|
33001
|
+
access: "create"
|
|
33002
|
+
},
|
|
32888
33003
|
"deviceManager.runDeviceAction": {
|
|
32889
33004
|
capName: "device-manager",
|
|
32890
33005
|
capScope: "system",
|
|
@@ -32927,12 +33042,24 @@ Object.freeze({
|
|
|
32927
33042
|
addonId: null,
|
|
32928
33043
|
access: "create"
|
|
32929
33044
|
},
|
|
33045
|
+
"deviceManager.setLocationDescription": {
|
|
33046
|
+
capName: "device-manager",
|
|
33047
|
+
capScope: "system",
|
|
33048
|
+
addonId: null,
|
|
33049
|
+
access: "create"
|
|
33050
|
+
},
|
|
32930
33051
|
"deviceManager.setLocationIcon": {
|
|
32931
33052
|
capName: "device-manager",
|
|
32932
33053
|
capScope: "system",
|
|
32933
33054
|
addonId: null,
|
|
32934
33055
|
access: "create"
|
|
32935
33056
|
},
|
|
33057
|
+
"deviceManager.setLocationZone": {
|
|
33058
|
+
capName: "device-manager",
|
|
33059
|
+
capScope: "system",
|
|
33060
|
+
addonId: null,
|
|
33061
|
+
access: "create"
|
|
33062
|
+
},
|
|
32936
33063
|
"deviceManager.setMetadata": {
|
|
32937
33064
|
capName: "device-manager",
|
|
32938
33065
|
capScope: "system",
|
|
@@ -32963,6 +33090,12 @@ Object.freeze({
|
|
|
32963
33090
|
addonId: null,
|
|
32964
33091
|
access: "create"
|
|
32965
33092
|
},
|
|
33093
|
+
"deviceManager.setSiteZone": {
|
|
33094
|
+
capName: "device-manager",
|
|
33095
|
+
capScope: "system",
|
|
33096
|
+
addonId: null,
|
|
33097
|
+
access: "create"
|
|
33098
|
+
},
|
|
32966
33099
|
"deviceManager.setStreamProfileMap": {
|
|
32967
33100
|
capName: "device-manager",
|
|
32968
33101
|
capScope: "system",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-notifiers",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.111",
|
|
4
4
|
"description": "System notifiers addon for CamStack — a `notification-output` collection provider hosting per-kind notifier adapters (ntfy, pushover, gotify, telegram, discord, webhook, zentik).",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|