@camstack/system 1.2.268 → 1.2.270
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/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
- package/dist/builtins/alerts/alerts.addon.js +1 -1
- package/dist/builtins/alerts/alerts.addon.mjs +1 -1
- package/dist/builtins/autotrack/index.js +1 -1
- package/dist/builtins/autotrack/index.mjs +1 -1
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
- package/dist/builtins/camera-grid/grid-compositor.d.ts +8 -0
- package/dist/builtins/camera-grid/grid-instances.d.ts +5 -0
- package/dist/builtins/camera-grid/grid-profiles.d.ts +9 -0
- package/dist/builtins/camera-grid/grid-tile-feed.d.ts +12 -0
- package/dist/builtins/camera-grid/index.js +100 -16
- package/dist/builtins/camera-grid/index.mjs +100 -16
- package/dist/builtins/console-logging/index.js +1 -1
- package/dist/builtins/console-logging/index.mjs +1 -1
- package/dist/builtins/core-blocks/core-blocks.addon.js +1 -1
- package/dist/builtins/core-blocks/core-blocks.addon.mjs +1 -1
- package/dist/builtins/device-manager/device-manager.addon.js +2 -2
- package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
- package/dist/builtins/doorbell/virtual-doorbell.addon.js +1 -1
- package/dist/builtins/doorbell/virtual-doorbell.addon.mjs +1 -1
- package/dist/builtins/hub-forwarder/index.js +1 -1
- package/dist/builtins/hub-forwarder/index.mjs +1 -1
- package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
- package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
- package/dist/builtins/local-auth/local-auth.addon.js +1 -1
- package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
- package/dist/builtins/local-network/local-network.addon.js +1 -1
- package/dist/builtins/local-network/local-network.addon.mjs +1 -1
- package/dist/builtins/loki-logging/index.js +1 -1
- package/dist/builtins/loki-logging/index.mjs +1 -1
- package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
- package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
- package/dist/builtins/platform-probe/index.js +1 -1
- package/dist/builtins/platform-probe/index.mjs +1 -1
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
- package/dist/builtins/snapshot/index.js +1 -1
- package/dist/builtins/snapshot/index.mjs +1 -1
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
- package/dist/builtins/system-config/system-config.addon.js +1 -1
- package/dist/builtins/system-config/system-config.addon.mjs +1 -1
- package/dist/builtins/winston-logging/index.js +1 -1
- package/dist/builtins/winston-logging/index.mjs +1 -1
- package/dist/{dist-DWNlc-PG.js → dist-BTpfLiUX.js} +16 -1
- package/dist/{dist-BYnnRAYv.mjs → dist-CqmImT7i.mjs} +16 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/{retired-settings-keys-C_MtEB25.mjs → retired-settings-keys-C8nV-AUi.mjs} +1 -1
- package/dist/{retired-settings-keys-BjSmLqyQ.js → retired-settings-keys-D_DIuT_N.js} +1 -1
- package/package.json +1 -1
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-BTpfLiUX.js");
|
|
7
7
|
const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
|
|
8
8
|
let node_crypto = require("node:crypto");
|
|
9
9
|
let node_path = require("node:path");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { P as addonPagesCapability, Pn as EventCategory, an as errMsg, sn as BaseAddon } from "../../dist-
|
|
1
|
+
import { P as addonPagesCapability, Pn as EventCategory, an as errMsg, sn as BaseAddon } from "../../dist-CqmImT7i.mjs";
|
|
2
2
|
import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
|
|
3
3
|
import { createHash, randomUUID } from "node:crypto";
|
|
4
4
|
import * as path$1 from "node:path";
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-BTpfLiUX.js");
|
|
7
7
|
const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
|
|
8
8
|
let node_crypto = require("node:crypto");
|
|
9
9
|
let node_path = require("node:path");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { I as addonWidgetsCapability, Pn as EventCategory, an as errMsg, sn as BaseAddon } from "../../dist-
|
|
1
|
+
import { I as addonWidgetsCapability, Pn as EventCategory, an as errMsg, sn as BaseAddon } from "../../dist-CqmImT7i.mjs";
|
|
2
2
|
import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
|
|
3
3
|
import { createHash, randomUUID } from "node:crypto";
|
|
4
4
|
import * as path$1 from "node:path";
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-BTpfLiUX.js");
|
|
7
7
|
//#region src/builtins/alerts/prune-policy.ts
|
|
8
8
|
/**
|
|
9
9
|
* Ids older than `cutoffMs`, oldest first.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { L as alertsCapability, Pn as EventCategory, an as errMsg, bn as createEvent, n as AlertSchema, sn as BaseAddon } from "../../dist-
|
|
1
|
+
import { L as alertsCapability, Pn as EventCategory, an as errMsg, bn as createEvent, n as AlertSchema, sn as BaseAddon } from "../../dist-CqmImT7i.mjs";
|
|
2
2
|
//#region src/builtins/alerts/prune-policy.ts
|
|
3
3
|
/**
|
|
4
4
|
* Ids older than `cutoffMs`, oldest first.
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-BTpfLiUX.js");
|
|
7
7
|
//#region src/builtins/autotrack/autotrack-config.ts
|
|
8
8
|
var DEFAULT_AUTOTRACK_LOOP_CONFIG = {
|
|
9
9
|
deadZoneFraction: .5,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { B as bareAddonId, En as isEvent, It as ptzAutotrackCapability, Pn as EventCategory, an as errMsg, h as FIRST_LEVEL_MACRO_CLASSES, sn as BaseAddon } from "../../dist-
|
|
1
|
+
import { B as bareAddonId, En as isEvent, It as ptzAutotrackCapability, Pn as EventCategory, an as errMsg, h as FIRST_LEVEL_MACRO_CLASSES, sn as BaseAddon } from "../../dist-CqmImT7i.mjs";
|
|
2
2
|
//#region src/builtins/autotrack/autotrack-config.ts
|
|
3
3
|
var DEFAULT_AUTOTRACK_LOOP_CONFIG = {
|
|
4
4
|
deadZoneFraction: .5,
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-BTpfLiUX.js");
|
|
7
7
|
let node_crypto = require("node:crypto");
|
|
8
8
|
let buffer = require("buffer");
|
|
9
9
|
let node_fs_promises = require("node:fs/promises");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Dt as mayWriteToLocation, Pn as EventCategory, Zt as storageOccupancyCapability, sn as BaseAddon, z as backupCapability } from "../../dist-
|
|
1
|
+
import { Dt as mayWriteToLocation, Pn as EventCategory, Zt as storageOccupancyCapability, sn as BaseAddon, z as backupCapability } from "../../dist-CqmImT7i.mjs";
|
|
2
2
|
import { randomBytes, randomUUID } from "node:crypto";
|
|
3
3
|
import { Buffer as Buffer$1 } from "buffer";
|
|
4
4
|
import * as fsp from "node:fs/promises";
|
|
@@ -31,6 +31,14 @@ export declare class GridCompositor {
|
|
|
31
31
|
* flicker. The canvas is never cleared between ticks for the same reason.
|
|
32
32
|
*/
|
|
33
33
|
tick(): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* A tile's decoder was replaced: drop its half frame, keep its picture.
|
|
36
|
+
*
|
|
37
|
+
* Without this the new decoder's bytes would be appended to the old one's
|
|
38
|
+
* partial frame and every frame after would be sheared — raw video has no
|
|
39
|
+
* framing to re-sync on.
|
|
40
|
+
*/
|
|
41
|
+
resetTile(tileId: string): void;
|
|
34
42
|
/** After this, a tick emits nothing — a dead child must not keep writing. */
|
|
35
43
|
close(): void;
|
|
36
44
|
}
|
|
@@ -26,6 +26,11 @@ declare const GridInstanceSchema: z.ZodObject<{
|
|
|
26
26
|
name: z.ZodString;
|
|
27
27
|
enabled: z.ZodBoolean;
|
|
28
28
|
fps: z.ZodNumber;
|
|
29
|
+
publishedProfiles: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
30
|
+
high: "high";
|
|
31
|
+
mid: "mid";
|
|
32
|
+
low: "low";
|
|
33
|
+
}>>>;
|
|
29
34
|
cells: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
30
35
|
deviceId: z.ZodNumber;
|
|
31
36
|
source: z.ZodObject<{
|
|
@@ -27,6 +27,13 @@ export interface GridSourceCell {
|
|
|
27
27
|
}
|
|
28
28
|
export interface GridProfilePlansInput {
|
|
29
29
|
readonly cells: readonly GridSourceCell[];
|
|
30
|
+
/**
|
|
31
|
+
* Which profiles the operator wants published. A profile that is not in here
|
|
32
|
+
* is still SIZED and reported — the editor shows what it would come out as,
|
|
33
|
+
* so turning it on is a decision made with the number in view — but it is not
|
|
34
|
+
* offered to the broker.
|
|
35
|
+
*/
|
|
36
|
+
readonly publishedProfiles: readonly CamProfile[];
|
|
30
37
|
/**
|
|
31
38
|
* Which streams this source serves, or `null` when nobody could say. `null`
|
|
32
39
|
* is not an empty list: an unanswerable question is a refusal, and saying so
|
|
@@ -38,6 +45,8 @@ export type GridProfilePlan = {
|
|
|
38
45
|
readonly profile: CamProfile;
|
|
39
46
|
readonly offered: true;
|
|
40
47
|
readonly canvas: PixelSize;
|
|
48
|
+
/** False ⇒ serviceable, sized, and deliberately not published. */
|
|
49
|
+
readonly published: boolean;
|
|
41
50
|
} | {
|
|
42
51
|
readonly profile: CamProfile;
|
|
43
52
|
readonly offered: false;
|
|
@@ -33,6 +33,18 @@ export declare class GridTileFeed {
|
|
|
33
33
|
latest(): Buffer | null;
|
|
34
34
|
/** Has a new frame arrived since the last {@link latest}? */
|
|
35
35
|
hasFresh(): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Forget the half frame, keep the picture.
|
|
38
|
+
*
|
|
39
|
+
* Raw video has no framing: the feed cuts on a fixed length, so bytes from a
|
|
40
|
+
* NEW decoder concatenated onto a partial frame from the old one would be
|
|
41
|
+
* misaligned for ever — every frame after it sheared, with nothing to
|
|
42
|
+
* re-sync on. Called whenever a tile's decoder is replaced.
|
|
43
|
+
*
|
|
44
|
+
* The newest frame is kept deliberately: the cell holds its last picture
|
|
45
|
+
* while its decoder comes back, instead of blinking to black.
|
|
46
|
+
*/
|
|
47
|
+
resetPartial(): void;
|
|
36
48
|
/** For the bound in the spec: one frame plus at most a partial one. */
|
|
37
49
|
bufferedBytes(): number;
|
|
38
50
|
}
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-BTpfLiUX.js");
|
|
7
7
|
let zod = require("zod");
|
|
8
8
|
let _camstack_types_node = require("@camstack/types/node");
|
|
9
9
|
let node_path = require("node:path");
|
|
@@ -273,6 +273,23 @@ var GridInstanceSchema = zod.z.object({
|
|
|
273
273
|
*/
|
|
274
274
|
fps: zod.z.number().int().min(1).max(60),
|
|
275
275
|
/**
|
|
276
|
+
* Which profiles this grid PUBLISHES, of the ones it could serve.
|
|
277
|
+
*
|
|
278
|
+
* Default `mid` + `low`, and the default is the finding: a grid's `high` is
|
|
279
|
+
* composed of its sources' `high`, so on this fleet it is a 4K canvas built
|
|
280
|
+
* from 4K decodes — a thing to opt into, not to be handed by a viewer's
|
|
281
|
+
* adaptive climbing to the top rung it can see.
|
|
282
|
+
*
|
|
283
|
+
* Absent on rows written before this, which is why the default lives in the
|
|
284
|
+
* schema rather than at the call site: an old grid starts publishing the two
|
|
285
|
+
* cheap rungs without anyone touching it.
|
|
286
|
+
*/
|
|
287
|
+
publishedProfiles: zod.z.array(zod.z.enum([
|
|
288
|
+
"high",
|
|
289
|
+
"mid",
|
|
290
|
+
"low"
|
|
291
|
+
])).max(3).default(["mid", "low"]),
|
|
292
|
+
/**
|
|
276
293
|
* Empty is the NORMAL freshly-created state: a grid is created from the
|
|
277
294
|
* integration page with a name only, and laid out afterwards in the camera's
|
|
278
295
|
* own settings. A grid with no cells declares its camera and emits nothing.
|
|
@@ -1161,7 +1178,8 @@ function gridProfilePlans(input) {
|
|
|
1161
1178
|
return {
|
|
1162
1179
|
profile,
|
|
1163
1180
|
offered: true,
|
|
1164
|
-
canvas
|
|
1181
|
+
canvas,
|
|
1182
|
+
published: input.publishedProfiles.includes(profile)
|
|
1165
1183
|
};
|
|
1166
1184
|
});
|
|
1167
1185
|
}
|
|
@@ -2059,6 +2077,20 @@ var GridTileFeed = class {
|
|
|
2059
2077
|
hasFresh() {
|
|
2060
2078
|
return this.fresh;
|
|
2061
2079
|
}
|
|
2080
|
+
/**
|
|
2081
|
+
* Forget the half frame, keep the picture.
|
|
2082
|
+
*
|
|
2083
|
+
* Raw video has no framing: the feed cuts on a fixed length, so bytes from a
|
|
2084
|
+
* NEW decoder concatenated onto a partial frame from the old one would be
|
|
2085
|
+
* misaligned for ever — every frame after it sheared, with nothing to
|
|
2086
|
+
* re-sync on. Called whenever a tile's decoder is replaced.
|
|
2087
|
+
*
|
|
2088
|
+
* The newest frame is kept deliberately: the cell holds its last picture
|
|
2089
|
+
* while its decoder comes back, instead of blinking to black.
|
|
2090
|
+
*/
|
|
2091
|
+
resetPartial() {
|
|
2092
|
+
this.partial = Buffer.alloc(0);
|
|
2093
|
+
}
|
|
2062
2094
|
/** For the bound in the spec: one frame plus at most a partial one. */
|
|
2063
2095
|
bufferedBytes() {
|
|
2064
2096
|
return (this.newest?.length ?? 0) + this.partial.length;
|
|
@@ -2142,6 +2174,16 @@ var GridCompositor = class {
|
|
|
2142
2174
|
}
|
|
2143
2175
|
return this.deps.write(this.canvas.buffer);
|
|
2144
2176
|
}
|
|
2177
|
+
/**
|
|
2178
|
+
* A tile's decoder was replaced: drop its half frame, keep its picture.
|
|
2179
|
+
*
|
|
2180
|
+
* Without this the new decoder's bytes would be appended to the old one's
|
|
2181
|
+
* partial frame and every frame after would be sheared — raw video has no
|
|
2182
|
+
* framing to re-sync on.
|
|
2183
|
+
*/
|
|
2184
|
+
resetTile(tileId) {
|
|
2185
|
+
this.placed.get(tileId)?.feed.resetPartial();
|
|
2186
|
+
}
|
|
2145
2187
|
/** After this, a tick emits nothing — a dead child must not keep writing. */
|
|
2146
2188
|
close() {
|
|
2147
2189
|
this.closed = true;
|
|
@@ -2237,6 +2279,24 @@ function buildGridTilePlan(input) {
|
|
|
2237
2279
|
/** See D527: the probe returns from the SDP instead of reading media. */
|
|
2238
2280
|
var ANALYZE_DURATION_US$1 = 0;
|
|
2239
2281
|
var PROBE_SIZE_BYTES$1 = 32;
|
|
2282
|
+
/**
|
|
2283
|
+
* Threads per child, and why they are BOUNDED rather than automatic.
|
|
2284
|
+
*
|
|
2285
|
+
* ffmpeg's default is one thread per core, applied to decode, the filter graph
|
|
2286
|
+
* and the output — and it applies it per CHILD. A compositor has N+1 of them,
|
|
2287
|
+
* so on the hub's 20-core CPU two tiles reading 640x360 sub-streams were
|
|
2288
|
+
* measured holding 71 and 56 threads (2026-09-18). That is not a CPU problem:
|
|
2289
|
+
* the container's pid cgroup counts THREADS, its ceiling is 2048, and it was
|
|
2290
|
+
* sitting at 1858. Every new `pthread_create` then fails with EAGAIN, which
|
|
2291
|
+
* ffmpeg reports as `ff_frame_thread_encoder_init failed` — the grid stopped
|
|
2292
|
+
* working, and nothing about the message says "out of pids".
|
|
2293
|
+
*
|
|
2294
|
+
* A tile decodes one small stream and scales it once; one thread does that at a
|
|
2295
|
+
* few percent of a core (measured: 2.2-2.4%). The encoder gets a few more
|
|
2296
|
+
* because it is the only piece whose work scales with the canvas.
|
|
2297
|
+
*/
|
|
2298
|
+
var TILE_THREADS = 1;
|
|
2299
|
+
var ENCODER_THREADS = 4;
|
|
2240
2300
|
var PRESET$1 = "veryfast";
|
|
2241
2301
|
var TUNE$1 = "zerolatency";
|
|
2242
2302
|
var GOP_SECONDS$1 = 1;
|
|
@@ -2260,7 +2320,7 @@ function gridTileDecoderInvocation(input) {
|
|
|
2260
2320
|
fps: input.fps
|
|
2261
2321
|
},
|
|
2262
2322
|
audio: { kind: "none" },
|
|
2263
|
-
threadCount:
|
|
2323
|
+
threadCount: TILE_THREADS,
|
|
2264
2324
|
outputArgs: [],
|
|
2265
2325
|
sink: {
|
|
2266
2326
|
kind: "stdout",
|
|
@@ -2295,7 +2355,7 @@ function gridCanvasEncoderInvocation(input) {
|
|
|
2295
2355
|
},
|
|
2296
2356
|
video,
|
|
2297
2357
|
audio: { kind: "none" },
|
|
2298
|
-
threadCount:
|
|
2358
|
+
threadCount: ENCODER_THREADS,
|
|
2299
2359
|
outputArgs: [],
|
|
2300
2360
|
sink: {
|
|
2301
2361
|
kind: "stdout",
|
|
@@ -2328,13 +2388,22 @@ function gridCanvasEncoderInvocation(input) {
|
|
|
2328
2388
|
* is how a stalled encoder becomes an OOM, and a dropped frame in a live
|
|
2329
2389
|
* composite costs nothing anybody can see.
|
|
2330
2390
|
*
|
|
2331
|
-
* ##
|
|
2391
|
+
* ## A tile comes back; only the ENCODER ends the composition
|
|
2392
|
+
*
|
|
2393
|
+
* Every child exiting used to end it, on the reasoning that a frozen tile is a
|
|
2394
|
+
* nicer picture and a worse fact. In practice it produced neither: a 4K source
|
|
2395
|
+
* ended mid-run (`code=0` — the input simply finished), the composition tore
|
|
2396
|
+
* down, the consumer re-dialled, and the grid served nothing but restarts. That
|
|
2397
|
+
* is what the operator saw as the `auto` rung being stuck.
|
|
2332
2398
|
*
|
|
2333
|
-
*
|
|
2334
|
-
*
|
|
2335
|
-
*
|
|
2336
|
-
*
|
|
2337
|
-
*
|
|
2399
|
+
* A canvas makes the better answer cheap: while a decoder comes back, its cell
|
|
2400
|
+
* holds the last frame it produced and every other cell carries on. The bound
|
|
2401
|
+
* (`TILE_MAX_RESTARTS`) keeps a source that is genuinely gone from respawning
|
|
2402
|
+
* for ever — and when it is reached, the composition does end, with the tile
|
|
2403
|
+
* named.
|
|
2404
|
+
*
|
|
2405
|
+
* The encoder is different: nothing downstream of it exists without it, so its
|
|
2406
|
+
* exit is the composition's exit, first time.
|
|
2338
2407
|
*/
|
|
2339
2408
|
/**
|
|
2340
2409
|
* The encoder must produce its first bytes quickly, because the tick feeds it a
|
|
@@ -2348,6 +2417,15 @@ var ENCODER_FIRST_DATA_MS = 5e3;
|
|
|
2348
2417
|
* already on screen.
|
|
2349
2418
|
*/
|
|
2350
2419
|
var DECODER_FIRST_DATA_MS = 15e3;
|
|
2420
|
+
/**
|
|
2421
|
+
* How many times a tile's decoder may come back before the composition gives up
|
|
2422
|
+
* on it.
|
|
2423
|
+
*
|
|
2424
|
+
* The bound exists so a source that is genuinely gone still ends the
|
|
2425
|
+
* composition rather than respawning for ever; below it, a decoder that dies is
|
|
2426
|
+
* simply replaced while its cell holds the last frame it produced.
|
|
2427
|
+
*/
|
|
2428
|
+
var TILE_MAX_RESTARTS = 5;
|
|
2351
2429
|
async function startGridCompositorChild(ctx, plan, sources, onEnded) {
|
|
2352
2430
|
const tilePlan = buildGridTilePlan({
|
|
2353
2431
|
canvas: {
|
|
@@ -2457,14 +2535,17 @@ async function startGridCompositorChild(ctx, plan, sources, onEnded) {
|
|
|
2457
2535
|
height: tile.size.height
|
|
2458
2536
|
},
|
|
2459
2537
|
firstDataTimeoutMs: DECODER_FIRST_DATA_MS,
|
|
2460
|
-
maxRestarts:
|
|
2538
|
+
maxRestarts: TILE_MAX_RESTARTS,
|
|
2461
2539
|
onChild: (child) => {
|
|
2462
2540
|
child.stdout?.on("data", (chunk) => {
|
|
2463
2541
|
compositor.onTile(tile.id, chunk);
|
|
2464
2542
|
});
|
|
2465
2543
|
child.stderr?.on("data", () => {});
|
|
2466
2544
|
},
|
|
2467
|
-
onExit: (
|
|
2545
|
+
onExit: () => {
|
|
2546
|
+
compositor.resetTile(tile.id);
|
|
2547
|
+
},
|
|
2548
|
+
onGiveUp: (error) => end(`tile ${tile.id}: ${error.message}`)
|
|
2468
2549
|
});
|
|
2469
2550
|
decoders.push(decoder);
|
|
2470
2551
|
await decoder.start();
|
|
@@ -2831,6 +2912,7 @@ var CameraGridAddon = class extends require_dist.BaseAddon {
|
|
|
2831
2912
|
}
|
|
2832
2913
|
for (const instance of instances) {
|
|
2833
2914
|
const plans = gridProfilePlans({
|
|
2915
|
+
publishedProfiles: instance.publishedProfiles,
|
|
2834
2916
|
cells: instance.cells.map((cell) => ({
|
|
2835
2917
|
deviceId: cell.deviceId,
|
|
2836
2918
|
source: cell.source,
|
|
@@ -2875,7 +2957,7 @@ var CameraGridAddon = class extends require_dist.BaseAddon {
|
|
|
2875
2957
|
tags: { deviceId },
|
|
2876
2958
|
meta: {
|
|
2877
2959
|
instanceId: instance.id,
|
|
2878
|
-
offered: Object.fromEntries(plans.filter((row) => row.offered).map((row) => [row.profile, row.offered ? `${String(row.canvas.width)}x${String(row.canvas.height)}` : ""]))
|
|
2960
|
+
offered: Object.fromEntries(plans.filter((row) => row.offered && row.published).map((row) => [row.profile, row.offered ? `${String(row.canvas.width)}x${String(row.canvas.height)}` : ""]))
|
|
2879
2961
|
}
|
|
2880
2962
|
});
|
|
2881
2963
|
}
|
|
@@ -2902,7 +2984,7 @@ var CameraGridAddon = class extends require_dist.BaseAddon {
|
|
|
2902
2984
|
for (const profile of GRID_PROFILES) {
|
|
2903
2985
|
const key = sessionKey(instanceId, profile);
|
|
2904
2986
|
const plan = this.planFor(instanceId, profile);
|
|
2905
|
-
if (plan === null || !plan.offered) {
|
|
2987
|
+
if (plan === null || !plan.offered || !plan.published) {
|
|
2906
2988
|
const stale = this.sessions.get(key);
|
|
2907
2989
|
if (stale) {
|
|
2908
2990
|
this.sessions.delete(key);
|
|
@@ -2972,7 +3054,7 @@ var CameraGridAddon = class extends require_dist.BaseAddon {
|
|
|
2972
3054
|
resolvePlan: () => {
|
|
2973
3055
|
const instance = this.instanceById(instanceId);
|
|
2974
3056
|
const plan = this.planFor(instanceId, profile);
|
|
2975
|
-
if (!instance || plan === null || !plan.offered) return null;
|
|
3057
|
+
if (!instance || plan === null || !plan.offered || !plan.published) return null;
|
|
2976
3058
|
return gridPlanFor(instance, {
|
|
2977
3059
|
encoder: "libx264",
|
|
2978
3060
|
decodeHwAccel: null,
|
|
@@ -3063,7 +3145,7 @@ var CameraGridAddon = class extends require_dist.BaseAddon {
|
|
|
3063
3145
|
const relay = this.relay;
|
|
3064
3146
|
const plans = this.plansFor(instanceId);
|
|
3065
3147
|
if (!instance || !relay || plans === null) return null;
|
|
3066
|
-
return plans.filter((row) => row.offered).map((row) => gridStreamDescriptor({
|
|
3148
|
+
return plans.filter((row) => row.offered && row.published).map((row) => gridStreamDescriptor({
|
|
3067
3149
|
profile: row.profile,
|
|
3068
3150
|
width: row.offered ? row.canvas.width : 0,
|
|
3069
3151
|
height: row.offered ? row.canvas.height : 0,
|
|
@@ -3098,6 +3180,7 @@ var CameraGridAddon = class extends require_dist.BaseAddon {
|
|
|
3098
3180
|
profiles: (this.plansByInstanceId.get(instance.id) ?? []).map((row) => ({
|
|
3099
3181
|
profile: row.profile,
|
|
3100
3182
|
offered: row.offered,
|
|
3183
|
+
published: row.offered && row.published,
|
|
3101
3184
|
missingSources: row.offered ? [] : [...row.missingSources],
|
|
3102
3185
|
canvas: row.offered ? `${String(row.canvas.width)}x${String(row.canvas.height)}` : ""
|
|
3103
3186
|
}))
|
|
@@ -3110,6 +3193,7 @@ var CameraGridAddon = class extends require_dist.BaseAddon {
|
|
|
3110
3193
|
...instance,
|
|
3111
3194
|
...input.name !== void 0 ? { name: input.name.trim() } : {},
|
|
3112
3195
|
...input.fps !== void 0 ? { fps: input.fps } : {},
|
|
3196
|
+
...input.publishedProfiles !== void 0 ? { publishedProfiles: [...input.publishedProfiles] } : {},
|
|
3113
3197
|
cells: input.cells.map((cell) => ({ ...cell }))
|
|
3114
3198
|
};
|
|
3115
3199
|
this.ctx.logger.info("camera grid: layout saved", {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $t as streamCatalogCapability, At as motionCapability, Jt as snapshotCapability, Pn as EventCategory, U as cameraGridLayoutCapability, Y as declarationOwnerNodeId, an as errMsg, b as MOTION_CLOSE_AFTER_MS, bn as createEvent, dn as DeviceFeature, f as DERIVED_CAMERA_SILENCED_CAP_NAMES, i as BaseDevice, on as buildFfmpegArgs, p as DeclaredDevices, pn as DeviceType, sn as BaseAddon, wn as hydrateSchema } from "../../dist-
|
|
1
|
+
import { $t as streamCatalogCapability, At as motionCapability, Jt as snapshotCapability, Pn as EventCategory, U as cameraGridLayoutCapability, Y as declarationOwnerNodeId, an as errMsg, b as MOTION_CLOSE_AFTER_MS, bn as createEvent, dn as DeviceFeature, f as DERIVED_CAMERA_SILENCED_CAP_NAMES, i as BaseDevice, on as buildFfmpegArgs, p as DeclaredDevices, pn as DeviceType, sn as BaseAddon, wn as hydrateSchema } from "../../dist-CqmImT7i.mjs";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { FfmpegProcess } from "@camstack/types/node";
|
|
4
4
|
import { join } from "node:path";
|
|
@@ -268,6 +268,23 @@ var GridInstanceSchema = z.object({
|
|
|
268
268
|
*/
|
|
269
269
|
fps: z.number().int().min(1).max(60),
|
|
270
270
|
/**
|
|
271
|
+
* Which profiles this grid PUBLISHES, of the ones it could serve.
|
|
272
|
+
*
|
|
273
|
+
* Default `mid` + `low`, and the default is the finding: a grid's `high` is
|
|
274
|
+
* composed of its sources' `high`, so on this fleet it is a 4K canvas built
|
|
275
|
+
* from 4K decodes — a thing to opt into, not to be handed by a viewer's
|
|
276
|
+
* adaptive climbing to the top rung it can see.
|
|
277
|
+
*
|
|
278
|
+
* Absent on rows written before this, which is why the default lives in the
|
|
279
|
+
* schema rather than at the call site: an old grid starts publishing the two
|
|
280
|
+
* cheap rungs without anyone touching it.
|
|
281
|
+
*/
|
|
282
|
+
publishedProfiles: z.array(z.enum([
|
|
283
|
+
"high",
|
|
284
|
+
"mid",
|
|
285
|
+
"low"
|
|
286
|
+
])).max(3).default(["mid", "low"]),
|
|
287
|
+
/**
|
|
271
288
|
* Empty is the NORMAL freshly-created state: a grid is created from the
|
|
272
289
|
* integration page with a name only, and laid out afterwards in the camera's
|
|
273
290
|
* own settings. A grid with no cells declares its camera and emits nothing.
|
|
@@ -1156,7 +1173,8 @@ function gridProfilePlans(input) {
|
|
|
1156
1173
|
return {
|
|
1157
1174
|
profile,
|
|
1158
1175
|
offered: true,
|
|
1159
|
-
canvas
|
|
1176
|
+
canvas,
|
|
1177
|
+
published: input.publishedProfiles.includes(profile)
|
|
1160
1178
|
};
|
|
1161
1179
|
});
|
|
1162
1180
|
}
|
|
@@ -2054,6 +2072,20 @@ var GridTileFeed = class {
|
|
|
2054
2072
|
hasFresh() {
|
|
2055
2073
|
return this.fresh;
|
|
2056
2074
|
}
|
|
2075
|
+
/**
|
|
2076
|
+
* Forget the half frame, keep the picture.
|
|
2077
|
+
*
|
|
2078
|
+
* Raw video has no framing: the feed cuts on a fixed length, so bytes from a
|
|
2079
|
+
* NEW decoder concatenated onto a partial frame from the old one would be
|
|
2080
|
+
* misaligned for ever — every frame after it sheared, with nothing to
|
|
2081
|
+
* re-sync on. Called whenever a tile's decoder is replaced.
|
|
2082
|
+
*
|
|
2083
|
+
* The newest frame is kept deliberately: the cell holds its last picture
|
|
2084
|
+
* while its decoder comes back, instead of blinking to black.
|
|
2085
|
+
*/
|
|
2086
|
+
resetPartial() {
|
|
2087
|
+
this.partial = Buffer.alloc(0);
|
|
2088
|
+
}
|
|
2057
2089
|
/** For the bound in the spec: one frame plus at most a partial one. */
|
|
2058
2090
|
bufferedBytes() {
|
|
2059
2091
|
return (this.newest?.length ?? 0) + this.partial.length;
|
|
@@ -2137,6 +2169,16 @@ var GridCompositor = class {
|
|
|
2137
2169
|
}
|
|
2138
2170
|
return this.deps.write(this.canvas.buffer);
|
|
2139
2171
|
}
|
|
2172
|
+
/**
|
|
2173
|
+
* A tile's decoder was replaced: drop its half frame, keep its picture.
|
|
2174
|
+
*
|
|
2175
|
+
* Without this the new decoder's bytes would be appended to the old one's
|
|
2176
|
+
* partial frame and every frame after would be sheared — raw video has no
|
|
2177
|
+
* framing to re-sync on.
|
|
2178
|
+
*/
|
|
2179
|
+
resetTile(tileId) {
|
|
2180
|
+
this.placed.get(tileId)?.feed.resetPartial();
|
|
2181
|
+
}
|
|
2140
2182
|
/** After this, a tick emits nothing — a dead child must not keep writing. */
|
|
2141
2183
|
close() {
|
|
2142
2184
|
this.closed = true;
|
|
@@ -2232,6 +2274,24 @@ function buildGridTilePlan(input) {
|
|
|
2232
2274
|
/** See D527: the probe returns from the SDP instead of reading media. */
|
|
2233
2275
|
var ANALYZE_DURATION_US$1 = 0;
|
|
2234
2276
|
var PROBE_SIZE_BYTES$1 = 32;
|
|
2277
|
+
/**
|
|
2278
|
+
* Threads per child, and why they are BOUNDED rather than automatic.
|
|
2279
|
+
*
|
|
2280
|
+
* ffmpeg's default is one thread per core, applied to decode, the filter graph
|
|
2281
|
+
* and the output — and it applies it per CHILD. A compositor has N+1 of them,
|
|
2282
|
+
* so on the hub's 20-core CPU two tiles reading 640x360 sub-streams were
|
|
2283
|
+
* measured holding 71 and 56 threads (2026-09-18). That is not a CPU problem:
|
|
2284
|
+
* the container's pid cgroup counts THREADS, its ceiling is 2048, and it was
|
|
2285
|
+
* sitting at 1858. Every new `pthread_create` then fails with EAGAIN, which
|
|
2286
|
+
* ffmpeg reports as `ff_frame_thread_encoder_init failed` — the grid stopped
|
|
2287
|
+
* working, and nothing about the message says "out of pids".
|
|
2288
|
+
*
|
|
2289
|
+
* A tile decodes one small stream and scales it once; one thread does that at a
|
|
2290
|
+
* few percent of a core (measured: 2.2-2.4%). The encoder gets a few more
|
|
2291
|
+
* because it is the only piece whose work scales with the canvas.
|
|
2292
|
+
*/
|
|
2293
|
+
var TILE_THREADS = 1;
|
|
2294
|
+
var ENCODER_THREADS = 4;
|
|
2235
2295
|
var PRESET$1 = "veryfast";
|
|
2236
2296
|
var TUNE$1 = "zerolatency";
|
|
2237
2297
|
var GOP_SECONDS$1 = 1;
|
|
@@ -2255,7 +2315,7 @@ function gridTileDecoderInvocation(input) {
|
|
|
2255
2315
|
fps: input.fps
|
|
2256
2316
|
},
|
|
2257
2317
|
audio: { kind: "none" },
|
|
2258
|
-
threadCount:
|
|
2318
|
+
threadCount: TILE_THREADS,
|
|
2259
2319
|
outputArgs: [],
|
|
2260
2320
|
sink: {
|
|
2261
2321
|
kind: "stdout",
|
|
@@ -2290,7 +2350,7 @@ function gridCanvasEncoderInvocation(input) {
|
|
|
2290
2350
|
},
|
|
2291
2351
|
video,
|
|
2292
2352
|
audio: { kind: "none" },
|
|
2293
|
-
threadCount:
|
|
2353
|
+
threadCount: ENCODER_THREADS,
|
|
2294
2354
|
outputArgs: [],
|
|
2295
2355
|
sink: {
|
|
2296
2356
|
kind: "stdout",
|
|
@@ -2323,13 +2383,22 @@ function gridCanvasEncoderInvocation(input) {
|
|
|
2323
2383
|
* is how a stalled encoder becomes an OOM, and a dropped frame in a live
|
|
2324
2384
|
* composite costs nothing anybody can see.
|
|
2325
2385
|
*
|
|
2326
|
-
* ##
|
|
2386
|
+
* ## A tile comes back; only the ENCODER ends the composition
|
|
2387
|
+
*
|
|
2388
|
+
* Every child exiting used to end it, on the reasoning that a frozen tile is a
|
|
2389
|
+
* nicer picture and a worse fact. In practice it produced neither: a 4K source
|
|
2390
|
+
* ended mid-run (`code=0` — the input simply finished), the composition tore
|
|
2391
|
+
* down, the consumer re-dialled, and the grid served nothing but restarts. That
|
|
2392
|
+
* is what the operator saw as the `auto` rung being stuck.
|
|
2327
2393
|
*
|
|
2328
|
-
*
|
|
2329
|
-
*
|
|
2330
|
-
*
|
|
2331
|
-
*
|
|
2332
|
-
*
|
|
2394
|
+
* A canvas makes the better answer cheap: while a decoder comes back, its cell
|
|
2395
|
+
* holds the last frame it produced and every other cell carries on. The bound
|
|
2396
|
+
* (`TILE_MAX_RESTARTS`) keeps a source that is genuinely gone from respawning
|
|
2397
|
+
* for ever — and when it is reached, the composition does end, with the tile
|
|
2398
|
+
* named.
|
|
2399
|
+
*
|
|
2400
|
+
* The encoder is different: nothing downstream of it exists without it, so its
|
|
2401
|
+
* exit is the composition's exit, first time.
|
|
2333
2402
|
*/
|
|
2334
2403
|
/**
|
|
2335
2404
|
* The encoder must produce its first bytes quickly, because the tick feeds it a
|
|
@@ -2343,6 +2412,15 @@ var ENCODER_FIRST_DATA_MS = 5e3;
|
|
|
2343
2412
|
* already on screen.
|
|
2344
2413
|
*/
|
|
2345
2414
|
var DECODER_FIRST_DATA_MS = 15e3;
|
|
2415
|
+
/**
|
|
2416
|
+
* How many times a tile's decoder may come back before the composition gives up
|
|
2417
|
+
* on it.
|
|
2418
|
+
*
|
|
2419
|
+
* The bound exists so a source that is genuinely gone still ends the
|
|
2420
|
+
* composition rather than respawning for ever; below it, a decoder that dies is
|
|
2421
|
+
* simply replaced while its cell holds the last frame it produced.
|
|
2422
|
+
*/
|
|
2423
|
+
var TILE_MAX_RESTARTS = 5;
|
|
2346
2424
|
async function startGridCompositorChild(ctx, plan, sources, onEnded) {
|
|
2347
2425
|
const tilePlan = buildGridTilePlan({
|
|
2348
2426
|
canvas: {
|
|
@@ -2452,14 +2530,17 @@ async function startGridCompositorChild(ctx, plan, sources, onEnded) {
|
|
|
2452
2530
|
height: tile.size.height
|
|
2453
2531
|
},
|
|
2454
2532
|
firstDataTimeoutMs: DECODER_FIRST_DATA_MS,
|
|
2455
|
-
maxRestarts:
|
|
2533
|
+
maxRestarts: TILE_MAX_RESTARTS,
|
|
2456
2534
|
onChild: (child) => {
|
|
2457
2535
|
child.stdout?.on("data", (chunk) => {
|
|
2458
2536
|
compositor.onTile(tile.id, chunk);
|
|
2459
2537
|
});
|
|
2460
2538
|
child.stderr?.on("data", () => {});
|
|
2461
2539
|
},
|
|
2462
|
-
onExit: (
|
|
2540
|
+
onExit: () => {
|
|
2541
|
+
compositor.resetTile(tile.id);
|
|
2542
|
+
},
|
|
2543
|
+
onGiveUp: (error) => end(`tile ${tile.id}: ${error.message}`)
|
|
2463
2544
|
});
|
|
2464
2545
|
decoders.push(decoder);
|
|
2465
2546
|
await decoder.start();
|
|
@@ -2826,6 +2907,7 @@ var CameraGridAddon = class extends BaseAddon {
|
|
|
2826
2907
|
}
|
|
2827
2908
|
for (const instance of instances) {
|
|
2828
2909
|
const plans = gridProfilePlans({
|
|
2910
|
+
publishedProfiles: instance.publishedProfiles,
|
|
2829
2911
|
cells: instance.cells.map((cell) => ({
|
|
2830
2912
|
deviceId: cell.deviceId,
|
|
2831
2913
|
source: cell.source,
|
|
@@ -2870,7 +2952,7 @@ var CameraGridAddon = class extends BaseAddon {
|
|
|
2870
2952
|
tags: { deviceId },
|
|
2871
2953
|
meta: {
|
|
2872
2954
|
instanceId: instance.id,
|
|
2873
|
-
offered: Object.fromEntries(plans.filter((row) => row.offered).map((row) => [row.profile, row.offered ? `${String(row.canvas.width)}x${String(row.canvas.height)}` : ""]))
|
|
2955
|
+
offered: Object.fromEntries(plans.filter((row) => row.offered && row.published).map((row) => [row.profile, row.offered ? `${String(row.canvas.width)}x${String(row.canvas.height)}` : ""]))
|
|
2874
2956
|
}
|
|
2875
2957
|
});
|
|
2876
2958
|
}
|
|
@@ -2897,7 +2979,7 @@ var CameraGridAddon = class extends BaseAddon {
|
|
|
2897
2979
|
for (const profile of GRID_PROFILES) {
|
|
2898
2980
|
const key = sessionKey(instanceId, profile);
|
|
2899
2981
|
const plan = this.planFor(instanceId, profile);
|
|
2900
|
-
if (plan === null || !plan.offered) {
|
|
2982
|
+
if (plan === null || !plan.offered || !plan.published) {
|
|
2901
2983
|
const stale = this.sessions.get(key);
|
|
2902
2984
|
if (stale) {
|
|
2903
2985
|
this.sessions.delete(key);
|
|
@@ -2967,7 +3049,7 @@ var CameraGridAddon = class extends BaseAddon {
|
|
|
2967
3049
|
resolvePlan: () => {
|
|
2968
3050
|
const instance = this.instanceById(instanceId);
|
|
2969
3051
|
const plan = this.planFor(instanceId, profile);
|
|
2970
|
-
if (!instance || plan === null || !plan.offered) return null;
|
|
3052
|
+
if (!instance || plan === null || !plan.offered || !plan.published) return null;
|
|
2971
3053
|
return gridPlanFor(instance, {
|
|
2972
3054
|
encoder: "libx264",
|
|
2973
3055
|
decodeHwAccel: null,
|
|
@@ -3058,7 +3140,7 @@ var CameraGridAddon = class extends BaseAddon {
|
|
|
3058
3140
|
const relay = this.relay;
|
|
3059
3141
|
const plans = this.plansFor(instanceId);
|
|
3060
3142
|
if (!instance || !relay || plans === null) return null;
|
|
3061
|
-
return plans.filter((row) => row.offered).map((row) => gridStreamDescriptor({
|
|
3143
|
+
return plans.filter((row) => row.offered && row.published).map((row) => gridStreamDescriptor({
|
|
3062
3144
|
profile: row.profile,
|
|
3063
3145
|
width: row.offered ? row.canvas.width : 0,
|
|
3064
3146
|
height: row.offered ? row.canvas.height : 0,
|
|
@@ -3093,6 +3175,7 @@ var CameraGridAddon = class extends BaseAddon {
|
|
|
3093
3175
|
profiles: (this.plansByInstanceId.get(instance.id) ?? []).map((row) => ({
|
|
3094
3176
|
profile: row.profile,
|
|
3095
3177
|
offered: row.offered,
|
|
3178
|
+
published: row.offered && row.published,
|
|
3096
3179
|
missingSources: row.offered ? [] : [...row.missingSources],
|
|
3097
3180
|
canvas: row.offered ? `${String(row.canvas.width)}x${String(row.canvas.height)}` : ""
|
|
3098
3181
|
}))
|
|
@@ -3105,6 +3188,7 @@ var CameraGridAddon = class extends BaseAddon {
|
|
|
3105
3188
|
...instance,
|
|
3106
3189
|
...input.name !== void 0 ? { name: input.name.trim() } : {},
|
|
3107
3190
|
...input.fps !== void 0 ? { fps: input.fps } : {},
|
|
3191
|
+
...input.publishedProfiles !== void 0 ? { publishedProfiles: [...input.publishedProfiles] } : {},
|
|
3108
3192
|
cells: input.cells.map((cell) => ({ ...cell }))
|
|
3109
3193
|
};
|
|
3110
3194
|
this.ctx.logger.info("camera grid: layout saved", {
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-BTpfLiUX.js");
|
|
7
7
|
const require_formatter = require("../../formatter-DqAKDlvN.js");
|
|
8
8
|
//#region src/builtins/console-logging/console-destination.ts
|
|
9
9
|
var LEVEL_RANK = {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Ct as logDestinationCapability, sn as BaseAddon } from "../../dist-
|
|
1
|
+
import { Ct as logDestinationCapability, sn as BaseAddon } from "../../dist-CqmImT7i.mjs";
|
|
2
2
|
import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
|
|
3
3
|
//#region src/builtins/console-logging/console-destination.ts
|
|
4
4
|
var LEVEL_RANK = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
3
|
-
const require_dist = require("../../dist-
|
|
3
|
+
const require_dist = require("../../dist-BTpfLiUX.js");
|
|
4
4
|
let node_crypto = require("node:crypto");
|
|
5
5
|
let node_fs_promises = require("node:fs/promises");
|
|
6
6
|
node_fs_promises = require_chunk.__toESM(node_fs_promises);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { G as coreBlockAddonId, K as coreBlockIdFromAddonId, an as errMsg, c as CORE_BLOCKS_ADDON_ID, l as CORE_BLOCK_ADDON_PREFIX, p as DeclaredDevices, q as coreBlocksCapability, sn as BaseAddon, u as CoreBlockSchema } from "../../dist-
|
|
1
|
+
import { G as coreBlockAddonId, K as coreBlockIdFromAddonId, an as errMsg, c as CORE_BLOCKS_ADDON_ID, l as CORE_BLOCK_ADDON_PREFIX, p as DeclaredDevices, q as coreBlocksCapability, sn as BaseAddon, u as CoreBlockSchema } from "../../dist-CqmImT7i.mjs";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import * as fs from "node:fs/promises";
|
|
4
4
|
import * as path$1 from "node:path";
|
|
@@ -3,8 +3,8 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
7
|
-
const require_retired_settings_keys = require("../../retired-settings-keys-
|
|
6
|
+
const require_dist = require("../../dist-BTpfLiUX.js");
|
|
7
|
+
const require_retired_settings_keys = require("../../retired-settings-keys-D_DIuT_N.js");
|
|
8
8
|
let node_crypto = require("node:crypto");
|
|
9
9
|
let _camstack_types_node = require("@camstack/types/node");
|
|
10
10
|
//#region src/builtins/device-manager/adoption-job-engine.ts
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { $ as deviceStateCapability, D as STREAM_PROFILE_META, H as buildStreamParamsConfigSchema, Ht as runtimeStatePolicyFor, Nn as sleep$1, Nt as parseStreamParamsFormPatch, Pn as EventCategory, Q as deviceManagerCapability, St as locationIconKey, Tn as isDeviceConfigCap, an as errMsg, dn as DeviceFeature, et as deviceStatusCapability, fn as DeviceRole, gn as WELL_KNOWN_TAB_MAP, it as enumerateSchemaFields, jt as normalizeUnit, m as DeviceStatusSchema, o as CAMERA_SWITCH_ORDER, pn as DeviceType, qt as siteZoneKey, rt as enumerateItemArrayFields, s as CAP_NAMES_WITH_STATUS, sn as BaseAddon, t as ALL_CAPABILITY_DEFINITIONS, v as LocationIconIdSchema, zt as resolveContainerPrimaryChild } from "../../dist-
|
|
2
|
-
import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-
|
|
1
|
+
import { $ as deviceStateCapability, D as STREAM_PROFILE_META, H as buildStreamParamsConfigSchema, Ht as runtimeStatePolicyFor, Nn as sleep$1, Nt as parseStreamParamsFormPatch, Pn as EventCategory, Q as deviceManagerCapability, St as locationIconKey, Tn as isDeviceConfigCap, an as errMsg, dn as DeviceFeature, et as deviceStatusCapability, fn as DeviceRole, gn as WELL_KNOWN_TAB_MAP, it as enumerateSchemaFields, jt as normalizeUnit, m as DeviceStatusSchema, o as CAMERA_SWITCH_ORDER, pn as DeviceType, qt as siteZoneKey, rt as enumerateItemArrayFields, s as CAP_NAMES_WITH_STATUS, sn as BaseAddon, t as ALL_CAPABILITY_DEFINITIONS, v as LocationIconIdSchema, zt as resolveContainerPrimaryChild } from "../../dist-CqmImT7i.mjs";
|
|
2
|
+
import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-C8nV-AUi.mjs";
|
|
3
3
|
import { randomUUID } from "node:crypto";
|
|
4
4
|
import { canonicalDeviceFingerprint } from "@camstack/types/node";
|
|
5
5
|
//#region src/builtins/device-manager/adoption-job-engine.ts
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-BTpfLiUX.js");
|
|
7
7
|
//#region src/builtins/doorbell/trigger-engine.ts
|
|
8
8
|
/**
|
|
9
9
|
* Pure trigger logic for the virtual-doorbell builtin — edge detection over
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { B as bareAddonId, Pn as EventCategory, T as SOURCE_DEVICE_TYPES, an as errMsg, at as evaluateSensorEdge, bn as createEvent, gt as isSourceCap, ht as isSameAddonId, pn as DeviceType, sn as BaseAddon, tt as doorbellCapability, w as SOURCE_CAPS } from "../../dist-
|
|
1
|
+
import { B as bareAddonId, Pn as EventCategory, T as SOURCE_DEVICE_TYPES, an as errMsg, at as evaluateSensorEdge, bn as createEvent, gt as isSourceCap, ht as isSameAddonId, pn as DeviceType, sn as BaseAddon, tt as doorbellCapability, w as SOURCE_CAPS } from "../../dist-CqmImT7i.mjs";
|
|
2
2
|
//#region src/builtins/doorbell/trigger-engine.ts
|
|
3
3
|
/**
|
|
4
4
|
* Pure trigger logic for the virtual-doorbell builtin — edge detection over
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-BTpfLiUX.js");
|
|
7
7
|
const require_formatter = require("../../formatter-DqAKDlvN.js");
|
|
8
8
|
//#region src/builtins/hub-forwarder/hub-forwarder-destination.ts
|
|
9
9
|
var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Ct as logDestinationCapability, sn as BaseAddon } from "../../dist-
|
|
1
|
+
import { Ct as logDestinationCapability, sn as BaseAddon } from "../../dist-CqmImT7i.mjs";
|
|
2
2
|
import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
|
|
3
3
|
//#region src/builtins/hub-forwarder/hub-forwarder-destination.ts
|
|
4
4
|
var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
require("../../chunk-Cek0wNdY.js");
|
|
3
|
-
const require_dist = require("../../dist-
|
|
3
|
+
const require_dist = require("../../dist-BTpfLiUX.js");
|
|
4
4
|
//#region src/builtins/liveness-monitor/liveness-checks.ts
|
|
5
5
|
var NO_DEVICES = "liveness:no-devices";
|
|
6
6
|
var ALL_OFFLINE = "liveness:all-devices-offline";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as RecordingStatusSchema, Pn as EventCategory, an as errMsg, bn as createEvent, sn as BaseAddon } from "../../dist-
|
|
1
|
+
import { C as RecordingStatusSchema, Pn as EventCategory, an as errMsg, bn as createEvent, sn as BaseAddon } from "../../dist-CqmImT7i.mjs";
|
|
2
2
|
//#region src/builtins/liveness-monitor/liveness-checks.ts
|
|
3
3
|
var NO_DEVICES = "liveness:no-devices";
|
|
4
4
|
var ALL_OFFLINE = "liveness:all-devices-offline";
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-BTpfLiUX.js");
|
|
7
7
|
let node_crypto = require("node:crypto");
|
|
8
8
|
node_crypto = require_chunk.__toESM(node_crypto);
|
|
9
9
|
let crypto$1 = require("crypto");
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { i as __require, o as __toESM, t as __commonJSMin } from "../../chunk-CNf5ZN-e.mjs";
|
|
2
|
-
import { N as UserRecordSchema, O as ScopedTokenSchema, R as authProviderCapability, r as ApiKeyRecordSchema, sn as BaseAddon, tn as userManagementCapability } from "../../dist-
|
|
2
|
+
import { N as UserRecordSchema, O as ScopedTokenSchema, R as authProviderCapability, r as ApiKeyRecordSchema, sn as BaseAddon, tn as userManagementCapability } from "../../dist-CqmImT7i.mjs";
|
|
3
3
|
import * as crypto$2 from "node:crypto";
|
|
4
4
|
import { createHash, randomUUID, timingSafeEqual } from "node:crypto";
|
|
5
5
|
import nodeCrypto from "crypto";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
3
|
-
const require_dist = require("../../dist-
|
|
3
|
+
const require_dist = require("../../dist-BTpfLiUX.js");
|
|
4
4
|
const require_tls = require("../../tls-BFs4PzoW.js");
|
|
5
5
|
let node_fs_promises = require("node:fs/promises");
|
|
6
6
|
let node_path = require("node:path");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Pn as EventCategory, sn as BaseAddon, xt as localNetworkCapability } from "../../dist-
|
|
1
|
+
import { Pn as EventCategory, sn as BaseAddon, xt as localNetworkCapability } from "../../dist-CqmImT7i.mjs";
|
|
2
2
|
import { S as readLanHttpState, _ as DEFAULT_LAN_HTTP_PORT, a as writeTlsMode, i as writeExtraSans, l as reissueTlsLeaf, n as readTlsAccessStatus, o as validateUploadedTls, r as readTlsMode, s as ensureTlsCert, t as readExtraSans, y as applyLanHttp } from "../../tls-2xbgg78V.mjs";
|
|
3
3
|
import { mkdir, writeFile } from "node:fs/promises";
|
|
4
4
|
import { join } from "node:path";
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-BTpfLiUX.js");
|
|
7
7
|
//#region src/builtins/loki-logging/loki-payload.ts
|
|
8
8
|
/**
|
|
9
9
|
* Loki rejects a label name that is not a valid Prometheus label
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Ct as logDestinationCapability, sn as BaseAddon } from "../../dist-
|
|
1
|
+
import { Ct as logDestinationCapability, sn as BaseAddon } from "../../dist-CqmImT7i.mjs";
|
|
2
2
|
//#region src/builtins/loki-logging/loki-payload.ts
|
|
3
3
|
/**
|
|
4
4
|
* Loki rejects a label name that is not a valid Prometheus label
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-BTpfLiUX.js");
|
|
7
7
|
let node_fs_promises = require("node:fs/promises");
|
|
8
8
|
let node_fs = require("node:fs");
|
|
9
9
|
node_fs = require_chunk.__toESM(node_fs);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Lt as reducePoints, Ot as metricsProviderCapability, Pn as EventCategory, Rt as resolveBucketMs, an as errMsg, bn as createEvent, lt as foldSnapshotByFunction, sn as BaseAddon } from "../../dist-
|
|
1
|
+
import { Lt as reducePoints, Ot as metricsProviderCapability, Pn as EventCategory, Rt as resolveBucketMs, an as errMsg, bn as createEvent, lt as foldSnapshotByFunction, sn as BaseAddon } from "../../dist-CqmImT7i.mjs";
|
|
2
2
|
import { access, readFile, readdir } from "node:fs/promises";
|
|
3
3
|
import * as fs from "node:fs";
|
|
4
4
|
import { constants, readFileSync } from "node:fs";
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-BTpfLiUX.js");
|
|
7
7
|
let node_fs = require("node:fs");
|
|
8
8
|
node_fs = require_chunk.__toESM(node_fs);
|
|
9
9
|
let node_child_process = require("node:child_process");
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { o as __toESM } from "../../chunk-CNf5ZN-e.mjs";
|
|
2
|
-
import { Gt as scoreRuntimes, Pn as EventCategory, Pt as platformProbeCapability, Sn as emitReadiness, an as errMsg, nt as enumerateInferenceDevices, sn as BaseAddon } from "../../dist-
|
|
2
|
+
import { Gt as scoreRuntimes, Pn as EventCategory, Pt as platformProbeCapability, Sn as emitReadiness, an as errMsg, nt as enumerateInferenceDevices, sn as BaseAddon } from "../../dist-CqmImT7i.mjs";
|
|
3
3
|
import * as fs from "node:fs";
|
|
4
4
|
import { execFile } from "node:child_process";
|
|
5
5
|
import * as os from "node:os";
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-BTpfLiUX.js");
|
|
7
7
|
//#region src/builtins/remote-access-orchestrator/enabled-providers-reconcile.ts
|
|
8
8
|
/**
|
|
9
9
|
* Reconcile the durable `enabledProviders` set against authoritative
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Pn as EventCategory, sn as BaseAddon } from "../../dist-
|
|
1
|
+
import { Pn as EventCategory, sn as BaseAddon } from "../../dist-CqmImT7i.mjs";
|
|
2
2
|
//#region src/builtins/remote-access-orchestrator/enabled-providers-reconcile.ts
|
|
3
3
|
/**
|
|
4
4
|
* Reconcile the durable `enabledProviders` set against authoritative
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-BTpfLiUX.js");
|
|
7
7
|
const require_snapshot_courtesy = require("../../snapshot-courtesy-Cqs7GkOV.js");
|
|
8
8
|
let zod = require("zod");
|
|
9
9
|
let node_crypto = require("node:crypto");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { B as bareAddonId, Dn as nodePin, Jt as snapshotCapability, Pn as EventCategory, V as batteryCapability, Z as deriveBatteryPresence, a as BatteryStatusSchema, an as errMsg, dn as DeviceFeature, en as streamQualityLabel, pn as DeviceType, sn as BaseAddon } from "../../dist-
|
|
1
|
+
import { B as bareAddonId, Dn as nodePin, Jt as snapshotCapability, Pn as EventCategory, V as batteryCapability, Z as deriveBatteryPresence, a as BatteryStatusSchema, an as errMsg, dn as DeviceFeature, en as streamQualityLabel, pn as DeviceType, sn as BaseAddon } from "../../dist-CqmImT7i.mjs";
|
|
2
2
|
import { i as renderCourtesyOverlayJpeg, n as courtesyCacheKey, r as renderCourtesyJpeg } from "../../snapshot-courtesy-CZPvteq2.mjs";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { randomUUID } from "node:crypto";
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-BTpfLiUX.js");
|
|
7
7
|
let node_crypto = require("node:crypto");
|
|
8
8
|
let node_fs_promises = require("node:fs/promises");
|
|
9
9
|
let node_path = require("node:path");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Qt as storageProviderCapability, ct as filesystemBrowseCapability, sn as BaseAddon } from "../../dist-
|
|
1
|
+
import { Qt as storageProviderCapability, ct as filesystemBrowseCapability, sn as BaseAddon } from "../../dist-CqmImT7i.mjs";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import { mkdir, readdir, realpath, statfs } from "node:fs/promises";
|
|
4
4
|
import * as path$1 from "node:path";
|
|
Binary file
|
|
Binary file
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-BTpfLiUX.js");
|
|
7
7
|
const require_hub_cap_forward = require("../../hub-cap-forward-DmHNjbB0.js");
|
|
8
8
|
let zod = require("zod");
|
|
9
9
|
let node_crypto = require("node:crypto");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as StorageLocationModeSchema, Bt as resolveLocationMode, Dt as mayWriteToLocation, Et as mayReadLocation, Kt as settingsStoreCapability, M as StorageMigrationJobSchema, On as parseJsonObject, Pn as EventCategory, W as collectSecretConfigKeys, Xt as storageMigrationCapability, Yt as storageCapability, _ as LegacyStorageLocationDefaultSchema, in as withLocationMode, j as StorageLocationTypeSchema, k as StorageCleanupJobSchema, kt as modeMayWrite, ot as evictionPolicyOfLocation, pt as isLocationEnabled, sn as BaseAddon, ut as gbToBytes, x as REDACTED_SECRET, yt as legacyModeOf } from "../../dist-
|
|
1
|
+
import { A as StorageLocationModeSchema, Bt as resolveLocationMode, Dt as mayWriteToLocation, Et as mayReadLocation, Kt as settingsStoreCapability, M as StorageMigrationJobSchema, On as parseJsonObject, Pn as EventCategory, W as collectSecretConfigKeys, Xt as storageMigrationCapability, Yt as storageCapability, _ as LegacyStorageLocationDefaultSchema, in as withLocationMode, j as StorageLocationTypeSchema, k as StorageCleanupJobSchema, kt as modeMayWrite, ot as evictionPolicyOfLocation, pt as isLocationEnabled, sn as BaseAddon, ut as gbToBytes, x as REDACTED_SECRET, yt as legacyModeOf } from "../../dist-CqmImT7i.mjs";
|
|
2
2
|
import { t as HUB_CAP_FWD_ACTION } from "../../hub-cap-forward-BdT320dq.mjs";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { randomUUID } from "node:crypto";
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-BTpfLiUX.js");
|
|
7
7
|
//#region src/builtins/system-config/system-config.addon.ts
|
|
8
8
|
/**
|
|
9
9
|
* Built-in `system-config` addon — Phase 4 of the settings redesign.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { an as errMsg, sn as BaseAddon, wn as hydrateSchema } from "../../dist-
|
|
1
|
+
import { an as errMsg, sn as BaseAddon, wn as hydrateSchema } from "../../dist-CqmImT7i.mjs";
|
|
2
2
|
//#region src/builtins/system-config/system-config.addon.ts
|
|
3
3
|
/**
|
|
4
4
|
* Built-in `system-config` addon — Phase 4 of the settings redesign.
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../../chunk-Cek0wNdY.js");
|
|
6
|
-
const require_dist = require("../../dist-
|
|
6
|
+
const require_dist = require("../../dist-BTpfLiUX.js");
|
|
7
7
|
const require_formatter = require("../../formatter-DqAKDlvN.js");
|
|
8
8
|
let node_path = require("node:path");
|
|
9
9
|
node_path = require_chunk.__toESM(node_path);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Ct as logDestinationCapability, sn as BaseAddon } from "../../dist-
|
|
1
|
+
import { Ct as logDestinationCapability, sn as BaseAddon } from "../../dist-CqmImT7i.mjs";
|
|
2
2
|
import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
|
|
3
3
|
import * as path$1 from "node:path";
|
|
4
4
|
import path from "node:path";
|
|
@@ -31221,7 +31221,16 @@ var GridProfileOfferSchema = zod.z.object({
|
|
|
31221
31221
|
* grid came out as, and because it is the number an operator would otherwise
|
|
31222
31222
|
* expect to type.
|
|
31223
31223
|
*/
|
|
31224
|
-
canvas: zod.z.string()
|
|
31224
|
+
canvas: zod.z.string(),
|
|
31225
|
+
/**
|
|
31226
|
+
* Whether this profile is PUBLISHED, of the ones the grid could serve.
|
|
31227
|
+
*
|
|
31228
|
+
* A grid's `high` is composed of its sources' `high`, so on a 4K fleet it is
|
|
31229
|
+
* a 4K canvas built from 4K decodes — something to opt into, not something a
|
|
31230
|
+
* viewer's adaptive should be handed by climbing to the top rung it can see.
|
|
31231
|
+
* Default is `mid` + `low`.
|
|
31232
|
+
*/
|
|
31233
|
+
published: zod.z.boolean()
|
|
31225
31234
|
});
|
|
31226
31235
|
var GridLayoutViewSchema = zod.z.object({
|
|
31227
31236
|
/** The persisted grid row this camera was declared from. */
|
|
@@ -31244,6 +31253,12 @@ var GridLayoutPatchSchema = zod.z.object({
|
|
|
31244
31253
|
deviceId: zod.z.number().int().nonnegative(),
|
|
31245
31254
|
name: zod.z.string().min(1).max(160).optional(),
|
|
31246
31255
|
fps: zod.z.number().int().min(1).max(60).optional(),
|
|
31256
|
+
/** Which profiles to publish. See `GridProfileOffer.published`. */
|
|
31257
|
+
publishedProfiles: zod.z.array(zod.z.enum([
|
|
31258
|
+
"high",
|
|
31259
|
+
"mid",
|
|
31260
|
+
"low"
|
|
31261
|
+
])).max(3).optional(),
|
|
31247
31262
|
/**
|
|
31248
31263
|
* The whole cell list at once. A per-cell patch would need an ordering the
|
|
31249
31264
|
* editor does not have, and a half-applied layout is a picture nobody asked
|
|
@@ -31221,7 +31221,16 @@ var GridProfileOfferSchema = z.object({
|
|
|
31221
31221
|
* grid came out as, and because it is the number an operator would otherwise
|
|
31222
31222
|
* expect to type.
|
|
31223
31223
|
*/
|
|
31224
|
-
canvas: z.string()
|
|
31224
|
+
canvas: z.string(),
|
|
31225
|
+
/**
|
|
31226
|
+
* Whether this profile is PUBLISHED, of the ones the grid could serve.
|
|
31227
|
+
*
|
|
31228
|
+
* A grid's `high` is composed of its sources' `high`, so on a 4K fleet it is
|
|
31229
|
+
* a 4K canvas built from 4K decodes — something to opt into, not something a
|
|
31230
|
+
* viewer's adaptive should be handed by climbing to the top rung it can see.
|
|
31231
|
+
* Default is `mid` + `low`.
|
|
31232
|
+
*/
|
|
31233
|
+
published: z.boolean()
|
|
31225
31234
|
});
|
|
31226
31235
|
var GridLayoutViewSchema = z.object({
|
|
31227
31236
|
/** The persisted grid row this camera was declared from. */
|
|
@@ -31244,6 +31253,12 @@ var GridLayoutPatchSchema = z.object({
|
|
|
31244
31253
|
deviceId: z.number().int().nonnegative(),
|
|
31245
31254
|
name: z.string().min(1).max(160).optional(),
|
|
31246
31255
|
fps: z.number().int().min(1).max(60).optional(),
|
|
31256
|
+
/** Which profiles to publish. See `GridProfileOffer.published`. */
|
|
31257
|
+
publishedProfiles: z.array(z.enum([
|
|
31258
|
+
"high",
|
|
31259
|
+
"mid",
|
|
31260
|
+
"low"
|
|
31261
|
+
])).max(3).optional(),
|
|
31247
31262
|
/**
|
|
31248
31263
|
* The whole cell list at once. A per-cell patch would need an ordering the
|
|
31249
31264
|
* editor does not have, and a half-applied layout is a picture nobody asked
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_chunk = require("./chunk-Cek0wNdY.js");
|
|
3
|
-
const require_dist = require("./dist-
|
|
3
|
+
const require_dist = require("./dist-BTpfLiUX.js");
|
|
4
4
|
const require_builtins_alerts_alerts_addon = require("./builtins/alerts/alerts.addon.js");
|
|
5
5
|
require("./builtins/alerts/index.js");
|
|
6
6
|
const require_formatter = require("./formatter-DqAKDlvN.js");
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { a as __toCommonJS, i as __require, n as __esmMin, o as __toESM$1, r as __exportAll, t as __commonJSMin$1 } from "./chunk-CNf5ZN-e.mjs";
|
|
2
|
-
import { An as readinessKey, Cn as expandCapMethods, F as addonSettingsCapability, Ft as procedureAuthKey, Mn as scopeKey, Mt as objectInputDeclaresAddonId, On as parseJsonObject, Pn as EventCategory$1, S as RUNTIME_DEFAULTS, Tt as looseSchema, Ut as scopesAllowAddon, Vt as resolveMethodAuth, Wt as scopesAllowDeviceCap, _n as asJsonObject$1, _t as isVoidInput, an as errMsg$1, bn as createEvent, bt as lifecycleJobSchema, cn as DATAPLANE_SECRET_HEADER$1, dt as isArrayOutputSchema, ft as isCollectionArrayMethod, g as LOG_LEVEL_RANK, hn as ReadinessTimeoutError, jn as resolveCapMount, kn as parseJsonUnknown, ln as DEVICE_SETTINGS_CONTRIBUTION_METHODS, mn as ReadinessRegistry, mt as isObjectInput, st as extractNestedAddonId, t as ALL_CAPABILITY_DEFINITIONS, un as DEVICE_STATUS_METHOD, vn as asNumber, vt as kebabToCamel, wt as logLevelAtMost, xn as emitDownForOwnedCaps, y as METHOD_ACCESS_MAP, yn as asString$1 } from "./dist-
|
|
2
|
+
import { An as readinessKey, Cn as expandCapMethods, F as addonSettingsCapability, Ft as procedureAuthKey, Mn as scopeKey, Mt as objectInputDeclaresAddonId, On as parseJsonObject, Pn as EventCategory$1, S as RUNTIME_DEFAULTS, Tt as looseSchema, Ut as scopesAllowAddon, Vt as resolveMethodAuth, Wt as scopesAllowDeviceCap, _n as asJsonObject$1, _t as isVoidInput, an as errMsg$1, bn as createEvent, bt as lifecycleJobSchema, cn as DATAPLANE_SECRET_HEADER$1, dt as isArrayOutputSchema, ft as isCollectionArrayMethod, g as LOG_LEVEL_RANK, hn as ReadinessTimeoutError, jn as resolveCapMount, kn as parseJsonUnknown, ln as DEVICE_SETTINGS_CONTRIBUTION_METHODS, mn as ReadinessRegistry, mt as isObjectInput, st as extractNestedAddonId, t as ALL_CAPABILITY_DEFINITIONS, un as DEVICE_STATUS_METHOD, vn as asNumber, vt as kebabToCamel, wt as logLevelAtMost, xn as emitDownForOwnedCaps, y as METHOD_ACCESS_MAP, yn as asString$1 } from "./dist-CqmImT7i.mjs";
|
|
3
3
|
import { AlertCenterAddon } from "./builtins/alerts/alerts.addon.mjs";
|
|
4
4
|
import "./builtins/alerts/index.mjs";
|
|
5
5
|
import { t as formatLogLine } from "./formatter-B7qW8bPJ.mjs";
|