@camstack/types 1.1.32 → 1.1.34
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 +1 -1
- package/dist/addon.mjs +1 -1
- package/dist/capabilities/addons.cap.d.ts +1 -1
- package/dist/capabilities/alerts.cap.d.ts +5 -5
- package/dist/capabilities/camera-streams.cap.d.ts +5 -5
- package/dist/capabilities/cap-router-predicates.d.ts +32 -0
- package/dist/capabilities/capability-definition.d.ts +18 -13
- package/dist/capabilities/consumables.cap.d.ts +1 -1
- package/dist/capabilities/custom-model-registry.cap.d.ts +38 -0
- package/dist/capabilities/index.d.ts +8 -15
- package/dist/capabilities/integrations.cap.d.ts +1 -1
- package/dist/capabilities/model-convert.cap.d.ts +22 -3
- package/dist/capabilities/model-distributor.cap.d.ts +38 -0
- package/dist/capabilities/network-quality.cap.d.ts +1 -1
- package/dist/capabilities/nodes.cap.d.ts +1 -1
- package/dist/capabilities/pipeline-executor.cap.d.ts +161 -8
- package/dist/capabilities/pipeline-orchestrator.cap.d.ts +87 -44
- package/dist/capabilities/pipeline-runner.cap.d.ts +10 -69
- package/dist/capabilities/snapshot.cap.d.ts +3 -3
- package/dist/capabilities/stream-broker.cap.d.ts +9 -1
- package/dist/capabilities/system.cap.d.ts +1 -1
- package/dist/capabilities/toast.cap.d.ts +1 -1
- package/dist/capabilities/webrtc-session.cap.d.ts +15 -1
- package/dist/device/index.d.ts +2 -0
- package/dist/device/reachability-poll.d.ts +90 -0
- package/dist/encode-profile.d.ts +2 -2
- package/dist/enums/event-category.d.ts +12 -0
- package/dist/generated/addon-api.d.ts +771 -643
- package/dist/generated/capability-router-map.d.ts +4 -16
- package/dist/generated/device-proxy.d.ts +0 -2
- package/dist/generated/method-access-map.d.ts +1 -1
- package/dist/generated/system-proxy.d.ts +2 -2
- package/dist/index.d.ts +3 -3
- package/dist/index.js +568 -350
- package/dist/index.mjs +551 -344
- package/dist/interfaces/capability.d.ts +0 -7
- package/dist/interfaces/event-bus.d.ts +9 -0
- package/dist/interfaces/pipeline-executor-capability.d.ts +14 -1
- package/dist/interfaces/pipeline-runner-capability.d.ts +11 -11
- package/dist/interfaces/recording-config.d.ts +2 -2
- package/dist/{sleep-CZDdRBua.mjs → sleep-Cc14_yxc.mjs} +12 -4
- package/dist/{sleep-Dirr8nGw.js → sleep-DmP-uxoe.js} +12 -4
- package/dist/types/agent-pipeline-settings.d.ts +18 -6
- package/dist/types/camera-pipeline.d.ts +17 -3
- package/dist/types/model-variant-groups.d.ts +100 -0
- package/dist/types/models.d.ts +63 -3
- package/package.json +1 -1
- package/dist/capabilities/restreamer.cap.d.ts +0 -54
- package/dist/capabilities/snapshot-provider.cap.d.ts +0 -43
- package/dist/capabilities/streaming-engine.cap.d.ts +0 -61
- package/dist/capabilities/webrtc.cap.d.ts +0 -75
- package/dist/interfaces/restreamer.d.ts +0 -23
- package/dist/interfaces/streaming.d.ts +0 -28
- package/dist/interfaces/webrtc-provider.d.ts +0 -34
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_sleep = require("./sleep-
|
|
2
|
+
const require_sleep = require("./sleep-DmP-uxoe.js");
|
|
3
3
|
const require_err_msg = require("./err-msg-COpsHMw2.js");
|
|
4
4
|
let zod = require("zod");
|
|
5
5
|
//#region src/health/wiring-health.ts
|
|
@@ -115,6 +115,36 @@ var ModelFormatsSchema = zod.z.object({
|
|
|
115
115
|
tflite: ModelFormatEntrySchema.optional(),
|
|
116
116
|
pt: ModelFormatEntrySchema.optional()
|
|
117
117
|
});
|
|
118
|
+
/**
|
|
119
|
+
* Variant-selector grouping axes. Shared by the full `ModelCatalogEntry` and by
|
|
120
|
+
* the reduced `PipelineModelOption` returned in `pipeline.getSchema()` so the
|
|
121
|
+
* grouped Family→Tier→Variant picker renders identically in the config UI and
|
|
122
|
+
* in the pipeline/device steppers. The flat `id` stays the source of truth for
|
|
123
|
+
* resolution/download/persistence; this is a presentation overlay resolved back
|
|
124
|
+
* to an `id`.
|
|
125
|
+
*/
|
|
126
|
+
var ModelVariantGroupSchema = zod.z.object({
|
|
127
|
+
/** Top-level family, e.g. `yolo26` (later `d-fine`, `rf-detr`). */
|
|
128
|
+
family: zod.z.string(),
|
|
129
|
+
/** Size within the family, e.g. `n` | `s` | `m` | `l`. */
|
|
130
|
+
tier: zod.z.string(),
|
|
131
|
+
/** Quantization axis. Omit ⇒ the fp32 base build. */
|
|
132
|
+
precision: zod.z.enum(["fp32", "int8"]).optional(),
|
|
133
|
+
/**
|
|
134
|
+
* Speed-optimization axis. Omit ⇒ the standard build. `fast` marks a
|
|
135
|
+
* latency-optimized export (e.g. ReLU-activation variant) — the slot the
|
|
136
|
+
* future performance variants plug into.
|
|
137
|
+
*/
|
|
138
|
+
optimization: zod.z.enum(["standard", "fast"]).optional(),
|
|
139
|
+
/**
|
|
140
|
+
* Input-resolution axis (square input side, px). Omit ⇒ the family's native
|
|
141
|
+
* resolution (640 for yolo26). Reduced-input builds (320 / 256) are a big,
|
|
142
|
+
* cheap latency lever — especially on Apple ANE and the Intel N100 — at a
|
|
143
|
+
* small-object accuracy cost. Mirrors the model's `inputSize` but lifted onto
|
|
144
|
+
* the group so the selector can offer it as a variant axis.
|
|
145
|
+
*/
|
|
146
|
+
resolution: zod.z.number().int().positive().optional()
|
|
147
|
+
});
|
|
118
148
|
var ModelCatalogEntrySchema = zod.z.object({
|
|
119
149
|
id: zod.z.string(),
|
|
120
150
|
name: zod.z.string(),
|
|
@@ -144,7 +174,43 @@ var ModelCatalogEntrySchema = zod.z.object({
|
|
|
144
174
|
* Auxiliary files required at runtime (labels JSON, charset dict, etc.).
|
|
145
175
|
* Downloaded into the same modelsDir alongside the model file.
|
|
146
176
|
*/
|
|
147
|
-
extraFiles: zod.z.array(ModelExtraFileSchema).readonly().optional()
|
|
177
|
+
extraFiles: zod.z.array(ModelExtraFileSchema).readonly().optional(),
|
|
178
|
+
/**
|
|
179
|
+
* LEGACY entry — retained in the catalog so a persisted operator selection
|
|
180
|
+
* still RESOLVES (and can be re-activated), but hidden from the selectable
|
|
181
|
+
* model list and excluded from the auto format-default pick. Set on the
|
|
182
|
+
* superseded / consolidated models (older lineages, redundant fp16 IRs) so
|
|
183
|
+
* the active lineup stays the coherent curated ladder without deleting a
|
|
184
|
+
* model anyone may still be pinned to. `resolveModelForFormat` keeps honoring
|
|
185
|
+
* an explicit legacy id that has a build for the node's format.
|
|
186
|
+
*/
|
|
187
|
+
legacy: zod.z.boolean().optional(),
|
|
188
|
+
/**
|
|
189
|
+
* Measured quality/latency metadata — populated from the benchmark addon on
|
|
190
|
+
* the real node classes. Absent = not yet measured (most entries today; the
|
|
191
|
+
* catalog historically carried only `sizeMB`, a poor cross-architecture
|
|
192
|
+
* speed proxy). `p95LatencyMs` is keyed by node class (e.g. `n100`, `mac`).
|
|
193
|
+
*/
|
|
194
|
+
metrics: zod.z.object({
|
|
195
|
+
map50: zod.z.number().optional(),
|
|
196
|
+
p95LatencyMs: zod.z.record(zod.z.string(), zod.z.number()).optional()
|
|
197
|
+
}).optional(),
|
|
198
|
+
/**
|
|
199
|
+
* SPDX-ish license id of the model weights (e.g. `AGPL-3.0` for Ultralytics
|
|
200
|
+
* YOLO26, `GPL-3.0` for YOLOv9, `Apache-2.0` for D-FINE/RF-DETR). Matters for
|
|
201
|
+
* the retraining addon and any future commercial distribution.
|
|
202
|
+
*/
|
|
203
|
+
license: zod.z.string().optional(),
|
|
204
|
+
/**
|
|
205
|
+
* Variant-selector grouping. The UI groups models by `family` + `tier` and
|
|
206
|
+
* offers `precision` / `optimization` as variant axes WITHIN a tier — so all
|
|
207
|
+
* of a family's sizes and quantizations collapse into one grouped picker
|
|
208
|
+
* instead of a flat list of `yolo26s`, `yolo26s-int8`, … Absent ⇒ ungrouped
|
|
209
|
+
* (legacy / custom models) — never shown in the grouped selector. The flat
|
|
210
|
+
* `id` stays the source of truth for resolution/download/persistence; grouping
|
|
211
|
+
* is a presentation overlay resolved back to an `id`.
|
|
212
|
+
*/
|
|
213
|
+
group: ModelVariantGroupSchema.optional()
|
|
148
214
|
});
|
|
149
215
|
var ConvertTargetSchema = zod.z.discriminatedUnion("format", [zod.z.object({
|
|
150
216
|
format: zod.z.literal("openvino"),
|
|
@@ -187,6 +253,139 @@ var ConvertResultSchema = zod.z.object({
|
|
|
187
253
|
artifacts: zod.z.array(ConvertArtifactSchema).readonly()
|
|
188
254
|
});
|
|
189
255
|
//#endregion
|
|
256
|
+
//#region src/types/model-variant-groups.ts
|
|
257
|
+
var FORMAT_KEYS = [
|
|
258
|
+
"onnx",
|
|
259
|
+
"coreml",
|
|
260
|
+
"openvino",
|
|
261
|
+
"tflite",
|
|
262
|
+
"pt"
|
|
263
|
+
];
|
|
264
|
+
function familyLabel(family) {
|
|
265
|
+
return family.toUpperCase();
|
|
266
|
+
}
|
|
267
|
+
/** Strip a leading family label from a base model name → clean tier label. */
|
|
268
|
+
function tierLabel(family, baseName) {
|
|
269
|
+
const fl = familyLabel(family);
|
|
270
|
+
const stripped = baseName.replace(new RegExp(`^${fl}\\s+`, "i"), "").trim();
|
|
271
|
+
return stripped.length > 0 ? stripped : baseName;
|
|
272
|
+
}
|
|
273
|
+
function variantLabel(precision, optimization) {
|
|
274
|
+
const parts = [];
|
|
275
|
+
if (optimization === "fast") parts.push("Fast");
|
|
276
|
+
parts.push(precision === "int8" ? "Int8" : "Standard");
|
|
277
|
+
return parts.join(" · ");
|
|
278
|
+
}
|
|
279
|
+
function entryFormats(entry) {
|
|
280
|
+
return FORMAT_KEYS.filter((f) => entry.formats[f] !== void 0);
|
|
281
|
+
}
|
|
282
|
+
function smallestSizeMB(entry) {
|
|
283
|
+
const sizes = FORMAT_KEYS.map((f) => entry.formats[f]?.sizeMB).filter((n) => typeof n === "number");
|
|
284
|
+
return sizes.length > 0 ? Math.min(...sizes) : 0;
|
|
285
|
+
}
|
|
286
|
+
var TIER_ORDER = [
|
|
287
|
+
"n",
|
|
288
|
+
"s",
|
|
289
|
+
"m",
|
|
290
|
+
"l",
|
|
291
|
+
"x"
|
|
292
|
+
];
|
|
293
|
+
var PRECISION_ORDER = ["fp32", "int8"];
|
|
294
|
+
/**
|
|
295
|
+
* Fold a flat catalog into the `family → tier → variant` tree. Deterministic
|
|
296
|
+
* ordering: tiers by the canonical size ladder (unknown tiers appended
|
|
297
|
+
* alphabetically), variants standard-before-int8 and fast last.
|
|
298
|
+
*/
|
|
299
|
+
function buildModelVariantGroups(models) {
|
|
300
|
+
const byFamily = /* @__PURE__ */ new Map();
|
|
301
|
+
for (const m of models) {
|
|
302
|
+
if (m.legacy === true || m.group === void 0) continue;
|
|
303
|
+
const { family, tier } = m.group;
|
|
304
|
+
const tiers = byFamily.get(family) ?? /* @__PURE__ */ new Map();
|
|
305
|
+
const entries = tiers.get(tier) ?? [];
|
|
306
|
+
entries.push(m);
|
|
307
|
+
tiers.set(tier, entries);
|
|
308
|
+
byFamily.set(family, tiers);
|
|
309
|
+
}
|
|
310
|
+
const families = [];
|
|
311
|
+
for (const [family, tiers] of byFamily) {
|
|
312
|
+
const tierList = [];
|
|
313
|
+
for (const [tier, entries] of tiers) {
|
|
314
|
+
const options = entries.map((e) => {
|
|
315
|
+
const precision = e.group?.precision ?? "fp32";
|
|
316
|
+
const optimization = e.group?.optimization ?? "standard";
|
|
317
|
+
return {
|
|
318
|
+
modelId: e.id,
|
|
319
|
+
precision,
|
|
320
|
+
optimization,
|
|
321
|
+
resolution: e.group?.resolution,
|
|
322
|
+
label: variantLabel(precision, optimization),
|
|
323
|
+
formats: entryFormats(e),
|
|
324
|
+
sizeMB: smallestSizeMB(e)
|
|
325
|
+
};
|
|
326
|
+
}).toSorted((a, b) => {
|
|
327
|
+
if (a.resolution !== b.resolution) return (b.resolution ?? Infinity) - (a.resolution ?? Infinity);
|
|
328
|
+
if (a.optimization !== b.optimization) return a.optimization === "fast" ? 1 : -1;
|
|
329
|
+
return PRECISION_ORDER.indexOf(a.precision) - PRECISION_ORDER.indexOf(b.precision);
|
|
330
|
+
});
|
|
331
|
+
const base = options.find((o) => o.precision === "fp32" && o.optimization === "standard" && o.resolution === void 0) ?? options[0];
|
|
332
|
+
if (base === void 0) continue;
|
|
333
|
+
const baseEntry = entries.find((e) => e.id === base.modelId);
|
|
334
|
+
tierList.push({
|
|
335
|
+
tier,
|
|
336
|
+
label: baseEntry ? tierLabel(family, baseEntry.name) : tier.toUpperCase(),
|
|
337
|
+
baseModelId: base.modelId,
|
|
338
|
+
options
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
tierList.sort((a, b) => {
|
|
342
|
+
const ia = TIER_ORDER.indexOf(a.tier);
|
|
343
|
+
const ib = TIER_ORDER.indexOf(b.tier);
|
|
344
|
+
if (ia !== -1 && ib !== -1) return ia - ib;
|
|
345
|
+
if (ia !== -1) return -1;
|
|
346
|
+
if (ib !== -1) return 1;
|
|
347
|
+
return a.tier.localeCompare(b.tier);
|
|
348
|
+
});
|
|
349
|
+
families.push({
|
|
350
|
+
family,
|
|
351
|
+
label: familyLabel(family),
|
|
352
|
+
tiers: tierList
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
families.sort((a, b) => a.family.localeCompare(b.family));
|
|
356
|
+
return families;
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Map a grouped selection back to a flat catalog model id. Returns `null` when
|
|
360
|
+
* no entry matches (the UI then falls back to the tier base / format default).
|
|
361
|
+
* `precision`/`optimization` default to `fp32`/`standard` (the base build).
|
|
362
|
+
*/
|
|
363
|
+
function resolveVariantModelId(models, selection) {
|
|
364
|
+
const precision = selection.precision ?? "fp32";
|
|
365
|
+
const optimization = selection.optimization ?? "standard";
|
|
366
|
+
for (const m of models) {
|
|
367
|
+
if (m.group === void 0) continue;
|
|
368
|
+
if (m.group.family !== selection.family || m.group.tier !== selection.tier) continue;
|
|
369
|
+
if ((m.group.precision ?? "fp32") !== precision) continue;
|
|
370
|
+
if ((m.group.optimization ?? "standard") !== optimization) continue;
|
|
371
|
+
if (m.group.resolution !== selection.resolution) continue;
|
|
372
|
+
return m.id;
|
|
373
|
+
}
|
|
374
|
+
return null;
|
|
375
|
+
}
|
|
376
|
+
/** Inverse: describe a flat model id as a grouped selection, or `null`. */
|
|
377
|
+
function describeModelVariant(models, modelId) {
|
|
378
|
+
const entry = models.find((m) => m.id === modelId);
|
|
379
|
+
if (entry?.group === void 0) return null;
|
|
380
|
+
return {
|
|
381
|
+
family: entry.group.family,
|
|
382
|
+
tier: entry.group.tier,
|
|
383
|
+
precision: entry.group.precision ?? "fp32",
|
|
384
|
+
optimization: entry.group.optimization ?? "standard",
|
|
385
|
+
resolution: entry.group.resolution
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
//#endregion
|
|
190
389
|
//#region src/interfaces/addon.ts
|
|
191
390
|
var DEFAULT_ADDON_PLACEMENT = "hub-only";
|
|
192
391
|
/**
|
|
@@ -572,8 +771,8 @@ var RecordingModeSchema = zod.z.enum([
|
|
|
572
771
|
"onAudioThreshold"
|
|
573
772
|
]);
|
|
574
773
|
/**
|
|
575
|
-
* First-class, authoritative per-camera storage mode — the
|
|
576
|
-
* reads directly (never inferred from `rules`):
|
|
774
|
+
* First-class, authoritative per-camera storage mode — the explicit choice the
|
|
775
|
+
* UI reads directly (never inferred from `rules`):
|
|
577
776
|
* - `off` — not recording.
|
|
578
777
|
* - `events` — record only around triggers (motion / audio threshold),
|
|
579
778
|
* with pre/post-buffer.
|
|
@@ -1609,7 +1808,7 @@ async function runInferenceStep(fn, timeoutMs) {
|
|
|
1609
1808
|
const t0 = performance.now();
|
|
1610
1809
|
try {
|
|
1611
1810
|
return {
|
|
1612
|
-
output: timeoutMs !== void 0 ? await withTimeout(fn(), timeoutMs) : await fn(),
|
|
1811
|
+
output: timeoutMs !== void 0 ? await withTimeout$1(fn(), timeoutMs) : await fn(),
|
|
1613
1812
|
durationMs: roundMs(performance.now() - t0),
|
|
1614
1813
|
ok: true
|
|
1615
1814
|
};
|
|
@@ -1627,7 +1826,7 @@ function roundMs(ms) {
|
|
|
1627
1826
|
return Math.round(ms * 100) / 100;
|
|
1628
1827
|
}
|
|
1629
1828
|
/** Reject a promise if it exceeds the given timeout */
|
|
1630
|
-
function withTimeout(promise, ms) {
|
|
1829
|
+
function withTimeout$1(promise, ms) {
|
|
1631
1830
|
return new Promise((resolve, reject) => {
|
|
1632
1831
|
const timer = setTimeout(() => reject(/* @__PURE__ */ new Error(`Inference timeout after ${ms}ms`)), ms);
|
|
1633
1832
|
promise.then((v) => {
|
|
@@ -3589,6 +3788,111 @@ function createRuntimeStateBridge(params) {
|
|
|
3589
3788
|
};
|
|
3590
3789
|
}
|
|
3591
3790
|
//#endregion
|
|
3791
|
+
//#region src/device/reachability-poll.ts
|
|
3792
|
+
/**
|
|
3793
|
+
* Shared control-plane reachability poller for camera devices.
|
|
3794
|
+
*
|
|
3795
|
+
* `device.online` must reflect CONTROL-PLANE REACHABILITY — "can we talk to
|
|
3796
|
+
* the camera's management API right now" — NOT whether video happens to be
|
|
3797
|
+
* flowing through the stream broker. A camera that dials on-demand (no
|
|
3798
|
+
* consumer attached) is fully reachable yet has no active stream; driving
|
|
3799
|
+
* `online` from stream health falsely marks it OFFLINE.
|
|
3800
|
+
*
|
|
3801
|
+
* Every camera provider owns a cheap control-plane round-trip (Hikvision
|
|
3802
|
+
* ISAPI `getDeviceInfo`, Amcrest Dahua CGI `getDeviceInfo`, ONVIF
|
|
3803
|
+
* `getDeviceInformation`, RTSP `OPTIONS`/TCP-connect). Each provider passes
|
|
3804
|
+
* that round-trip as a `probe: () => Promise<boolean>` and this helper runs
|
|
3805
|
+
* the loop, applies hysteresis, and drives the device's `online` setter.
|
|
3806
|
+
*
|
|
3807
|
+
* Hysteresis rules (avoid flapping on a single dropped packet):
|
|
3808
|
+
* - mark ONLINE immediately on the first successful probe;
|
|
3809
|
+
* - mark OFFLINE only after {@link REACHABILITY_FAILURES_TO_OFFLINE}
|
|
3810
|
+
* CONSECUTIVE failures.
|
|
3811
|
+
*
|
|
3812
|
+
* Robustness rules:
|
|
3813
|
+
* - each probe is bounded by {@link REACHABILITY_PROBE_TIMEOUT_MS} so a hung
|
|
3814
|
+
* control channel can't wedge the loop;
|
|
3815
|
+
* - a single in-flight probe at a time — a slow probe never stacks up;
|
|
3816
|
+
* - the loop never throws (a rejected/thrown probe counts as a failure);
|
|
3817
|
+
* - `isEnabled()` gates each tick so a soft-disabled device isn't polled.
|
|
3818
|
+
*/
|
|
3819
|
+
/** Poll cadence — probe every camera's control plane on this interval. */
|
|
3820
|
+
var REACHABILITY_POLL_INTERVAL_MS = 3e4;
|
|
3821
|
+
/**
|
|
3822
|
+
* Consecutive failures required before flipping `online` to `false`.
|
|
3823
|
+
* ONLINE is asserted on the first success; OFFLINE waits for N misses so a
|
|
3824
|
+
* single transient timeout doesn't flap the flag.
|
|
3825
|
+
*/
|
|
3826
|
+
var REACHABILITY_FAILURES_TO_OFFLINE = 3;
|
|
3827
|
+
/** Per-probe timeout — an unreachable/hung control channel resolves as a miss. */
|
|
3828
|
+
var REACHABILITY_PROBE_TIMEOUT_MS = 1e4;
|
|
3829
|
+
/** Reject after `ms`; always clears its own timer. */
|
|
3830
|
+
async function withTimeout(promise, ms, label) {
|
|
3831
|
+
let timer;
|
|
3832
|
+
const timeout = new Promise((_resolve, reject) => {
|
|
3833
|
+
timer = setTimeout(() => reject(/* @__PURE__ */ new Error(`${label} timed out after ${String(ms)}ms`)), ms);
|
|
3834
|
+
});
|
|
3835
|
+
try {
|
|
3836
|
+
return await Promise.race([promise, timeout]);
|
|
3837
|
+
} finally {
|
|
3838
|
+
if (timer !== void 0) clearTimeout(timer);
|
|
3839
|
+
}
|
|
3840
|
+
}
|
|
3841
|
+
/**
|
|
3842
|
+
* Start the reachability poll loop. Returns a handle whose `stop()` clears the
|
|
3843
|
+
* timer and prevents any further ticks. Start on device activation, stop on
|
|
3844
|
+
* device teardown (`removeDevice`) so no timer leaks.
|
|
3845
|
+
*/
|
|
3846
|
+
function startReachabilityPoll(options) {
|
|
3847
|
+
const intervalMs = options.intervalMs ?? 3e4;
|
|
3848
|
+
const failuresToOffline = options.failuresToOffline ?? 3;
|
|
3849
|
+
const probeTimeoutMs = options.probeTimeoutMs ?? 1e4;
|
|
3850
|
+
const runImmediately = options.runImmediately ?? true;
|
|
3851
|
+
let stopped = false;
|
|
3852
|
+
let running = false;
|
|
3853
|
+
let consecutiveFailures = 0;
|
|
3854
|
+
let timer;
|
|
3855
|
+
const tick = async () => {
|
|
3856
|
+
if (stopped) return;
|
|
3857
|
+
if (running) return;
|
|
3858
|
+
if (options.isEnabled && !options.isEnabled()) return;
|
|
3859
|
+
running = true;
|
|
3860
|
+
try {
|
|
3861
|
+
const reachable = await withTimeout(Promise.resolve().then(options.probe), probeTimeoutMs, "reachability probe");
|
|
3862
|
+
if (stopped) return;
|
|
3863
|
+
if (reachable) {
|
|
3864
|
+
consecutiveFailures = 0;
|
|
3865
|
+
options.setOnline(true);
|
|
3866
|
+
} else registerFailure("probe resolved unreachable");
|
|
3867
|
+
} catch (error) {
|
|
3868
|
+
if (stopped) return;
|
|
3869
|
+
registerFailure(error instanceof Error ? error.message : "probe threw");
|
|
3870
|
+
} finally {
|
|
3871
|
+
running = false;
|
|
3872
|
+
}
|
|
3873
|
+
};
|
|
3874
|
+
const registerFailure = (reason) => {
|
|
3875
|
+
consecutiveFailures += 1;
|
|
3876
|
+
options.logger?.debug("reachability probe failed", {
|
|
3877
|
+
reason,
|
|
3878
|
+
consecutiveFailures,
|
|
3879
|
+
failuresToOffline
|
|
3880
|
+
});
|
|
3881
|
+
if (consecutiveFailures >= failuresToOffline) options.setOnline(false);
|
|
3882
|
+
};
|
|
3883
|
+
timer = setInterval(() => {
|
|
3884
|
+
tick();
|
|
3885
|
+
}, intervalMs);
|
|
3886
|
+
if (typeof timer === "object" && timer !== null && "unref" in timer) timer.unref();
|
|
3887
|
+
if (runImmediately) tick();
|
|
3888
|
+
return { stop: () => {
|
|
3889
|
+
if (stopped) return;
|
|
3890
|
+
stopped = true;
|
|
3891
|
+
if (timer !== void 0) clearInterval(timer);
|
|
3892
|
+
timer = void 0;
|
|
3893
|
+
} };
|
|
3894
|
+
}
|
|
3895
|
+
//#endregion
|
|
3592
3896
|
//#region src/notification/format-transcode.ts
|
|
3593
3897
|
/** Strip a small, safe subset of Markdown down to plain text. */
|
|
3594
3898
|
function markdownToText(md) {
|
|
@@ -4478,42 +4782,14 @@ onBrightnessChanged: { data: zod.z.object({
|
|
|
4478
4782
|
runtimeState: BrightnessStatusSchema
|
|
4479
4783
|
};
|
|
4480
4784
|
//#endregion
|
|
4481
|
-
//#region src/capabilities/
|
|
4785
|
+
//#region src/capabilities/stream-broker.cap.ts
|
|
4786
|
+
/** Stream delivery format. (Relocated from the retired `streaming-engine` cap.) */
|
|
4482
4787
|
var StreamFormatSchema = zod.z.enum([
|
|
4483
4788
|
"webrtc",
|
|
4484
4789
|
"hls",
|
|
4485
4790
|
"mjpeg",
|
|
4486
4791
|
"rtsp"
|
|
4487
4792
|
]);
|
|
4488
|
-
var StreamInfoSchema = zod.z.object({
|
|
4489
|
-
streamId: zod.z.string(),
|
|
4490
|
-
format: StreamFormatSchema,
|
|
4491
|
-
url: zod.z.string().nullable(),
|
|
4492
|
-
active: zod.z.boolean()
|
|
4493
|
-
});
|
|
4494
|
-
var streamingEngineCapability = {
|
|
4495
|
-
name: "streaming-engine",
|
|
4496
|
-
scope: "system",
|
|
4497
|
-
mode: "singleton",
|
|
4498
|
-
internal: true,
|
|
4499
|
-
methods: {
|
|
4500
|
-
registerStream: require_sleep.method(zod.z.object({
|
|
4501
|
-
streamId: zod.z.string(),
|
|
4502
|
-
sourceUrl: zod.z.string(),
|
|
4503
|
-
codec: zod.z.string().optional()
|
|
4504
|
-
}), zod.z.void(), { kind: "mutation" }),
|
|
4505
|
-
unregisterStream: require_sleep.method(zod.z.object({ streamId: zod.z.string() }), zod.z.void(), { kind: "mutation" }),
|
|
4506
|
-
getStreamUrl: require_sleep.method(zod.z.object({
|
|
4507
|
-
streamId: zod.z.string(),
|
|
4508
|
-
format: StreamFormatSchema
|
|
4509
|
-
}), zod.z.string().nullable()),
|
|
4510
|
-
listStreams: require_sleep.method(zod.z.void(), zod.z.array(StreamInfoSchema))
|
|
4511
|
-
},
|
|
4512
|
-
/** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
|
|
4513
|
-
mount: { kind: "skip" }
|
|
4514
|
-
};
|
|
4515
|
-
//#endregion
|
|
4516
|
-
//#region src/capabilities/stream-broker.cap.ts
|
|
4517
4793
|
var RtspRestreamEntrySchema = zod.z.object({
|
|
4518
4794
|
brokerId: zod.z.string(),
|
|
4519
4795
|
url: zod.z.string(),
|
|
@@ -5507,37 +5783,7 @@ var consumablesCapability = {
|
|
|
5507
5783
|
scope: "device",
|
|
5508
5784
|
deviceNative: true,
|
|
5509
5785
|
mode: "singleton",
|
|
5510
|
-
deviceTypes:
|
|
5511
|
-
require_sleep.DeviceType.Camera,
|
|
5512
|
-
require_sleep.DeviceType.Hub,
|
|
5513
|
-
require_sleep.DeviceType.Light,
|
|
5514
|
-
require_sleep.DeviceType.Siren,
|
|
5515
|
-
require_sleep.DeviceType.Switch,
|
|
5516
|
-
require_sleep.DeviceType.Sensor,
|
|
5517
|
-
require_sleep.DeviceType.Thermostat,
|
|
5518
|
-
require_sleep.DeviceType.Button,
|
|
5519
|
-
require_sleep.DeviceType.EventEmitter,
|
|
5520
|
-
require_sleep.DeviceType.Update,
|
|
5521
|
-
require_sleep.DeviceType.Generic,
|
|
5522
|
-
require_sleep.DeviceType.Notifier,
|
|
5523
|
-
require_sleep.DeviceType.Script,
|
|
5524
|
-
require_sleep.DeviceType.Automation,
|
|
5525
|
-
require_sleep.DeviceType.Lock,
|
|
5526
|
-
require_sleep.DeviceType.Cover,
|
|
5527
|
-
require_sleep.DeviceType.Valve,
|
|
5528
|
-
require_sleep.DeviceType.Humidifier,
|
|
5529
|
-
require_sleep.DeviceType.WaterHeater,
|
|
5530
|
-
require_sleep.DeviceType.Fan,
|
|
5531
|
-
require_sleep.DeviceType.MediaPlayer,
|
|
5532
|
-
require_sleep.DeviceType.AlarmPanel,
|
|
5533
|
-
require_sleep.DeviceType.Control,
|
|
5534
|
-
require_sleep.DeviceType.Presence,
|
|
5535
|
-
require_sleep.DeviceType.Weather,
|
|
5536
|
-
require_sleep.DeviceType.Vacuum,
|
|
5537
|
-
require_sleep.DeviceType.LawnMower,
|
|
5538
|
-
require_sleep.DeviceType.Container,
|
|
5539
|
-
require_sleep.DeviceType.Image
|
|
5540
|
-
],
|
|
5786
|
+
deviceTypes: Object.values(require_sleep.DeviceType),
|
|
5541
5787
|
deviceConfig: { ui: {
|
|
5542
5788
|
kind: "widget",
|
|
5543
5789
|
widgetId: "host/consumables-panel",
|
|
@@ -7303,7 +7549,6 @@ var PipelineDefaultStepSchema = zod.z.lazy(() => zod.z.object({
|
|
|
7303
7549
|
enabled: zod.z.boolean(),
|
|
7304
7550
|
modelId: zod.z.string(),
|
|
7305
7551
|
children: zod.z.array(PipelineDefaultStepSchema).readonly(),
|
|
7306
|
-
engine: PipelineEngineChoiceSchema.optional(),
|
|
7307
7552
|
group: zod.z.string().optional(),
|
|
7308
7553
|
settings: zod.z.record(zod.z.string(), zod.z.unknown()).optional()
|
|
7309
7554
|
}));
|
|
@@ -7328,7 +7573,9 @@ var PipelineModelOptionSchema = zod.z.object({
|
|
|
7328
7573
|
formats: zod.z.record(zod.z.string(), zod.z.object({
|
|
7329
7574
|
downloaded: zod.z.boolean(),
|
|
7330
7575
|
sizeMB: zod.z.number()
|
|
7331
|
-
}))
|
|
7576
|
+
})),
|
|
7577
|
+
group: ModelVariantGroupSchema.optional(),
|
|
7578
|
+
legacy: zod.z.boolean().optional()
|
|
7332
7579
|
});
|
|
7333
7580
|
var ConfigFieldBridge = zod.z.custom();
|
|
7334
7581
|
var PipelineAddonSchemaSchema = zod.z.object({
|
|
@@ -7379,15 +7626,42 @@ var EngineProvisioningSchema = zod.z.object({
|
|
|
7379
7626
|
]),
|
|
7380
7627
|
progress: zod.z.number().optional(),
|
|
7381
7628
|
error: zod.z.string().optional(),
|
|
7382
|
-
nextRetryAt: zod.z.number().optional()
|
|
7629
|
+
nextRetryAt: zod.z.number().optional(),
|
|
7630
|
+
/**
|
|
7631
|
+
* Gate A (config-correctness gate at engine change): human-readable
|
|
7632
|
+
* config issues surfaced EAGERLY when the node's engine changes — model
|
|
7633
|
+
* substitutions ("chose X, running Y") and zero-build steps ("no model
|
|
7634
|
+
* has a <format> build"). Additive/optional: informational only, never
|
|
7635
|
+
* enforced here — `assertEngineReady` (readiness) still gates inference.
|
|
7636
|
+
* Absent/empty when the node-default tree resolves cleanly.
|
|
7637
|
+
*/
|
|
7638
|
+
configIssues: zod.z.array(zod.z.string()).optional()
|
|
7383
7639
|
});
|
|
7384
7640
|
var PipelineStepInputSchema = zod.z.lazy(() => zod.z.object({
|
|
7385
7641
|
addonId: zod.z.string(),
|
|
7386
|
-
modelId: zod.z.string(),
|
|
7642
|
+
modelId: zod.z.string().optional(),
|
|
7387
7643
|
enabled: zod.z.boolean().default(true),
|
|
7388
7644
|
children: zod.z.array(PipelineStepInputSchema).optional(),
|
|
7389
7645
|
settings: zod.z.record(zod.z.string(), zod.z.unknown()).optional()
|
|
7390
7646
|
}));
|
|
7647
|
+
var ModelSubstitutionSchema = zod.z.object({
|
|
7648
|
+
addonId: zod.z.string(),
|
|
7649
|
+
chosen: zod.z.string(),
|
|
7650
|
+
running: zod.z.string(),
|
|
7651
|
+
format: zod.z.string()
|
|
7652
|
+
});
|
|
7653
|
+
var PipelineValidationIssueSchema = zod.z.object({
|
|
7654
|
+
addonId: zod.z.string(),
|
|
7655
|
+
kind: zod.z.enum(["unknown-addon", "no-format-build"]),
|
|
7656
|
+
detail: zod.z.string()
|
|
7657
|
+
});
|
|
7658
|
+
var PipelineValidationResultSchema = zod.z.object({
|
|
7659
|
+
ok: zod.z.boolean(),
|
|
7660
|
+
issues: zod.z.array(PipelineValidationIssueSchema).readonly(),
|
|
7661
|
+
substitutions: zod.z.array(ModelSubstitutionSchema).readonly(),
|
|
7662
|
+
/** The node's `currentEngine.format` this validation ran against. */
|
|
7663
|
+
format: zod.z.string()
|
|
7664
|
+
});
|
|
7391
7665
|
var ReferenceImageEntrySchema = zod.z.object({
|
|
7392
7666
|
filename: zod.z.string(),
|
|
7393
7667
|
stepIds: zod.z.array(zod.z.string()).readonly().optional()
|
|
@@ -7500,10 +7774,45 @@ var pipelineExecutorCapability = {
|
|
|
7500
7774
|
kind: "mutation",
|
|
7501
7775
|
auth: "admin"
|
|
7502
7776
|
}),
|
|
7777
|
+
/**
|
|
7778
|
+
* Reset ONE node's detection-pipeline to its factory defaults, forcing
|
|
7779
|
+
* regeneration of the (now hardware-aware) default object-detection
|
|
7780
|
+
* model. `nodeId` is the ROUTING key — the generated cap-router strips
|
|
7781
|
+
* it (default `nodeIdMode: 'routing'`, same as `getSelectedEngine` /
|
|
7782
|
+
* `getDefaultSteps`) and dispatches to that node, so the provider method
|
|
7783
|
+
* runs ON the target node and receives no `nodeId`.
|
|
7784
|
+
*
|
|
7785
|
+
* Clears the node's persisted global pipeline seed (`pipelineSteps`) +
|
|
7786
|
+
* legacy engine blob (`pipelineEngine`) and every device's per-camera
|
|
7787
|
+
* step overrides, then re-seeds the hardware-aware default tree. Returns
|
|
7788
|
+
* the regenerated object-detection model id (null when the default tree
|
|
7789
|
+
* has no detector for this node's engine format) so the caller can
|
|
7790
|
+
* verify the reset without a second round-trip.
|
|
7791
|
+
*/
|
|
7792
|
+
resetToDefault: require_sleep.method(zod.z.object({ nodeId: zod.z.string() }), zod.z.object({
|
|
7793
|
+
success: zod.z.literal(true),
|
|
7794
|
+
regeneratedModelId: zod.z.string().nullable()
|
|
7795
|
+
}), {
|
|
7796
|
+
kind: "mutation",
|
|
7797
|
+
auth: "admin"
|
|
7798
|
+
}),
|
|
7503
7799
|
getSchema: require_sleep.method(zod.z.void(), PipelineSchemaSchema),
|
|
7504
7800
|
getGlobalSteps: require_sleep.method(zod.z.void(), zod.z.array(PipelineDefaultStepSchema).readonly().nullable()),
|
|
7505
7801
|
getGlobalPipelineConfig: require_sleep.method(zod.z.void(), PipelineConfigBridge),
|
|
7506
7802
|
getOrchestratorConfigSchema: require_sleep.method(zod.z.void(), ConfigUISchemaBridge),
|
|
7803
|
+
/**
|
|
7804
|
+
* Gate B (pre-init config-correctness gate). PURE COMPUTE against this
|
|
7805
|
+
* node's `currentEngine.format` — resolves `steps` the same way the
|
|
7806
|
+
* runtime dispatch path would, and reports what WOULD happen without
|
|
7807
|
+
* touching any node-global state. Called by the orchestrator at attach
|
|
7808
|
+
* time (`attachOn`), node-pinned to the TARGET node, so config problems
|
|
7809
|
+
* surface BEFORE `pipelineRunner.attachCamera` rather than at the first
|
|
7810
|
+
* per-frame resolve. `ok` is false iff `issues` is non-empty (both
|
|
7811
|
+
* `unknown-addon` and `no-format-build` are HARD issues); `substitutions`
|
|
7812
|
+
* is informational (a degraded-but-loadable model swap) and never
|
|
7813
|
+
* affects `ok`. Never throws.
|
|
7814
|
+
*/
|
|
7815
|
+
validatePipeline: require_sleep.method(zod.z.object({ steps: zod.z.array(PipelineStepInputSchema) }), PipelineValidationResultSchema),
|
|
7507
7816
|
listTemplates: require_sleep.method(zod.z.void(), zod.z.array(PipelineTemplateSchema$1).readonly()),
|
|
7508
7817
|
saveTemplate: require_sleep.method(zod.z.object({
|
|
7509
7818
|
name: zod.z.string(),
|
|
@@ -7890,6 +8199,13 @@ var RunnerFrameSourceSchema = zod.z.discriminatedUnion("kind", [zod.z.object({ k
|
|
|
7890
8199
|
kind: zod.z.literal("remote-restream"),
|
|
7891
8200
|
/** The camera's source-owner node (slice 1: always the hub). */
|
|
7892
8201
|
ownerNodeId: zod.z.string(),
|
|
8202
|
+
/**
|
|
8203
|
+
* The owner's LAN-reachable host, resolved by the orchestrator from the
|
|
8204
|
+
* per-node `reachableHost` override (Cluster UI). When present the runner
|
|
8205
|
+
* dials THIS host for the owner's restream, in preference to the
|
|
8206
|
+
* `CAMSTACK_HUB_URL`-derived default. Absent → auto-detect fallback.
|
|
8207
|
+
*/
|
|
8208
|
+
ownerReachableHost: zod.z.string().optional(),
|
|
7893
8209
|
/** Operator override for the owner host the runner dials. */
|
|
7894
8210
|
hubHostnameOverride: zod.z.string().optional()
|
|
7895
8211
|
})]).describe("Per-camera frame-source mode for the runner (P2c)");
|
|
@@ -7898,13 +8214,11 @@ var RunnerFrameSourceSchema = zod.z.discriminatedUnion("kind", [zod.z.object({ k
|
|
|
7898
8214
|
* specific runner instance via `attachCamera`. Carries everything the
|
|
7899
8215
|
* runner needs to subscribe to the local broker and execute inference.
|
|
7900
8216
|
*
|
|
7901
|
-
* Stateless-pipeline model: the
|
|
7902
|
-
*
|
|
7903
|
-
*
|
|
7904
|
-
*
|
|
7905
|
-
*
|
|
7906
|
-
* `engine`/`steps`/`audio` are optional during the additive migration
|
|
7907
|
-
* window; once orchestrator + UI are migrated they become required.
|
|
8217
|
+
* Stateless-pipeline model: the pipeline content (`steps`, optional
|
|
8218
|
+
* `audio`) travels with the attach payload. The runner keeps it in RAM
|
|
8219
|
+
* for the lifetime of the attach — on rebalance, edit, or restart the
|
|
8220
|
+
* orchestrator re-sends the latest snapshot. Engine is NOT carried: it is
|
|
8221
|
+
* node-local, resolved by the executing runner at dispatch time.
|
|
7908
8222
|
*/
|
|
7909
8223
|
var RunnerCameraConfigSchema = zod.z.object({
|
|
7910
8224
|
deviceId: zod.z.number(),
|
|
@@ -7955,14 +8269,11 @@ var RunnerCameraConfigSchema = zod.z.object({
|
|
|
7955
8269
|
*/
|
|
7956
8270
|
motionSources: MotionSourcesSchema.default(["analyzer"]),
|
|
7957
8271
|
pipelineEnabled: zod.z.boolean().default(true),
|
|
7958
|
-
/** Engine choice for video steps (runtime+backend+format). */
|
|
7959
|
-
engine: PipelineEngineChoiceSchema.optional(),
|
|
7960
8272
|
/** Ordered tree of video steps. Absent → runner skips video detection. */
|
|
7961
8273
|
steps: zod.z.array(PipelineStepInputSchema).readonly().optional(),
|
|
7962
8274
|
/** Audio classification branch. `enabled:false` disables, null skips. */
|
|
7963
8275
|
audio: zod.z.object({
|
|
7964
|
-
|
|
7965
|
-
modelId: zod.z.string(),
|
|
8276
|
+
modelId: zod.z.string().optional(),
|
|
7966
8277
|
enabled: zod.z.boolean()
|
|
7967
8278
|
}).nullable().optional(),
|
|
7968
8279
|
/**
|
|
@@ -12254,10 +12565,12 @@ function createSystemProxy(api) {
|
|
|
12254
12565
|
getEngineProvisioning: (input) => dispatch("pipelineExecutor", "getEngineProvisioning", "query", input),
|
|
12255
12566
|
getVideoPipelineSteps: (input) => dispatch("pipelineExecutor", "getVideoPipelineSteps", "query", input),
|
|
12256
12567
|
setVideoPipelineSteps: (input) => dispatch("pipelineExecutor", "setVideoPipelineSteps", "mutation", input),
|
|
12568
|
+
resetToDefault: (input) => dispatch("pipelineExecutor", "resetToDefault", "mutation", input),
|
|
12257
12569
|
getSchema: (input) => dispatch("pipelineExecutor", "getSchema", "query", input),
|
|
12258
12570
|
getGlobalSteps: (input) => dispatch("pipelineExecutor", "getGlobalSteps", "query", input),
|
|
12259
12571
|
getGlobalPipelineConfig: (input) => dispatch("pipelineExecutor", "getGlobalPipelineConfig", "query", input),
|
|
12260
12572
|
getOrchestratorConfigSchema: (input) => dispatch("pipelineExecutor", "getOrchestratorConfigSchema", "query", input),
|
|
12573
|
+
validatePipeline: (input) => dispatch("pipelineExecutor", "validatePipeline", "query", input),
|
|
12261
12574
|
listTemplates: (input) => dispatch("pipelineExecutor", "listTemplates", "query", input),
|
|
12262
12575
|
saveTemplate: (input) => dispatch("pipelineExecutor", "saveTemplate", "mutation", input),
|
|
12263
12576
|
updateTemplate: (input) => dispatch("pipelineExecutor", "updateTemplate", "mutation", input),
|
|
@@ -12289,6 +12602,7 @@ function createSystemProxy(api) {
|
|
|
12289
12602
|
getGlobalMetrics: (input) => dispatch("pipelineOrchestrator", "getGlobalMetrics", "query", input),
|
|
12290
12603
|
getCapabilityBindings: (input) => dispatch("pipelineOrchestrator", "getCapabilityBindings", "query", input),
|
|
12291
12604
|
setCapabilityBinding: (input) => dispatch("pipelineOrchestrator", "setCapabilityBinding", "mutation", input),
|
|
12605
|
+
getIngestOwner: (input) => dispatch("pipelineOrchestrator", "getIngestOwner", "query", input),
|
|
12292
12606
|
getDecoderAssignments: (input) => dispatch("pipelineOrchestrator", "getDecoderAssignments", "query", input),
|
|
12293
12607
|
getAudioNodeLoad: (input) => dispatch("pipelineOrchestrator", "getAudioNodeLoad", "query", input),
|
|
12294
12608
|
getAgentSettings: (input) => dispatch("pipelineOrchestrator", "getAgentSettings", "query", input),
|
|
@@ -12298,6 +12612,7 @@ function createSystemProxy(api) {
|
|
|
12298
12612
|
setAgentMaxCameras: (input) => dispatch("pipelineOrchestrator", "setAgentMaxCameras", "mutation", input),
|
|
12299
12613
|
setAgentDetectWeight: (input) => dispatch("pipelineOrchestrator", "setAgentDetectWeight", "mutation", input),
|
|
12300
12614
|
setAgentCapabilities: (input) => dispatch("pipelineOrchestrator", "setAgentCapabilities", "mutation", input),
|
|
12615
|
+
setAgentReachableHost: (input) => dispatch("pipelineOrchestrator", "setAgentReachableHost", "mutation", input),
|
|
12301
12616
|
getCameraStatuses: (input) => dispatch("pipelineOrchestrator", "getCameraStatuses", "query", input),
|
|
12302
12617
|
listTemplates: (input) => dispatch("pipelineOrchestrator", "listTemplates", "query", input),
|
|
12303
12618
|
saveTemplate: (input) => dispatch("pipelineOrchestrator", "saveTemplate", "mutation", input),
|
|
@@ -14410,6 +14725,65 @@ var cameraPipelineConfigCapability = {
|
|
|
14410
14725
|
methods: {}
|
|
14411
14726
|
};
|
|
14412
14727
|
//#endregion
|
|
14728
|
+
//#region src/capabilities/cap-router-predicates.ts
|
|
14729
|
+
/**
|
|
14730
|
+
* Shared cap-router predicates — the SINGLE source for the structural Zod-shape
|
|
14731
|
+
* checks + naming used by BOTH the runtime cap-router builder
|
|
14732
|
+
* (`@camstack/system` `cap-router-builder.ts` + the server's
|
|
14733
|
+
* `cap-router-runtime.ts`) AND the codegen scripts (`scripts/generate-cap-*.ts`).
|
|
14734
|
+
*
|
|
14735
|
+
* These used to be independently reimplemented on each side, held in sync only
|
|
14736
|
+
* by "must stay byte-identical" comments — a live drift risk. Consolidating them
|
|
14737
|
+
* here (next to `resolveCapMount` / `expandCapMethods`, the other shared model)
|
|
14738
|
+
* makes the two paths provably agree. Each predicate accepts both Zod 4
|
|
14739
|
+
* (`_def.type`) and legacy Zod 3 (`_def.typeName` / `constructor.name`) shapes.
|
|
14740
|
+
*/
|
|
14741
|
+
/** `z.void()` — input carries no data. */
|
|
14742
|
+
function isVoidInput(schema) {
|
|
14743
|
+
const def = schema._def;
|
|
14744
|
+
return schema.constructor?.name === "ZodVoid" || def?.type === "void" || def?.typeName === "ZodVoid";
|
|
14745
|
+
}
|
|
14746
|
+
/** `z.object()` — supports `.loose()` for out-of-band `nodeId`/`addonId` keys. */
|
|
14747
|
+
function isObjectInput(schema) {
|
|
14748
|
+
const def = schema._def;
|
|
14749
|
+
return schema.constructor?.name === "ZodObject" || def?.type === "object" || def?.typeName === "ZodObject";
|
|
14750
|
+
}
|
|
14751
|
+
/**
|
|
14752
|
+
* Structural "is this Zod schema an array output" check — bottoms out at
|
|
14753
|
+
* `ZodArray` through the canonical Zod 4 wrappers (readonly/optional/nullable/
|
|
14754
|
+
* default). Bounded unwrap guards against a malformed/cyclic schema.
|
|
14755
|
+
*/
|
|
14756
|
+
function isArrayOutputSchema(schema) {
|
|
14757
|
+
let cur = schema;
|
|
14758
|
+
for (let depth = 0; depth < 8 && cur != null; depth += 1) {
|
|
14759
|
+
const def = cur._def;
|
|
14760
|
+
const ctor = cur.constructor?.name;
|
|
14761
|
+
if (ctor === "ZodArray" || def?.type === "array") return true;
|
|
14762
|
+
if (!(ctor === "ZodReadonly" || def?.type === "readonly" || ctor === "ZodOptional" || def?.type === "optional" || ctor === "ZodNullable" || def?.type === "nullable" || ctor === "ZodDefault" || def?.type === "default") || def?.innerType == null) return false;
|
|
14763
|
+
cur = def.innerType;
|
|
14764
|
+
}
|
|
14765
|
+
return false;
|
|
14766
|
+
}
|
|
14767
|
+
/**
|
|
14768
|
+
* Apply `.loose()` to an object input schema when available (Zod 4) so the
|
|
14769
|
+
* router accepts the out-of-band `nodeId`/`addonId` selector keys without
|
|
14770
|
+
* stripping them. Falls back to the schema unchanged when `.loose()` is absent.
|
|
14771
|
+
*/
|
|
14772
|
+
function looseSchema(schema) {
|
|
14773
|
+
const loose = schema.loose;
|
|
14774
|
+
return typeof loose === "function" ? loose.call(schema) : schema;
|
|
14775
|
+
}
|
|
14776
|
+
/** Auth level → base-procedure key. `superAdmin` collapses to `admin`. */
|
|
14777
|
+
function procedureAuthKey(auth) {
|
|
14778
|
+
if (auth === "public") return "public";
|
|
14779
|
+
if (auth === "admin" || auth === "superAdmin") return "admin";
|
|
14780
|
+
return "protected";
|
|
14781
|
+
}
|
|
14782
|
+
/** kebab-case cap name → camelCase router-map key. */
|
|
14783
|
+
function kebabToCamel(s) {
|
|
14784
|
+
return s.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
|
|
14785
|
+
}
|
|
14786
|
+
//#endregion
|
|
14413
14787
|
//#region src/capabilities/custom-actions.ts
|
|
14414
14788
|
/**
|
|
14415
14789
|
* Identity — preserves literal types for downstream inference.
|
|
@@ -17198,11 +17572,11 @@ var pipelineAnalyticsCapability = {
|
|
|
17198
17572
|
//#endregion
|
|
17199
17573
|
//#region src/capabilities/pipeline-orchestrator.cap.ts
|
|
17200
17574
|
var CameraPipelineConfigSchema = zod.z.object({
|
|
17201
|
-
engine: PipelineEngineChoiceSchema,
|
|
17575
|
+
engine: PipelineEngineChoiceSchema.optional(),
|
|
17202
17576
|
steps: zod.z.array(PipelineStepInputSchema).readonly(),
|
|
17203
17577
|
audio: zod.z.object({
|
|
17204
|
-
engine: PipelineEngineChoiceSchema,
|
|
17205
|
-
modelId: zod.z.string(),
|
|
17578
|
+
engine: PipelineEngineChoiceSchema.optional(),
|
|
17579
|
+
modelId: zod.z.string().optional(),
|
|
17206
17580
|
enabled: zod.z.boolean(),
|
|
17207
17581
|
settings: zod.z.record(zod.z.string(), zod.z.unknown()).readonly().optional()
|
|
17208
17582
|
}).nullable().optional()
|
|
@@ -17217,7 +17591,7 @@ var PipelineTemplateSchema = zod.z.object({
|
|
|
17217
17591
|
});
|
|
17218
17592
|
var AgentAddonConfigSchema = zod.z.object({
|
|
17219
17593
|
enabled: zod.z.boolean(),
|
|
17220
|
-
modelId: zod.z.string(),
|
|
17594
|
+
modelId: zod.z.string().optional(),
|
|
17221
17595
|
settings: zod.z.record(zod.z.string(), zod.z.unknown()).readonly()
|
|
17222
17596
|
});
|
|
17223
17597
|
var AgentPipelineSettingsSchema = zod.z.object({
|
|
@@ -17232,7 +17606,15 @@ var AgentPipelineSettingsSchema = zod.z.object({
|
|
|
17232
17606
|
/** Node is eligible to run audio-analyzer sessions. */
|
|
17233
17607
|
audio: zod.z.boolean().optional(),
|
|
17234
17608
|
/** Node is eligible to be the ingest / source-owner (serve the restream). */
|
|
17235
|
-
ingest: zod.z.boolean().optional()
|
|
17609
|
+
ingest: zod.z.boolean().optional(),
|
|
17610
|
+
/**
|
|
17611
|
+
* Operator override for the LAN host a cross-node decoder dials to reach
|
|
17612
|
+
* THIS node's restream (Cluster UI). Absent → auto-detect: a remote runner
|
|
17613
|
+
* falls back to its `CAMSTACK_HUB_URL`-derived host (the Moleculer address
|
|
17614
|
+
* it already uses to reach the hub). Set this only when the auto-detected
|
|
17615
|
+
* address is wrong (multi-homed host, NAT, custom interface).
|
|
17616
|
+
*/
|
|
17617
|
+
reachableHost: zod.z.string().optional()
|
|
17236
17618
|
});
|
|
17237
17619
|
var CameraPipelineForAgentSchema = zod.z.object({
|
|
17238
17620
|
steps: zod.z.array(PipelineStepInputSchema).readonly(),
|
|
@@ -17338,6 +17720,15 @@ var GlobalMetricsSchema = zod.z.object({
|
|
|
17338
17720
|
* capability providers.
|
|
17339
17721
|
*/
|
|
17340
17722
|
var CapabilityBindingsSchema = zod.z.record(zod.z.string(), zod.z.string());
|
|
17723
|
+
/**
|
|
17724
|
+
* The cluster's single camera-source owner (`clusterRoles.ingestNode`) plus
|
|
17725
|
+
* its LAN-reachable host, if one is registered. See `getIngestOwner`.
|
|
17726
|
+
*/
|
|
17727
|
+
var IngestOwnerSchema = zod.z.object({
|
|
17728
|
+
ownerNodeId: zod.z.string(),
|
|
17729
|
+
reachableHost: zod.z.string().optional(),
|
|
17730
|
+
configIssue: zod.z.string().optional()
|
|
17731
|
+
});
|
|
17341
17732
|
/** Stream entry surfaced from the stream-catalog for one device. */
|
|
17342
17733
|
var CameraSourceStreamSchema = zod.z.object({
|
|
17343
17734
|
camStreamId: zod.z.string(),
|
|
@@ -17354,6 +17745,14 @@ var CameraAssignmentStatusSchema = zod.z.object({
|
|
|
17354
17745
|
detectionNodeId: zod.z.string().nullable(),
|
|
17355
17746
|
decoderNodeId: zod.z.string().nullable(),
|
|
17356
17747
|
audioNodeId: zod.z.string().nullable(),
|
|
17748
|
+
/**
|
|
17749
|
+
* The node that OWNS this camera's physical source pull (dials the RTSP and
|
|
17750
|
+
* hosts the broker/restream) — the cluster ingest owner today
|
|
17751
|
+
* (`clusterRoles.ingestNode`), per-camera once source assignment lands. Lets
|
|
17752
|
+
* the UI show WHERE a camera is sourced without SSH/logs, and is the node the
|
|
17753
|
+
* broker block below was read from (pinned). Nullable only pre-wiring.
|
|
17754
|
+
*/
|
|
17755
|
+
sourceNodeId: zod.z.string().nullable(),
|
|
17357
17756
|
pinned: zod.z.object({
|
|
17358
17757
|
detection: zod.z.boolean(),
|
|
17359
17758
|
decoder: zod.z.boolean(),
|
|
@@ -17560,6 +17959,14 @@ var pipelineOrchestratorCapability = {
|
|
|
17560
17959
|
kind: "mutation",
|
|
17561
17960
|
auth: "admin"
|
|
17562
17961
|
}),
|
|
17962
|
+
/**
|
|
17963
|
+
* The cluster's single camera-source owner — resolved UNCONDITIONALLY
|
|
17964
|
+
* from `clusterRoles.ingestNode` (NOT the detection-decode
|
|
17965
|
+
* `remoteSourcingNodes` knob). Consumers (recorder/snapshot/audio) pin
|
|
17966
|
+
* their broker calls to `ownerNodeId` and dial `reachableHost` when
|
|
17967
|
+
* present. Defaults to `{ ownerNodeId: 'hub' }`.
|
|
17968
|
+
*/
|
|
17969
|
+
getIngestOwner: require_sleep.method(zod.z.void(), IngestOwnerSchema),
|
|
17563
17970
|
/** Pin a device's decoder to a specific node. */
|
|
17564
17971
|
assignDecoder: require_sleep.method(zod.z.object({
|
|
17565
17972
|
deviceId: zod.z.number(),
|
|
@@ -17706,6 +18113,22 @@ var pipelineOrchestratorCapability = {
|
|
|
17706
18113
|
kind: "mutation",
|
|
17707
18114
|
auth: "admin"
|
|
17708
18115
|
}),
|
|
18116
|
+
/**
|
|
18117
|
+
* Set (or clear) the operator override for the LAN host a cross-node
|
|
18118
|
+
* decoder dials to reach this node's restream. Pass a non-empty string to
|
|
18119
|
+
* override the auto-detected address (the runner's `CAMSTACK_HUB_URL`
|
|
18120
|
+
* default); pass `null` or an empty string to clear it and revert to
|
|
18121
|
+
* auto-detect. Applied on the next dispatch cycle — takes effect for new
|
|
18122
|
+
* cross-node attaches; existing attaches keep their current host until
|
|
18123
|
+
* re-dispatched.
|
|
18124
|
+
*/
|
|
18125
|
+
setAgentReachableHost: require_sleep.method(zod.z.object({
|
|
18126
|
+
agentNodeId: zod.z.string(),
|
|
18127
|
+
reachableHost: zod.z.string().nullable()
|
|
18128
|
+
}), zod.z.object({ success: zod.z.literal(true) }), {
|
|
18129
|
+
kind: "mutation",
|
|
18130
|
+
auth: "admin"
|
|
18131
|
+
}),
|
|
17709
18132
|
/** Read one camera's settings. Null when never touched (inherits agent defaults fully). */
|
|
17710
18133
|
getCameraSettings: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), CameraPipelineSettingsSchema.nullable()),
|
|
17711
18134
|
/** Set or clear the 3-state toggle for one (camera, addonId). Pass `enabled: null` to clear and revert to agent default. */
|
|
@@ -17798,36 +18221,6 @@ var pipelineOrchestratorCapability = {
|
|
|
17798
18221
|
}
|
|
17799
18222
|
};
|
|
17800
18223
|
//#endregion
|
|
17801
|
-
//#region src/capabilities/restreamer.cap.ts
|
|
17802
|
-
var RegisteredStreamSchema = zod.z.object({
|
|
17803
|
-
streamId: zod.z.string(),
|
|
17804
|
-
label: zod.z.string().optional(),
|
|
17805
|
-
codec: zod.z.string(),
|
|
17806
|
-
type: zod.z.enum(["video", "audio"]),
|
|
17807
|
-
sourceUrl: zod.z.string()
|
|
17808
|
-
});
|
|
17809
|
-
var ExposedResourceSchema = zod.z.object({
|
|
17810
|
-
streamId: zod.z.string(),
|
|
17811
|
-
format: zod.z.string(),
|
|
17812
|
-
value: zod.z.string()
|
|
17813
|
-
});
|
|
17814
|
-
var restreamerCapability = {
|
|
17815
|
-
name: "restreamer",
|
|
17816
|
-
scope: "system",
|
|
17817
|
-
mode: "collection",
|
|
17818
|
-
internal: true,
|
|
17819
|
-
methods: {
|
|
17820
|
-
registerDevice: require_sleep.method(zod.z.object({
|
|
17821
|
-
deviceId: zod.z.number(),
|
|
17822
|
-
streams: zod.z.array(RegisteredStreamSchema).readonly()
|
|
17823
|
-
}), zod.z.void(), { kind: "mutation" }),
|
|
17824
|
-
unregisterDevice: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), zod.z.void(), { kind: "mutation" }),
|
|
17825
|
-
getExposedResources: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), zod.z.array(ExposedResourceSchema).readonly())
|
|
17826
|
-
},
|
|
17827
|
-
/** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
|
|
17828
|
-
mount: { kind: "skip" }
|
|
17829
|
-
};
|
|
17830
|
-
//#endregion
|
|
17831
18224
|
//#region src/capabilities/settings-store.cap.ts
|
|
17832
18225
|
/**
|
|
17833
18226
|
* Query filter for settings-store collections.
|
|
@@ -18055,9 +18448,9 @@ var smtpProviderCapability = {
|
|
|
18055
18448
|
/**
|
|
18056
18449
|
* A single device snapshot returned as base64 JPEG/PNG.
|
|
18057
18450
|
*
|
|
18058
|
-
*
|
|
18059
|
-
*
|
|
18060
|
-
*
|
|
18451
|
+
* The `SnapshotAddon` wrapper returns this shape whether the frame came from
|
|
18452
|
+
* the device-native provider (onboard capture) or from the stream-broker
|
|
18453
|
+
* prebuffer fallback.
|
|
18061
18454
|
*/
|
|
18062
18455
|
var SnapshotImageSchema = zod.z.object({
|
|
18063
18456
|
base64: zod.z.string(),
|
|
@@ -18133,38 +18526,6 @@ var snapshotCapability = {
|
|
|
18133
18526
|
}
|
|
18134
18527
|
};
|
|
18135
18528
|
//#endregion
|
|
18136
|
-
//#region src/capabilities/snapshot-provider.cap.ts
|
|
18137
|
-
/**
|
|
18138
|
-
* snapshot-provider — collection of native snapshot implementations.
|
|
18139
|
-
*
|
|
18140
|
-
* Device provider addons (ONVIF, Frigate, etc.) register here
|
|
18141
|
-
* when they can capture frames through a protocol-native path (e.g.
|
|
18142
|
-
* ONVIF GetSnapshotUri, Frigate /api/<cam>/latest.jpg). The `snapshot`
|
|
18143
|
-
* singleton orchestrator iterates over the collection, asking each
|
|
18144
|
-
* provider whether it supports the requested device, and calls the
|
|
18145
|
-
* first matching one.
|
|
18146
|
-
*
|
|
18147
|
-
* If no provider in the collection supports a device, the orchestrator
|
|
18148
|
-
* falls back to `stream-broker.grabFrame` (universal fallback).
|
|
18149
|
-
*
|
|
18150
|
-
* Public tRPC router (auto-mounted) so out-of-process addons, agents,
|
|
18151
|
-
* and advanced clients can bypass the orchestrator when needed.
|
|
18152
|
-
*/
|
|
18153
|
-
var snapshotProviderCapability = {
|
|
18154
|
-
name: "snapshot-provider",
|
|
18155
|
-
scope: "system",
|
|
18156
|
-
mode: "collection",
|
|
18157
|
-
methods: {
|
|
18158
|
-
supportsDevice: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), zod.z.boolean()),
|
|
18159
|
-
getSnapshot: require_sleep.method(zod.z.object({
|
|
18160
|
-
deviceId: zod.z.number(),
|
|
18161
|
-
streamId: zod.z.string().optional()
|
|
18162
|
-
}), SnapshotImageSchema.nullable())
|
|
18163
|
-
},
|
|
18164
|
-
/** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
|
|
18165
|
-
mount: { kind: "custom" }
|
|
18166
|
-
};
|
|
18167
|
-
//#endregion
|
|
18168
18529
|
//#region src/capabilities/sso-bridge.cap.ts
|
|
18169
18530
|
/**
|
|
18170
18531
|
* `sso-bridge` — internal hub-only cap that lets SSO-style auth
|
|
@@ -18699,11 +19060,12 @@ var videoclipsCapability = {
|
|
|
18699
19060
|
}
|
|
18700
19061
|
};
|
|
18701
19062
|
//#endregion
|
|
18702
|
-
//#region src/capabilities/webrtc.cap.ts
|
|
19063
|
+
//#region src/capabilities/webrtc-session.cap.ts
|
|
18703
19064
|
/**
|
|
18704
|
-
* Optional client-side hints sent at session creation to help the
|
|
18705
|
-
*
|
|
18706
|
-
*
|
|
19065
|
+
* Optional client-side hints sent at session creation to help the provider
|
|
19066
|
+
* pick the best native source. All fields optional — a viewer that knows
|
|
19067
|
+
* nothing still gets a sane default. (Relocated from the retired `webrtc`
|
|
19068
|
+
* collection cap; this `webrtc-session` cap is the live signaling surface.)
|
|
18707
19069
|
*/
|
|
18708
19070
|
var webrtcClientHintsSchema = zod.z.object({
|
|
18709
19071
|
viewportWidth: zod.z.number().int().positive().optional(),
|
|
@@ -18714,51 +19076,6 @@ var webrtcClientHintsSchema = zod.z.object({
|
|
|
18714
19076
|
/** Hard tier override; takes precedence over scoring when registered. */
|
|
18715
19077
|
prefersTier: zod.z.string().optional()
|
|
18716
19078
|
}).partial();
|
|
18717
|
-
var webrtcCapability = {
|
|
18718
|
-
name: "webrtc",
|
|
18719
|
-
scope: "system",
|
|
18720
|
-
mode: "collection",
|
|
18721
|
-
internal: true,
|
|
18722
|
-
methods: {
|
|
18723
|
-
handleOffer: require_sleep.method(zod.z.object({
|
|
18724
|
-
streamId: zod.z.string(),
|
|
18725
|
-
sdpOffer: zod.z.string()
|
|
18726
|
-
}), zod.z.string(), { kind: "mutation" }),
|
|
18727
|
-
supportsStream: require_sleep.method(zod.z.object({ streamId: zod.z.string() }), zod.z.boolean()),
|
|
18728
|
-
registerStream: require_sleep.method(zod.z.object({
|
|
18729
|
-
streamId: zod.z.string(),
|
|
18730
|
-
codec: zod.z.string()
|
|
18731
|
-
}), zod.z.void(), { kind: "mutation" }),
|
|
18732
|
-
unregisterStream: require_sleep.method(zod.z.object({ streamId: zod.z.string() }), zod.z.void(), { kind: "mutation" }),
|
|
18733
|
-
/**
|
|
18734
|
-
* Two-step server-offer signaling. `hints` is optional — providers
|
|
18735
|
-
* that don't care about adaptive source selection ignore it.
|
|
18736
|
-
*/
|
|
18737
|
-
createSession: require_sleep.method(zod.z.object({
|
|
18738
|
-
streamId: zod.z.string(),
|
|
18739
|
-
hints: webrtcClientHintsSchema.optional()
|
|
18740
|
-
}), zod.z.object({
|
|
18741
|
-
sessionId: zod.z.string(),
|
|
18742
|
-
sdpOffer: zod.z.string()
|
|
18743
|
-
}), { kind: "mutation" }),
|
|
18744
|
-
handleAnswer: require_sleep.method(zod.z.object({
|
|
18745
|
-
sessionId: zod.z.string(),
|
|
18746
|
-
sdpAnswer: zod.z.string()
|
|
18747
|
-
}), zod.z.void(), { kind: "mutation" }),
|
|
18748
|
-
closeSession: require_sleep.method(zod.z.object({ sessionId: zod.z.string() }), zod.z.void(), { kind: "mutation" }),
|
|
18749
|
-
/**
|
|
18750
|
-
* Whether this provider supports adaptive bitrate for the given stream.
|
|
18751
|
-
* Currently always false — adaptive selection is one-shot at session
|
|
18752
|
-
* start, not in-session encoder switching. Phase 5 plans to layer
|
|
18753
|
-
* encoder-driven adaptation on top.
|
|
18754
|
-
*/
|
|
18755
|
-
hasAdaptiveBitrate: require_sleep.method(zod.z.object({ streamId: zod.z.string() }), zod.z.boolean())
|
|
18756
|
-
},
|
|
18757
|
-
/** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
|
|
18758
|
-
mount: { kind: "skip" }
|
|
18759
|
-
};
|
|
18760
|
-
//#endregion
|
|
18761
|
-
//#region src/capabilities/webrtc-session.cap.ts
|
|
18762
19079
|
/**
|
|
18763
19080
|
* Discriminated target for a WebRTC session. The client sends this
|
|
18764
19081
|
* structured object instead of building / parsing brokerId strings;
|
|
@@ -19031,7 +19348,7 @@ var webrtcSessionCapability = {
|
|
|
19031
19348
|
}).nullable() }))
|
|
19032
19349
|
},
|
|
19033
19350
|
/** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
|
|
19034
|
-
mount: { kind: "
|
|
19351
|
+
mount: { kind: "server-provided" }
|
|
19035
19352
|
};
|
|
19036
19353
|
//#endregion
|
|
19037
19354
|
//#region src/capabilities/accessories.cap.ts
|
|
@@ -19710,7 +20027,7 @@ var addonsCapability = {
|
|
|
19710
20027
|
}), LogStreamEntrySchema, { kind: "subscription" })
|
|
19711
20028
|
},
|
|
19712
20029
|
/** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
|
|
19713
|
-
mount: { kind: "
|
|
20030
|
+
mount: { kind: "server-provided" }
|
|
19714
20031
|
};
|
|
19715
20032
|
//#endregion
|
|
19716
20033
|
//#region src/capabilities/button.cap.ts
|
|
@@ -20126,7 +20443,7 @@ var integrationsCapability = {
|
|
|
20126
20443
|
})
|
|
20127
20444
|
},
|
|
20128
20445
|
/** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
|
|
20129
|
-
mount: { kind: "
|
|
20446
|
+
mount: { kind: "server-provided" }
|
|
20130
20447
|
};
|
|
20131
20448
|
//#endregion
|
|
20132
20449
|
//#region src/capabilities/intercom.cap.ts
|
|
@@ -20773,7 +21090,7 @@ var networkQualityCapability = {
|
|
|
20773
21090
|
}), zod.z.void(), { kind: "mutation" })
|
|
20774
21091
|
},
|
|
20775
21092
|
/** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
|
|
20776
|
-
mount: { kind: "
|
|
21093
|
+
mount: { kind: "server-provided" }
|
|
20777
21094
|
};
|
|
20778
21095
|
//#endregion
|
|
20779
21096
|
//#region src/capabilities/nodes.cap.ts
|
|
@@ -20965,7 +21282,7 @@ var nodesCapability = {
|
|
|
20965
21282
|
})
|
|
20966
21283
|
},
|
|
20967
21284
|
/** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
|
|
20968
|
-
mount: { kind: "
|
|
21285
|
+
mount: { kind: "server-provided" }
|
|
20969
21286
|
};
|
|
20970
21287
|
//#endregion
|
|
20971
21288
|
//#region src/capabilities/osd.cap.ts
|
|
@@ -21959,7 +22276,7 @@ var systemCapability = {
|
|
|
21959
22276
|
})
|
|
21960
22277
|
},
|
|
21961
22278
|
/** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
|
|
21962
|
-
mount: { kind: "
|
|
22279
|
+
mount: { kind: "server-provided" }
|
|
21963
22280
|
};
|
|
21964
22281
|
//#endregion
|
|
21965
22282
|
//#region src/capabilities/toast.cap.ts
|
|
@@ -21999,7 +22316,7 @@ var toastCapability = {
|
|
|
21999
22316
|
mode: "singleton",
|
|
22000
22317
|
methods: { onToast: require_sleep.method(zod.z.void(), ToastSchema, { kind: "subscription" }) },
|
|
22001
22318
|
/** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
|
|
22002
|
-
mount: { kind: "
|
|
22319
|
+
mount: { kind: "server-provided" }
|
|
22003
22320
|
};
|
|
22004
22321
|
//#endregion
|
|
22005
22322
|
//#region src/capabilities/user-management.cap.ts
|
|
@@ -22379,13 +22696,11 @@ var CAPABILITY_NAMES = {
|
|
|
22379
22696
|
ptzAutotrack: "ptz-autotrack",
|
|
22380
22697
|
reboot: "reboot",
|
|
22381
22698
|
recording: "recording",
|
|
22382
|
-
restreamer: "restreamer",
|
|
22383
22699
|
scriptRunner: "script-runner",
|
|
22384
22700
|
settingsStore: "settings-store",
|
|
22385
22701
|
smoke: "smoke",
|
|
22386
22702
|
smtpProvider: "smtp-provider",
|
|
22387
22703
|
snapshot: "snapshot",
|
|
22388
|
-
snapshotProvider: "snapshot-provider",
|
|
22389
22704
|
ssoBridge: "sso-bridge",
|
|
22390
22705
|
storage: "storage",
|
|
22391
22706
|
storageEvictable: "storage-evictable",
|
|
@@ -22393,7 +22708,6 @@ var CAPABILITY_NAMES = {
|
|
|
22393
22708
|
streamBroker: "stream-broker",
|
|
22394
22709
|
streamCatalog: "stream-catalog",
|
|
22395
22710
|
streamParams: "stream-params",
|
|
22396
|
-
streamingEngine: "streaming-engine",
|
|
22397
22711
|
switch: "switch",
|
|
22398
22712
|
system: "system",
|
|
22399
22713
|
tamper: "tamper",
|
|
@@ -22409,7 +22723,6 @@ var CAPABILITY_NAMES = {
|
|
|
22409
22723
|
videoclips: "videoclips",
|
|
22410
22724
|
waterHeater: "water-heater",
|
|
22411
22725
|
weather: "weather",
|
|
22412
|
-
webrtc: "webrtc",
|
|
22413
22726
|
webrtcSession: "webrtc-session",
|
|
22414
22727
|
zoneAnalytics: "zone-analytics",
|
|
22415
22728
|
zoneRules: "zone-rules",
|
|
@@ -22833,10 +23146,6 @@ var CAPABILITY_ROUTER_KEYS = [
|
|
|
22833
23146
|
key: "recording",
|
|
22834
23147
|
name: "recording"
|
|
22835
23148
|
},
|
|
22836
|
-
{
|
|
22837
|
-
key: "restreamer",
|
|
22838
|
-
name: "restreamer"
|
|
22839
|
-
},
|
|
22840
23149
|
{
|
|
22841
23150
|
key: "scriptRunner",
|
|
22842
23151
|
name: "script-runner"
|
|
@@ -22857,10 +23166,6 @@ var CAPABILITY_ROUTER_KEYS = [
|
|
|
22857
23166
|
key: "snapshot",
|
|
22858
23167
|
name: "snapshot"
|
|
22859
23168
|
},
|
|
22860
|
-
{
|
|
22861
|
-
key: "snapshotProvider",
|
|
22862
|
-
name: "snapshot-provider"
|
|
22863
|
-
},
|
|
22864
23169
|
{
|
|
22865
23170
|
key: "ssoBridge",
|
|
22866
23171
|
name: "sso-bridge"
|
|
@@ -22889,10 +23194,6 @@ var CAPABILITY_ROUTER_KEYS = [
|
|
|
22889
23194
|
key: "streamParams",
|
|
22890
23195
|
name: "stream-params"
|
|
22891
23196
|
},
|
|
22892
|
-
{
|
|
22893
|
-
key: "streamingEngine",
|
|
22894
|
-
name: "streaming-engine"
|
|
22895
|
-
},
|
|
22896
23197
|
{
|
|
22897
23198
|
key: "switch",
|
|
22898
23199
|
name: "switch"
|
|
@@ -22953,10 +23254,6 @@ var CAPABILITY_ROUTER_KEYS = [
|
|
|
22953
23254
|
key: "weather",
|
|
22954
23255
|
name: "weather"
|
|
22955
23256
|
},
|
|
22956
|
-
{
|
|
22957
|
-
key: "webrtc",
|
|
22958
|
-
name: "webrtc"
|
|
22959
|
-
},
|
|
22960
23257
|
{
|
|
22961
23258
|
key: "webrtcSession",
|
|
22962
23259
|
name: "webrtc-session"
|
|
@@ -23088,13 +23385,11 @@ var ALL_CAPABILITY_DEFINITIONS = [
|
|
|
23088
23385
|
ptzAutotrackCapability,
|
|
23089
23386
|
rebootCapability,
|
|
23090
23387
|
recordingCapability,
|
|
23091
|
-
restreamerCapability,
|
|
23092
23388
|
scriptRunnerCapability,
|
|
23093
23389
|
settingsStoreCapability,
|
|
23094
23390
|
smokeCapability,
|
|
23095
23391
|
smtpProviderCapability,
|
|
23096
23392
|
snapshotCapability,
|
|
23097
|
-
snapshotProviderCapability,
|
|
23098
23393
|
ssoBridgeCapability,
|
|
23099
23394
|
storageCapability,
|
|
23100
23395
|
storageEvictableCapability,
|
|
@@ -23102,7 +23397,6 @@ var ALL_CAPABILITY_DEFINITIONS = [
|
|
|
23102
23397
|
streamBrokerCapability,
|
|
23103
23398
|
streamCatalogCapability,
|
|
23104
23399
|
streamParamsCapability,
|
|
23105
|
-
streamingEngineCapability,
|
|
23106
23400
|
switchCapability,
|
|
23107
23401
|
systemCapability,
|
|
23108
23402
|
tamperCapability,
|
|
@@ -23118,7 +23412,6 @@ var ALL_CAPABILITY_DEFINITIONS = [
|
|
|
23118
23412
|
videoclipsCapability,
|
|
23119
23413
|
waterHeaterCapability,
|
|
23120
23414
|
weatherCapability,
|
|
23121
|
-
webrtcCapability,
|
|
23122
23415
|
webrtcSessionCapability,
|
|
23123
23416
|
zoneAnalyticsCapability,
|
|
23124
23417
|
zoneRulesCapability,
|
|
@@ -25969,6 +26262,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
25969
26262
|
addonId: null,
|
|
25970
26263
|
access: "create"
|
|
25971
26264
|
},
|
|
26265
|
+
"pipelineExecutor.resetToDefault": {
|
|
26266
|
+
capName: "pipeline-executor",
|
|
26267
|
+
capScope: "system",
|
|
26268
|
+
addonId: null,
|
|
26269
|
+
access: "delete"
|
|
26270
|
+
},
|
|
25972
26271
|
"pipelineExecutor.runAudioTest": {
|
|
25973
26272
|
capName: "pipeline-executor",
|
|
25974
26273
|
capScope: "system",
|
|
@@ -26017,6 +26316,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
26017
26316
|
addonId: null,
|
|
26018
26317
|
access: "create"
|
|
26019
26318
|
},
|
|
26319
|
+
"pipelineExecutor.validatePipeline": {
|
|
26320
|
+
capName: "pipeline-executor",
|
|
26321
|
+
capScope: "system",
|
|
26322
|
+
addonId: null,
|
|
26323
|
+
access: "view"
|
|
26324
|
+
},
|
|
26020
26325
|
"pipelineOrchestrator.assignAudio": {
|
|
26021
26326
|
capName: "pipeline-orchestrator",
|
|
26022
26327
|
capScope: "system",
|
|
@@ -26125,6 +26430,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
26125
26430
|
addonId: null,
|
|
26126
26431
|
access: "view"
|
|
26127
26432
|
},
|
|
26433
|
+
"pipelineOrchestrator.getIngestOwner": {
|
|
26434
|
+
capName: "pipeline-orchestrator",
|
|
26435
|
+
capScope: "system",
|
|
26436
|
+
addonId: null,
|
|
26437
|
+
access: "view"
|
|
26438
|
+
},
|
|
26128
26439
|
"pipelineOrchestrator.getPipelineAssignment": {
|
|
26129
26440
|
capName: "pipeline-orchestrator",
|
|
26130
26441
|
capScope: "system",
|
|
@@ -26197,6 +26508,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
26197
26508
|
addonId: null,
|
|
26198
26509
|
access: "create"
|
|
26199
26510
|
},
|
|
26511
|
+
"pipelineOrchestrator.setAgentReachableHost": {
|
|
26512
|
+
capName: "pipeline-orchestrator",
|
|
26513
|
+
capScope: "system",
|
|
26514
|
+
addonId: null,
|
|
26515
|
+
access: "create"
|
|
26516
|
+
},
|
|
26200
26517
|
"pipelineOrchestrator.setCameraPipelineForAgent": {
|
|
26201
26518
|
capName: "pipeline-orchestrator",
|
|
26202
26519
|
capScope: "system",
|
|
@@ -26527,24 +26844,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
26527
26844
|
addonId: null,
|
|
26528
26845
|
access: "create"
|
|
26529
26846
|
},
|
|
26530
|
-
"restreamer.getExposedResources": {
|
|
26531
|
-
capName: "restreamer",
|
|
26532
|
-
capScope: "system",
|
|
26533
|
-
addonId: null,
|
|
26534
|
-
access: "view"
|
|
26535
|
-
},
|
|
26536
|
-
"restreamer.registerDevice": {
|
|
26537
|
-
capName: "restreamer",
|
|
26538
|
-
capScope: "system",
|
|
26539
|
-
addonId: null,
|
|
26540
|
-
access: "create"
|
|
26541
|
-
},
|
|
26542
|
-
"restreamer.unregisterDevice": {
|
|
26543
|
-
capName: "restreamer",
|
|
26544
|
-
capScope: "system",
|
|
26545
|
-
addonId: null,
|
|
26546
|
-
access: "delete"
|
|
26547
|
-
},
|
|
26548
26847
|
"scriptRunner.run": {
|
|
26549
26848
|
capName: "script-runner",
|
|
26550
26849
|
capScope: "device",
|
|
@@ -26647,18 +26946,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
26647
26946
|
addonId: null,
|
|
26648
26947
|
access: "create"
|
|
26649
26948
|
},
|
|
26650
|
-
"snapshotProvider.getSnapshot": {
|
|
26651
|
-
capName: "snapshot-provider",
|
|
26652
|
-
capScope: "system",
|
|
26653
|
-
addonId: null,
|
|
26654
|
-
access: "view"
|
|
26655
|
-
},
|
|
26656
|
-
"snapshotProvider.supportsDevice": {
|
|
26657
|
-
capName: "snapshot-provider",
|
|
26658
|
-
capScope: "system",
|
|
26659
|
-
addonId: null,
|
|
26660
|
-
access: "view"
|
|
26661
|
-
},
|
|
26662
26949
|
"ssoBridge.signBridgeToken": {
|
|
26663
26950
|
capName: "sso-bridge",
|
|
26664
26951
|
capScope: "system",
|
|
@@ -27085,30 +27372,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
27085
27372
|
addonId: null,
|
|
27086
27373
|
access: "view"
|
|
27087
27374
|
},
|
|
27088
|
-
"streamingEngine.getStreamUrl": {
|
|
27089
|
-
capName: "streaming-engine",
|
|
27090
|
-
capScope: "system",
|
|
27091
|
-
addonId: null,
|
|
27092
|
-
access: "view"
|
|
27093
|
-
},
|
|
27094
|
-
"streamingEngine.listStreams": {
|
|
27095
|
-
capName: "streaming-engine",
|
|
27096
|
-
capScope: "system",
|
|
27097
|
-
addonId: null,
|
|
27098
|
-
access: "view"
|
|
27099
|
-
},
|
|
27100
|
-
"streamingEngine.registerStream": {
|
|
27101
|
-
capName: "streaming-engine",
|
|
27102
|
-
capScope: "system",
|
|
27103
|
-
addonId: null,
|
|
27104
|
-
access: "create"
|
|
27105
|
-
},
|
|
27106
|
-
"streamingEngine.unregisterStream": {
|
|
27107
|
-
capName: "streaming-engine",
|
|
27108
|
-
capScope: "system",
|
|
27109
|
-
addonId: null,
|
|
27110
|
-
access: "delete"
|
|
27111
|
-
},
|
|
27112
27375
|
"streamParams.getConfigSchema": {
|
|
27113
27376
|
capName: "stream-params",
|
|
27114
27377
|
capScope: "device",
|
|
@@ -27475,54 +27738,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
27475
27738
|
addonId: null,
|
|
27476
27739
|
access: "create"
|
|
27477
27740
|
},
|
|
27478
|
-
"webrtc.closeSession": {
|
|
27479
|
-
capName: "webrtc",
|
|
27480
|
-
capScope: "system",
|
|
27481
|
-
addonId: null,
|
|
27482
|
-
access: "create"
|
|
27483
|
-
},
|
|
27484
|
-
"webrtc.createSession": {
|
|
27485
|
-
capName: "webrtc",
|
|
27486
|
-
capScope: "system",
|
|
27487
|
-
addonId: null,
|
|
27488
|
-
access: "create"
|
|
27489
|
-
},
|
|
27490
|
-
"webrtc.handleAnswer": {
|
|
27491
|
-
capName: "webrtc",
|
|
27492
|
-
capScope: "system",
|
|
27493
|
-
addonId: null,
|
|
27494
|
-
access: "create"
|
|
27495
|
-
},
|
|
27496
|
-
"webrtc.handleOffer": {
|
|
27497
|
-
capName: "webrtc",
|
|
27498
|
-
capScope: "system",
|
|
27499
|
-
addonId: null,
|
|
27500
|
-
access: "create"
|
|
27501
|
-
},
|
|
27502
|
-
"webrtc.hasAdaptiveBitrate": {
|
|
27503
|
-
capName: "webrtc",
|
|
27504
|
-
capScope: "system",
|
|
27505
|
-
addonId: null,
|
|
27506
|
-
access: "view"
|
|
27507
|
-
},
|
|
27508
|
-
"webrtc.registerStream": {
|
|
27509
|
-
capName: "webrtc",
|
|
27510
|
-
capScope: "system",
|
|
27511
|
-
addonId: null,
|
|
27512
|
-
access: "create"
|
|
27513
|
-
},
|
|
27514
|
-
"webrtc.supportsStream": {
|
|
27515
|
-
capName: "webrtc",
|
|
27516
|
-
capScope: "system",
|
|
27517
|
-
addonId: null,
|
|
27518
|
-
access: "view"
|
|
27519
|
-
},
|
|
27520
|
-
"webrtc.unregisterStream": {
|
|
27521
|
-
capName: "webrtc",
|
|
27522
|
-
capScope: "system",
|
|
27523
|
-
addonId: null,
|
|
27524
|
-
access: "delete"
|
|
27525
|
-
},
|
|
27526
27741
|
"webrtcSession.addIceCandidate": {
|
|
27527
27742
|
capName: "webrtc-session",
|
|
27528
27743
|
capScope: "device",
|
|
@@ -27723,12 +27938,10 @@ var KNOWN_CAP_NAMES = [
|
|
|
27723
27938
|
"ptz-autotrack",
|
|
27724
27939
|
"reboot",
|
|
27725
27940
|
"recording",
|
|
27726
|
-
"restreamer",
|
|
27727
27941
|
"script-runner",
|
|
27728
27942
|
"settings-store",
|
|
27729
27943
|
"smtp-provider",
|
|
27730
27944
|
"snapshot",
|
|
27731
|
-
"snapshot-provider",
|
|
27732
27945
|
"sso-bridge",
|
|
27733
27946
|
"storage",
|
|
27734
27947
|
"storage-evictable",
|
|
@@ -27736,7 +27949,6 @@ var KNOWN_CAP_NAMES = [
|
|
|
27736
27949
|
"stream-broker",
|
|
27737
27950
|
"stream-catalog",
|
|
27738
27951
|
"stream-params",
|
|
27739
|
-
"streaming-engine",
|
|
27740
27952
|
"switch",
|
|
27741
27953
|
"system",
|
|
27742
27954
|
"toast",
|
|
@@ -27748,7 +27960,6 @@ var KNOWN_CAP_NAMES = [
|
|
|
27748
27960
|
"valve",
|
|
27749
27961
|
"videoclips",
|
|
27750
27962
|
"water-heater",
|
|
27751
|
-
"webrtc",
|
|
27752
27963
|
"webrtc-session",
|
|
27753
27964
|
"zone-analytics",
|
|
27754
27965
|
"zone-rules",
|
|
@@ -27856,22 +28067,18 @@ var SYSTEM_CAP_NAMES = [
|
|
|
27856
28067
|
"plate-gallery",
|
|
27857
28068
|
"platform-probe",
|
|
27858
28069
|
"recording",
|
|
27859
|
-
"restreamer",
|
|
27860
28070
|
"settings-store",
|
|
27861
28071
|
"smtp-provider",
|
|
27862
|
-
"snapshot-provider",
|
|
27863
28072
|
"sso-bridge",
|
|
27864
28073
|
"storage",
|
|
27865
28074
|
"storage-evictable",
|
|
27866
28075
|
"storage-provider",
|
|
27867
28076
|
"stream-broker",
|
|
27868
|
-
"streaming-engine",
|
|
27869
28077
|
"system",
|
|
27870
28078
|
"toast",
|
|
27871
28079
|
"turn-provider",
|
|
27872
28080
|
"user-management",
|
|
27873
|
-
"user-passkeys"
|
|
27874
|
-
"webrtc"
|
|
28081
|
+
"user-passkeys"
|
|
27875
28082
|
];
|
|
27876
28083
|
//#endregion
|
|
27877
28084
|
//#region src/generated/scope-presets.ts
|
|
@@ -28653,7 +28860,6 @@ exports.EventSourceType = EventSourceType;
|
|
|
28653
28860
|
exports.ExportSetupFieldSchema = ExportSetupFieldSchema;
|
|
28654
28861
|
exports.ExportSetupSchema = ExportSetupSchema;
|
|
28655
28862
|
exports.ExposedDeviceSchema = ExposedDeviceSchema;
|
|
28656
|
-
exports.ExposedResourceSchema = ExposedResourceSchema;
|
|
28657
28863
|
exports.ExposureModeSchema = ExposureModeSchema;
|
|
28658
28864
|
exports.ExpressionEvalError = ExpressionEvalError;
|
|
28659
28865
|
exports.ExpressionParseError = ExpressionParseError;
|
|
@@ -28682,6 +28888,7 @@ exports.ImageSettingsOptionsSchema = ImageSettingsOptionsSchema;
|
|
|
28682
28888
|
exports.ImageSettingsPatchSchema = ImageSettingsPatchSchema;
|
|
28683
28889
|
exports.ImageSettingsStatusSchema = ImageSettingsStatusSchema;
|
|
28684
28890
|
exports.ImageStatusSchema = ImageStatusSchema;
|
|
28891
|
+
exports.IngestOwnerSchema = IngestOwnerSchema;
|
|
28685
28892
|
exports.InstalledPackageSchema = InstalledPackageSchema;
|
|
28686
28893
|
exports.IntegrationLiteSchema = IntegrationLiteSchema;
|
|
28687
28894
|
exports.IntegrationWithStateSchema = IntegrationWithStateSchema;
|
|
@@ -28730,6 +28937,8 @@ exports.ModelDistributeResultSchema = ModelDistributeResultSchema;
|
|
|
28730
28937
|
exports.ModelExtraFileSchema = ModelExtraFileSchema;
|
|
28731
28938
|
exports.ModelFormatEntrySchema = ModelFormatEntrySchema;
|
|
28732
28939
|
exports.ModelFormatsSchema = ModelFormatsSchema;
|
|
28940
|
+
exports.ModelSubstitutionSchema = ModelSubstitutionSchema;
|
|
28941
|
+
exports.ModelVariantGroupSchema = ModelVariantGroupSchema;
|
|
28733
28942
|
exports.MotionAnalysisResultSchema = MotionAnalysisResultSchema;
|
|
28734
28943
|
exports.MotionEventSchema = MotionEventSchema;
|
|
28735
28944
|
exports.MotionOnMotionChangedDataSchema = MotionOnMotionChangedDataSchema;
|
|
@@ -28786,6 +28995,8 @@ exports.PipelineDefaultStepSchema = PipelineDefaultStepSchema;
|
|
|
28786
28995
|
exports.PipelineEngineChoiceSchema = PipelineEngineChoiceSchema;
|
|
28787
28996
|
exports.PipelineRunResultBridge = PipelineRunResultBridge;
|
|
28788
28997
|
exports.PipelineStepInputSchema = PipelineStepInputSchema;
|
|
28998
|
+
exports.PipelineValidationIssueSchema = PipelineValidationIssueSchema;
|
|
28999
|
+
exports.PipelineValidationResultSchema = PipelineValidationResultSchema;
|
|
28789
29000
|
exports.PlaceholderReasonSchema = PlaceholderReasonSchema;
|
|
28790
29001
|
exports.PolygonPointSchema = PolygonPointSchema;
|
|
28791
29002
|
exports.PowerMeterStatusSchema = PowerMeterStatusSchema;
|
|
@@ -28809,6 +29020,9 @@ exports.PtzPositionSchema = PtzPositionSchema;
|
|
|
28809
29020
|
exports.PtzPresetSchema = PtzPresetSchema;
|
|
28810
29021
|
exports.PtzStatusSchema = PtzStatusSchema;
|
|
28811
29022
|
exports.QueryFilterSchema = QueryFilterSchema;
|
|
29023
|
+
exports.REACHABILITY_FAILURES_TO_OFFLINE = REACHABILITY_FAILURES_TO_OFFLINE;
|
|
29024
|
+
exports.REACHABILITY_POLL_INTERVAL_MS = REACHABILITY_POLL_INTERVAL_MS;
|
|
29025
|
+
exports.REACHABILITY_PROBE_TIMEOUT_MS = REACHABILITY_PROBE_TIMEOUT_MS;
|
|
28812
29026
|
exports.RECOGNITION_TYPES = RECOGNITION_TYPES;
|
|
28813
29027
|
exports.RESERVED_BINDING_NAMES = RESERVED_BINDING_NAMES;
|
|
28814
29028
|
exports.RUNTIME_DEFAULTS = RUNTIME_DEFAULTS;
|
|
@@ -28836,7 +29050,6 @@ exports.RecordingStorageModeSchema = RecordingStorageModeSchema;
|
|
|
28836
29050
|
exports.RecordingStorageUsageSchema = RecordingStorageUsageSchema;
|
|
28837
29051
|
exports.RecordingTriggersSchema = RecordingTriggersSchema;
|
|
28838
29052
|
exports.RecordingWeekdaySchema = RecordingWeekdaySchema;
|
|
28839
|
-
exports.RegisteredStreamSchema = RegisteredStreamSchema;
|
|
28840
29053
|
exports.RenderedAsSchema = RenderedAsSchema;
|
|
28841
29054
|
exports.ReportMotionInputSchema = ReportMotionInputSchema;
|
|
28842
29055
|
exports.RingBuffer = RingBuffer;
|
|
@@ -28890,7 +29103,6 @@ exports.StorageTestLocationResultSchema = TestLocationResultSchema;
|
|
|
28890
29103
|
exports.StorageWriteChunkInputSchema = WriteChunkInputSchema;
|
|
28891
29104
|
exports.StreamCodecSchema = StreamCodecSchema;
|
|
28892
29105
|
exports.StreamFormatSchema = StreamFormatSchema;
|
|
28893
|
-
exports.StreamInfoSchema = StreamInfoSchema;
|
|
28894
29106
|
exports.StreamNetworkStatsSchema = StreamNetworkStatsSchema;
|
|
28895
29107
|
exports.StreamParamsOptionsSchema = StreamParamsOptionsSchema;
|
|
28896
29108
|
exports.StreamParamsStatusSchema = StreamParamsStatusSchema;
|
|
@@ -28995,6 +29207,7 @@ exports.bindAddonActions = bindAddonActions;
|
|
|
28995
29207
|
exports.brightnessCapability = brightnessCapability;
|
|
28996
29208
|
exports.brokerCapability = brokerCapability;
|
|
28997
29209
|
exports.buildAddonRouteProvider = buildAddonRouteProvider;
|
|
29210
|
+
exports.buildModelVariantGroups = buildModelVariantGroups;
|
|
28998
29211
|
exports.buildStreamParamsConfigSchema = buildStreamParamsConfigSchema;
|
|
28999
29212
|
exports.buttonCapability = buttonCapability;
|
|
29000
29213
|
exports.cameraCredentialsCapability = cameraCredentialsCapability;
|
|
@@ -29031,6 +29244,7 @@ exports.dayNightCapability = dayNightCapability;
|
|
|
29031
29244
|
exports.decoderCapability = decoderCapability;
|
|
29032
29245
|
exports.defaultDeviceFor = defaultDeviceFor;
|
|
29033
29246
|
exports.defineCustomActions = defineCustomActions;
|
|
29247
|
+
exports.describeModelVariant = describeModelVariant;
|
|
29034
29248
|
exports.detectionPipelineCapability = detectionPipelineCapability;
|
|
29035
29249
|
exports.deviceAdoptionCapability = deviceAdoptionCapability;
|
|
29036
29250
|
exports.deviceCustomAction = deviceCustomAction;
|
|
@@ -29083,10 +29297,14 @@ exports.imageSettingsCapability = imageSettingsCapability;
|
|
|
29083
29297
|
exports.integrationsCapability = integrationsCapability;
|
|
29084
29298
|
exports.intercomCapability = intercomCapability;
|
|
29085
29299
|
exports.isAgentOnlyPlacement = isAgentOnlyPlacement;
|
|
29300
|
+
exports.isArrayOutputSchema = isArrayOutputSchema;
|
|
29086
29301
|
exports.isDeployableToAgent = isDeployableToAgent;
|
|
29087
29302
|
exports.isDeviceConfigCap = require_sleep.isDeviceConfigCap;
|
|
29088
29303
|
exports.isEvent = require_sleep.isEvent;
|
|
29304
|
+
exports.isObjectInput = isObjectInput;
|
|
29305
|
+
exports.isVoidInput = isVoidInput;
|
|
29089
29306
|
exports.jobKindSchema = jobKindSchema;
|
|
29307
|
+
exports.kebabToCamel = kebabToCamel;
|
|
29090
29308
|
exports.lawnMowerControlCapability = lawnMowerControlCapability;
|
|
29091
29309
|
exports.lifecycleJobSchema = lifecycleJobSchema;
|
|
29092
29310
|
exports.lifecycleJobScopeSchema = lifecycleJobScopeSchema;
|
|
@@ -29096,6 +29314,7 @@ exports.localNetworkCapability = localNetworkCapability;
|
|
|
29096
29314
|
exports.locationSimilarity = locationSimilarity;
|
|
29097
29315
|
exports.lockControlCapability = lockControlCapability;
|
|
29098
29316
|
exports.logDestinationCapability = logDestinationCapability;
|
|
29317
|
+
exports.looseSchema = looseSchema;
|
|
29099
29318
|
exports.makeProfileBrokerId = require_sleep.makeProfileBrokerId;
|
|
29100
29319
|
exports.makeSourceBrokerId = require_sleep.makeSourceBrokerId;
|
|
29101
29320
|
exports.mapAudioLabelToMacro = mapAudioLabelToMacro;
|
|
@@ -29149,6 +29368,7 @@ exports.prepareNotification = prepareNotification;
|
|
|
29149
29368
|
exports.presenceCapability = presenceCapability;
|
|
29150
29369
|
exports.pressureSensorCapability = pressureSensorCapability;
|
|
29151
29370
|
exports.privacyMaskCapability = privacyMaskCapability;
|
|
29371
|
+
exports.procedureAuthKey = procedureAuthKey;
|
|
29152
29372
|
exports.ptzAutotrackCapability = ptzAutotrackCapability;
|
|
29153
29373
|
exports.ptzCapability = ptzCapability;
|
|
29154
29374
|
exports.pythonScriptForBackend = pythonScriptForBackend;
|
|
@@ -29168,7 +29388,7 @@ exports.resolveDeviceProfile = resolveDeviceProfile;
|
|
|
29168
29388
|
exports.resolveFormat = resolveFormat;
|
|
29169
29389
|
exports.resolveModelFormat = resolveModelFormat;
|
|
29170
29390
|
exports.resolveRunnerId = resolveRunnerId;
|
|
29171
|
-
exports.
|
|
29391
|
+
exports.resolveVariantModelId = resolveVariantModelId;
|
|
29172
29392
|
exports.runInferenceStep = runInferenceStep;
|
|
29173
29393
|
exports.runtimeDevices = runtimeDevices;
|
|
29174
29394
|
exports.scopeKey = require_sleep.scopeKey;
|
|
@@ -29182,8 +29402,8 @@ exports.sleepCancellable = require_sleep.sleepCancellable;
|
|
|
29182
29402
|
exports.smokeCapability = smokeCapability;
|
|
29183
29403
|
exports.smtpProviderCapability = smtpProviderCapability;
|
|
29184
29404
|
exports.snapshotCapability = snapshotCapability;
|
|
29185
|
-
exports.snapshotProviderCapability = snapshotProviderCapability;
|
|
29186
29405
|
exports.ssoBridgeCapability = ssoBridgeCapability;
|
|
29406
|
+
exports.startReachabilityPoll = startReachabilityPoll;
|
|
29187
29407
|
exports.storageCapability = storageCapability;
|
|
29188
29408
|
exports.storageEvictableCapability = storageEvictableCapability;
|
|
29189
29409
|
exports.storageProviderCapability = storageProviderCapability;
|
|
@@ -29192,7 +29412,6 @@ exports.streamCatalogCapability = streamCatalogCapability;
|
|
|
29192
29412
|
exports.streamParamsCapability = streamParamsCapability;
|
|
29193
29413
|
exports.streamPixels = streamPixels;
|
|
29194
29414
|
exports.streamQualityLabel = streamQualityLabel;
|
|
29195
|
-
exports.streamingEngineCapability = streamingEngineCapability;
|
|
29196
29415
|
exports.supportedRuntimes = supportedRuntimes;
|
|
29197
29416
|
exports.switchCapability = switchCapability;
|
|
29198
29417
|
exports.synthesizeSourceInfo = synthesizeSourceInfo;
|
|
@@ -29223,7 +29442,6 @@ exports.vibrationCapability = vibrationCapability;
|
|
|
29223
29442
|
exports.videoclipsCapability = videoclipsCapability;
|
|
29224
29443
|
exports.waterHeaterCapability = waterHeaterCapability;
|
|
29225
29444
|
exports.weatherCapability = weatherCapability;
|
|
29226
|
-
exports.webrtcCapability = webrtcCapability;
|
|
29227
29445
|
exports.webrtcClientHintsSchema = webrtcClientHintsSchema;
|
|
29228
29446
|
exports.webrtcSessionCapability = webrtcSessionCapability;
|
|
29229
29447
|
exports.wiringAddonHealthSchema = wiringAddonHealthSchema;
|