@camstack/addon-provider-unraid 0.2.16 → 0.2.17
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 +76 -8
- package/dist/addon.mjs +76 -8
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -13215,11 +13215,33 @@ var NotificationFormatSchema = _enum([
|
|
|
13215
13215
|
* Named by INTENT, never by glyph. "check" would tie the vocabulary to one
|
|
13216
13216
|
* renderer's icon set; "acknowledge" survives an adapter that draws it
|
|
13217
13217
|
* differently.
|
|
13218
|
+
*
|
|
13219
|
+
* ── A TOKEN IS NOT A WIRE VALUE ─────────────────────────────────────
|
|
13220
|
+
*
|
|
13221
|
+
* These names are for US. **No adapter may forward one verbatim.** Each maps
|
|
13222
|
+
* the whole set onto its own renderer's vocabulary through a
|
|
13223
|
+
* `Record<NotificationActionIcon, string>` — a Record, never a lookup with a
|
|
13224
|
+
* fallback, so adding a member here fails every adapter's build until someone
|
|
13225
|
+
* decides its glyph, which is the only place that decision can be made
|
|
13226
|
+
* honestly.
|
|
13227
|
+
*
|
|
13228
|
+
* This paragraph is the bug. Zentik declared `actionIcons: true` and passed
|
|
13229
|
+
* `disarm` straight through; iOS feeds that string to
|
|
13230
|
+
* `UNNotificationActionIcon(systemImageName:)`, `disarm` is not an SF Symbol,
|
|
13231
|
+
* and every snooze and alarm button arrived BLANK. A pass-through is not a
|
|
13232
|
+
* mapping, and "the field is documented" is not "the value renders".
|
|
13233
|
+
*
|
|
13234
|
+
* Adding a member is TRAIN-BOUND. The enum lives in the published
|
|
13235
|
+
* `@camstack/server` closure and the cap seam validates against the HUB's copy,
|
|
13236
|
+
* so an addon that emits a token the running hub does not know does not lose an
|
|
13237
|
+
* icon — its whole `send` fails Zod validation and the notification never
|
|
13238
|
+
* arrives. Never emit a new token from an addon before the train carrying it.
|
|
13218
13239
|
*/
|
|
13219
13240
|
var NotificationActionIconSchema = _enum([
|
|
13220
13241
|
"acknowledge",
|
|
13221
13242
|
"dismiss",
|
|
13222
13243
|
"silence",
|
|
13244
|
+
"snooze",
|
|
13223
13245
|
"view",
|
|
13224
13246
|
"play",
|
|
13225
13247
|
"open",
|
|
@@ -13227,9 +13249,13 @@ var NotificationActionIconSchema = _enum([
|
|
|
13227
13249
|
"lock",
|
|
13228
13250
|
"unlock",
|
|
13229
13251
|
"arm",
|
|
13252
|
+
"arm-home",
|
|
13253
|
+
"arm-away",
|
|
13254
|
+
"arm-night",
|
|
13230
13255
|
"disarm",
|
|
13231
13256
|
"light",
|
|
13232
|
-
"alert"
|
|
13257
|
+
"alert",
|
|
13258
|
+
"camera"
|
|
13233
13259
|
]);
|
|
13234
13260
|
/** A single tap-through action button. */
|
|
13235
13261
|
var NotificationActionSchema = object({
|
|
@@ -13429,6 +13455,24 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
|
|
|
13429
13455
|
targetId: string(),
|
|
13430
13456
|
enabled: boolean()
|
|
13431
13457
|
}), _void(), { kind: "mutation" });
|
|
13458
|
+
new Set([
|
|
13459
|
+
{
|
|
13460
|
+
id: "person",
|
|
13461
|
+
name: "Person"
|
|
13462
|
+
},
|
|
13463
|
+
{
|
|
13464
|
+
id: "vehicle",
|
|
13465
|
+
name: "Vehicle"
|
|
13466
|
+
},
|
|
13467
|
+
{
|
|
13468
|
+
id: "animal",
|
|
13469
|
+
name: "Animal"
|
|
13470
|
+
},
|
|
13471
|
+
{
|
|
13472
|
+
id: "package",
|
|
13473
|
+
name: "Package"
|
|
13474
|
+
}
|
|
13475
|
+
].map((l) => l.id));
|
|
13432
13476
|
var COCO_TO_MACRO = {
|
|
13433
13477
|
mapping: {
|
|
13434
13478
|
person: "person",
|
|
@@ -14264,6 +14308,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
14264
14308
|
"alarm-triggered",
|
|
14265
14309
|
"alarm-armed",
|
|
14266
14310
|
"alarm-disarmed",
|
|
14311
|
+
"alarm-arming",
|
|
14312
|
+
"alarm-arm-refused",
|
|
14267
14313
|
"camera-online",
|
|
14268
14314
|
"camera-offline",
|
|
14269
14315
|
"camera-disabled",
|
|
@@ -17536,6 +17582,22 @@ var detectionFpsField = {
|
|
|
17536
17582
|
default: 10,
|
|
17537
17583
|
step: 1
|
|
17538
17584
|
};
|
|
17585
|
+
/**
|
|
17586
|
+
* The occupancy re-check interval. DEFAULT 300 s (2026-08-13 — was 30 s).
|
|
17587
|
+
*
|
|
17588
|
+
* The recheck is now on by default (a parked car is invisible to occupancy
|
|
17589
|
+
* rules until the stationary registry has been rebuilt by motion, which after a
|
|
17590
|
+
* restart may be never on a quiet camera). Each cycle re-subscribes a detection
|
|
17591
|
+
* session — an RTSP re-dial — so the switch is only affordable at a WIDE
|
|
17592
|
+
* interval: 300 s is ~12 re-dials an hour per camera, against 120 at the old
|
|
17593
|
+
* 30 s. A parked car is therefore counted within 5 minutes of a restart.
|
|
17594
|
+
*
|
|
17595
|
+
* Why not wider: `max` is 300 and raising it is TRAIN-BOUND, not addon-bound —
|
|
17596
|
+
* the host validates `attachCamera` against ITS copy of this schema, so a
|
|
17597
|
+
* runner asked for 600 would be rejected by the hub until a `@camstack/server`
|
|
17598
|
+
* carrying the wider bound is installed everywhere. 300 is the widest value
|
|
17599
|
+
* that ships with an addon deploy.
|
|
17600
|
+
*/
|
|
17539
17601
|
var occupancyRecheckSecField = {
|
|
17540
17602
|
min: 0,
|
|
17541
17603
|
max: 300,
|
|
@@ -17737,15 +17799,21 @@ var RunnerCameraConfigSchema = object({
|
|
|
17737
17799
|
*/
|
|
17738
17800
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
17739
17801
|
/**
|
|
17740
|
-
* Master toggle for the occupancy re-check. When `false`
|
|
17741
|
-
*
|
|
17742
|
-
* this is off by default because the recheck re-subscribes a detection session
|
|
17743
|
-
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
17744
|
-
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
17802
|
+
* Master toggle for the occupancy re-check. When `false` the runner never arms
|
|
17803
|
+
* the periodic recheck timer, regardless of `occupancyRecheckSec`; the
|
|
17745
17804
|
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
17746
17805
|
* (and only render) when this is enabled.
|
|
17747
|
-
|
|
17748
|
-
|
|
17806
|
+
*
|
|
17807
|
+
* DEFAULT `true` since 2026-08-13 (was `false`). It was off because the
|
|
17808
|
+
* recheck re-subscribes a detection session every N seconds while `watching`
|
|
17809
|
+
* — each cycle creates+tears a session ⇒ an RTSP re-dial ⇒ latency, a major
|
|
17810
|
+
* pull-decoder churn source. What that bought was a blind spot: a STATIONARY
|
|
17811
|
+
* object is counted only while the stationary registry holds it, and the
|
|
17812
|
+
* registry rebuilds from motion, so after a restart a parked car was invisible
|
|
17813
|
+
* to every occupancy rule until something moved in front of it. The churn is
|
|
17814
|
+
* now paid on the interval instead — see `occupancyRecheckSecField`.
|
|
17815
|
+
*/
|
|
17816
|
+
occupancyRecheckEnabled: boolean().default(true),
|
|
17749
17817
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
17750
17818
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
17751
17819
|
/**
|
package/dist/addon.mjs
CHANGED
|
@@ -13214,11 +13214,33 @@ var NotificationFormatSchema = _enum([
|
|
|
13214
13214
|
* Named by INTENT, never by glyph. "check" would tie the vocabulary to one
|
|
13215
13215
|
* renderer's icon set; "acknowledge" survives an adapter that draws it
|
|
13216
13216
|
* differently.
|
|
13217
|
+
*
|
|
13218
|
+
* ── A TOKEN IS NOT A WIRE VALUE ─────────────────────────────────────
|
|
13219
|
+
*
|
|
13220
|
+
* These names are for US. **No adapter may forward one verbatim.** Each maps
|
|
13221
|
+
* the whole set onto its own renderer's vocabulary through a
|
|
13222
|
+
* `Record<NotificationActionIcon, string>` — a Record, never a lookup with a
|
|
13223
|
+
* fallback, so adding a member here fails every adapter's build until someone
|
|
13224
|
+
* decides its glyph, which is the only place that decision can be made
|
|
13225
|
+
* honestly.
|
|
13226
|
+
*
|
|
13227
|
+
* This paragraph is the bug. Zentik declared `actionIcons: true` and passed
|
|
13228
|
+
* `disarm` straight through; iOS feeds that string to
|
|
13229
|
+
* `UNNotificationActionIcon(systemImageName:)`, `disarm` is not an SF Symbol,
|
|
13230
|
+
* and every snooze and alarm button arrived BLANK. A pass-through is not a
|
|
13231
|
+
* mapping, and "the field is documented" is not "the value renders".
|
|
13232
|
+
*
|
|
13233
|
+
* Adding a member is TRAIN-BOUND. The enum lives in the published
|
|
13234
|
+
* `@camstack/server` closure and the cap seam validates against the HUB's copy,
|
|
13235
|
+
* so an addon that emits a token the running hub does not know does not lose an
|
|
13236
|
+
* icon — its whole `send` fails Zod validation and the notification never
|
|
13237
|
+
* arrives. Never emit a new token from an addon before the train carrying it.
|
|
13217
13238
|
*/
|
|
13218
13239
|
var NotificationActionIconSchema = _enum([
|
|
13219
13240
|
"acknowledge",
|
|
13220
13241
|
"dismiss",
|
|
13221
13242
|
"silence",
|
|
13243
|
+
"snooze",
|
|
13222
13244
|
"view",
|
|
13223
13245
|
"play",
|
|
13224
13246
|
"open",
|
|
@@ -13226,9 +13248,13 @@ var NotificationActionIconSchema = _enum([
|
|
|
13226
13248
|
"lock",
|
|
13227
13249
|
"unlock",
|
|
13228
13250
|
"arm",
|
|
13251
|
+
"arm-home",
|
|
13252
|
+
"arm-away",
|
|
13253
|
+
"arm-night",
|
|
13229
13254
|
"disarm",
|
|
13230
13255
|
"light",
|
|
13231
|
-
"alert"
|
|
13256
|
+
"alert",
|
|
13257
|
+
"camera"
|
|
13232
13258
|
]);
|
|
13233
13259
|
/** A single tap-through action button. */
|
|
13234
13260
|
var NotificationActionSchema = object({
|
|
@@ -13428,6 +13454,24 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
|
|
|
13428
13454
|
targetId: string(),
|
|
13429
13455
|
enabled: boolean()
|
|
13430
13456
|
}), _void(), { kind: "mutation" });
|
|
13457
|
+
new Set([
|
|
13458
|
+
{
|
|
13459
|
+
id: "person",
|
|
13460
|
+
name: "Person"
|
|
13461
|
+
},
|
|
13462
|
+
{
|
|
13463
|
+
id: "vehicle",
|
|
13464
|
+
name: "Vehicle"
|
|
13465
|
+
},
|
|
13466
|
+
{
|
|
13467
|
+
id: "animal",
|
|
13468
|
+
name: "Animal"
|
|
13469
|
+
},
|
|
13470
|
+
{
|
|
13471
|
+
id: "package",
|
|
13472
|
+
name: "Package"
|
|
13473
|
+
}
|
|
13474
|
+
].map((l) => l.id));
|
|
13431
13475
|
var COCO_TO_MACRO = {
|
|
13432
13476
|
mapping: {
|
|
13433
13477
|
person: "person",
|
|
@@ -14263,6 +14307,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
14263
14307
|
"alarm-triggered",
|
|
14264
14308
|
"alarm-armed",
|
|
14265
14309
|
"alarm-disarmed",
|
|
14310
|
+
"alarm-arming",
|
|
14311
|
+
"alarm-arm-refused",
|
|
14266
14312
|
"camera-online",
|
|
14267
14313
|
"camera-offline",
|
|
14268
14314
|
"camera-disabled",
|
|
@@ -17535,6 +17581,22 @@ var detectionFpsField = {
|
|
|
17535
17581
|
default: 10,
|
|
17536
17582
|
step: 1
|
|
17537
17583
|
};
|
|
17584
|
+
/**
|
|
17585
|
+
* The occupancy re-check interval. DEFAULT 300 s (2026-08-13 — was 30 s).
|
|
17586
|
+
*
|
|
17587
|
+
* The recheck is now on by default (a parked car is invisible to occupancy
|
|
17588
|
+
* rules until the stationary registry has been rebuilt by motion, which after a
|
|
17589
|
+
* restart may be never on a quiet camera). Each cycle re-subscribes a detection
|
|
17590
|
+
* session — an RTSP re-dial — so the switch is only affordable at a WIDE
|
|
17591
|
+
* interval: 300 s is ~12 re-dials an hour per camera, against 120 at the old
|
|
17592
|
+
* 30 s. A parked car is therefore counted within 5 minutes of a restart.
|
|
17593
|
+
*
|
|
17594
|
+
* Why not wider: `max` is 300 and raising it is TRAIN-BOUND, not addon-bound —
|
|
17595
|
+
* the host validates `attachCamera` against ITS copy of this schema, so a
|
|
17596
|
+
* runner asked for 600 would be rejected by the hub until a `@camstack/server`
|
|
17597
|
+
* carrying the wider bound is installed everywhere. 300 is the widest value
|
|
17598
|
+
* that ships with an addon deploy.
|
|
17599
|
+
*/
|
|
17538
17600
|
var occupancyRecheckSecField = {
|
|
17539
17601
|
min: 0,
|
|
17540
17602
|
max: 300,
|
|
@@ -17736,15 +17798,21 @@ var RunnerCameraConfigSchema = object({
|
|
|
17736
17798
|
*/
|
|
17737
17799
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
17738
17800
|
/**
|
|
17739
|
-
* Master toggle for the occupancy re-check. When `false`
|
|
17740
|
-
*
|
|
17741
|
-
* this is off by default because the recheck re-subscribes a detection session
|
|
17742
|
-
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
17743
|
-
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
17801
|
+
* Master toggle for the occupancy re-check. When `false` the runner never arms
|
|
17802
|
+
* the periodic recheck timer, regardless of `occupancyRecheckSec`; the
|
|
17744
17803
|
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
17745
17804
|
* (and only render) when this is enabled.
|
|
17746
|
-
|
|
17747
|
-
|
|
17805
|
+
*
|
|
17806
|
+
* DEFAULT `true` since 2026-08-13 (was `false`). It was off because the
|
|
17807
|
+
* recheck re-subscribes a detection session every N seconds while `watching`
|
|
17808
|
+
* — each cycle creates+tears a session ⇒ an RTSP re-dial ⇒ latency, a major
|
|
17809
|
+
* pull-decoder churn source. What that bought was a blind spot: a STATIONARY
|
|
17810
|
+
* object is counted only while the stationary registry holds it, and the
|
|
17811
|
+
* registry rebuilds from motion, so after a restart a parked car was invisible
|
|
17812
|
+
* to every occupancy rule until something moved in front of it. The churn is
|
|
17813
|
+
* now paid on the interval instead — see `occupancyRecheckSecField`.
|
|
17814
|
+
*/
|
|
17815
|
+
occupancyRecheckEnabled: boolean().default(true),
|
|
17748
17816
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
17749
17817
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
17750
17818
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-unraid",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.17",
|
|
4
4
|
"description": "Unraid device-provider addon for CamStack — one Container per Unraid instance fanning out array, disk, docker and notification entities",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|