@camstack/addon-pipeline 1.2.48 → 1.2.49
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/{model-download-service-D8B-4ktF-7-YxE9Wx.js → addon-utils-DveoBR6G.js} +219 -3
- package/dist/{model-download-service-D8B-4ktF-BB7oZL3y.mjs → addon-utils-QuxtOdK1.mjs} +219 -3
- package/dist/audio-analyzer/index.js +4 -4
- package/dist/audio-analyzer/index.mjs +2 -2
- package/dist/detection-pipeline/index.js +9 -9
- package/dist/detection-pipeline/index.mjs +3 -3
- package/dist/{dist-DoTw0NM3.mjs → dist-CLJKoYEP.mjs} +39 -1
- package/dist/{dist-CksKE1Sn.js → dist-J2DeRZAN.js} +39 -1
- package/dist/{event-loop-stall-monitor-CtktCf3u.mjs → event-loop-stall-monitor-B6dqQjiX.mjs} +1 -1
- package/dist/{event-loop-stall-monitor-DzdwBr4X.js → event-loop-stall-monitor-Bkbiw20z.js} +1 -1
- package/dist/motion-wasm/index.js +1 -1
- package/dist/motion-wasm/index.mjs +1 -1
- package/dist/pipeline-runner/index.js +3 -3
- package/dist/pipeline-runner/index.mjs +3 -3
- package/dist/recorder/index.js +5 -5
- package/dist/recorder/index.mjs +2 -2
- package/dist/session-decode/decode-worker-child.js +1 -1
- package/dist/session-decode/decode-worker-child.mjs +1 -1
- package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-BNISghj9.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-DZikMEgD.mjs} +1 -1
- package/dist/stream-broker/{hostInit-DqD1qq8w.mjs → hostInit-i24FVz-3.mjs} +1 -1
- package/dist/stream-broker/index.js +3 -3
- package/dist/stream-broker/index.mjs +2 -2
- package/dist/stream-broker/remoteEntry.js +1 -1
- package/dist/{worker-protocol-4_4L1QOe.mjs → worker-protocol-BxPNiino.mjs} +1 -1
- package/dist/{worker-protocol-CuEcTi66.js → worker-protocol-CNi5srgV.js} +1 -1
- package/embed-dist/assets/{MaskShapeCanvas-DI4BY7W2-EcWZ5m8e.js → MaskShapeCanvas-DI4BY7W2-m7YpaY98.js} +1 -1
- package/embed-dist/assets/{MotionZonesSettings-NcxxQN8r-CfiyCD3z.js → MotionZonesSettings-NcxxQN8r-619YTOjy.js} +1 -1
- package/embed-dist/assets/{PrivacyMaskSettings-APgPLF7p-ESPy4XXk.js → PrivacyMaskSettings-APgPLF7p-B-k8v0O5.js} +1 -1
- package/embed-dist/assets/{index-C3FKV1x-.js → index-CYO4OY8_.js} +12 -12
- package/embed-dist/index.html +1 -1
- package/package.json +1 -1
|
@@ -21137,7 +21137,29 @@ var FaceInfoSchema = object({
|
|
|
21137
21137
|
recognizedIdentityId: string().optional(),
|
|
21138
21138
|
identityName: string().optional(),
|
|
21139
21139
|
assigned: boolean(),
|
|
21140
|
+
/**
|
|
21141
|
+
* The crop, inline, base64.
|
|
21142
|
+
*
|
|
21143
|
+
* **Prefer {@link cropUrl}.** At the 500 rows the Faces view asks for this
|
|
21144
|
+
* field alone is ~2.87 MiB, re-sent in full on every operator assign and
|
|
21145
|
+
* every 30 s poll, base64-inflated over the msgpack socket and held in the
|
|
21146
|
+
* query heap. It stays for callers that have not migrated; `includeCrops:
|
|
21147
|
+
* false` turns it off once they have.
|
|
21148
|
+
*/
|
|
21140
21149
|
base64: string().optional(),
|
|
21150
|
+
/**
|
|
21151
|
+
* Same crop, as a data-plane URL for `<img src>` — the move the admin
|
|
21152
|
+
* snapshot surfaces made on 2026-08-08.
|
|
21153
|
+
*
|
|
21154
|
+
* Served by the `event-media` plane, which resolves a raw MediaStore key and
|
|
21155
|
+
* is `access: 'authenticated'`: a bare `<img>` carries the `camstack_session`
|
|
21156
|
+
* cookie, so no header plumbing is needed. The bytes then ride the browser's
|
|
21157
|
+
* HTTP cache with an ETag and `immutable`, instead of the WebSocket.
|
|
21158
|
+
*
|
|
21159
|
+
* Absent when the face has no stored crop, or when the addon has no data
|
|
21160
|
+
* plane — callers fall back to {@link base64}.
|
|
21161
|
+
*/
|
|
21162
|
+
cropUrl: string().optional(),
|
|
21141
21163
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
21142
21164
|
* view draw the box over the native `keyFrameMediaKey` frame. Absent on
|
|
21143
21165
|
* legacy rows written before design B. */
|
|
@@ -21202,7 +21224,23 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
|
|
|
21202
21224
|
auth: "admin"
|
|
21203
21225
|
}), method(object({
|
|
21204
21226
|
limit: number().int().positive().optional(),
|
|
21205
|
-
filter: FaceFilterEnum.optional()
|
|
21227
|
+
filter: FaceFilterEnum.optional(),
|
|
21228
|
+
/**
|
|
21229
|
+
* Inline the base64 crop on every row. Default `true` — the existing
|
|
21230
|
+
* behaviour, kept so no caller breaks.
|
|
21231
|
+
*
|
|
21232
|
+
* Set `false` once the caller renders {@link FaceInfo.cropUrl}: that
|
|
21233
|
+
* drops ~2.87 MiB per 500-row page to a few KiB of metadata and lets
|
|
21234
|
+
* the browser cache the images.
|
|
21235
|
+
*
|
|
21236
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
21237
|
+
* next train.** The hub router validates cap inputs against its own
|
|
21238
|
+
* compiled Zod, which strips a key it does not know — verified today
|
|
21239
|
+
* on the OUTPUT side, where an additive field DOES arrive immediately
|
|
21240
|
+
* (`Track.hasFace`). Until the train ships, sending `false` is
|
|
21241
|
+
* harmless and simply keeps the crops inline.
|
|
21242
|
+
*/
|
|
21243
|
+
includeCrops: boolean().optional()
|
|
21206
21244
|
}).optional(), array(FaceInfoSchema).readonly()), method(object({
|
|
21207
21245
|
deviceId: number().int(),
|
|
21208
21246
|
trackId: string()
|
|
@@ -21137,7 +21137,29 @@ var FaceInfoSchema = object({
|
|
|
21137
21137
|
recognizedIdentityId: string().optional(),
|
|
21138
21138
|
identityName: string().optional(),
|
|
21139
21139
|
assigned: boolean(),
|
|
21140
|
+
/**
|
|
21141
|
+
* The crop, inline, base64.
|
|
21142
|
+
*
|
|
21143
|
+
* **Prefer {@link cropUrl}.** At the 500 rows the Faces view asks for this
|
|
21144
|
+
* field alone is ~2.87 MiB, re-sent in full on every operator assign and
|
|
21145
|
+
* every 30 s poll, base64-inflated over the msgpack socket and held in the
|
|
21146
|
+
* query heap. It stays for callers that have not migrated; `includeCrops:
|
|
21147
|
+
* false` turns it off once they have.
|
|
21148
|
+
*/
|
|
21140
21149
|
base64: string().optional(),
|
|
21150
|
+
/**
|
|
21151
|
+
* Same crop, as a data-plane URL for `<img src>` — the move the admin
|
|
21152
|
+
* snapshot surfaces made on 2026-08-08.
|
|
21153
|
+
*
|
|
21154
|
+
* Served by the `event-media` plane, which resolves a raw MediaStore key and
|
|
21155
|
+
* is `access: 'authenticated'`: a bare `<img>` carries the `camstack_session`
|
|
21156
|
+
* cookie, so no header plumbing is needed. The bytes then ride the browser's
|
|
21157
|
+
* HTTP cache with an ETag and `immutable`, instead of the WebSocket.
|
|
21158
|
+
*
|
|
21159
|
+
* Absent when the face has no stored crop, or when the addon has no data
|
|
21160
|
+
* plane — callers fall back to {@link base64}.
|
|
21161
|
+
*/
|
|
21162
|
+
cropUrl: string().optional(),
|
|
21141
21163
|
/** Design B: the face bbox (pixel space) on the key frame — lets a detail
|
|
21142
21164
|
* view draw the box over the native `keyFrameMediaKey` frame. Absent on
|
|
21143
21165
|
* legacy rows written before design B. */
|
|
@@ -21202,7 +21224,23 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
|
|
|
21202
21224
|
auth: "admin"
|
|
21203
21225
|
}), method(object({
|
|
21204
21226
|
limit: number().int().positive().optional(),
|
|
21205
|
-
filter: FaceFilterEnum.optional()
|
|
21227
|
+
filter: FaceFilterEnum.optional(),
|
|
21228
|
+
/**
|
|
21229
|
+
* Inline the base64 crop on every row. Default `true` — the existing
|
|
21230
|
+
* behaviour, kept so no caller breaks.
|
|
21231
|
+
*
|
|
21232
|
+
* Set `false` once the caller renders {@link FaceInfo.cropUrl}: that
|
|
21233
|
+
* drops ~2.87 MiB per 500-row page to a few KiB of metadata and lets
|
|
21234
|
+
* the browser cache the images.
|
|
21235
|
+
*
|
|
21236
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
21237
|
+
* next train.** The hub router validates cap inputs against its own
|
|
21238
|
+
* compiled Zod, which strips a key it does not know — verified today
|
|
21239
|
+
* on the OUTPUT side, where an additive field DOES arrive immediately
|
|
21240
|
+
* (`Track.hasFace`). Until the train ships, sending `false` is
|
|
21241
|
+
* harmless and simply keeps the crops inline.
|
|
21242
|
+
*/
|
|
21243
|
+
includeCrops: boolean().optional()
|
|
21206
21244
|
}).optional(), array(FaceInfoSchema).readonly()), method(object({
|
|
21207
21245
|
deviceId: number().int(),
|
|
21208
21246
|
trackId: string()
|
package/dist/{event-loop-stall-monitor-CtktCf3u.mjs → event-loop-stall-monitor-B6dqQjiX.mjs}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { L as hfModelUrl, a as COCO_TO_MACRO, i as COCO_80_LABELS, r as AUDIO_MACRO_LABELS } from "./dist-
|
|
1
|
+
import { L as hfModelUrl, a as COCO_TO_MACRO, i as COCO_80_LABELS, r as AUDIO_MACRO_LABELS } from "./dist-CLJKoYEP.mjs";
|
|
2
2
|
import { PerformanceObserver } from "node:perf_hooks";
|
|
3
3
|
//#region src/detection-pipeline/registry/model-catalogs.ts
|
|
4
4
|
var HF_REPO = "camstack/camstack-models";
|
|
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_dist = require("../dist-
|
|
5
|
+
const require_dist = require("../dist-J2DeRZAN.js");
|
|
6
6
|
const require_lazy_sharp = require("../lazy-sharp-CcYuXtsa.js");
|
|
7
7
|
let node_fs = require("node:fs");
|
|
8
8
|
let node_path = require("node:path");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { B as motionDetectionCapability, I as evaluateZoneRules, at as BaseAddon, ct as DeviceType, ut as hydrateSchema } from "../dist-
|
|
1
|
+
import { B as motionDetectionCapability, I as evaluateZoneRules, at as BaseAddon, ct as DeviceType, ut as hydrateSchema } from "../dist-CLJKoYEP.mjs";
|
|
2
2
|
import { t as getSharp } from "../lazy-sharp-B-mb8uWx.mjs";
|
|
3
3
|
import { readFileSync } from "node:fs";
|
|
4
4
|
import { join } from "node:path";
|
|
@@ -3,9 +3,9 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../chunk-emK7D4bc.js");
|
|
6
|
-
const require_dist = require("../dist-
|
|
7
|
-
const require_event_loop_stall_monitor = require("../event-loop-stall-monitor-
|
|
8
|
-
const require_worker_protocol = require("../worker-protocol-
|
|
6
|
+
const require_dist = require("../dist-J2DeRZAN.js");
|
|
7
|
+
const require_event_loop_stall_monitor = require("../event-loop-stall-monitor-Bkbiw20z.js");
|
|
8
|
+
const require_worker_protocol = require("../worker-protocol-CNi5srgV.js");
|
|
9
9
|
const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
|
|
10
10
|
const require_lazy_sharp = require("../lazy-sharp-CcYuXtsa.js");
|
|
11
11
|
const require_remote_restream = require("../remote-restream-CO36Sr30.js");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { $ as errMsg, A as deriveDetailCropRect, At as EventCategory, Ct as lazy, D as customAction, Et as object, H as pickNativeLeaseOverride, Ot as string, Tt as number, V as pickDetailCropConvention, W as pipelineRunnerCapability, at as BaseAddon, bt as array, k as defineCustomActions, l as DEVICE_BACKEND_TO_FORMAT, lt as createEvent, mt as nodePin, s as DEFAULT_DETAIL_CROP_CONVENTION, wt as literal, xt as boolean, yt as _enum } from "../dist-
|
|
2
|
-
import { c as getStepDefinition, t as attributeStall } from "../event-loop-stall-monitor-
|
|
3
|
-
import { a as nativeLeaseSettingEnv, t as isWorkerReply } from "../worker-protocol-
|
|
1
|
+
import { $ as errMsg, A as deriveDetailCropRect, At as EventCategory, Ct as lazy, D as customAction, Et as object, H as pickNativeLeaseOverride, Ot as string, Tt as number, V as pickDetailCropConvention, W as pipelineRunnerCapability, at as BaseAddon, bt as array, k as defineCustomActions, l as DEVICE_BACKEND_TO_FORMAT, lt as createEvent, mt as nodePin, s as DEFAULT_DETAIL_CROP_CONVENTION, wt as literal, xt as boolean, yt as _enum } from "../dist-CLJKoYEP.mjs";
|
|
2
|
+
import { c as getStepDefinition, t as attributeStall } from "../event-loop-stall-monitor-B6dqQjiX.mjs";
|
|
3
|
+
import { a as nativeLeaseSettingEnv, t as isWorkerReply } from "../worker-protocol-BxPNiino.mjs";
|
|
4
4
|
import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
|
|
5
5
|
import { t as getSharp } from "../lazy-sharp-B-mb8uWx.mjs";
|
|
6
6
|
import { n as profileForStreamId, t as isRemoteRestream } from "../remote-restream-BeHi78PZ.mjs";
|
package/dist/recorder/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const require_chunk = require("../chunk-emK7D4bc.js");
|
|
2
|
-
const require_dist = require("../dist-
|
|
2
|
+
const require_dist = require("../dist-J2DeRZAN.js");
|
|
3
3
|
const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
|
|
4
|
-
const
|
|
4
|
+
const require_addon_utils = require("../addon-utils-DveoBR6G.js");
|
|
5
5
|
let node_crypto = require("node:crypto");
|
|
6
6
|
let node_child_process = require("node:child_process");
|
|
7
7
|
let node_fs = require("node:fs");
|
|
@@ -5418,7 +5418,7 @@ var RecorderV2Addon = class extends require_dist.BaseAddon {
|
|
|
5418
5418
|
source: this.calendar,
|
|
5419
5419
|
mfraFor: (deviceId, profile, startMs) => this.mfraTables.get(deviceId, profile, startMs),
|
|
5420
5420
|
onLog: (msg, meta) => this.ctx.logger.debug(msg, { meta })
|
|
5421
|
-
},
|
|
5421
|
+
}, require_addon_utils.createFileDataPlaneHandler({ getRoots: () => this.playbackRoots() }));
|
|
5422
5422
|
const served = await this.ctx.dataPlane?.serve({
|
|
5423
5423
|
prefix: PLAYBACK_PREFIX,
|
|
5424
5424
|
access: "authenticated",
|
|
@@ -5892,11 +5892,11 @@ var RecorderV2Addon = class extends require_dist.BaseAddon {
|
|
|
5892
5892
|
return;
|
|
5893
5893
|
}
|
|
5894
5894
|
const baseHeaders = {
|
|
5895
|
-
"content-type":
|
|
5895
|
+
"content-type": require_addon_utils.contentTypeFor(absPath),
|
|
5896
5896
|
"accept-ranges": "bytes",
|
|
5897
5897
|
"cache-control": "no-cache"
|
|
5898
5898
|
};
|
|
5899
|
-
const range =
|
|
5899
|
+
const range = require_addon_utils.parseRangeHeader(req.headers.range, size);
|
|
5900
5900
|
const servesFinalByte = range ? range.end === size - 1 : true;
|
|
5901
5901
|
const recordDownloadOnFinish = () => {
|
|
5902
5902
|
if (req.method !== "GET" || !servesFinalByte) return;
|
package/dist/recorder/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { $ as errMsg, At as EventCategory, Dt as record, G as recordingCapability, K as recordingExportCapability, Ot as string, Y as storageEvictableCapability, _t as selectAssignedProfileSlots, at as BaseAddon, bt as array, ct as DeviceType, f as ExportRecordSchema, g as OpsLogEntrySchema, j as deriveRecordingMode, mt as nodePin, u as EVENT_PAD_MS, ut as hydrateSchema, y as RecordingConfigSchema } from "../dist-
|
|
1
|
+
import { $ as errMsg, At as EventCategory, Dt as record, G as recordingCapability, K as recordingExportCapability, Ot as string, Y as storageEvictableCapability, _t as selectAssignedProfileSlots, at as BaseAddon, bt as array, ct as DeviceType, f as ExportRecordSchema, g as OpsLogEntrySchema, j as deriveRecordingMode, mt as nodePin, u as EVENT_PAD_MS, ut as hydrateSchema, y as RecordingConfigSchema } from "../dist-CLJKoYEP.mjs";
|
|
2
2
|
import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
|
|
3
|
-
import { n as createFileDataPlaneHandler, s as parseRangeHeader, t as contentTypeFor } from "../
|
|
3
|
+
import { n as createFileDataPlaneHandler, s as parseRangeHeader, t as contentTypeFor } from "../addon-utils-QuxtOdK1.mjs";
|
|
4
4
|
import { randomUUID } from "node:crypto";
|
|
5
5
|
import { spawn } from "node:child_process";
|
|
6
6
|
import { createReadStream, promises, realpathSync } from "node:fs";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_chunk = require("../chunk-emK7D4bc.js");
|
|
3
|
-
const require_worker_protocol = require("../worker-protocol-
|
|
3
|
+
const require_worker_protocol = require("../worker-protocol-CNi5srgV.js");
|
|
4
4
|
let node_url = require("node:url");
|
|
5
5
|
let node_fs = require("node:fs");
|
|
6
6
|
node_fs = require_chunk.__toESM(node_fs);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as formatNativeLeaseKnobs, n as isWorkerRequest, o as resolveNativeLeaseKnobs, r as logLevelForLine } from "../worker-protocol-
|
|
1
|
+
import { i as formatNativeLeaseKnobs, n as isWorkerRequest, o as resolveNativeLeaseKnobs, r as logLevelForLine } from "../worker-protocol-BxPNiino.mjs";
|
|
2
2
|
import { pathToFileURL } from "node:url";
|
|
3
3
|
import * as fs from "node:fs";
|
|
4
4
|
import * as path$1 from "node:path";
|
|
@@ -3,9 +3,9 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../chunk-emK7D4bc.js");
|
|
6
|
-
const require_dist = require("../dist-
|
|
6
|
+
const require_dist = require("../dist-J2DeRZAN.js");
|
|
7
7
|
const require_remote_restream = require("../remote-restream-CO36Sr30.js");
|
|
8
|
-
const
|
|
8
|
+
const require_addon_utils = require("../addon-utils-DveoBR6G.js");
|
|
9
9
|
let node_crypto = require("node:crypto");
|
|
10
10
|
node_crypto = require_chunk.__toESM(node_crypto, 1);
|
|
11
11
|
let node_child_process = require("node:child_process");
|
|
@@ -37,7 +37,7 @@ let node_events = require("node:events");
|
|
|
37
37
|
* of the "live stream takes ~10s to start" cold-start cost (worse on 4G). */
|
|
38
38
|
var IMMUTABLE_CACHE = "public, max-age=31536000, immutable";
|
|
39
39
|
function createEmbedSpaHandler(root) {
|
|
40
|
-
const fileHandler =
|
|
40
|
+
const fileHandler = require_addon_utils.createFileDataPlaneHandler({
|
|
41
41
|
getRoots: () => [root],
|
|
42
42
|
cacheControl: (rel) => rel.startsWith("assets/") ? IMMUTABLE_CACHE : void 0
|
|
43
43
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { r as __toESM, t as __commonJSMin } from "../chunk-DnnnRqeS.mjs";
|
|
2
|
-
import { $ as errMsg, At as EventCategory, Dt as record, E as createHwAccelCache, Et as object, N as egressTranscodeSharingKey, Ot as string, P as egressTransportFromRequest, Q as webrtcSessionCapability, S as addonWidgetsSourceCapability, St as discriminatedUnion, T as cameraStreamsCapability, Tt as number, X as streamBrokerCapability, _ as RATE_CONTROL_RELAXED, at as BaseAddon, b as RingBuffer, bt as array, ct as DeviceType, d as EncodeProfileSchema, dt as isEvent, et as AUDIO_PRESETS, ft as makeProfileBrokerId, gt as parseProfileBrokerId, it as isSoftwareDecode, kt as union, lt as createEvent, mt as nodePin, nt as buildFfmpegArgs$1, ot as CAM_PROFILE_ORDER, pt as makeSourceBrokerId, q as resolveEgressDecodeHwAccel, rt as invocationFromEncodeProfile, st as DeviceFeature, tt as Fmp4BoxSplitter, v as RATE_CONTROL_TIGHT, wt as literal, xt as boolean, yt as _enum, z as maskUrlCredentials } from "../dist-
|
|
2
|
+
import { $ as errMsg, At as EventCategory, Dt as record, E as createHwAccelCache, Et as object, N as egressTranscodeSharingKey, Ot as string, P as egressTransportFromRequest, Q as webrtcSessionCapability, S as addonWidgetsSourceCapability, St as discriminatedUnion, T as cameraStreamsCapability, Tt as number, X as streamBrokerCapability, _ as RATE_CONTROL_RELAXED, at as BaseAddon, b as RingBuffer, bt as array, ct as DeviceType, d as EncodeProfileSchema, dt as isEvent, et as AUDIO_PRESETS, ft as makeProfileBrokerId, gt as parseProfileBrokerId, it as isSoftwareDecode, kt as union, lt as createEvent, mt as nodePin, nt as buildFfmpegArgs$1, ot as CAM_PROFILE_ORDER, pt as makeSourceBrokerId, q as resolveEgressDecodeHwAccel, rt as invocationFromEncodeProfile, st as DeviceFeature, tt as Fmp4BoxSplitter, v as RATE_CONTROL_TIGHT, wt as literal, xt as boolean, yt as _enum, z as maskUrlCredentials } from "../dist-CLJKoYEP.mjs";
|
|
3
3
|
import { n as profileForStreamId } from "../remote-restream-BeHi78PZ.mjs";
|
|
4
|
-
import { n as createFileDataPlaneHandler } from "../
|
|
4
|
+
import { n as createFileDataPlaneHandler } from "../addon-utils-QuxtOdK1.mjs";
|
|
5
5
|
import { createRequire } from "node:module";
|
|
6
6
|
import * as crypto$1 from "node:crypto";
|
|
7
7
|
import crypto, { createHash, randomBytes, randomUUID } from "node:crypto";
|
|
@@ -30,7 +30,7 @@ async function d(e) {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
async function f() {
|
|
33
|
-
return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-
|
|
33
|
+
return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-DZikMEgD.mjs")).catch((e) => {
|
|
34
34
|
throw l = void 0, e;
|
|
35
35
|
}), l;
|
|
36
36
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as DEFAULT_NATIVE_LEASE_SETTINGS, h as NativeLeaseSettingsSchema, m as NativeLeaseAdmissionSchema } from "./dist-
|
|
1
|
+
import { c as DEFAULT_NATIVE_LEASE_SETTINGS, h as NativeLeaseSettingsSchema, m as NativeLeaseAdmissionSchema } from "./dist-CLJKoYEP.mjs";
|
|
2
2
|
//#region src/session-decode/native-lease-config.ts
|
|
3
3
|
/**
|
|
4
4
|
* Resolution of the native-frame lease knobs for one decode worker.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{d as e,f as t,g as n,h as r,m as i,p as a}from"./index-
|
|
1
|
+
import{d as e,f as t,g as n,h as r,m as i,p as a}from"./index-CYO4OY8_.js";var o=n(t()),s=n(e(),1),c=Math.PI/180;function l(){return typeof window<`u`&&({}.toString.call(window)===`[object Window]`||{}.toString.call(window)===`[object global]`)}var u=typeof global<`u`?global:typeof window<`u`?window:typeof WorkerGlobalScope<`u`?self:{},d={_global:u,version:`10.3.0`,isBrowser:l(),isUnminified:/param/.test(function(e){}.toString()),dblClickWindow:400,getAngle(e){return d.angleDeg?e*c:e},enableTrace:!1,pointerEventsEnabled:!0,autoDrawEnabled:!0,hitOnDragEnabled:!1,capturePointerEventsEnabled:!1,_mouseListenClick:!1,_touchListenClick:!1,_pointerListenClick:!1,_mouseInDblClickWindow:!1,_touchInDblClickWindow:!1,_pointerInDblClickWindow:!1,_mouseDblClickPointerId:null,_touchDblClickPointerId:null,_pointerDblClickPointerId:null,_renderBackend:`web`,legacyTextRendering:!1,pixelRatio:typeof window<`u`&&window.devicePixelRatio||1,dragDistance:3,angleDeg:!0,showWarnings:!0,dragButtons:[0,1],isDragging(){return d.DD.isDragging},isTransforming(){return d.Transformer?.isTransforming()??!1},isDragReady(){return!!d.DD.node},releaseCanvasOnDestroy:!0,document:u.document,_injectGlobal(e){u.Konva!==void 0&&console.error(`Several Konva instances detected. It is not recommended to use multiple Konva instances in the same environment.`),u.Konva=e}},f=e=>{d[e.prototype.getClassName()]=e};d._injectGlobal(d);var p=`Konva.js unsupported environment.
|
|
2
2
|
|
|
3
3
|
Looks like you are trying to use Konva.js in Node.js environment. because "document" object is undefined.
|
|
4
4
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,c as t,d as n,f as r,g as i,l as a,o,r as s,s as c,u as l}from"./index-
|
|
1
|
+
import{a as e,c as t,d as n,f as r,g as i,l as a,o,r as s,s as c,u as l}from"./index-CYO4OY8_.js";import{MaskShapeCanvas as u}from"./MaskShapeCanvas-DI4BY7W2-m7YpaY98.js";var d=i(r(),1),f=i(n(),1),p=o(`grid-2x2`,[[`path`,{d:`M12 3v18`,key:`108xh3`}],[`path`,{d:`M3 12h18`,key:`1i2n21`}],[`rect`,{x:`3`,y:`3`,width:`18`,height:`18`,rx:`2`,key:`h1oib`}]]),m=110,h=`motion-zones`,g=0,_=[1,2,3],v=1,y=`rounded-md border border-border bg-surface px-2 py-1 text-[11px] font-medium text-foreground-subtle hover:bg-surface-hover disabled:opacity-40 transition-colors`,b=`rounded-md border border-primary/50 bg-primary/15 px-2.5 py-1 text-[11px] font-medium text-primary hover:bg-primary/25 disabled:opacity-40 transition-colors`;function x(e,t,n){let r=t*n,i=Array.from({length:r});for(let t=0;t<r;t+=1)i[t]=e[t]===!0;return i}function S(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1)if(e[n]!==t[n])return!1;return!0}function C(e,t){return Math.ceil(e/t)}function w(e,t,n){return Math.min(n-1,Math.floor((e+.5)/t*n))}function T(e,t,n,r){let i=C(t,r),a=C(n,r),o=Array.from({length:i*a},()=>!1);for(let r=0;r<n;r+=1){let s=w(r,n,a);for(let n=0;n<t;n+=1)e[r*t+n]===!0&&(o[s*i+w(n,t,i)]=!0)}return o}function E(e,t,n,r){let i=C(t,r),a=C(n,r),o=Array.from({length:t*n},()=>!1);for(let r=0;r<n;r+=1){let s=w(r,n,a);for(let n=0;n<t;n+=1)o[r*t+n]=e[s*i+w(n,t,i)]===!0}return o}function D({deviceId:n}){let r=t(l().trpcClient,n),[i,o]=(0,d.useState)(null),[w,D]=(0,d.useState)(!1),[O,k]=(0,d.useState)(null),[A,j]=(0,d.useState)(null),[M,N]=(0,d.useState)(v),[P,F]=(0,d.useState)(!1),[I,L]=(0,d.useState)(!1),R=(0,d.useRef)(!1);(0,d.useEffect)(()=>{if(!r)return;let e=!1;return R.current=!1,o(null),D(!1),k(null),j(null),N(v),L(!1),(async()=>{try{let t=await r.motionZones?.getOptions({});if(e)return;if(!t)throw Error(`device proxy not ready`);if(o(t),R.current)return;let n=await r.motionZones?.getStatus({});if(e)return;if(!n)throw Error(`device proxy not ready`);R.current=!0;let i=n.regions.find(e=>e.shape.kind===`grid`),a=x(i?i.shape.cells:[],t.grid.width,t.grid.height);j(a),k(T(a,t.grid.width,t.grid.height,v))}catch(t){if(e)return;c(t)?D(!0):console.error(`Motion Zones load failed`,t)}})(),()=>{e=!0}},[r]);let z=i?i.grid.width:0,B=i?i.grid.height:0,V=C(z,M),H=C(B,M),U=(0,d.useMemo)(()=>O&&i?E(O,z,B,M):null,[O,i,z,B,M]),W=(0,d.useMemo)(()=>U!==null&&A!==null&&!S(U,A),[U,A]),G=(0,d.useMemo)(()=>U?U.reduce((e,t)=>t?e+1:e,0):0,[U]),K=z*B,q=V*H,J=(0,d.useCallback)(e=>{q>0&&k(Array.from({length:q},()=>e))},[q]),Y=(0,d.useCallback)(()=>{k(e=>e&&e.map(e=>!e))},[]),X=(0,d.useCallback)(()=>{A&&i&&k(T(A,z,B,M))},[A,i,z,B,M]),Z=(0,d.useCallback)(e=>{e===M||!i||k(t=>{if(!t)return N(e),t;let n=T(E(t,z,B,M),z,B,e);return N(e),n})},[M,i,z,B]),Q=(0,d.useMemo)(()=>i&&O?[{id:g,shape:{kind:`grid`,gridWidth:V,gridHeight:H,cells:[...O]}}]:[],[i,O,V,H]),$=(0,d.useCallback)((e,t)=>{t.kind===`grid`&&k(t.cells)},[]),ee=(0,d.useCallback)(async()=>{if(!(!r||!O||!i)){F(!0);try{let e=E(O,i.grid.width,i.grid.height,M),t={kind:`grid`,gridWidth:i.grid.width,gridHeight:i.grid.height,cells:e};await r.motionZones?.setZone({patch:{regions:[{id:g,enabled:!0,shape:t}]}});let n=await r.motionZones?.getStatus({});if(n){let e=n.regions.find(e=>e.shape.kind===`grid`),t=x(e?e.shape.cells:[],i.grid.width,i.grid.height);j(t),k(T(t,i.grid.width,i.grid.height,M))}}catch(e){console.error(`Motion Zones save failed`,e)}finally{F(!1)}}},[r,O,i,M]);a((0,d.useMemo)(()=>I&&!w&&i&&O?{id:h,order:m,node:(0,f.jsx)(u,{transparent:!0,items:Q,supportedShapes:[`grid`],grid:{width:V,height:H},selectedId:g,onSelect:()=>{},onShapeChange:$,onDrawComplete:()=>{},drawingKind:null})}:null,[I,w,i,O,Q,$,V,H]));let te=!w&&i!==null&&O!==null;return r?(0,f.jsx)(e,{title:`Motion Zones`,icon:(0,f.jsx)(p,{className:`h-3.5 w-3.5 text-foreground-subtle`}),children:(0,f.jsx)(`div`,{className:`flex flex-col gap-3`,children:w?(0,f.jsx)(`p`,{className:`${s} leading-relaxed`,children:`This camera doesn't expose an on-board motion zones grid.`}):te?(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(`p`,{className:`${s} leading-relaxed`,children:[`Toggle `,(0,f.jsx)(`strong`,{className:`text-foreground`,children:`Edit grid`}),` to paint the region directly on the live frame, then `,(0,f.jsx)(`strong`,{className:`text-foreground`,children:`Save`}),` to push the mask to the camera. Pick a bigger`,` `,(0,f.jsx)(`strong`,{className:`text-foreground`,children:`Cell size`}),` for quicker, broad-stroke painting — it's resampled to the camera's native `,i.grid.width,`×`,i.grid.height,` grid on save (×1 is the finest).`]}),(0,f.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,f.jsx)(`button`,{type:`button`,onClick:()=>L(e=>!e),disabled:P,"aria-pressed":I,className:I?b:y,children:I?`Done editing`:`Edit grid`}),(0,f.jsx)(`button`,{type:`button`,onClick:()=>J(!0),disabled:P,className:y,children:`All on`}),(0,f.jsx)(`button`,{type:`button`,onClick:()=>J(!1),disabled:P,className:y,children:`All off`}),(0,f.jsx)(`button`,{type:`button`,onClick:Y,disabled:P,className:y,children:`Invert`}),(0,f.jsxs)(`div`,{className:`flex items-center gap-1 ml-1`,role:`group`,"aria-label":`Cell size`,children:[(0,f.jsx)(`span`,{className:`${s} mr-0.5`,children:`Cell size`}),_.map(e=>(0,f.jsxs)(`button`,{type:`button`,onClick:()=>Z(e),disabled:P,"aria-pressed":M===e,title:e===1?`Camera grid ${z}×${B} (finest)`:`${C(z,e)}×${C(B,e)} painting grid · cells ×${e} bigger`,className:M===e?b:y,children:[`×`,e]},e))]}),(0,f.jsxs)(`span`,{className:`${s} ml-1 tabular-nums`,children:[G,` / `,K,` cells · `,i.grid.width,`×`,i.grid.height,M===1?``:` · paint ${V}×${H}`]}),(0,f.jsx)(`span`,{className:`flex-1`}),(0,f.jsx)(`button`,{type:`button`,onClick:X,disabled:P||!W,className:`rounded-md border border-border bg-surface px-2 py-1 text-[11px] text-foreground-subtle hover:bg-surface-hover disabled:opacity-40 transition-colors`,children:`Revert`}),(0,f.jsx)(`button`,{type:`button`,onClick:()=>void ee(),disabled:P||!W,className:b,children:P?`Saving…`:`Save`})]})]}):(0,f.jsx)(`p`,{className:`${s} leading-relaxed`,children:`Loading the camera's grid…`})})}):null}export{D as MotionZonesSettings};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,c as t,d as n,f as r,g as i,i as a,l as o,n as s,o as c,r as l,s as u,t as d,u as ee}from"./index-
|
|
1
|
+
import{a as e,c as t,d as n,f as r,g as i,i as a,l as o,n as s,o as c,r as l,s as u,t as d,u as ee}from"./index-CYO4OY8_.js";import{MaskShapeCanvas as te}from"./MaskShapeCanvas-DI4BY7W2-m7YpaY98.js";var f=i(r(),1),p=i(n(),1),m=c(`hexagon`,[[`path`,{d:`M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z`,key:`yt0hxn`}]]),h=120,g=`privacy-mask`,_=`rounded-md border border-border bg-surface px-2 py-1 text-[11px] font-medium text-foreground-subtle hover:bg-surface-hover disabled:opacity-40 transition-colors`,v=`rounded-md border border-primary/50 bg-primary/15 px-2.5 py-1 text-[11px] font-medium text-primary hover:bg-primary/25 disabled:opacity-40 transition-colors`;function y(e){return e.kind===`rect`||e.kind===`polygon`?e:null}function b(e){let t=new Set(e.map(e=>e.id)),n=0;for(;t.has(n);)n+=1;return n}function x(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1)if(JSON.stringify(e[n])!==JSON.stringify(t[n]))return!1;return!0}function S({deviceId:n}){let r=t(ee().trpcClient,n),[i,c]=(0,f.useState)(null),[S,C]=(0,f.useState)(!1),[w,T]=(0,f.useState)(null),[E,D]=(0,f.useState)(null),[O,k]=(0,f.useState)(!1),[A,j]=(0,f.useState)(!1),[M,N]=(0,f.useState)(null),[P,F]=(0,f.useState)(null),I=(0,f.useRef)(!1);(0,f.useEffect)(()=>{if(!r)return;let e=!1;return I.current=!1,c(null),C(!1),T(null),D(null),j(!1),N(null),F(null),(async()=>{try{let t=await r.privacyMask?.getOptions({});if(e)return;if(!t)throw Error(`device proxy not ready`);if(c(t),I.current)return;let n=await r.privacyMask?.getStatus({});if(e)return;if(!n)throw Error(`device proxy not ready`);I.current=!0;let i={enabled:n.enabled,regions:n.regions};D(i),T(i)}catch(t){if(e)return;u(t)?C(!0):console.error(`Privacy Mask load failed`,t)}})(),()=>{e=!0}},[r]);let L=(0,f.useMemo)(()=>w!==null&&E!==null&&(w.enabled!==E.enabled||!x(w.regions,E.regions)),[w,E]),R=w?w.regions.length:0,z=i?i.maxRegions:0,B=(0,f.useRef)(0);(0,f.useEffect)(()=>{B.current=z},[z]);let V=z>0&&R>=z,H=(0,f.useCallback)(()=>{T(e=>e&&{...e,enabled:!e.enabled})},[]),U=(0,f.useCallback)(e=>{N(typeof e==`number`?e:null)},[]),W=(0,f.useMemo)(()=>w?w.regions.map(e=>({id:e.id,shape:e.shape,enabled:e.enabled,label:`Zone ${String(e.id)}`})):[],[w]),G=(0,f.useCallback)((e,t)=>{let n=y(t);n&&T(t=>t&&{...t,regions:t.regions.map(t=>t.id===e?{...t,shape:n}:t)})},[]),K=(0,f.useCallback)(e=>{let t=y(e);t&&(F(null),T(e=>{if(!e)return e;let n=B.current;if(n>0&&e.regions.length>=n)return e;let r=b(e.regions),i={id:r,enabled:!0,shape:t};return N(r),{...e,regions:[...e.regions,i]}}))},[]),q=(0,f.useCallback)(e=>{j(!0),N(null),F(e)},[]),J=(0,f.useCallback)(e=>{j(!0),F(null),N(e)},[]),Y=(0,f.useCallback)(e=>{N(t=>t===e?null:t),T(t=>t&&{...t,regions:t.regions.filter(t=>t.id!==e)})},[]),X=(0,f.useCallback)(()=>{F(null),N(null),E&&T({enabled:E.enabled,regions:E.regions})},[E]),Z=(0,f.useCallback)(async()=>{if(!(!r||!w)){k(!0);try{await r.privacyMask?.setMask({patch:{enabled:w.enabled,regions:[...w.regions]}});let e=await r.privacyMask?.getStatus({});if(e){let t={enabled:e.enabled,regions:e.regions};D(t),T(t)}}catch(e){console.error(`Privacy Mask save failed`,e)}finally{k(!1)}}},[r,w]),ne=(0,f.useCallback)(()=>{j(e=>(e&&(F(null),N(null)),!e))},[]),Q=i?.supportedShapes??[];o((0,f.useMemo)(()=>A&&!S&&i&&w?{id:g,order:h,node:(0,p.jsx)(te,{transparent:!0,items:W,supportedShapes:Q,polygonVertices:i.polygonVertices,selectedId:M,onSelect:U,onShapeChange:G,onDrawComplete:K,drawingKind:P})}:null,[A,S,i,w,W,Q,M,U,G,K,P]));let re=i?.supportedShapes.includes(`rect`)??!1,ie=i?.supportedShapes.includes(`polygon`)??!1,$=i!==null&&(i.maxRegions<=0||i.supportedShapes.length===0),ae=!S&&!$&&i!==null&&w!==null;return r?(0,p.jsx)(e,{title:`Privacy Mask`,icon:(0,p.jsx)(d,{className:`h-3.5 w-3.5 text-foreground-subtle`}),children:(0,p.jsx)(`div`,{className:`flex flex-col gap-3`,children:S||$?(0,p.jsx)(`p`,{className:`${l} leading-relaxed`,children:`This camera doesn't support an on-board privacy mask.`}):ae?(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(`p`,{className:`${l} leading-relaxed`,children:[`Toggle `,(0,p.jsx)(`strong`,{className:`text-foreground`,children:`Edit mask`}),` to draw blanked-out zones on the live frame, then `,(0,p.jsx)(`strong`,{className:`text-foreground`,children:`Save`}),` to push them to the camera. Drag a rectangle to move, its corner to resize; drag polygon vertices, click an edge midpoint to add one, or right-click a vertex to remove it.`]}),(0,p.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,p.jsx)(`button`,{type:`button`,onClick:ne,disabled:O,"aria-pressed":A,className:A?v:_,children:A?`Done editing`:`Edit mask`}),(0,p.jsx)(`button`,{type:`button`,onClick:H,disabled:O,"aria-pressed":w.enabled,className:w.enabled?v:_,children:w.enabled?`Mask on`:`Mask off`}),re&&(0,p.jsx)(`button`,{type:`button`,onClick:()=>q(`rect`),disabled:O||V,"aria-pressed":P===`rect`,className:P===`rect`?v:_,title:V?`Maximum zones reached`:`Add a rectangle zone`,children:`+ Rect`}),ie&&(0,p.jsx)(`button`,{type:`button`,onClick:()=>q(`polygon`),disabled:O||V,"aria-pressed":P===`polygon`,className:P===`polygon`?v:_,title:V?`Maximum zones reached`:`Add a polygon zone`,children:`+ Polygon`}),(0,p.jsxs)(`span`,{className:`${l} ml-1 tabular-nums`,children:[R,` / `,z,` zones`]}),(0,p.jsx)(`span`,{className:`flex-1`}),(0,p.jsx)(`button`,{type:`button`,onClick:X,disabled:O||!L,className:`rounded-md border border-border bg-surface px-2 py-1 text-[11px] text-foreground-subtle hover:bg-surface-hover disabled:opacity-40 transition-colors`,children:`Revert`}),(0,p.jsx)(`button`,{type:`button`,onClick:()=>void Z(),disabled:O||!L,className:v,children:O?`Saving…`:`Save`})]}),R>0?(0,p.jsx)(`div`,{className:`flex flex-col gap-1`,children:w.regions.map(e=>{let t=M===e.id,n=e.shape.kind===`polygon`?m:s;return(0,p.jsxs)(`div`,{className:`flex items-center gap-2 rounded-md border px-2 py-1 transition-colors ${t?`border-primary/50 bg-primary/10`:`border-border bg-surface`}`,children:[(0,p.jsxs)(`button`,{type:`button`,onClick:()=>J(e.id),disabled:O,className:`flex flex-1 items-center gap-2 text-left text-[11px] font-medium text-foreground-subtle hover:text-foreground disabled:opacity-40 transition-colors`,children:[(0,p.jsx)(n,{className:`h-3.5 w-3.5 shrink-0`}),(0,p.jsxs)(`span`,{children:[`Zone `,e.id]}),(0,p.jsx)(`span`,{className:`text-foreground-faint capitalize`,children:e.shape.kind})]}),(0,p.jsx)(`button`,{type:`button`,onClick:()=>Y(e.id),disabled:O,"aria-label":`Delete zone ${String(e.id)}`,title:`Delete zone`,className:`inline-flex h-6 w-6 items-center justify-center rounded border border-border bg-surface text-foreground-subtle hover:border-red-400/40 hover:bg-red-500/10 hover:text-red-400 disabled:opacity-40 transition-colors`,children:(0,p.jsx)(a,{className:`h-3.5 w-3.5`})})]},e.id)})}):null]}):(0,p.jsx)(`p`,{className:`${l} leading-relaxed`,children:`Loading the camera's privacy mask…`})})}):null}export{S as PrivacyMaskSettings};
|