@camstack/types 1.2.215 → 1.2.217

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.
@@ -59,6 +59,7 @@ function buildInputArgs(input, decodeHwAccel) {
59
59
  if (input.extraArgs?.length) args.push(...input.extraArgs);
60
60
  if (input.analyzeDurationUs !== void 0) args.push("-analyzeduration", String(input.analyzeDurationUs));
61
61
  if (input.probeSizeBytes !== void 0) args.push("-probesize", String(input.probeSizeBytes));
62
+ if (input.lowDelay === true) args.push("-flags", "low_delay");
62
63
  if (input.fflags?.length) for (const flag of input.fflags) args.push("-fflags", flag);
63
64
  if (input.rtspTransport) args.push("-rtsp_transport", input.rtspTransport);
64
65
  args.push("-i", input.url);
@@ -59,6 +59,7 @@ function buildInputArgs(input, decodeHwAccel) {
59
59
  if (input.extraArgs?.length) args.push(...input.extraArgs);
60
60
  if (input.analyzeDurationUs !== void 0) args.push("-analyzeduration", String(input.analyzeDurationUs));
61
61
  if (input.probeSizeBytes !== void 0) args.push("-probesize", String(input.probeSizeBytes));
62
+ if (input.lowDelay === true) args.push("-flags", "low_delay");
62
63
  if (input.fflags?.length) for (const flag of input.fflags) args.push("-fflags", flag);
63
64
  if (input.rtspTransport) args.push("-rtsp_transport", input.rtspTransport);
64
65
  args.push("-i", input.url);
@@ -127,6 +127,10 @@ export interface CapabilityEventSchema<TData extends z.ZodType = z.ZodType> {
127
127
  }
128
128
  export type CapabilityStatusKind = 'push' | 'poll' | 'command-driven';
129
129
  /**
130
+ * ⚠ NO LIVE CALLER since 2026-08-08 — see the note on
131
+ * {@link CapabilityStatusSchema.empty}. Kept as the shape a future wiring
132
+ * mechanism would need, not as something that runs today.
133
+ *
130
134
  * Declares that a cap's status is an ITEM-ARRAY wiring target: the status
131
135
  * holds an array of keyed items (`consumables.items`) that device-links can
132
136
  * populate per item via `DeviceLink.target.itemKey`. Links sharing an
@@ -161,6 +165,19 @@ export interface CapabilityStatusSchema<TStatus extends z.ZodType = z.ZodType> {
161
165
  * this cap (no native provider). Required-but-unlinked fields (enums,
162
166
  * timestamps) come from here so the synthesized status validates against
163
167
  * `schema`. Omit for caps that are never synthesize targets.
168
+ *
169
+ * ⚠ NO LIVE CALLER since 2026-08-08. The device-link mechanism this seeds was
170
+ * deleted that day — 302 devices, 0 links, a month after it shipped — and the
171
+ * only code that still reads this field is the `includeSynthesizable` branch
172
+ * of `getWireableFields`, which nothing passes `true` to. Four caps declare
173
+ * it (`battery`, `consumables`, `network-link`, `recording-signal`).
174
+ *
175
+ * KEPT, not deleted, and deliberately: the operator has a live request that
176
+ * needs exactly this shape (a Dreame's HA sensors presenting as
177
+ * `consumables`/`battery` on the robot) and has queued the wiring design for
178
+ * discussion. This marker exists so the field is not mistaken for working
179
+ * machinery in the meantime — which is the one thing a leftover must never
180
+ * be allowed to be.
164
181
  */
165
182
  readonly empty?: z.infer<TStatus>;
166
183
  /**
@@ -73,7 +73,7 @@ export declare const ptzAutotrackCapability: {
73
73
  * - **Native**: the camera's own firmware autotrack, registered per device by
74
74
  * the driver when the probe says it exists (Reolink: yes; Hikvision:
75
75
  * model-dependent).
76
- * - **Wrapper**: the emulated implementation (`@camstack/addon-autotrack`),
76
+ * - **Wrapper**: the emulated implementation (`@camstack/system`'s `autotrack` builtin),
77
77
  * which follows a subject with `ptz.move` pulses driven by the detection
78
78
  * pipeline. `defaultActive: false` — the operator binds it per camera in
79
79
  * the bindings UI, exactly as `virtual-doorbell` is bound.
@@ -53,6 +53,21 @@ export interface FfmpegInputPlan {
53
53
  */
54
54
  readonly analyzeDurationUs?: number;
55
55
  readonly probeSizeBytes?: number;
56
+ /**
57
+ * `-flags low_delay` on this INPUT.
58
+ *
59
+ * ffmpeg's h264 decoder reorders its output to undo B-frame ordering, so it
60
+ * holds each frame until it knows nothing following will precede it. On a
61
+ * stream encoded without B-frames there is nothing to reorder and the wait
62
+ * buys nothing — it is latency added at every hop that decodes, and a
63
+ * composite decodes one per tile.
64
+ *
65
+ * Ask for it only where the producer is known to emit no B-frames (the hub's
66
+ * own restreams, an encoder we configured with `-tune zerolatency`). On an
67
+ * arbitrary camera it is not wrong, just not always free: a stream that DOES
68
+ * reorder will decode out of order.
69
+ */
70
+ readonly lowDelay?: boolean;
56
71
  /** Caller-supplied input options (an `EncodeProfile.inputArgs`, probe flags). */
57
72
  readonly extraArgs?: readonly string[];
58
73
  }
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_sleep = require("./sleep-VlZxDyXq.js");
3
3
  const require_event_category = require("./event-category-BVfsrBYA.js");
4
- const require_canonical_hash = require("./canonical-hash-CZ2JqJc3.js");
4
+ const require_canonical_hash = require("./canonical-hash-BxuA6beb.js");
5
5
  const require_enums = require("./enums.js");
6
6
  const require_err_msg = require("./err-msg-COpsHMw2.js");
7
7
  let zod = require("zod");
@@ -35451,7 +35451,7 @@ var ptzAutotrackCapability = {
35451
35451
  * - **Native**: the camera's own firmware autotrack, registered per device by
35452
35452
  * the driver when the probe says it exists (Reolink: yes; Hikvision:
35453
35453
  * model-dependent).
35454
- * - **Wrapper**: the emulated implementation (`@camstack/addon-autotrack`),
35454
+ * - **Wrapper**: the emulated implementation (`@camstack/system`'s `autotrack` builtin),
35455
35455
  * which follows a subject with `ptz.move` pulses driven by the detection
35456
35456
  * pipeline. `defaultActive: false` — the operator binds it per camera in
35457
35457
  * the bindings UI, exactly as `virtual-doorbell` is bound.
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { $ as CAM_PROFILE_ORDER, A as DeviceType, At as isEvent, B as systemMethod, Bt as isAudioChunkFormat, C as customAction, Ct as SHARE_VIEW_KINDS, D as ChargingStatus, Dt as createDurableState, E as deviceCustomAction, Et as normalizeAddonInitResult, F as event, Ft as hydrateSchema, G as ReadinessRegistry, H as nodePin, I as expandCapMethods, It as resolveHydratedFieldValue, J as readinessKey, K as ReadinessTimeoutError, L as isDeviceConfigCap, Lt as AUDIO_CHUNK_FORMATS, M as DEFAULT_RUNTIME_STATE_DURABILITY, Mt as WELL_KNOWN_TAB_MAP, N as DEVICE_SETTINGS_CONTRIBUTION_METHODS, Nt as collectHydratedFieldEntries, O as DeviceFeature, Ot as createEvent, P as DEVICE_STATUS_METHOD, Pt as collectHydratedFieldValues, Q as BrokerStatusSchema, R as method, Rt as audioChunkBytesPerSample, S as DEVICE_CHILDREN_BATCH_MAX, St as DATAPLANE_SECRET_HEADER, T as describeCustomActions, Tt as BaseAddon, U as readNodePin, V as CAP_NODE_PIN_CONTEXT_KEY, W as toNodeId, X as AudioChunkFormatSchema, Y as scopeKey, Z as BrokerStatsSchema, _ as createMirrorSource, _t as SubscribeFramesResultSchema, a as asJsonObject, at as DecodedFrameSchema, b as deviceOpsCapability, bt as parseProfileBrokerId, c as parseJsonArray, ct as FrameHandleSchema, d as BOOT_RECOVERY_BACKOFF_MS, dt as ProfileSlotStatusSchema, et as CamProfileSchema, f as DEVICE_SCOPED_CAPS, ft as StreamSourceEntrySchema, g as createLazyTrpcSource, gt as SubscribeFramesInputSchema, h as createEventBusSliceSource, ht as SubscribeAudioChunksResultSchema, i as asJsonArray, it as DecodedAudioChunkSchema, j as adminUiCapability, jt as WELL_KNOWN_TABS, k as DeviceRole, kt as emitReadiness, l as parseJsonObject, lt as ProfileRtspEntrySchema, m as createDeviceProxy, mt as SubscribeAudioChunksInputSchema, n as sleepCancellable, nt as CamStreamResolutionSchema, o as asNumber, ot as EncodedPacketSchema, p as isDeviceScopedCap, pt as StreamSourceSchema, q as emitDownForOwnedCaps, r as asBoolean, rt as CameraStreamSchema, s as asString, st as FrameHandleFormatSchema, t as sleep, tt as CamStreamKindSchema, u as parseJsonUnknown, ut as ProfileSlotSchema, v as createSliceHandle, vt as makeProfileBrokerId, w as defineCustomActions, wt as DisposerChain, x as viewerUiCapability, xt as selectAssignedProfileSlots, y as RawStateResultSchema, yt as makeSourceBrokerId, z as resolveCapMount, zt as expandAudioChunkToF32le } from "./sleep-GU_us3DG.mjs";
2
2
  import { t as EventCategory } from "./event-category-BVDXG4tB.mjs";
3
- import { a as buildAudioArgs, c as buildVideoArgs, d as logBannerArgs, f as pickVideoEncoder, i as audioPlanFromEncodeProfile, l as invocationFromEncodeProfile, n as Fmp4BoxSplitter, o as buildFfmpegArgs, p as resolveStreamMaps, r as AUDIO_PRESETS, s as buildInputArgs, t as canonicalHash, u as isSoftwareDecode } from "./canonical-hash-DBkl8q6V.mjs";
3
+ import { a as buildAudioArgs, c as buildVideoArgs, d as logBannerArgs, f as pickVideoEncoder, i as audioPlanFromEncodeProfile, l as invocationFromEncodeProfile, n as Fmp4BoxSplitter, o as buildFfmpegArgs, p as resolveStreamMaps, r as AUDIO_PRESETS, s as buildInputArgs, t as canonicalHash, u as isSoftwareDecode } from "./canonical-hash-biq7T_dN.mjs";
4
4
  import { EventSourceType } from "./enums.mjs";
5
5
  import { t as errMsg } from "./err-msg-IQTHeDzc.mjs";
6
6
  import { z } from "zod";
@@ -35450,7 +35450,7 @@ var ptzAutotrackCapability = {
35450
35450
  * - **Native**: the camera's own firmware autotrack, registered per device by
35451
35451
  * the driver when the probe says it exists (Reolink: yes; Hikvision:
35452
35452
  * model-dependent).
35453
- * - **Wrapper**: the emulated implementation (`@camstack/addon-autotrack`),
35453
+ * - **Wrapper**: the emulated implementation (`@camstack/system`'s `autotrack` builtin),
35454
35454
  * which follows a subject with `ptz.move` pulses driven by the detection
35455
35455
  * pipeline. `defaultActive: false` — the operator binds it per camera in
35456
35456
  * the bindings UI, exactly as `virtual-doorbell` is bound.
package/dist/node.js CHANGED
@@ -21,7 +21,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
21
21
  enumerable: true
22
22
  }) : target, mod));
23
23
  //#endregion
24
- const require_canonical_hash = require("./canonical-hash-CZ2JqJc3.js");
24
+ const require_canonical_hash = require("./canonical-hash-BxuA6beb.js");
25
25
  const require_err_msg = require("./err-msg-COpsHMw2.js");
26
26
  let node_crypto = require("node:crypto");
27
27
  let node_fs = require("node:fs");
package/dist/node.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { n as Fmp4BoxSplitter, o as buildFfmpegArgs, t as canonicalHash, u as isSoftwareDecode } from "./canonical-hash-DBkl8q6V.mjs";
1
+ import { n as Fmp4BoxSplitter, o as buildFfmpegArgs, t as canonicalHash, u as isSoftwareDecode } from "./canonical-hash-biq7T_dN.mjs";
2
2
  import { t as errMsg } from "./err-msg-IQTHeDzc.mjs";
3
3
  import { createHash, createHmac, randomUUID, timingSafeEqual } from "node:crypto";
4
4
  import * as fs from "node:fs";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/types",
3
- "version": "1.2.215",
3
+ "version": "1.2.217",
4
4
  "description": "Shared types, interfaces, and model catalogs for the CamStack detection ecosystem",
5
5
  "keywords": [
6
6
  "camstack",