@camstack/addon-provider-onvif 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/addon.js CHANGED
@@ -12991,11 +12991,33 @@ var NotificationFormatSchema = _enum([
12991
12991
  * Named by INTENT, never by glyph. "check" would tie the vocabulary to one
12992
12992
  * renderer's icon set; "acknowledge" survives an adapter that draws it
12993
12993
  * differently.
12994
+ *
12995
+ * ── A TOKEN IS NOT A WIRE VALUE ─────────────────────────────────────
12996
+ *
12997
+ * These names are for US. **No adapter may forward one verbatim.** Each maps
12998
+ * the whole set onto its own renderer's vocabulary through a
12999
+ * `Record<NotificationActionIcon, string>` — a Record, never a lookup with a
13000
+ * fallback, so adding a member here fails every adapter's build until someone
13001
+ * decides its glyph, which is the only place that decision can be made
13002
+ * honestly.
13003
+ *
13004
+ * This paragraph is the bug. Zentik declared `actionIcons: true` and passed
13005
+ * `disarm` straight through; iOS feeds that string to
13006
+ * `UNNotificationActionIcon(systemImageName:)`, `disarm` is not an SF Symbol,
13007
+ * and every snooze and alarm button arrived BLANK. A pass-through is not a
13008
+ * mapping, and "the field is documented" is not "the value renders".
13009
+ *
13010
+ * Adding a member is TRAIN-BOUND. The enum lives in the published
13011
+ * `@camstack/server` closure and the cap seam validates against the HUB's copy,
13012
+ * so an addon that emits a token the running hub does not know does not lose an
13013
+ * icon — its whole `send` fails Zod validation and the notification never
13014
+ * arrives. Never emit a new token from an addon before the train carrying it.
12994
13015
  */
12995
13016
  var NotificationActionIconSchema = _enum([
12996
13017
  "acknowledge",
12997
13018
  "dismiss",
12998
13019
  "silence",
13020
+ "snooze",
12999
13021
  "view",
13000
13022
  "play",
13001
13023
  "open",
@@ -13003,9 +13025,13 @@ var NotificationActionIconSchema = _enum([
13003
13025
  "lock",
13004
13026
  "unlock",
13005
13027
  "arm",
13028
+ "arm-home",
13029
+ "arm-away",
13030
+ "arm-night",
13006
13031
  "disarm",
13007
13032
  "light",
13008
- "alert"
13033
+ "alert",
13034
+ "camera"
13009
13035
  ]);
13010
13036
  /** A single tap-through action button. */
13011
13037
  var NotificationActionSchema = object({
@@ -13205,6 +13231,24 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
13205
13231
  targetId: string(),
13206
13232
  enabled: boolean()
13207
13233
  }), _void(), { kind: "mutation" });
13234
+ new Set([
13235
+ {
13236
+ id: "person",
13237
+ name: "Person"
13238
+ },
13239
+ {
13240
+ id: "vehicle",
13241
+ name: "Vehicle"
13242
+ },
13243
+ {
13244
+ id: "animal",
13245
+ name: "Animal"
13246
+ },
13247
+ {
13248
+ id: "package",
13249
+ name: "Package"
13250
+ }
13251
+ ].map((l) => l.id));
13208
13252
  var COCO_TO_MACRO = {
13209
13253
  mapping: {
13210
13254
  person: "person",
@@ -14002,6 +14046,8 @@ var NcSystemEventKindSchema = _enum([
14002
14046
  "alarm-triggered",
14003
14047
  "alarm-armed",
14004
14048
  "alarm-disarmed",
14049
+ "alarm-arming",
14050
+ "alarm-arm-refused",
14005
14051
  "camera-online",
14006
14052
  "camera-offline",
14007
14053
  "camera-disabled",
@@ -17234,6 +17280,22 @@ var detectionFpsField = {
17234
17280
  default: 10,
17235
17281
  step: 1
17236
17282
  };
17283
+ /**
17284
+ * The occupancy re-check interval. DEFAULT 300 s (2026-08-13 — was 30 s).
17285
+ *
17286
+ * The recheck is now on by default (a parked car is invisible to occupancy
17287
+ * rules until the stationary registry has been rebuilt by motion, which after a
17288
+ * restart may be never on a quiet camera). Each cycle re-subscribes a detection
17289
+ * session — an RTSP re-dial — so the switch is only affordable at a WIDE
17290
+ * interval: 300 s is ~12 re-dials an hour per camera, against 120 at the old
17291
+ * 30 s. A parked car is therefore counted within 5 minutes of a restart.
17292
+ *
17293
+ * Why not wider: `max` is 300 and raising it is TRAIN-BOUND, not addon-bound —
17294
+ * the host validates `attachCamera` against ITS copy of this schema, so a
17295
+ * runner asked for 600 would be rejected by the hub until a `@camstack/server`
17296
+ * carrying the wider bound is installed everywhere. 300 is the widest value
17297
+ * that ships with an addon deploy.
17298
+ */
17237
17299
  var occupancyRecheckSecField = {
17238
17300
  min: 0,
17239
17301
  max: 300,
@@ -17435,15 +17497,21 @@ var RunnerCameraConfigSchema = object({
17435
17497
  */
17436
17498
  onboardMotionDrivesAnalyzer: boolean().default(true),
17437
17499
  /**
17438
- * Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
17439
- * never arms the periodic recheck timer, regardless of `occupancyRecheckSec`
17440
- * this is off by default because the recheck re-subscribes a detection session
17441
- * every N seconds while `watching`, a major source of pull-decoder re-dial
17442
- * churn (each cycle creates+tears a session → RTSP re-dial → latency). The
17500
+ * Master toggle for the occupancy re-check. When `false` the runner never arms
17501
+ * the periodic recheck timer, regardless of `occupancyRecheckSec`; the
17443
17502
  * `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
17444
17503
  * (and only render) when this is enabled.
17445
- */
17446
- occupancyRecheckEnabled: boolean().default(false),
17504
+ *
17505
+ * DEFAULT `true` since 2026-08-13 (was `false`). It was off because the
17506
+ * recheck re-subscribes a detection session every N seconds while `watching`
17507
+ * — each cycle creates+tears a session ⇒ an RTSP re-dial ⇒ latency, a major
17508
+ * pull-decoder churn source. What that bought was a blind spot: a STATIONARY
17509
+ * object is counted only while the stationary registry holds it, and the
17510
+ * registry rebuilds from motion, so after a restart a parked car was invisible
17511
+ * to every occupancy rule until something moved in front of it. The churn is
17512
+ * now paid on the interval instead — see `occupancyRecheckSecField`.
17513
+ */
17514
+ occupancyRecheckEnabled: boolean().default(true),
17447
17515
  occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
17448
17516
  occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
17449
17517
  /**
package/dist/addon.mjs CHANGED
@@ -12992,11 +12992,33 @@ var NotificationFormatSchema = _enum([
12992
12992
  * Named by INTENT, never by glyph. "check" would tie the vocabulary to one
12993
12993
  * renderer's icon set; "acknowledge" survives an adapter that draws it
12994
12994
  * differently.
12995
+ *
12996
+ * ── A TOKEN IS NOT A WIRE VALUE ─────────────────────────────────────
12997
+ *
12998
+ * These names are for US. **No adapter may forward one verbatim.** Each maps
12999
+ * the whole set onto its own renderer's vocabulary through a
13000
+ * `Record<NotificationActionIcon, string>` — a Record, never a lookup with a
13001
+ * fallback, so adding a member here fails every adapter's build until someone
13002
+ * decides its glyph, which is the only place that decision can be made
13003
+ * honestly.
13004
+ *
13005
+ * This paragraph is the bug. Zentik declared `actionIcons: true` and passed
13006
+ * `disarm` straight through; iOS feeds that string to
13007
+ * `UNNotificationActionIcon(systemImageName:)`, `disarm` is not an SF Symbol,
13008
+ * and every snooze and alarm button arrived BLANK. A pass-through is not a
13009
+ * mapping, and "the field is documented" is not "the value renders".
13010
+ *
13011
+ * Adding a member is TRAIN-BOUND. The enum lives in the published
13012
+ * `@camstack/server` closure and the cap seam validates against the HUB's copy,
13013
+ * so an addon that emits a token the running hub does not know does not lose an
13014
+ * icon — its whole `send` fails Zod validation and the notification never
13015
+ * arrives. Never emit a new token from an addon before the train carrying it.
12995
13016
  */
12996
13017
  var NotificationActionIconSchema = _enum([
12997
13018
  "acknowledge",
12998
13019
  "dismiss",
12999
13020
  "silence",
13021
+ "snooze",
13000
13022
  "view",
13001
13023
  "play",
13002
13024
  "open",
@@ -13004,9 +13026,13 @@ var NotificationActionIconSchema = _enum([
13004
13026
  "lock",
13005
13027
  "unlock",
13006
13028
  "arm",
13029
+ "arm-home",
13030
+ "arm-away",
13031
+ "arm-night",
13007
13032
  "disarm",
13008
13033
  "light",
13009
- "alert"
13034
+ "alert",
13035
+ "camera"
13010
13036
  ]);
13011
13037
  /** A single tap-through action button. */
13012
13038
  var NotificationActionSchema = object({
@@ -13206,6 +13232,24 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
13206
13232
  targetId: string(),
13207
13233
  enabled: boolean()
13208
13234
  }), _void(), { kind: "mutation" });
13235
+ new Set([
13236
+ {
13237
+ id: "person",
13238
+ name: "Person"
13239
+ },
13240
+ {
13241
+ id: "vehicle",
13242
+ name: "Vehicle"
13243
+ },
13244
+ {
13245
+ id: "animal",
13246
+ name: "Animal"
13247
+ },
13248
+ {
13249
+ id: "package",
13250
+ name: "Package"
13251
+ }
13252
+ ].map((l) => l.id));
13209
13253
  var COCO_TO_MACRO = {
13210
13254
  mapping: {
13211
13255
  person: "person",
@@ -14003,6 +14047,8 @@ var NcSystemEventKindSchema = _enum([
14003
14047
  "alarm-triggered",
14004
14048
  "alarm-armed",
14005
14049
  "alarm-disarmed",
14050
+ "alarm-arming",
14051
+ "alarm-arm-refused",
14006
14052
  "camera-online",
14007
14053
  "camera-offline",
14008
14054
  "camera-disabled",
@@ -17235,6 +17281,22 @@ var detectionFpsField = {
17235
17281
  default: 10,
17236
17282
  step: 1
17237
17283
  };
17284
+ /**
17285
+ * The occupancy re-check interval. DEFAULT 300 s (2026-08-13 — was 30 s).
17286
+ *
17287
+ * The recheck is now on by default (a parked car is invisible to occupancy
17288
+ * rules until the stationary registry has been rebuilt by motion, which after a
17289
+ * restart may be never on a quiet camera). Each cycle re-subscribes a detection
17290
+ * session — an RTSP re-dial — so the switch is only affordable at a WIDE
17291
+ * interval: 300 s is ~12 re-dials an hour per camera, against 120 at the old
17292
+ * 30 s. A parked car is therefore counted within 5 minutes of a restart.
17293
+ *
17294
+ * Why not wider: `max` is 300 and raising it is TRAIN-BOUND, not addon-bound —
17295
+ * the host validates `attachCamera` against ITS copy of this schema, so a
17296
+ * runner asked for 600 would be rejected by the hub until a `@camstack/server`
17297
+ * carrying the wider bound is installed everywhere. 300 is the widest value
17298
+ * that ships with an addon deploy.
17299
+ */
17238
17300
  var occupancyRecheckSecField = {
17239
17301
  min: 0,
17240
17302
  max: 300,
@@ -17436,15 +17498,21 @@ var RunnerCameraConfigSchema = object({
17436
17498
  */
17437
17499
  onboardMotionDrivesAnalyzer: boolean().default(true),
17438
17500
  /**
17439
- * Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
17440
- * never arms the periodic recheck timer, regardless of `occupancyRecheckSec`
17441
- * this is off by default because the recheck re-subscribes a detection session
17442
- * every N seconds while `watching`, a major source of pull-decoder re-dial
17443
- * churn (each cycle creates+tears a session → RTSP re-dial → latency). The
17501
+ * Master toggle for the occupancy re-check. When `false` the runner never arms
17502
+ * the periodic recheck timer, regardless of `occupancyRecheckSec`; the
17444
17503
  * `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
17445
17504
  * (and only render) when this is enabled.
17446
- */
17447
- occupancyRecheckEnabled: boolean().default(false),
17505
+ *
17506
+ * DEFAULT `true` since 2026-08-13 (was `false`). It was off because the
17507
+ * recheck re-subscribes a detection session every N seconds while `watching`
17508
+ * — each cycle creates+tears a session ⇒ an RTSP re-dial ⇒ latency, a major
17509
+ * pull-decoder churn source. What that bought was a blind spot: a STATIONARY
17510
+ * object is counted only while the stationary registry holds it, and the
17511
+ * registry rebuilds from motion, so after a restart a parked car was invisible
17512
+ * to every occupancy rule until something moved in front of it. The churn is
17513
+ * now paid on the interval instead — see `occupancyRecheckSecField`.
17514
+ */
17515
+ occupancyRecheckEnabled: boolean().default(true),
17448
17516
  occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
17449
17517
  occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
17450
17518
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-onvif",
3
- "version": "1.2.15",
3
+ "version": "1.2.16",
4
4
  "description": "ONVIF camera device provider addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",