@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 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` (DEFAULT) the runner
18726
- * never arms the periodic recheck timer, regardless of `occupancyRecheckSec`
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
- occupancyRecheckEnabled: boolean().default(false),
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` (DEFAULT) the runner
18725
- * never arms the periodic recheck timer, regardless of `occupancyRecheckSec`
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
- occupancyRecheckEnabled: boolean().default(false),
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.15",
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",