@camstack/addon-notifiers 1.2.126 → 1.2.127
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 +36 -54
- package/dist/addon.mjs +36 -54
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -10689,11 +10689,11 @@ var ModelVariantGroupSchema = object({
|
|
|
10689
10689
|
/** Quantization axis. Omit ⇒ the fp32 base build. */
|
|
10690
10690
|
precision: _enum(["fp32", "int8"]).optional(),
|
|
10691
10691
|
/**
|
|
10692
|
-
*
|
|
10693
|
-
*
|
|
10694
|
-
*
|
|
10692
|
+
* Training / latency-variant axis. Omit ⇒ the standard build. `test` marks
|
|
10693
|
+
* an alternate training of the same family (Scrypted `relu_test`); chip
|
|
10694
|
+
* label is "Test".
|
|
10695
10695
|
*/
|
|
10696
|
-
optimization: _enum(["standard", "
|
|
10696
|
+
optimization: _enum(["standard", "test"]).optional(),
|
|
10697
10697
|
/**
|
|
10698
10698
|
* Input-resolution axis (square input side, px). Omit ⇒ the family's native
|
|
10699
10699
|
* resolution (640 for yolo26). Reduced-input builds (320 / 256) are a big,
|
|
@@ -10716,9 +10716,10 @@ var ModelProviderIdSchema = _enum([
|
|
|
10716
10716
|
* are per upstream. A persisted custom-model row written when this field was a
|
|
10717
10717
|
* string still parses — the string is lifted into `{ weights }`.
|
|
10718
10718
|
*
|
|
10719
|
-
* Every licence surface (the
|
|
10720
|
-
*
|
|
10721
|
-
*
|
|
10719
|
+
* Every machine licence surface (`THIRD_PARTY_MODELS.md`, the Hugging Face
|
|
10720
|
+
* model table) is GENERATED from these records by
|
|
10721
|
+
* `scripts/gen-model-licenses.ts` (D661). Operator-facing docs live in
|
|
10722
|
+
* `camstack/docs` → `/docs/detection/models`.
|
|
10722
10723
|
*/
|
|
10723
10724
|
var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { weights: value } : value, object({
|
|
10724
10725
|
/** SPDX id of the WEIGHTS' terms, a `LicenseRef-*` for non-SPDX terms, or `UNKNOWN`. */
|
|
@@ -17250,7 +17251,7 @@ method(object({
|
|
|
17250
17251
|
timeoutMs: 6e5
|
|
17251
17252
|
});
|
|
17252
17253
|
method(object({
|
|
17253
|
-
|
|
17254
|
+
targetNodeId: string(),
|
|
17254
17255
|
modelId: string(),
|
|
17255
17256
|
format: _enum(MODEL_FORMATS),
|
|
17256
17257
|
entry: ModelCatalogEntrySchema
|
|
@@ -21201,39 +21202,19 @@ Object.freeze(Object.fromEntries([{
|
|
|
21201
21202
|
label: "Face recognition model",
|
|
21202
21203
|
defaultModelId: "auraface-r100",
|
|
21203
21204
|
indexName: "the enrolled face gallery",
|
|
21204
|
-
options: [
|
|
21205
|
-
|
|
21206
|
-
|
|
21207
|
-
|
|
21208
|
-
},
|
|
21209
|
-
{
|
|
21210
|
-
id: "arcface-r100",
|
|
21211
|
-
label: "ArcFace (ResNet34)"
|
|
21212
|
-
},
|
|
21213
|
-
{
|
|
21214
|
-
id: "inception-resnet-v1",
|
|
21215
|
-
label: "Inception ResNet V1"
|
|
21216
|
-
}
|
|
21217
|
-
]
|
|
21205
|
+
options: [{
|
|
21206
|
+
id: "auraface-r100",
|
|
21207
|
+
label: "AuraFace R100"
|
|
21208
|
+
}]
|
|
21218
21209
|
}, {
|
|
21219
21210
|
stepId: "clip-embedding",
|
|
21220
21211
|
label: "Semantic search model",
|
|
21221
|
-
defaultModelId: "
|
|
21212
|
+
defaultModelId: "siglip2-b16-224",
|
|
21222
21213
|
indexName: "the object semantic-search index",
|
|
21223
|
-
options: [
|
|
21224
|
-
|
|
21225
|
-
|
|
21226
|
-
|
|
21227
|
-
},
|
|
21228
|
-
{
|
|
21229
|
-
id: "mobileclip-s2",
|
|
21230
|
-
label: "MobileCLIP S2"
|
|
21231
|
-
},
|
|
21232
|
-
{
|
|
21233
|
-
id: "siglip2-b16-224",
|
|
21234
|
-
label: "SigLIP2 B/16 (Apache-2.0)"
|
|
21235
|
-
}
|
|
21236
|
-
]
|
|
21214
|
+
options: [{
|
|
21215
|
+
id: "siglip2-b16-224",
|
|
21216
|
+
label: "SigLIP2 B/16 (Apache-2.0)"
|
|
21217
|
+
}]
|
|
21237
21218
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
21238
21219
|
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
21239
21220
|
stepId: "face-embedding",
|
|
@@ -31945,7 +31926,13 @@ var OsdStatusSchema = object({ overlays: array(object({
|
|
|
31945
31926
|
*/
|
|
31946
31927
|
availablePositions: array(OsdPositionEnum).readonly(),
|
|
31947
31928
|
/** Firmware does not allow editing the `text` field (e.g. timestamp). */
|
|
31948
|
-
readOnly: boolean().optional()
|
|
31929
|
+
readOnly: boolean().optional(),
|
|
31930
|
+
/**
|
|
31931
|
+
* Firmware text ceiling for this overlay. Absent = no known limit.
|
|
31932
|
+
* The OSD manager truncates here on every write — never stores its own
|
|
31933
|
+
* copy on the binding.
|
|
31934
|
+
*/
|
|
31935
|
+
maxCharacters: number().int().positive().optional()
|
|
31949
31936
|
})).readonly() });
|
|
31950
31937
|
var OsdOverlayPatchSchema = object({
|
|
31951
31938
|
enabled: boolean().optional(),
|
|
@@ -31996,7 +31983,9 @@ var OsdTemplateBindingSchema = object({
|
|
|
31996
31983
|
valuePath: string().min(1).max(64),
|
|
31997
31984
|
/** Convert TO this unit at render (`tryConvertUnit`). Absent = source unit. */
|
|
31998
31985
|
displayUnit: string().max(16).optional(),
|
|
31999
|
-
maxDecimals: number().int().min(0).max(4).default(1)
|
|
31986
|
+
maxDecimals: number().int().min(0).max(4).default(1),
|
|
31987
|
+
/** Raw value → display text (same shape as slot binding). Empty string hides. */
|
|
31988
|
+
valueMap: record(string(), string()).optional()
|
|
32000
31989
|
});
|
|
32001
31990
|
/**
|
|
32002
31991
|
* A named template: bindings (alias → leaf field) + a parser that
|
|
@@ -32046,18 +32035,11 @@ var OsdSlotBindingSchema = object({
|
|
|
32046
32035
|
source: OsdSourceSchema,
|
|
32047
32036
|
/** `${value}` and `${unit}` are substituted; every occurrence. */
|
|
32048
32037
|
template: string().max(96).default("${value}"),
|
|
32049
|
-
/** Truncate with an ellipsis past this length. Absent = no limit. */
|
|
32050
|
-
maxCharacters: number().int().min(4).max(64).optional(),
|
|
32051
32038
|
/**
|
|
32052
32039
|
* Decimal places for a numeric value. `0` yields an integer — the
|
|
32053
32040
|
* documented workaround for firmwares that reject `.` in overlay text.
|
|
32054
32041
|
*/
|
|
32055
32042
|
maxDecimals: number().int().min(0).max(4).default(1),
|
|
32056
|
-
/**
|
|
32057
|
-
* Appended via `${unit}` when no unit conversion produces a label.
|
|
32058
|
-
* Prefer `source.displayUnit` for converted device-state values.
|
|
32059
|
-
*/
|
|
32060
|
-
unitLabel: string().max(8).optional(),
|
|
32061
32043
|
/** Raw value → display text, e.g. `{"true":"MOTION","false":""}`. */
|
|
32062
32044
|
valueMap: record(string(), string()).optional(),
|
|
32063
32045
|
/** Time windows in which the slot is shown. Absent = always. */
|
|
@@ -32066,9 +32048,7 @@ var OsdSlotBindingSchema = object({
|
|
|
32066
32048
|
* Display gate, in the notification centre's condition vocabulary.
|
|
32067
32049
|
* Only the keys reported by `getConditionSupport` are accepted.
|
|
32068
32050
|
*/
|
|
32069
|
-
conditions: NcConditionsSchema.optional()
|
|
32070
|
-
/** Rendered when the gate is closed or the value unreadable. Empty = hide. */
|
|
32071
|
-
fallbackText: string().max(64).default("")
|
|
32051
|
+
conditions: NcConditionsSchema.optional()
|
|
32072
32052
|
});
|
|
32073
32053
|
/** One camera slot, as the operator sees it: firmware truth + our binding. */
|
|
32074
32054
|
var OsdSlotViewSchema = object({
|
|
@@ -48247,6 +48227,8 @@ var STATE_SUMMARY_VARS = [
|
|
|
48247
48227
|
[...RULE_TEXT],
|
|
48248
48228
|
[...RULE_TEXT],
|
|
48249
48229
|
[...RULE_TEXT],
|
|
48230
|
+
[...RULE_TEXT],
|
|
48231
|
+
[...RULE_TEXT],
|
|
48250
48232
|
...STATE_SUMMARY_VARS
|
|
48251
48233
|
];
|
|
48252
48234
|
new Set([
|
|
@@ -50623,12 +50605,12 @@ var BUCKETS_PATH = "/api/v1/buckets";
|
|
|
50623
50605
|
/** Zentik `deliveryType` enum — mirrors our declared level ids 1:1. */
|
|
50624
50606
|
var DEFAULT_DELIVERY_TYPE = "NORMAL";
|
|
50625
50607
|
/**
|
|
50626
|
-
* Backend `CreateMessageDto`
|
|
50627
|
-
*
|
|
50628
|
-
* `@MaxLength(100)`, `body` is optional `@MaxLength(500)`. Over-length → 400.
|
|
50608
|
+
* Backend `CreateMessageDto` title is REQUIRED and `@MaxLength(100)`.
|
|
50609
|
+
* Body has no CamStack truncate — model "no cap" like webhook (positive int).
|
|
50629
50610
|
*/
|
|
50630
50611
|
var TITLE_MAX_LEN = 100;
|
|
50631
|
-
|
|
50612
|
+
/** Positive int required by caps; large enough that degrade never truncates. */
|
|
50613
|
+
var NO_BODY_CAP = 1e6;
|
|
50632
50614
|
/** Non-empty fallback title when a notification carries no title. */
|
|
50633
50615
|
var FALLBACK_TITLE = "CamStack";
|
|
50634
50616
|
/** url-mode attachment ceiling (no hard doc limit; matrix §5 → 5). */
|
|
@@ -50981,7 +50963,7 @@ var NOTIFIER_ADAPTERS = [
|
|
|
50981
50963
|
actionIcons: true,
|
|
50982
50964
|
sound: true,
|
|
50983
50965
|
ttl: true,
|
|
50984
|
-
bodyMaxLen:
|
|
50966
|
+
bodyMaxLen: NO_BODY_CAP
|
|
50985
50967
|
}
|
|
50986
50968
|
},
|
|
50987
50969
|
destinationKeys: [
|
package/dist/addon.mjs
CHANGED
|
@@ -10662,11 +10662,11 @@ var ModelVariantGroupSchema = object({
|
|
|
10662
10662
|
/** Quantization axis. Omit ⇒ the fp32 base build. */
|
|
10663
10663
|
precision: _enum(["fp32", "int8"]).optional(),
|
|
10664
10664
|
/**
|
|
10665
|
-
*
|
|
10666
|
-
*
|
|
10667
|
-
*
|
|
10665
|
+
* Training / latency-variant axis. Omit ⇒ the standard build. `test` marks
|
|
10666
|
+
* an alternate training of the same family (Scrypted `relu_test`); chip
|
|
10667
|
+
* label is "Test".
|
|
10668
10668
|
*/
|
|
10669
|
-
optimization: _enum(["standard", "
|
|
10669
|
+
optimization: _enum(["standard", "test"]).optional(),
|
|
10670
10670
|
/**
|
|
10671
10671
|
* Input-resolution axis (square input side, px). Omit ⇒ the family's native
|
|
10672
10672
|
* resolution (640 for yolo26). Reduced-input builds (320 / 256) are a big,
|
|
@@ -10689,9 +10689,10 @@ var ModelProviderIdSchema = _enum([
|
|
|
10689
10689
|
* are per upstream. A persisted custom-model row written when this field was a
|
|
10690
10690
|
* string still parses — the string is lifted into `{ weights }`.
|
|
10691
10691
|
*
|
|
10692
|
-
* Every licence surface (the
|
|
10693
|
-
*
|
|
10694
|
-
*
|
|
10692
|
+
* Every machine licence surface (`THIRD_PARTY_MODELS.md`, the Hugging Face
|
|
10693
|
+
* model table) is GENERATED from these records by
|
|
10694
|
+
* `scripts/gen-model-licenses.ts` (D661). Operator-facing docs live in
|
|
10695
|
+
* `camstack/docs` → `/docs/detection/models`.
|
|
10695
10696
|
*/
|
|
10696
10697
|
var ModelLicenseSchema = preprocess((value) => typeof value === "string" ? { weights: value } : value, object({
|
|
10697
10698
|
/** SPDX id of the WEIGHTS' terms, a `LicenseRef-*` for non-SPDX terms, or `UNKNOWN`. */
|
|
@@ -17223,7 +17224,7 @@ method(object({
|
|
|
17223
17224
|
timeoutMs: 6e5
|
|
17224
17225
|
});
|
|
17225
17226
|
method(object({
|
|
17226
|
-
|
|
17227
|
+
targetNodeId: string(),
|
|
17227
17228
|
modelId: string(),
|
|
17228
17229
|
format: _enum(MODEL_FORMATS),
|
|
17229
17230
|
entry: ModelCatalogEntrySchema
|
|
@@ -21174,39 +21175,19 @@ Object.freeze(Object.fromEntries([{
|
|
|
21174
21175
|
label: "Face recognition model",
|
|
21175
21176
|
defaultModelId: "auraface-r100",
|
|
21176
21177
|
indexName: "the enrolled face gallery",
|
|
21177
|
-
options: [
|
|
21178
|
-
|
|
21179
|
-
|
|
21180
|
-
|
|
21181
|
-
},
|
|
21182
|
-
{
|
|
21183
|
-
id: "arcface-r100",
|
|
21184
|
-
label: "ArcFace (ResNet34)"
|
|
21185
|
-
},
|
|
21186
|
-
{
|
|
21187
|
-
id: "inception-resnet-v1",
|
|
21188
|
-
label: "Inception ResNet V1"
|
|
21189
|
-
}
|
|
21190
|
-
]
|
|
21178
|
+
options: [{
|
|
21179
|
+
id: "auraface-r100",
|
|
21180
|
+
label: "AuraFace R100"
|
|
21181
|
+
}]
|
|
21191
21182
|
}, {
|
|
21192
21183
|
stepId: "clip-embedding",
|
|
21193
21184
|
label: "Semantic search model",
|
|
21194
|
-
defaultModelId: "
|
|
21185
|
+
defaultModelId: "siglip2-b16-224",
|
|
21195
21186
|
indexName: "the object semantic-search index",
|
|
21196
|
-
options: [
|
|
21197
|
-
|
|
21198
|
-
|
|
21199
|
-
|
|
21200
|
-
},
|
|
21201
|
-
{
|
|
21202
|
-
id: "mobileclip-s2",
|
|
21203
|
-
label: "MobileCLIP S2"
|
|
21204
|
-
},
|
|
21205
|
-
{
|
|
21206
|
-
id: "siglip2-b16-224",
|
|
21207
|
-
label: "SigLIP2 B/16 (Apache-2.0)"
|
|
21208
|
-
}
|
|
21209
|
-
]
|
|
21187
|
+
options: [{
|
|
21188
|
+
id: "siglip2-b16-224",
|
|
21189
|
+
label: "SigLIP2 B/16 (Apache-2.0)"
|
|
21190
|
+
}]
|
|
21210
21191
|
}].map((s) => [s.stepId, s.defaultModelId])));
|
|
21211
21192
|
var CLUSTER_STEP_SETTING_FIELDS = [{
|
|
21212
21193
|
stepId: "face-embedding",
|
|
@@ -31918,7 +31899,13 @@ var OsdStatusSchema = object({ overlays: array(object({
|
|
|
31918
31899
|
*/
|
|
31919
31900
|
availablePositions: array(OsdPositionEnum).readonly(),
|
|
31920
31901
|
/** Firmware does not allow editing the `text` field (e.g. timestamp). */
|
|
31921
|
-
readOnly: boolean().optional()
|
|
31902
|
+
readOnly: boolean().optional(),
|
|
31903
|
+
/**
|
|
31904
|
+
* Firmware text ceiling for this overlay. Absent = no known limit.
|
|
31905
|
+
* The OSD manager truncates here on every write — never stores its own
|
|
31906
|
+
* copy on the binding.
|
|
31907
|
+
*/
|
|
31908
|
+
maxCharacters: number().int().positive().optional()
|
|
31922
31909
|
})).readonly() });
|
|
31923
31910
|
var OsdOverlayPatchSchema = object({
|
|
31924
31911
|
enabled: boolean().optional(),
|
|
@@ -31969,7 +31956,9 @@ var OsdTemplateBindingSchema = object({
|
|
|
31969
31956
|
valuePath: string().min(1).max(64),
|
|
31970
31957
|
/** Convert TO this unit at render (`tryConvertUnit`). Absent = source unit. */
|
|
31971
31958
|
displayUnit: string().max(16).optional(),
|
|
31972
|
-
maxDecimals: number().int().min(0).max(4).default(1)
|
|
31959
|
+
maxDecimals: number().int().min(0).max(4).default(1),
|
|
31960
|
+
/** Raw value → display text (same shape as slot binding). Empty string hides. */
|
|
31961
|
+
valueMap: record(string(), string()).optional()
|
|
31973
31962
|
});
|
|
31974
31963
|
/**
|
|
31975
31964
|
* A named template: bindings (alias → leaf field) + a parser that
|
|
@@ -32019,18 +32008,11 @@ var OsdSlotBindingSchema = object({
|
|
|
32019
32008
|
source: OsdSourceSchema,
|
|
32020
32009
|
/** `${value}` and `${unit}` are substituted; every occurrence. */
|
|
32021
32010
|
template: string().max(96).default("${value}"),
|
|
32022
|
-
/** Truncate with an ellipsis past this length. Absent = no limit. */
|
|
32023
|
-
maxCharacters: number().int().min(4).max(64).optional(),
|
|
32024
32011
|
/**
|
|
32025
32012
|
* Decimal places for a numeric value. `0` yields an integer — the
|
|
32026
32013
|
* documented workaround for firmwares that reject `.` in overlay text.
|
|
32027
32014
|
*/
|
|
32028
32015
|
maxDecimals: number().int().min(0).max(4).default(1),
|
|
32029
|
-
/**
|
|
32030
|
-
* Appended via `${unit}` when no unit conversion produces a label.
|
|
32031
|
-
* Prefer `source.displayUnit` for converted device-state values.
|
|
32032
|
-
*/
|
|
32033
|
-
unitLabel: string().max(8).optional(),
|
|
32034
32016
|
/** Raw value → display text, e.g. `{"true":"MOTION","false":""}`. */
|
|
32035
32017
|
valueMap: record(string(), string()).optional(),
|
|
32036
32018
|
/** Time windows in which the slot is shown. Absent = always. */
|
|
@@ -32039,9 +32021,7 @@ var OsdSlotBindingSchema = object({
|
|
|
32039
32021
|
* Display gate, in the notification centre's condition vocabulary.
|
|
32040
32022
|
* Only the keys reported by `getConditionSupport` are accepted.
|
|
32041
32023
|
*/
|
|
32042
|
-
conditions: NcConditionsSchema.optional()
|
|
32043
|
-
/** Rendered when the gate is closed or the value unreadable. Empty = hide. */
|
|
32044
|
-
fallbackText: string().max(64).default("")
|
|
32024
|
+
conditions: NcConditionsSchema.optional()
|
|
32045
32025
|
});
|
|
32046
32026
|
/** One camera slot, as the operator sees it: firmware truth + our binding. */
|
|
32047
32027
|
var OsdSlotViewSchema = object({
|
|
@@ -48220,6 +48200,8 @@ var STATE_SUMMARY_VARS = [
|
|
|
48220
48200
|
[...RULE_TEXT],
|
|
48221
48201
|
[...RULE_TEXT],
|
|
48222
48202
|
[...RULE_TEXT],
|
|
48203
|
+
[...RULE_TEXT],
|
|
48204
|
+
[...RULE_TEXT],
|
|
48223
48205
|
...STATE_SUMMARY_VARS
|
|
48224
48206
|
];
|
|
48225
48207
|
new Set([
|
|
@@ -50596,12 +50578,12 @@ var BUCKETS_PATH = "/api/v1/buckets";
|
|
|
50596
50578
|
/** Zentik `deliveryType` enum — mirrors our declared level ids 1:1. */
|
|
50597
50579
|
var DEFAULT_DELIVERY_TYPE = "NORMAL";
|
|
50598
50580
|
/**
|
|
50599
|
-
* Backend `CreateMessageDto`
|
|
50600
|
-
*
|
|
50601
|
-
* `@MaxLength(100)`, `body` is optional `@MaxLength(500)`. Over-length → 400.
|
|
50581
|
+
* Backend `CreateMessageDto` title is REQUIRED and `@MaxLength(100)`.
|
|
50582
|
+
* Body has no CamStack truncate — model "no cap" like webhook (positive int).
|
|
50602
50583
|
*/
|
|
50603
50584
|
var TITLE_MAX_LEN = 100;
|
|
50604
|
-
|
|
50585
|
+
/** Positive int required by caps; large enough that degrade never truncates. */
|
|
50586
|
+
var NO_BODY_CAP = 1e6;
|
|
50605
50587
|
/** Non-empty fallback title when a notification carries no title. */
|
|
50606
50588
|
var FALLBACK_TITLE = "CamStack";
|
|
50607
50589
|
/** url-mode attachment ceiling (no hard doc limit; matrix §5 → 5). */
|
|
@@ -50954,7 +50936,7 @@ var NOTIFIER_ADAPTERS = [
|
|
|
50954
50936
|
actionIcons: true,
|
|
50955
50937
|
sound: true,
|
|
50956
50938
|
ttl: true,
|
|
50957
|
-
bodyMaxLen:
|
|
50939
|
+
bodyMaxLen: NO_BODY_CAP
|
|
50958
50940
|
}
|
|
50959
50941
|
},
|
|
50960
50942
|
destinationKeys: [
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-notifiers",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.127",
|
|
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",
|