@camstack/addon-provider-rademacher 0.2.15 → 0.2.16
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
|
@@ -14200,11 +14200,33 @@ var NotificationFormatSchema = _enum([
|
|
|
14200
14200
|
* Named by INTENT, never by glyph. "check" would tie the vocabulary to one
|
|
14201
14201
|
* renderer's icon set; "acknowledge" survives an adapter that draws it
|
|
14202
14202
|
* differently.
|
|
14203
|
+
*
|
|
14204
|
+
* ── A TOKEN IS NOT A WIRE VALUE ─────────────────────────────────────
|
|
14205
|
+
*
|
|
14206
|
+
* These names are for US. **No adapter may forward one verbatim.** Each maps
|
|
14207
|
+
* the whole set onto its own renderer's vocabulary through a
|
|
14208
|
+
* `Record<NotificationActionIcon, string>` — a Record, never a lookup with a
|
|
14209
|
+
* fallback, so adding a member here fails every adapter's build until someone
|
|
14210
|
+
* decides its glyph, which is the only place that decision can be made
|
|
14211
|
+
* honestly.
|
|
14212
|
+
*
|
|
14213
|
+
* This paragraph is the bug. Zentik declared `actionIcons: true` and passed
|
|
14214
|
+
* `disarm` straight through; iOS feeds that string to
|
|
14215
|
+
* `UNNotificationActionIcon(systemImageName:)`, `disarm` is not an SF Symbol,
|
|
14216
|
+
* and every snooze and alarm button arrived BLANK. A pass-through is not a
|
|
14217
|
+
* mapping, and "the field is documented" is not "the value renders".
|
|
14218
|
+
*
|
|
14219
|
+
* Adding a member is TRAIN-BOUND. The enum lives in the published
|
|
14220
|
+
* `@camstack/server` closure and the cap seam validates against the HUB's copy,
|
|
14221
|
+
* so an addon that emits a token the running hub does not know does not lose an
|
|
14222
|
+
* icon — its whole `send` fails Zod validation and the notification never
|
|
14223
|
+
* arrives. Never emit a new token from an addon before the train carrying it.
|
|
14203
14224
|
*/
|
|
14204
14225
|
var NotificationActionIconSchema = _enum([
|
|
14205
14226
|
"acknowledge",
|
|
14206
14227
|
"dismiss",
|
|
14207
14228
|
"silence",
|
|
14229
|
+
"snooze",
|
|
14208
14230
|
"view",
|
|
14209
14231
|
"play",
|
|
14210
14232
|
"open",
|
|
@@ -14212,9 +14234,13 @@ var NotificationActionIconSchema = _enum([
|
|
|
14212
14234
|
"lock",
|
|
14213
14235
|
"unlock",
|
|
14214
14236
|
"arm",
|
|
14237
|
+
"arm-home",
|
|
14238
|
+
"arm-away",
|
|
14239
|
+
"arm-night",
|
|
14215
14240
|
"disarm",
|
|
14216
14241
|
"light",
|
|
14217
|
-
"alert"
|
|
14242
|
+
"alert",
|
|
14243
|
+
"camera"
|
|
14218
14244
|
]);
|
|
14219
14245
|
/** A single tap-through action button. */
|
|
14220
14246
|
var NotificationActionSchema = object({
|
|
@@ -14414,6 +14440,24 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
|
|
|
14414
14440
|
targetId: string(),
|
|
14415
14441
|
enabled: boolean()
|
|
14416
14442
|
}), _void(), { kind: "mutation" });
|
|
14443
|
+
new Set([
|
|
14444
|
+
{
|
|
14445
|
+
id: "person",
|
|
14446
|
+
name: "Person"
|
|
14447
|
+
},
|
|
14448
|
+
{
|
|
14449
|
+
id: "vehicle",
|
|
14450
|
+
name: "Vehicle"
|
|
14451
|
+
},
|
|
14452
|
+
{
|
|
14453
|
+
id: "animal",
|
|
14454
|
+
name: "Animal"
|
|
14455
|
+
},
|
|
14456
|
+
{
|
|
14457
|
+
id: "package",
|
|
14458
|
+
name: "Package"
|
|
14459
|
+
}
|
|
14460
|
+
].map((l) => l.id));
|
|
14417
14461
|
var COCO_TO_MACRO = {
|
|
14418
14462
|
mapping: {
|
|
14419
14463
|
person: "person",
|
|
@@ -15249,6 +15293,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
15249
15293
|
"alarm-triggered",
|
|
15250
15294
|
"alarm-armed",
|
|
15251
15295
|
"alarm-disarmed",
|
|
15296
|
+
"alarm-arming",
|
|
15297
|
+
"alarm-arm-refused",
|
|
15252
15298
|
"camera-online",
|
|
15253
15299
|
"camera-offline",
|
|
15254
15300
|
"camera-disabled",
|
|
@@ -18521,6 +18567,22 @@ var detectionFpsField = {
|
|
|
18521
18567
|
default: 10,
|
|
18522
18568
|
step: 1
|
|
18523
18569
|
};
|
|
18570
|
+
/**
|
|
18571
|
+
* The occupancy re-check interval. DEFAULT 300 s (2026-08-13 — was 30 s).
|
|
18572
|
+
*
|
|
18573
|
+
* The recheck is now on by default (a parked car is invisible to occupancy
|
|
18574
|
+
* rules until the stationary registry has been rebuilt by motion, which after a
|
|
18575
|
+
* restart may be never on a quiet camera). Each cycle re-subscribes a detection
|
|
18576
|
+
* session — an RTSP re-dial — so the switch is only affordable at a WIDE
|
|
18577
|
+
* interval: 300 s is ~12 re-dials an hour per camera, against 120 at the old
|
|
18578
|
+
* 30 s. A parked car is therefore counted within 5 minutes of a restart.
|
|
18579
|
+
*
|
|
18580
|
+
* Why not wider: `max` is 300 and raising it is TRAIN-BOUND, not addon-bound —
|
|
18581
|
+
* the host validates `attachCamera` against ITS copy of this schema, so a
|
|
18582
|
+
* runner asked for 600 would be rejected by the hub until a `@camstack/server`
|
|
18583
|
+
* carrying the wider bound is installed everywhere. 300 is the widest value
|
|
18584
|
+
* that ships with an addon deploy.
|
|
18585
|
+
*/
|
|
18524
18586
|
var occupancyRecheckSecField = {
|
|
18525
18587
|
min: 0,
|
|
18526
18588
|
max: 300,
|
|
@@ -18722,15 +18784,21 @@ var RunnerCameraConfigSchema = object({
|
|
|
18722
18784
|
*/
|
|
18723
18785
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
18724
18786
|
/**
|
|
18725
|
-
* Master toggle for the occupancy re-check. When `false`
|
|
18726
|
-
*
|
|
18727
|
-
* this is off by default because the recheck re-subscribes a detection session
|
|
18728
|
-
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
18729
|
-
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
18787
|
+
* Master toggle for the occupancy re-check. When `false` the runner never arms
|
|
18788
|
+
* the periodic recheck timer, regardless of `occupancyRecheckSec`; the
|
|
18730
18789
|
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
18731
18790
|
* (and only render) when this is enabled.
|
|
18732
|
-
|
|
18733
|
-
|
|
18791
|
+
*
|
|
18792
|
+
* DEFAULT `true` since 2026-08-13 (was `false`). It was off because the
|
|
18793
|
+
* recheck re-subscribes a detection session every N seconds while `watching`
|
|
18794
|
+
* — each cycle creates+tears a session ⇒ an RTSP re-dial ⇒ latency, a major
|
|
18795
|
+
* pull-decoder churn source. What that bought was a blind spot: a STATIONARY
|
|
18796
|
+
* object is counted only while the stationary registry holds it, and the
|
|
18797
|
+
* registry rebuilds from motion, so after a restart a parked car was invisible
|
|
18798
|
+
* to every occupancy rule until something moved in front of it. The churn is
|
|
18799
|
+
* now paid on the interval instead — see `occupancyRecheckSecField`.
|
|
18800
|
+
*/
|
|
18801
|
+
occupancyRecheckEnabled: boolean().default(true),
|
|
18734
18802
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
18735
18803
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
18736
18804
|
/**
|
package/dist/addon.mjs
CHANGED
|
@@ -14199,11 +14199,33 @@ var NotificationFormatSchema = _enum([
|
|
|
14199
14199
|
* Named by INTENT, never by glyph. "check" would tie the vocabulary to one
|
|
14200
14200
|
* renderer's icon set; "acknowledge" survives an adapter that draws it
|
|
14201
14201
|
* differently.
|
|
14202
|
+
*
|
|
14203
|
+
* ── A TOKEN IS NOT A WIRE VALUE ─────────────────────────────────────
|
|
14204
|
+
*
|
|
14205
|
+
* These names are for US. **No adapter may forward one verbatim.** Each maps
|
|
14206
|
+
* the whole set onto its own renderer's vocabulary through a
|
|
14207
|
+
* `Record<NotificationActionIcon, string>` — a Record, never a lookup with a
|
|
14208
|
+
* fallback, so adding a member here fails every adapter's build until someone
|
|
14209
|
+
* decides its glyph, which is the only place that decision can be made
|
|
14210
|
+
* honestly.
|
|
14211
|
+
*
|
|
14212
|
+
* This paragraph is the bug. Zentik declared `actionIcons: true` and passed
|
|
14213
|
+
* `disarm` straight through; iOS feeds that string to
|
|
14214
|
+
* `UNNotificationActionIcon(systemImageName:)`, `disarm` is not an SF Symbol,
|
|
14215
|
+
* and every snooze and alarm button arrived BLANK. A pass-through is not a
|
|
14216
|
+
* mapping, and "the field is documented" is not "the value renders".
|
|
14217
|
+
*
|
|
14218
|
+
* Adding a member is TRAIN-BOUND. The enum lives in the published
|
|
14219
|
+
* `@camstack/server` closure and the cap seam validates against the HUB's copy,
|
|
14220
|
+
* so an addon that emits a token the running hub does not know does not lose an
|
|
14221
|
+
* icon — its whole `send` fails Zod validation and the notification never
|
|
14222
|
+
* arrives. Never emit a new token from an addon before the train carrying it.
|
|
14202
14223
|
*/
|
|
14203
14224
|
var NotificationActionIconSchema = _enum([
|
|
14204
14225
|
"acknowledge",
|
|
14205
14226
|
"dismiss",
|
|
14206
14227
|
"silence",
|
|
14228
|
+
"snooze",
|
|
14207
14229
|
"view",
|
|
14208
14230
|
"play",
|
|
14209
14231
|
"open",
|
|
@@ -14211,9 +14233,13 @@ var NotificationActionIconSchema = _enum([
|
|
|
14211
14233
|
"lock",
|
|
14212
14234
|
"unlock",
|
|
14213
14235
|
"arm",
|
|
14236
|
+
"arm-home",
|
|
14237
|
+
"arm-away",
|
|
14238
|
+
"arm-night",
|
|
14214
14239
|
"disarm",
|
|
14215
14240
|
"light",
|
|
14216
|
-
"alert"
|
|
14241
|
+
"alert",
|
|
14242
|
+
"camera"
|
|
14217
14243
|
]);
|
|
14218
14244
|
/** A single tap-through action button. */
|
|
14219
14245
|
var NotificationActionSchema = object({
|
|
@@ -14413,6 +14439,24 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
|
|
|
14413
14439
|
targetId: string(),
|
|
14414
14440
|
enabled: boolean()
|
|
14415
14441
|
}), _void(), { kind: "mutation" });
|
|
14442
|
+
new Set([
|
|
14443
|
+
{
|
|
14444
|
+
id: "person",
|
|
14445
|
+
name: "Person"
|
|
14446
|
+
},
|
|
14447
|
+
{
|
|
14448
|
+
id: "vehicle",
|
|
14449
|
+
name: "Vehicle"
|
|
14450
|
+
},
|
|
14451
|
+
{
|
|
14452
|
+
id: "animal",
|
|
14453
|
+
name: "Animal"
|
|
14454
|
+
},
|
|
14455
|
+
{
|
|
14456
|
+
id: "package",
|
|
14457
|
+
name: "Package"
|
|
14458
|
+
}
|
|
14459
|
+
].map((l) => l.id));
|
|
14416
14460
|
var COCO_TO_MACRO = {
|
|
14417
14461
|
mapping: {
|
|
14418
14462
|
person: "person",
|
|
@@ -15248,6 +15292,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
15248
15292
|
"alarm-triggered",
|
|
15249
15293
|
"alarm-armed",
|
|
15250
15294
|
"alarm-disarmed",
|
|
15295
|
+
"alarm-arming",
|
|
15296
|
+
"alarm-arm-refused",
|
|
15251
15297
|
"camera-online",
|
|
15252
15298
|
"camera-offline",
|
|
15253
15299
|
"camera-disabled",
|
|
@@ -18520,6 +18566,22 @@ var detectionFpsField = {
|
|
|
18520
18566
|
default: 10,
|
|
18521
18567
|
step: 1
|
|
18522
18568
|
};
|
|
18569
|
+
/**
|
|
18570
|
+
* The occupancy re-check interval. DEFAULT 300 s (2026-08-13 — was 30 s).
|
|
18571
|
+
*
|
|
18572
|
+
* The recheck is now on by default (a parked car is invisible to occupancy
|
|
18573
|
+
* rules until the stationary registry has been rebuilt by motion, which after a
|
|
18574
|
+
* restart may be never on a quiet camera). Each cycle re-subscribes a detection
|
|
18575
|
+
* session — an RTSP re-dial — so the switch is only affordable at a WIDE
|
|
18576
|
+
* interval: 300 s is ~12 re-dials an hour per camera, against 120 at the old
|
|
18577
|
+
* 30 s. A parked car is therefore counted within 5 minutes of a restart.
|
|
18578
|
+
*
|
|
18579
|
+
* Why not wider: `max` is 300 and raising it is TRAIN-BOUND, not addon-bound —
|
|
18580
|
+
* the host validates `attachCamera` against ITS copy of this schema, so a
|
|
18581
|
+
* runner asked for 600 would be rejected by the hub until a `@camstack/server`
|
|
18582
|
+
* carrying the wider bound is installed everywhere. 300 is the widest value
|
|
18583
|
+
* that ships with an addon deploy.
|
|
18584
|
+
*/
|
|
18523
18585
|
var occupancyRecheckSecField = {
|
|
18524
18586
|
min: 0,
|
|
18525
18587
|
max: 300,
|
|
@@ -18721,15 +18783,21 @@ var RunnerCameraConfigSchema = object({
|
|
|
18721
18783
|
*/
|
|
18722
18784
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
18723
18785
|
/**
|
|
18724
|
-
* Master toggle for the occupancy re-check. When `false`
|
|
18725
|
-
*
|
|
18726
|
-
* this is off by default because the recheck re-subscribes a detection session
|
|
18727
|
-
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
18728
|
-
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
18786
|
+
* Master toggle for the occupancy re-check. When `false` the runner never arms
|
|
18787
|
+
* the periodic recheck timer, regardless of `occupancyRecheckSec`; the
|
|
18729
18788
|
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
18730
18789
|
* (and only render) when this is enabled.
|
|
18731
|
-
|
|
18732
|
-
|
|
18790
|
+
*
|
|
18791
|
+
* DEFAULT `true` since 2026-08-13 (was `false`). It was off because the
|
|
18792
|
+
* recheck re-subscribes a detection session every N seconds while `watching`
|
|
18793
|
+
* — each cycle creates+tears a session ⇒ an RTSP re-dial ⇒ latency, a major
|
|
18794
|
+
* pull-decoder churn source. What that bought was a blind spot: a STATIONARY
|
|
18795
|
+
* object is counted only while the stationary registry holds it, and the
|
|
18796
|
+
* registry rebuilds from motion, so after a restart a parked car was invisible
|
|
18797
|
+
* to every occupancy rule until something moved in front of it. The churn is
|
|
18798
|
+
* now paid on the interval instead — see `occupancyRecheckSecField`.
|
|
18799
|
+
*/
|
|
18800
|
+
occupancyRecheckEnabled: boolean().default(true),
|
|
18733
18801
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
18734
18802
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
18735
18803
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-rademacher",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.16",
|
|
4
4
|
"description": "Rademacher HomePilot device-provider addon for CamStack — wraps the @apocaliss92/noderademacher local-hub client (roller shutters over the cover cap)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|