@camstack/addon-decoder-ffmpeg 1.2.15 → 1.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/index.js CHANGED
@@ -13068,11 +13068,33 @@ var NotificationFormatSchema = _enum([
13068
13068
  * Named by INTENT, never by glyph. "check" would tie the vocabulary to one
13069
13069
  * renderer's icon set; "acknowledge" survives an adapter that draws it
13070
13070
  * differently.
13071
+ *
13072
+ * ── A TOKEN IS NOT A WIRE VALUE ─────────────────────────────────────
13073
+ *
13074
+ * These names are for US. **No adapter may forward one verbatim.** Each maps
13075
+ * the whole set onto its own renderer's vocabulary through a
13076
+ * `Record<NotificationActionIcon, string>` — a Record, never a lookup with a
13077
+ * fallback, so adding a member here fails every adapter's build until someone
13078
+ * decides its glyph, which is the only place that decision can be made
13079
+ * honestly.
13080
+ *
13081
+ * This paragraph is the bug. Zentik declared `actionIcons: true` and passed
13082
+ * `disarm` straight through; iOS feeds that string to
13083
+ * `UNNotificationActionIcon(systemImageName:)`, `disarm` is not an SF Symbol,
13084
+ * and every snooze and alarm button arrived BLANK. A pass-through is not a
13085
+ * mapping, and "the field is documented" is not "the value renders".
13086
+ *
13087
+ * Adding a member is TRAIN-BOUND. The enum lives in the published
13088
+ * `@camstack/server` closure and the cap seam validates against the HUB's copy,
13089
+ * so an addon that emits a token the running hub does not know does not lose an
13090
+ * icon — its whole `send` fails Zod validation and the notification never
13091
+ * arrives. Never emit a new token from an addon before the train carrying it.
13071
13092
  */
13072
13093
  var NotificationActionIconSchema = _enum([
13073
13094
  "acknowledge",
13074
13095
  "dismiss",
13075
13096
  "silence",
13097
+ "snooze",
13076
13098
  "view",
13077
13099
  "play",
13078
13100
  "open",
@@ -13080,9 +13102,13 @@ var NotificationActionIconSchema = _enum([
13080
13102
  "lock",
13081
13103
  "unlock",
13082
13104
  "arm",
13105
+ "arm-home",
13106
+ "arm-away",
13107
+ "arm-night",
13083
13108
  "disarm",
13084
13109
  "light",
13085
- "alert"
13110
+ "alert",
13111
+ "camera"
13086
13112
  ]);
13087
13113
  /** A single tap-through action button. */
13088
13114
  var NotificationActionSchema = object({
@@ -13282,6 +13308,24 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
13282
13308
  targetId: string(),
13283
13309
  enabled: boolean()
13284
13310
  }), _void(), { kind: "mutation" });
13311
+ new Set([
13312
+ {
13313
+ id: "person",
13314
+ name: "Person"
13315
+ },
13316
+ {
13317
+ id: "vehicle",
13318
+ name: "Vehicle"
13319
+ },
13320
+ {
13321
+ id: "animal",
13322
+ name: "Animal"
13323
+ },
13324
+ {
13325
+ id: "package",
13326
+ name: "Package"
13327
+ }
13328
+ ].map((l) => l.id));
13285
13329
  var COCO_TO_MACRO = {
13286
13330
  mapping: {
13287
13331
  person: "person",
@@ -14079,6 +14123,8 @@ var NcSystemEventKindSchema = _enum([
14079
14123
  "alarm-triggered",
14080
14124
  "alarm-armed",
14081
14125
  "alarm-disarmed",
14126
+ "alarm-arming",
14127
+ "alarm-arm-refused",
14082
14128
  "camera-online",
14083
14129
  "camera-offline",
14084
14130
  "camera-disabled",
@@ -17311,6 +17357,22 @@ var detectionFpsField = {
17311
17357
  default: 10,
17312
17358
  step: 1
17313
17359
  };
17360
+ /**
17361
+ * The occupancy re-check interval. DEFAULT 300 s (2026-08-13 — was 30 s).
17362
+ *
17363
+ * The recheck is now on by default (a parked car is invisible to occupancy
17364
+ * rules until the stationary registry has been rebuilt by motion, which after a
17365
+ * restart may be never on a quiet camera). Each cycle re-subscribes a detection
17366
+ * session — an RTSP re-dial — so the switch is only affordable at a WIDE
17367
+ * interval: 300 s is ~12 re-dials an hour per camera, against 120 at the old
17368
+ * 30 s. A parked car is therefore counted within 5 minutes of a restart.
17369
+ *
17370
+ * Why not wider: `max` is 300 and raising it is TRAIN-BOUND, not addon-bound —
17371
+ * the host validates `attachCamera` against ITS copy of this schema, so a
17372
+ * runner asked for 600 would be rejected by the hub until a `@camstack/server`
17373
+ * carrying the wider bound is installed everywhere. 300 is the widest value
17374
+ * that ships with an addon deploy.
17375
+ */
17314
17376
  var occupancyRecheckSecField = {
17315
17377
  min: 0,
17316
17378
  max: 300,
@@ -17512,15 +17574,21 @@ var RunnerCameraConfigSchema = object({
17512
17574
  */
17513
17575
  onboardMotionDrivesAnalyzer: boolean().default(true),
17514
17576
  /**
17515
- * Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
17516
- * never arms the periodic recheck timer, regardless of `occupancyRecheckSec`
17517
- * this is off by default because the recheck re-subscribes a detection session
17518
- * every N seconds while `watching`, a major source of pull-decoder re-dial
17519
- * churn (each cycle creates+tears a session → RTSP re-dial → latency). The
17577
+ * Master toggle for the occupancy re-check. When `false` the runner never arms
17578
+ * the periodic recheck timer, regardless of `occupancyRecheckSec`; the
17520
17579
  * `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
17521
17580
  * (and only render) when this is enabled.
17522
- */
17523
- occupancyRecheckEnabled: boolean().default(false),
17581
+ *
17582
+ * DEFAULT `true` since 2026-08-13 (was `false`). It was off because the
17583
+ * recheck re-subscribes a detection session every N seconds while `watching`
17584
+ * — each cycle creates+tears a session ⇒ an RTSP re-dial ⇒ latency, a major
17585
+ * pull-decoder churn source. What that bought was a blind spot: a STATIONARY
17586
+ * object is counted only while the stationary registry holds it, and the
17587
+ * registry rebuilds from motion, so after a restart a parked car was invisible
17588
+ * to every occupancy rule until something moved in front of it. The churn is
17589
+ * now paid on the interval instead — see `occupancyRecheckSecField`.
17590
+ */
17591
+ occupancyRecheckEnabled: boolean().default(true),
17524
17592
  occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
17525
17593
  occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
17526
17594
  /**
package/dist/index.mjs CHANGED
@@ -13064,11 +13064,33 @@ var NotificationFormatSchema = _enum([
13064
13064
  * Named by INTENT, never by glyph. "check" would tie the vocabulary to one
13065
13065
  * renderer's icon set; "acknowledge" survives an adapter that draws it
13066
13066
  * differently.
13067
+ *
13068
+ * ── A TOKEN IS NOT A WIRE VALUE ─────────────────────────────────────
13069
+ *
13070
+ * These names are for US. **No adapter may forward one verbatim.** Each maps
13071
+ * the whole set onto its own renderer's vocabulary through a
13072
+ * `Record<NotificationActionIcon, string>` — a Record, never a lookup with a
13073
+ * fallback, so adding a member here fails every adapter's build until someone
13074
+ * decides its glyph, which is the only place that decision can be made
13075
+ * honestly.
13076
+ *
13077
+ * This paragraph is the bug. Zentik declared `actionIcons: true` and passed
13078
+ * `disarm` straight through; iOS feeds that string to
13079
+ * `UNNotificationActionIcon(systemImageName:)`, `disarm` is not an SF Symbol,
13080
+ * and every snooze and alarm button arrived BLANK. A pass-through is not a
13081
+ * mapping, and "the field is documented" is not "the value renders".
13082
+ *
13083
+ * Adding a member is TRAIN-BOUND. The enum lives in the published
13084
+ * `@camstack/server` closure and the cap seam validates against the HUB's copy,
13085
+ * so an addon that emits a token the running hub does not know does not lose an
13086
+ * icon — its whole `send` fails Zod validation and the notification never
13087
+ * arrives. Never emit a new token from an addon before the train carrying it.
13067
13088
  */
13068
13089
  var NotificationActionIconSchema = _enum([
13069
13090
  "acknowledge",
13070
13091
  "dismiss",
13071
13092
  "silence",
13093
+ "snooze",
13072
13094
  "view",
13073
13095
  "play",
13074
13096
  "open",
@@ -13076,9 +13098,13 @@ var NotificationActionIconSchema = _enum([
13076
13098
  "lock",
13077
13099
  "unlock",
13078
13100
  "arm",
13101
+ "arm-home",
13102
+ "arm-away",
13103
+ "arm-night",
13079
13104
  "disarm",
13080
13105
  "light",
13081
- "alert"
13106
+ "alert",
13107
+ "camera"
13082
13108
  ]);
13083
13109
  /** A single tap-through action button. */
13084
13110
  var NotificationActionSchema = object({
@@ -13278,6 +13304,24 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
13278
13304
  targetId: string(),
13279
13305
  enabled: boolean()
13280
13306
  }), _void(), { kind: "mutation" });
13307
+ new Set([
13308
+ {
13309
+ id: "person",
13310
+ name: "Person"
13311
+ },
13312
+ {
13313
+ id: "vehicle",
13314
+ name: "Vehicle"
13315
+ },
13316
+ {
13317
+ id: "animal",
13318
+ name: "Animal"
13319
+ },
13320
+ {
13321
+ id: "package",
13322
+ name: "Package"
13323
+ }
13324
+ ].map((l) => l.id));
13281
13325
  var COCO_TO_MACRO = {
13282
13326
  mapping: {
13283
13327
  person: "person",
@@ -14075,6 +14119,8 @@ var NcSystemEventKindSchema = _enum([
14075
14119
  "alarm-triggered",
14076
14120
  "alarm-armed",
14077
14121
  "alarm-disarmed",
14122
+ "alarm-arming",
14123
+ "alarm-arm-refused",
14078
14124
  "camera-online",
14079
14125
  "camera-offline",
14080
14126
  "camera-disabled",
@@ -17307,6 +17353,22 @@ var detectionFpsField = {
17307
17353
  default: 10,
17308
17354
  step: 1
17309
17355
  };
17356
+ /**
17357
+ * The occupancy re-check interval. DEFAULT 300 s (2026-08-13 — was 30 s).
17358
+ *
17359
+ * The recheck is now on by default (a parked car is invisible to occupancy
17360
+ * rules until the stationary registry has been rebuilt by motion, which after a
17361
+ * restart may be never on a quiet camera). Each cycle re-subscribes a detection
17362
+ * session — an RTSP re-dial — so the switch is only affordable at a WIDE
17363
+ * interval: 300 s is ~12 re-dials an hour per camera, against 120 at the old
17364
+ * 30 s. A parked car is therefore counted within 5 minutes of a restart.
17365
+ *
17366
+ * Why not wider: `max` is 300 and raising it is TRAIN-BOUND, not addon-bound —
17367
+ * the host validates `attachCamera` against ITS copy of this schema, so a
17368
+ * runner asked for 600 would be rejected by the hub until a `@camstack/server`
17369
+ * carrying the wider bound is installed everywhere. 300 is the widest value
17370
+ * that ships with an addon deploy.
17371
+ */
17310
17372
  var occupancyRecheckSecField = {
17311
17373
  min: 0,
17312
17374
  max: 300,
@@ -17508,15 +17570,21 @@ var RunnerCameraConfigSchema = object({
17508
17570
  */
17509
17571
  onboardMotionDrivesAnalyzer: boolean().default(true),
17510
17572
  /**
17511
- * Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
17512
- * never arms the periodic recheck timer, regardless of `occupancyRecheckSec`
17513
- * this is off by default because the recheck re-subscribes a detection session
17514
- * every N seconds while `watching`, a major source of pull-decoder re-dial
17515
- * churn (each cycle creates+tears a session → RTSP re-dial → latency). The
17573
+ * Master toggle for the occupancy re-check. When `false` the runner never arms
17574
+ * the periodic recheck timer, regardless of `occupancyRecheckSec`; the
17516
17575
  * `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
17517
17576
  * (and only render) when this is enabled.
17518
- */
17519
- occupancyRecheckEnabled: boolean().default(false),
17577
+ *
17578
+ * DEFAULT `true` since 2026-08-13 (was `false`). It was off because the
17579
+ * recheck re-subscribes a detection session every N seconds while `watching`
17580
+ * — each cycle creates+tears a session ⇒ an RTSP re-dial ⇒ latency, a major
17581
+ * pull-decoder churn source. What that bought was a blind spot: a STATIONARY
17582
+ * object is counted only while the stationary registry holds it, and the
17583
+ * registry rebuilds from motion, so after a restart a parked car was invisible
17584
+ * to every occupancy rule until something moved in front of it. The churn is
17585
+ * now paid on the interval instead — see `occupancyRecheckSecField`.
17586
+ */
17587
+ occupancyRecheckEnabled: boolean().default(true),
17520
17588
  occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
17521
17589
  occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
17522
17590
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-decoder-ffmpeg",
3
- "version": "1.2.15",
3
+ "version": "1.2.16",
4
4
  "description": "Standalone ffmpeg-subprocess decoder fallback addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",