@camstack/addon-pipeline 1.2.5 → 1.2.7
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/audio-analyzer/index.js +1 -1
- package/dist/audio-analyzer/index.mjs +1 -1
- package/dist/detection-pipeline/index.js +499 -30
- package/dist/detection-pipeline/index.mjs +493 -24
- package/dist/{dist-ZB-B8UrH.mjs → dist-BwyGTnMu.mjs} +306 -3
- package/dist/{dist-CtQsET1Q.js → dist-CAT3VF7A.js} +306 -3
- package/dist/motion-wasm/index.js +1 -1
- package/dist/motion-wasm/index.mjs +1 -1
- package/dist/pipeline-runner/index.js +30 -15
- package/dist/pipeline-runner/index.mjs +30 -15
- package/dist/recorder/index.js +1 -1
- package/dist/recorder/index.mjs +1 -1
- package/dist/{step-definitions-DrRnEQPM.js → step-definitions-BPEExRug.js} +70 -2
- package/dist/{step-definitions-BKJI5CXI.mjs → step-definitions-DN1obXS7.mjs} +70 -2
- package/dist/stream-broker/_stub.js +1 -1
- package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-DPvS4Ex7.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-BtN6sZcL.mjs} +1 -1
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D34ivtL2.mjs +26 -0
- package/dist/stream-broker/{hostInit-CG0IeE_e.mjs → hostInit-BIZvt2bk.mjs} +1 -1
- package/dist/stream-broker/index.js +35 -6
- package/dist/stream-broker/index.mjs +35 -6
- package/dist/stream-broker/remoteEntry.js +1 -1
- package/embed-dist/assets/{MaskShapeCanvas-DI4BY7W2-C-rkQ2rg.js → MaskShapeCanvas-DI4BY7W2-3uL2OmvC.js} +1 -1
- package/embed-dist/assets/{MotionZonesSettings-NcxxQN8r-BtbCLveu.js → MotionZonesSettings-NcxxQN8r-JkIkJTeI.js} +1 -1
- package/embed-dist/assets/{PrivacyMaskSettings-APgPLF7p-C9CEgSlA.js → PrivacyMaskSettings-APgPLF7p-AKGABxQk.js} +1 -1
- package/embed-dist/assets/{index-CgJ1frQY.js → index-DfcKIHhA.js} +14 -14
- package/embed-dist/index.html +1 -1
- package/package.json +1 -1
- package/python/postprocessors/ctc.py +228 -4
- package/python/postprocessors/test_ctc.py +312 -0
- package/python/postprocessors/testdata/ctc_degenerate_lowres_logits.npy.gz.b64 +1 -0
- package/python/postprocessors/testdata/ctc_dwro309_logits.npy.gz.b64 +1 -0
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CQC_f4Yv.mjs +0 -26
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_dist = require("./dist-
|
|
1
|
+
const require_dist = require("./dist-CAT3VF7A.js");
|
|
2
2
|
//#region src/detection-pipeline/registry/model-catalogs.ts
|
|
3
3
|
var HF_REPO = "camstack/camstack-models";
|
|
4
4
|
var HF_SCRYPTED = "scrypted/plugin-models";
|
|
@@ -1458,6 +1458,71 @@ var ClassifierWithMinConfidence = class extends PipelineStepBase {
|
|
|
1458
1458
|
}];
|
|
1459
1459
|
}
|
|
1460
1460
|
};
|
|
1461
|
+
var PLATE_OCR_DEFAULT_REGION = "DE";
|
|
1462
|
+
var PLATE_OCR_DEFAULT_MIN_TEXT_LENGTH = 3;
|
|
1463
|
+
var PLATE_OCR_DEFAULT_MIN_TEXT_CONFIDENCE = 0;
|
|
1464
|
+
var PLATE_OCR_REGION_OPTIONS = [{
|
|
1465
|
+
value: "off",
|
|
1466
|
+
label: "Off (no format correction)"
|
|
1467
|
+
}, {
|
|
1468
|
+
value: "DE",
|
|
1469
|
+
label: "Germany"
|
|
1470
|
+
}];
|
|
1471
|
+
/**
|
|
1472
|
+
* Plate OCR step — exposes a `rectify` toggle (default ON) that deskews the
|
|
1473
|
+
* plate crop (rotation rectification) before the CTC recognizer reads it.
|
|
1474
|
+
* Oblique cameras (steeply angled plates) skew the text baseline and collapse
|
|
1475
|
+
* CTC beyond ~10-15°; a frontal camera loses nothing at 0° because the executor
|
|
1476
|
+
* skips the warp when the estimated angle is ~0. Per-camera configurable.
|
|
1477
|
+
*
|
|
1478
|
+
* Also exposes the format-aware rescoring controls (`plateRegion` grammar +
|
|
1479
|
+
* plausibility-gate thresholds) forwarded to the Python CTC postprocessor.
|
|
1480
|
+
*/
|
|
1481
|
+
var PlateOcrStep = class extends PipelineStepBase {
|
|
1482
|
+
getConfigSchema() {
|
|
1483
|
+
return [
|
|
1484
|
+
{
|
|
1485
|
+
type: "boolean",
|
|
1486
|
+
key: "rectify",
|
|
1487
|
+
label: "Deskew Plate Crop",
|
|
1488
|
+
description: "Rotate the plate crop to level the text baseline before OCR. Recommended for oblique/angled cameras; a frontal camera is unaffected (no rotation applied at ~0°).",
|
|
1489
|
+
default: true,
|
|
1490
|
+
style: "switch"
|
|
1491
|
+
},
|
|
1492
|
+
{
|
|
1493
|
+
type: "select",
|
|
1494
|
+
key: "plateRegion",
|
|
1495
|
+
label: "Plate Format",
|
|
1496
|
+
description: "Validate each read against a country plate grammar and repair OCR confusables (0↔O, 1↔I, 8↔B, …) to the highest-scoring conforming read. Never drops a plausible read — only fixes or annotates it. \"Off\" disables correction.",
|
|
1497
|
+
options: PLATE_OCR_REGION_OPTIONS,
|
|
1498
|
+
default: PLATE_OCR_DEFAULT_REGION,
|
|
1499
|
+
immediate: true
|
|
1500
|
+
},
|
|
1501
|
+
{
|
|
1502
|
+
type: "slider",
|
|
1503
|
+
key: "minTextLength",
|
|
1504
|
+
label: "Min Plate Length",
|
|
1505
|
+
description: "Suppress reads shorter than this many characters as low-resolution noise (never stored as a plate).",
|
|
1506
|
+
min: 1,
|
|
1507
|
+
max: 8,
|
|
1508
|
+
step: 1,
|
|
1509
|
+
default: PLATE_OCR_DEFAULT_MIN_TEXT_LENGTH,
|
|
1510
|
+
showValue: true
|
|
1511
|
+
},
|
|
1512
|
+
{
|
|
1513
|
+
type: "slider",
|
|
1514
|
+
key: "minTextConfidence",
|
|
1515
|
+
label: "Min OCR Confidence",
|
|
1516
|
+
description: "Suppress reads whose mean character confidence is below this floor. 0 disables the confidence gate (length is the primary discriminator).",
|
|
1517
|
+
min: 0,
|
|
1518
|
+
max: 1,
|
|
1519
|
+
step: .05,
|
|
1520
|
+
default: PLATE_OCR_DEFAULT_MIN_TEXT_CONFIDENCE,
|
|
1521
|
+
showValue: true
|
|
1522
|
+
}
|
|
1523
|
+
];
|
|
1524
|
+
}
|
|
1525
|
+
};
|
|
1461
1526
|
var STEP_FACE_DETECTION = new PipelineStepBase({
|
|
1462
1527
|
id: "face-detection",
|
|
1463
1528
|
name: "Face Detection",
|
|
@@ -1531,7 +1596,7 @@ var STEP_PLATE_DETECTION = new PipelineStepBase({
|
|
|
1531
1596
|
maxPerTrack: 5
|
|
1532
1597
|
}
|
|
1533
1598
|
});
|
|
1534
|
-
var STEP_PLATE_OCR = new
|
|
1599
|
+
var STEP_PLATE_OCR = new PlateOcrStep({
|
|
1535
1600
|
id: "plate-ocr",
|
|
1536
1601
|
name: "Plate OCR",
|
|
1537
1602
|
slot: "classifier",
|
|
@@ -1543,6 +1608,9 @@ var STEP_PLATE_OCR = new PipelineStepBase({
|
|
|
1543
1608
|
defaultModelId: "vgg-english-g2",
|
|
1544
1609
|
defaultConfidence: 0,
|
|
1545
1610
|
charset: [...VGG_G2_CHARSET],
|
|
1611
|
+
plateRegion: PLATE_OCR_DEFAULT_REGION,
|
|
1612
|
+
minTextLength: PLATE_OCR_DEFAULT_MIN_TEXT_LENGTH,
|
|
1613
|
+
minTextConfidence: PLATE_OCR_DEFAULT_MIN_TEXT_CONFIDENCE,
|
|
1546
1614
|
cadence: {
|
|
1547
1615
|
trigger: "once",
|
|
1548
1616
|
maxPerTrack: 5
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { E as hfModelUrl, a as COCO_TO_MACRO, i as COCO_80_LABELS, r as AUDIO_MACRO_LABELS } from "./dist-
|
|
1
|
+
import { E as hfModelUrl, a as COCO_TO_MACRO, i as COCO_80_LABELS, r as AUDIO_MACRO_LABELS } from "./dist-BwyGTnMu.mjs";
|
|
2
2
|
//#region src/detection-pipeline/registry/model-catalogs.ts
|
|
3
3
|
var HF_REPO = "camstack/camstack-models";
|
|
4
4
|
var HF_SCRYPTED = "scrypted/plugin-models";
|
|
@@ -1458,6 +1458,71 @@ var ClassifierWithMinConfidence = class extends PipelineStepBase {
|
|
|
1458
1458
|
}];
|
|
1459
1459
|
}
|
|
1460
1460
|
};
|
|
1461
|
+
var PLATE_OCR_DEFAULT_REGION = "DE";
|
|
1462
|
+
var PLATE_OCR_DEFAULT_MIN_TEXT_LENGTH = 3;
|
|
1463
|
+
var PLATE_OCR_DEFAULT_MIN_TEXT_CONFIDENCE = 0;
|
|
1464
|
+
var PLATE_OCR_REGION_OPTIONS = [{
|
|
1465
|
+
value: "off",
|
|
1466
|
+
label: "Off (no format correction)"
|
|
1467
|
+
}, {
|
|
1468
|
+
value: "DE",
|
|
1469
|
+
label: "Germany"
|
|
1470
|
+
}];
|
|
1471
|
+
/**
|
|
1472
|
+
* Plate OCR step — exposes a `rectify` toggle (default ON) that deskews the
|
|
1473
|
+
* plate crop (rotation rectification) before the CTC recognizer reads it.
|
|
1474
|
+
* Oblique cameras (steeply angled plates) skew the text baseline and collapse
|
|
1475
|
+
* CTC beyond ~10-15°; a frontal camera loses nothing at 0° because the executor
|
|
1476
|
+
* skips the warp when the estimated angle is ~0. Per-camera configurable.
|
|
1477
|
+
*
|
|
1478
|
+
* Also exposes the format-aware rescoring controls (`plateRegion` grammar +
|
|
1479
|
+
* plausibility-gate thresholds) forwarded to the Python CTC postprocessor.
|
|
1480
|
+
*/
|
|
1481
|
+
var PlateOcrStep = class extends PipelineStepBase {
|
|
1482
|
+
getConfigSchema() {
|
|
1483
|
+
return [
|
|
1484
|
+
{
|
|
1485
|
+
type: "boolean",
|
|
1486
|
+
key: "rectify",
|
|
1487
|
+
label: "Deskew Plate Crop",
|
|
1488
|
+
description: "Rotate the plate crop to level the text baseline before OCR. Recommended for oblique/angled cameras; a frontal camera is unaffected (no rotation applied at ~0°).",
|
|
1489
|
+
default: true,
|
|
1490
|
+
style: "switch"
|
|
1491
|
+
},
|
|
1492
|
+
{
|
|
1493
|
+
type: "select",
|
|
1494
|
+
key: "plateRegion",
|
|
1495
|
+
label: "Plate Format",
|
|
1496
|
+
description: "Validate each read against a country plate grammar and repair OCR confusables (0↔O, 1↔I, 8↔B, …) to the highest-scoring conforming read. Never drops a plausible read — only fixes or annotates it. \"Off\" disables correction.",
|
|
1497
|
+
options: PLATE_OCR_REGION_OPTIONS,
|
|
1498
|
+
default: PLATE_OCR_DEFAULT_REGION,
|
|
1499
|
+
immediate: true
|
|
1500
|
+
},
|
|
1501
|
+
{
|
|
1502
|
+
type: "slider",
|
|
1503
|
+
key: "minTextLength",
|
|
1504
|
+
label: "Min Plate Length",
|
|
1505
|
+
description: "Suppress reads shorter than this many characters as low-resolution noise (never stored as a plate).",
|
|
1506
|
+
min: 1,
|
|
1507
|
+
max: 8,
|
|
1508
|
+
step: 1,
|
|
1509
|
+
default: PLATE_OCR_DEFAULT_MIN_TEXT_LENGTH,
|
|
1510
|
+
showValue: true
|
|
1511
|
+
},
|
|
1512
|
+
{
|
|
1513
|
+
type: "slider",
|
|
1514
|
+
key: "minTextConfidence",
|
|
1515
|
+
label: "Min OCR Confidence",
|
|
1516
|
+
description: "Suppress reads whose mean character confidence is below this floor. 0 disables the confidence gate (length is the primary discriminator).",
|
|
1517
|
+
min: 0,
|
|
1518
|
+
max: 1,
|
|
1519
|
+
step: .05,
|
|
1520
|
+
default: PLATE_OCR_DEFAULT_MIN_TEXT_CONFIDENCE,
|
|
1521
|
+
showValue: true
|
|
1522
|
+
}
|
|
1523
|
+
];
|
|
1524
|
+
}
|
|
1525
|
+
};
|
|
1461
1526
|
var STEP_FACE_DETECTION = new PipelineStepBase({
|
|
1462
1527
|
id: "face-detection",
|
|
1463
1528
|
name: "Face Detection",
|
|
@@ -1531,7 +1596,7 @@ var STEP_PLATE_DETECTION = new PipelineStepBase({
|
|
|
1531
1596
|
maxPerTrack: 5
|
|
1532
1597
|
}
|
|
1533
1598
|
});
|
|
1534
|
-
var STEP_PLATE_OCR = new
|
|
1599
|
+
var STEP_PLATE_OCR = new PlateOcrStep({
|
|
1535
1600
|
id: "plate-ocr",
|
|
1536
1601
|
name: "Plate OCR",
|
|
1537
1602
|
slot: "classifier",
|
|
@@ -1543,6 +1608,9 @@ var STEP_PLATE_OCR = new PipelineStepBase({
|
|
|
1543
1608
|
defaultModelId: "vgg-english-g2",
|
|
1544
1609
|
defaultConfidence: 0,
|
|
1545
1610
|
charset: [...VGG_G2_CHARSET],
|
|
1611
|
+
plateRegion: PLATE_OCR_DEFAULT_REGION,
|
|
1612
|
+
minTextLength: PLATE_OCR_DEFAULT_MIN_TEXT_LENGTH,
|
|
1613
|
+
minTextConfidence: PLATE_OCR_DEFAULT_MIN_TEXT_CONFIDENCE,
|
|
1546
1614
|
cadence: {
|
|
1547
1615
|
trigger: "once",
|
|
1548
1616
|
maxPerTrack: 5
|
|
@@ -2,7 +2,7 @@ import { a as e, c as t, d as n, i as r, l as i, n as a, o, r as s, s as c, t as
|
|
|
2
2
|
import { a as d, i as f, n as p, o as m, r as h, t as g } from "./_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare__react__loadShare__.js-C9j-2lBe.mjs";
|
|
3
3
|
import { n as _, r as v, t as y } from "./_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-XO0-Pyu6.mjs";
|
|
4
4
|
import { n as b, t as x } from "./_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-BO7TIbJV.mjs";
|
|
5
|
-
import { t as S } from "./_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-
|
|
5
|
+
import { t as S } from "./_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D34ivtL2.mjs";
|
|
6
6
|
//#region ../../node_modules/lucide-react/dist/esm/shared/src/utils.js
|
|
7
7
|
var C = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), w = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), T = (e) => {
|
|
8
8
|
let t = w(e);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//#region \0virtual:mf:__mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js
|
|
2
|
+
var e = "__mf_init__virtual:mf:__mfe_internal__addon_stream_broker_widgets__mf_v__runtimeInit__mf_v__.js__", t = globalThis[e];
|
|
3
|
+
if (!t) {
|
|
4
|
+
let n, r, i = new Promise((e, t) => {
|
|
5
|
+
n = e, r = t;
|
|
6
|
+
});
|
|
7
|
+
t = globalThis[e] = {
|
|
8
|
+
initPromise: i,
|
|
9
|
+
initResolve: n,
|
|
10
|
+
initReject: r
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
var n = t.initPromise, r = "__mf_module_cache__";
|
|
14
|
+
globalThis[r] ||= {
|
|
15
|
+
share: {},
|
|
16
|
+
remote: {}
|
|
17
|
+
}, globalThis[r].share ||= {}, globalThis[r].remote ||= {};
|
|
18
|
+
var i = globalThis[r], a, o = (e) => {
|
|
19
|
+
e.ACCESSORY_LABEL, e.ALL_CAPABILITY_DEFINITIONS, e.APPLE_SA_TO_MACRO, e.AUDIO_BACKEND_CHOICES, e.AUDIO_MACRO_LABELS, e.AccessoriesStatusSchema, e.AccessoryKind, e.AddBrokerInputSchema, e.AddonAutoUpdateSchema, e.AddonListItemSchema, e.AddonPageDeclarationSchema, e.AddonPageInfoSchema, e.AdoptionAdoptInputSchema, e.AdoptionAdoptResultSchema, e.AdoptionFilterSchema, e.AdoptionGetCandidateInputSchema, e.AdoptionListCandidatesInputSchema, e.AdoptionListCandidatesOutputSchema, e.AdoptionReleaseInputSchema, e.AdoptionStatusSchema, e.AgentLoadSummarySchema, e.AirQualitySensorStatusSchema, e.AlarmArmModeSchema, e.AlarmPanelStatusSchema, e.AlarmStateSchema, e.AlertSchema, e.AlertSeveritySchema, e.AlertSourceSchema, e.AlertStatusSchema, e.AmbientLightSensorStatusSchema, e.ApiKeyRecordSchema, e.ApiKeySummarySchema, e.ArchiveEntrySchema, e.ArchiveManifestSchema, e.AttachmentMediaTypeSchema, e.AttachmentSchema, e.AudioAnalysisResultSchema, e.AudioAnalysisSettingsSchema, e.AudioChunkInputSchema, e.AudioClassSummarySchema, e.AudioClassificationLabelSchema, e.AudioClassificationResultSchema, e.AudioCodecInfoSchema, e.AudioDecodeSessionConfigSchema, e.AudioEncodeSchema, e.AudioEncodeSessionConfigSchema, e.AudioEncodedChunkSchema, e.AudioEventSchema, e.AudioLevelSchema, e.AudioMetricsHistoryPointSchema, e.AudioMetricsHistorySchema, e.AudioMetricsSnapshotSchema, e.AudioPcmChunkSchema, e.AuthResultSchema, e.AutoUpdateSettingsSchema, e.AutomationControlStatusSchema, e.AvailableIntegrationTypeSchema, e.BACKEND_TO_FORMAT, e.BATTERY_DEVICE_PROFILE, e.BacklightModeSchema, e.BackupDestinationInfoSchema, e.BackupEntrySchema, e.BaseAddon, e.BaseDevice, e.BaseDeviceProvider, e.BatteryStatusSchema, e.BinaryStatusSchema, e.BoundingBoxSchema, e.BrightnessStatusSchema, e.BrokerAddInputSchema, e.BrokerAudioClientSchema, e.BrokerClientsSchema, e.BrokerConnectionDetailsSchema, e.BrokerConsumerAttributionSchema, e.BrokerConsumerKindSchema, e.BrokerDecodedClientSchema, e.BrokerEncodedClientSchema, e.BrokerGetStateInputSchema, e.BrokerInfoSchema, e.BrokerProviderInfoSchema, e.BrokerPublishInputSchema, e.BrokerRegistryStatusSchema, e.BrokerRtspClientSchema, e.BrokerStatsSchema, e.BrokerStatusEnum, e.BrokerStatusSchema, e.BrokerSubscribeInputSchema, e.BrokerSubscribeResultSchema, e.BrokerTestConnectionResultSchema, e.BrokerUnsubscribeInputSchema, e.CAM_PROFILE_ORDER, e.CAPABILITY_NAMES, e.CAPABILITY_ROUTER_KEYS, e.CAP_NAMES_WITH_STATUS, e.CAP_NODE_PIN_CONTEXT_KEY, e.CAP_PROVIDER_KIND_MAP, e.COCO_80_LABELS, e.COCO_TO_MACRO, e.CamProfileSchema, e.CamStreamDescriptorSchema, e.CamStreamKindSchema, e.CamStreamResolutionSchema, e.CameraAssignmentStatusSchema, e.CameraAudioStatusSchema, e.CameraBrokerProfileSchema, e.CameraBrokerStatusSchema, e.CameraCredentialsSchema, e.CameraCredentialsStatusSchema, e.CameraDecoderShmSchema, e.CameraDecoderStatusSchema, e.CameraDetectionPhaseSchema, e.CameraDetectionProvisioningSchema, e.CameraDetectionProvisioningStateSchema, e.CameraDetectionStatusSchema, e.CameraMetricsSchema, e.CameraMetricsWithDeviceIdSchema, e.CameraMotionStatusSchema, e.CameraRecordingModeSchema, e.CameraRecordingStatusSchema, e.CameraSourceStatusSchema, e.CameraSourceStreamSchema, e.CameraStatusSchema, e.CameraStreamSchema, e.CandidateQueryFilterSchema, e.CapScopeSchema, e.CapabilityBindingsSchema, e.CarbonMonoxideStatusSchema, e.ChargingStatus, e.ClientNetworkStatsSchema, e.ClimateControlStatusSchema, e.ClipPlaybackSchema, e.ClipSchema, e.ClusterAddonNodeDeploymentSchema, e.ClusterAddonStatusEntrySchema, e.CollectionColumnSchema, e.CollectionIndexSchema, e.ColorStatusSchema, e.ConfigEntrySchema, e.ConfigSectionWithValuesSchema, e.ConfigTabDeclarationSchema, e.ConnectivityStatusSchema, e.ConsumableItemSchema, e.ConsumablesStatusSchema, e.ContactStatusSchema, e.ControlKindSchema, e.ControlStatusSchema, e.ConvertArtifactSchema, e.ConvertResultSchema, e.ConvertTargetSchema, e.CoverStateSchema, e.CoverStatusSchema, e.CreateApiKeyInputSchema, e.CreateApiKeyResultSchema, e.CreateIntegrationInputSchema, e.CreateScopedTokenInputSchema, e.CreateScopedTokenResultSchema, e.CreateUserInputSchema, e.CustomActionInputSchema, e.CustomModelDescriptorSchema, e.DATAPLANE_SECRET_HEADER, e.DEFAULT_ADDON_PLACEMENT, e.DEFAULT_AUDIO_ANALYZER_CONFIG, e.DEFAULT_DECODER_HWACCEL_CONFIG, e.DEFAULT_EVENT_COLOR, e.DEFAULT_FEATURES, e.DEFAULT_RETENTION, e.DEFAULT_SCRUB_THUMBNAIL_PRESET, e.DEVICE_BACKEND_TO_FORMAT, e.DEVICE_CAP_NAMES, e.DEVICE_PROFILES, e.DEVICE_SETTINGS_CONTRIBUTION_METHODS, e.DEVICE_STATUS_METHOD, e.DEVICE_TYPE_CONTROL_KIND, e.DEVICE_TYPE_INFO, e.DayNightModeSchema, e.DayNightOptionsSchema, e.DayNightSettingsPatchSchema, e.DayNightStatusSchema, e.DecodedAudioChunkSchema, e.DecodedFrameSchema, e.DecoderSessionConfigSchema, e.DecoderStatsSchema, e.DeleteIntegrationResultSchema, e.DetectionSourceSchema, e.DeviceCodeSeveritySchema, e.DeviceConfig, e.DeviceDiscoveryStatusSchema, e.DeviceExportExposeInputSchema, e.DeviceExportStatusSchema, e.DeviceExportUnexposeInputSchema, e.DeviceFeature, e.DeviceInfoSchema, e.DeviceLinkModeSchema, e.DeviceNetworkStatsSchema, e.DeviceRole, e.DeviceRuntimeState, e.DeviceStatusSchema, e.DeviceType, e.DiscoveredChildDeviceSchema, e.DiscoveredChildStatusSchema, e.DiscoveredDeviceSchema, e.DiscoveredTargetSchema, e.DisposerChain, e.DoorbellPressEventSchema, e.DoorbellStatusSchema, e.EVENTFUL_CAP_NAMES, e.EVENT_KIND_BY_CAP, e.EVENT_PAD_MS, e.EVENT_TAXONOMY, e.EXPRESSION_BUILTINS, e.EXPRESSION_BUILTIN_NAMES, e.EXPRESSION_COMPILE_CACHE_CAPACITY, e.EXPRESSION_IDENTIFIER_RE, e.EXPRESSION_INJECTED_NOW, e.ElementConfigStore, e.EmbeddingInfoSchema, e.EmbeddingResultSchema, e.EncodeProfileSchema, e.EncodedPacketSchema, e.EnrichedWidgetMetadataSchema, e.EnumSensorDateTimeFormatSchema, e.EnumSensorStatusSchema, e.EventCategory, e.EventEmitterStatusSchema, e.EventFireSchema, e.EventItemSchema, e.EventKindCategorySchema, e.EventKindDescriptorSchema, e.EventKindIconSchema, e.EventKindSchema, e.EventSourceType, e.ExportDownloadSchema, e.ExportOptionsSchema, e.ExportRecordSchema, e.ExportSetupFieldSchema, e.ExportSetupSchema, e.ExportSpeedSchema, e.ExportStateSchema, e.ExportTimelapseSchema, e.ExposedDeviceSchema, e.ExposureModeSchema, e.ExpressionEvalError, e.ExpressionParseError, e.FanControlStatusSchema, e.FanDirectionSchema, e.FeatureManifestSchema, e.FeatureProbeStatusSchema, e.FloodStatusSchema, e.FrameHandleFormatSchema, e.FrameHandleSchema, e.FrameInputSchema, e.GasStatusSchema, e.GetStreamWithCodecInputSchema, e.GlobalMetricsSchema, e.HF_BASE_URL, e.HF_REPO, e.HWACCEL_OPTIONS, e.HealthStatusSchema, e.HistoryPointSchema, e.HistoryResolutionEnum, e.HumidifierStatusSchema, e.HumiditySensorStatusSchema, e.HvacModeSchema, e.ImageRotateSchema, e.ImageSettingsOptionsSchema, e.ImageSettingsPatchSchema, e.ImageSettingsStatusSchema, e.ImageStatusSchema, e.IngestOwnerSchema, e.InstalledPackageSchema, e.IntegrationLiteSchema, e.IntegrationWithStateSchema, e.IntercomAbilitySchema, e.IntercomStatusSchema, e.KNOWN_CAP_NAMES, e.KeyEventSchema, e.LabelDefinitionSchema, e.LawnMowerActivitySchema, e.LawnMowerControlStatusSchema, e.LinkedDeviceSchema, e.LlmDefaultSchema, e.LlmDefaultSelectorSchema, e.LlmErrorCodeSchema, e.LlmGenerateBaseInputSchema, e.LlmGenerateErrSchema, e.LlmGenerateOkSchema, e.LlmGenerateResultSchema, e.LlmImageSchema, e.LlmNodeModelSchema, e.LlmProfileKindDescriptorSchema, e.LlmProfileKindSchema, e.LlmProfileSchema, e.LlmRuntimeCompleteInputSchema, e.LlmRuntimeDiskUsageSchema, e.LlmRuntimeNodeSchema, e.LlmRuntimeStatusSchema, e.LlmUsageRollupSchema, e.LlmUsageSchema, e.LocateSegmentResultSchema, e.LocationStatSchema, e.LockControlStatusSchema, e.LockStateSchema, e.LogEntrySchema, e.LogLevelSchema, e.LogStreamEntrySchema, e.LoginMethodContributionSchema, e.LoginStageEnum, e.MACRO_LABELS, e.MAX_EXPRESSION_AST_NODES, e.MAX_EXPRESSION_BINDINGS, e.MAX_EXPRESSION_CALL_ARGS, e.MAX_EXPRESSION_EVAL_STEPS, e.MAX_EXPRESSION_SOURCE_LENGTH, e.METHOD_ACCESS_MAP, e.MODEL_FORMATS, e.MOTION_TRIGGER_FEATURE, e.ManagedModelCatalogEntrySchema, e.ManagedModelRefSchema, e.ManagedRuntimeConfigSchema, e.MaskGridDimsSchema, e.MaskGridShapeSchema, e.MaskLineShapeSchema, e.MaskPointSchema, e.MaskPolygonShapeSchema, e.MaskPolygonVerticesSchema, e.MaskRectShapeSchema, e.MaskShapeKindSchema, e.MaskShapeSchema, e.MediaFileSchema, e.MediaPlayerRepeatSchema, e.MediaPlayerStateSchema, e.MediaPlayerStatusSchema, e.MeshPeerSchema, e.MeshStatusSchema, e.MethodAccessSchema, e.ModelCatalogEntrySchema, e.ModelConvertInputSchema, e.ModelConvertMetadataSchema, e.ModelDistributeInputSchema, e.ModelDistributeResultSchema, e.ModelExtraFileSchema, e.ModelFormatEntrySchema, e.ModelFormatsSchema, e.ModelSubstitutionSchema, e.ModelVariantGroupSchema, e.MotionAnalysisResultSchema, e.MotionEventSchema, e.MotionOnMotionChangedDataSchema, e.MotionRegionSchema, e.MotionSourceEnum, e.MotionSourcesSchema, e.MotionStatusSchema, e.MotionTriggerRuntimeStateSchema, e.MotionTriggerStatusSchema, e.MotionZoneOptionsSchema, e.MotionZonePatchSchema, e.MotionZoneRegionSchema, e.MotionZoneStatusSchema, e.MqttBrokerStatusSchema, e.NC_CONDITION_CATALOG, e.NC_MAX_PER_TRACK_IMMEDIATE, e.NativeCropBboxSchema, e.NativeCropRefSchema, e.NativeCropResultSchema, e.NativeDetectionSchema, e.NativeObjectClassEnum, e.NativeObjectDetectionRuntimeStateSchema, e.NativeObjectDetectionStatusSchema, e.NcConditionDescriptorSchema, e.NcConditionsSchema, e.NcDeliverySchema, e.NcMediaPolicySchema, e.NcPlateMatcherSchema, e.NcRuleInputSchema, e.NcRulePatchSchema, e.NcRuleSchema, e.NcRuleTargetSchema, e.NcScheduleSchema, e.NcScheduleWindowSchema, e.NcTestResultSchema, e.NcThrottleSchema, e.NcZoneConditionSchema, e.NetworkAccessStatusSchema, e.NetworkAddressSchema, e.NetworkEndpointSchema, e.NotificationActionSchema, e.NotificationFormatSchema, e.NotificationHistoryEntrySchema, e.NotificationRuleSchema, e.NotificationSchema, e.NotifierStatusSchema, e.NumericSensorStatusSchema, e.OPS_LOG_DEFAULT_LIMIT, e.OPS_LOG_RING_DEFAULT_MAX, e.OauthIntegrationDescriptorSchema, e.ObjectEventSchema, e.OpsLogDomainSchema, e.OpsLogEntrySchema, e.OpsLogOpSchema, e.OpsLogQueryInputSchema, e.OpsLogReasonSchema, e.OrchestratorMetricsSchema, e.OsdOverlayKindEnum, e.OsdOverlayPatchSchema, e.OsdOverlaySchema, e.OsdPositionEnum, e.OsdStatusSchema, e.PET_FEEDER_MANUAL_FEED_MAX, e.PET_FEEDER_MANUAL_FEED_MIN, e.PIPELINE_FLOW_CAPABILITY_NAMES, e.PIPELINE_OWNER_CAPABILITY_NAMES, e.PROVIDER_KIND_CAP_NAMES, e.PYTHON_SCRIPT, e.PackageUpdateSchema, e.PackageVersionInfoSchema, e.PasskeyLoginMethodSchema, e.PasskeySummarySchema, e.PcmSampleFormatSchema, e.PerScopeBreakdownSchema, e.PetFeederStatusSchema, e.PickStreamPreferencesSchema, e.PickStreamRequirementsSchema, e.PickedCamStreamSchema, e.PipelineAssignmentSchema, e.PipelineDefaultStepSchema, e.PipelineEngineChoiceSchema, e.PipelineRunResultBridge, e.PipelineStepInputSchema, e.PipelineValidationIssueSchema, e.PipelineValidationResultSchema, e.PlaceholderReasonSchema, e.PolygonPointSchema, e.PowerMeterStatusSchema, e.PresenceStatusSchema, e.PressureSensorStatusSchema, e.PrivacyMaskOptionsSchema, e.PrivacyMaskPatchSchema, e.PrivacyMaskRegionSchema, e.PrivacyMaskShapeSchema, e.PrivacyMaskStatusSchema, e.ProfileRtspEntrySchema, e.ProfileSlotSchema, e.ProfileSlotStatusSchema, e.ProviderStatusSchema, e.PtzAutotrackRuntimeStateSchema, e.PtzAutotrackSettingsSchema, e.PtzAutotrackStatusSchema, e.PtzAutotrackTargetOptionSchema, e.PtzMoveCommandSchema, e.PtzPositionSchema, e.PtzPresetSchema, e.PtzStatusSchema, e.QueryFilterSchema, e.REACHABILITY_FAILURES_TO_OFFLINE, e.REACHABILITY_POLL_INTERVAL_MS, e.REACHABILITY_PROBE_TIMEOUT_MS, e.RECOGNITION_TYPES, e.RESERVED_BINDING_NAMES, e.RUNTIME_DEFAULTS, e.RUNTIME_TO_FORMAT, e.RawStateResultSchema, e.ReadSegmentBytesResultSchema, e.ReadinessRegistry, e.ReadinessTimeoutError, e.RecentTracksPageSchema, e.RecentTracksQueryInput, e.RecordingAvailabilitySchema, e.RecordingBandModeSchema, e.RecordingBandSchema, e.RecordingBandTriggersSchema, e.RecordingConfigSchema, e.RecordingDaysSchema, e.RecordingDeviceUsageSchema, e.RecordingLocationUsageSchema, e.RecordingManifestSchema, e.RecordingModeSchema, e.RecordingRangeSchema, e.RecordingRetentionSchema, e.RecordingRuleSchema, e.RecordingScheduleSchema, e.RecordingStatusSchema, e.RecordingStorageModeSchema, e.RecordingStorageUsageSchema, e.RecordingTriggersSchema, e.RecordingWeekdaySchema, e.RedirectLoginMethodSchema, e.RenderedAsSchema, e.ReportMotionInputSchema, e.RingBuffer, e.RtpSourceSchema, e.RtspRestreamEntrySchema, e.RunnerCameraConfigSchema, e.RunnerCameraDeviceUIFields, e.RunnerFrameSourceSchema, e.RunnerInferenceDeviceSchema, e.RunnerLocalLoadSchema, e.RunnerLocalMetricsSchema, e.SCOPE_PRESETS, e.SCRUB_THUMBNAIL_PRESETS, e.SCRUB_THUMBNAIL_PRESET_LABELS, e.SCRUB_THUMBNAIL_PRESET_ORDER, e.SENSOR_FEATURES, e.SENSOR_MAP, e.SOURCE_INFO_METADATA_KEY, e.STREAM_PROFILE_META, e.STREAM_QUALITY_LABELS, e.SUB_DETECTION_TYPES, e.SYSTEM_CAP_NAMES, e.SceneCheckSchema, e.SceneConditionSchema, e.SceneMonitorSchema, e.SceneMonitorStateSchema, e.SceneMonitorStatusSchema, e.SceneReferenceSchema, e.ScopedTokenSchema, e.ScopedTokenSummarySchema, e.ScoredObjectEventSchema, e.ScriptRunnerStatusSchema, e.ScrubThumbnailPresetSchema, e.SearchResultSchema, e.SendEmailInputSchema, e.SendEmailResultSchema, e.SendResultSchema, e.SensorEventSchema, e.ServerBootModeSchema, e.ServerPackageStatusSchema, e.ServerRollbackInfoSchema, e.ServerUpdateActionResultSchema, e.ServerUpdateCheckResultSchema, e.ServerUpdateStateSchema, e.SettingsPatchSchema, e.SettingsRecordSchema, e.SettingsSchemaWithValuesSchema, e.SettingsUpdateResultSchema, e.ShmRingStatsSchema, e.SmokeStatusSchema, e.SmtpStatusSchema, e.SnapshotImageSchema, e.SourceInfoSchema, e.SpatialDetectionSchema, e.SsoBridgeClaimsSchema, e.StartEmbeddedInputSchema, e.StationaryObjectSchema, e.StorageAbortUploadInputSchema, e.StorageBeginDownloadInputSchema, e.StorageBeginDownloadResultSchema, e.StorageBeginUploadInputSchema, e.StorageBeginUploadResultSchema, e.StorageEndDownloadInputSchema, e.StorageFinalizeUploadInputSchema, e.StorageLocationDeclarationSchema, e.StorageLocationRefSchema, e.StorageLocationSchema, e.StorageLocationTypeSchema, e.StorageProviderInfoSchema, e.StorageReadChunkInputSchema, e.StorageTestLocationResultSchema, e.StorageWriteChunkInputSchema, e.StreamCodecSchema, e.StreamFormatSchema, e.StreamNetworkStatsSchema, e.StreamParamsOptionsSchema, e.StreamParamsStatusSchema, e.StreamProfileConfigSchema, e.StreamProfileOptionsSchema, e.StreamProfilePatchSchema, e.StreamProfileSchema, e.StreamSourceEntrySchema, e.StreamSourceSchema, e.SubscribeAudioChunksInputSchema, e.SubscribeAudioChunksResultSchema, e.SubscribeFramesInputSchema, e.SubscribeFramesResultSchema, e.SwitchStatusSchema, e.SystemMetricsSchema, e.SystemMirror, e.TAXONOMY_COLORS, e.TIMEZONES, e.TamperStatusSchema, e.TankStatusSchema, e.TargetKindCapsSchema, e.TargetKindLevelSchema, e.TargetKindSchema, e.TargetSchema, e.TemperatureSensorStatusSchema, e.TestConnectionResultSchema, e.TestResultSchema, e.ToastSchema, e.TokenScopeSchema, e.TopologyNodeSchema, e.TopologyProcessSchema, e.TopologyServiceSchema, e.TrackCascadeCountsSchema, e.TrackEnvelopeSchema, e.TrackProjectionSchema, e.TrackSchema, e.TrackStateSchema, e.TrackZoneFilterSchema, e.TrackedDetectionSchema, e.TurnServerSchema, e.UNIT_TABLE, e.UnifiedBrokerInfoSchema, e.UnitConversionError, e.UpdateIntegrationInputSchema, e.UpdateStatusSchema, e.UpdateUserInputSchema, e.UserRecordSchema, e.UserSummarySchema, e.VacuumControlStatusSchema, e.VacuumStateSchema, e.ValveStateSchema, e.ValveStatusSchema, e.VibrationStatusSchema, e.VideoEncodeSchema, e.WELL_KNOWN_TABS, e.WELL_KNOWN_TAB_MAP, e.WaterHeaterStatusSchema, e.WeatherStatusSchema, e.WebrtcStreamChoiceSchema, e.WebrtcStreamTargetSchema, e.WhiteBalanceModeSchema, e.WidgetHostEnum, e.WidgetLoginMethodSchema, e.WidgetMetadataSchema, e.WidgetRemoteSchema, e.WidgetSizeEnum, e.YAMNET_TO_MACRO, e.ZoneKindEnum, e.ZoneRuleModeEnum, e.ZoneRuleSchema, e.ZoneRuleStageEnum, e.ZoneRulesArraySchema, e.ZoneSchema, e.ZoneScopeBreakdownSchema, e.accessoriesCapability, e.accessoryStableId, e.addonPagesCapability, e.addonPagesSourceCapability, e.addonRoutesCapability, e.addonSettingsCapability, e.addonWidgetsCapability, e.addonWidgetsSourceCapability, e.addonsCapability, e.adminUiCapability, e.advancedNotifierCapability, e.airQualitySensorCapability, e.alarmPanelCapability, e.alertsCapability, e.ambientLightSensorCapability, e.applyTransform, e.asBoolean, e.asJsonArray, e.asJsonObject, e.asNumber, e.asString, e.audioAnalysisCapability, e.audioAnalyzerCapability, e.audioCodecCapability, e.audioMetricsCapability, e.authProviderCapability, e.autoAssignProfiles, e.automationControlCapability, e.backupCapability, e.batteryCapability, e.bestLocationMatch, e.binaryCapability, e.bindAddonActions, e.brightnessCapability, e.brokerCapability, e.buildAddonRouteProvider, e.buildEventKindDescriptor, e.buildModelVariantGroups, e.buildStreamParamsConfigSchema, e.buttonCapability, e.cameraCredentialsCapability, e.cameraPipelineConfigCapability, e.cameraStreamsCapability, e.canConvertUnit, e.carbonMonoxideCapability, e.cellsToRects, e.classifyStream, e.classifyStreams, e.climateControlCapability, e.collectHydratedFieldEntries, e.collectHydratedFieldValues, e.colorCapability, e.colorForKind, e.compileExpression, e.compileExpressionSafe, e.connectivityCapability, e.consumablesCapability, e.contactCapability, e.controlCapability, e.convertUnit, e.cosineSimilarity, e.coverCapability, e.createDeviceProxy, e.createDurableState, e.createEvent, e.createExpressionScope, e.createLazyTrpcSource, e.createMirrorSource, e.createRuntimeStateBridge, e.createSliceHandle, e.createSystemProxy, e.customAction, e.customModelRegistryCapability, e.dayNightCapability, e.decoderCapability, e.defaultDeviceFor, e.defineCustomActions, e.describeModelVariant, e.detectionPipelineCapability, e.deviceAdoptionCapability, e.deviceBackendToFormat, e.deviceCustomAction, e.deviceDiscoveryCapability, e.deviceExportCapability, e.deviceManagerCapability, e.deviceMatchesProfile, e.deviceOpsCapability, e.deviceProviderCapability, e.deviceStateCapability, e.deviceStatusCapability, e.doorbellCapability, e.embeddingEncoderCapability, e.emitDownForOwnedCaps, e.emitReadiness, e.encodeProfileFromStreamShape, e.enumSensorCapability, e.enumerateInferenceDevices, e.enumerateItemArrayFields, e.enumerateSchemaFields, e.errMsg, e.evaluateAst, e.evaluateLinkExpression, e.evaluateZoneRules, e.event, e.eventEmitterCapability, e.eventsCapability, e.expandCapMethods, e.extractNestedAddonId, e.extractSourceInfoFromMetadata, e.faceGalleryCapability, e.fanControlCapability, e.featureProbeCapability, e.filesystemBrowseCapability, e.findTimezone, e.floodCapability, e.formatForBackend, e.formatForRuntime, e.gasCapability, e.getAudioMacroClassIds, e.getByPath, e.getCapsByProviderKind, e.getTaxonomyEntry, e.hasMotionTrigger, e.hfModelUrl, e.htmlToText, e.humidifierCapability, e.humiditySensorCapability, e.hydrateSchema, e.imageCapability, e.imageSettingsCapability, e.integrationsCapability, e.intercomCapability, e.isAgentOnlyPlacement, e.isArrayOutputSchema, e.isCollectionArrayMethod, e.isDeployableToAgent, e.isDeviceConfigCap, e.isEvent, e.isNode, e.isObjectInput, e.isVoidInput, e.jobKindSchema, e.kebabToCamel, e.lawnMowerControlCapability, e.lifecycleJobSchema, e.lifecycleJobScopeSchema, e.lifecycleJobStateSchema, e.lifecycleTaskSchema, e.llmCapability, e.llmRuntimeCapability, e.localNetworkCapability, e.locationSimilarity, e.lockControlCapability, e.logDestinationCapability, e.loginMethodCapability, e.looseSchema, e.makeProfileBrokerId, a = e.makeSourceBrokerId, e.mapAudioLabelToMacro, e.markdownToHtmlLite, e.markdownToText, e.maskUrlCredentials, e.mediaPlayerCapability, e.mergeSourceInfo, e.meshNetworkCapability, e.method, e.metricsProviderCapability, e.migrateConfigToBands, e.modelConvertCapability, e.modelDistributorCapability, e.modelFormatForRuntime, e.motionCapability, e.motionDetectionCapability, e.motionTriggerCapability, e.motionZonesCapability, e.mqttBrokerCapability, e.nativeObjectDetectionCapability, e.networkAccessCapability, e.networkQualityCapability, e.nodePin, e.nodesCapability, e.normalizeAddonInitResult, e.normalizeUnit, e.notificationOutputCapability, e.notificationRulesCapability, e.notifierCapability, e.numericSensorCapability, e.oauthIntegrationCapability, e.objectInputDeclaresAddonId, e.osdCapability, e.parseCameraStreamConfig, e.parseExpression, e.parseJsonArray, e.parseJsonObject, e.parseJsonUnknown, e.parseProfileBrokerId, e.parseStreamParamsFormPatch, e.petFeederCapability, e.pickAccessoryControl, e.pickPreferredRtspEntry, e.pipelineAnalyticsCapability, e.pipelineExecutorCapability, e.pipelineOrchestratorCapability, e.pipelineRunnerCapability, e.plateGalleryCapability, e.platformProbeCapability, e.powerMeterCapability, e.prepareNotification, e.presenceCapability, e.pressureSensorCapability, e.privacyMaskCapability, e.procedureAuthKey, e.ptzAutotrackCapability, e.ptzCapability, e.pythonScriptForBackend, e.readNodePin, e.readinessKey, e.rebootCapability, e.recordingCapability, e.recordingExportCapability, e.rectsToCells, e.requiresPython, e.resolveAddonExecution, e.resolveAddonGroup, e.resolveAddonPlacement, e.resolveAddonRuntime, e.resolveCapMount, e.resolveDetectionRuntime, e.resolveDeviceControlKind, e.resolveDeviceProfile, e.resolveFormat, e.resolveHydratedFieldValue, e.resolveModelFormat, e.resolveMutate, e.resolveRunnerId, e.resolveScrubThumbnailGeometry, e.resolveVariantModelId, e.runInferenceStep, e.runtimeDevices, e.sceneMonitorCapability, e.scopeKey, e.scoreRuntimes, e.scriptRunnerCapability, e.selectAssignedProfileSlots, e.serverManagementCapability, e.setByPath, e.settingsStoreCapability, e.sleep, e.sleepCancellable, e.smokeCapability, e.smtpProviderCapability, e.snapshotCapability, e.ssoBridgeCapability, e.startReachabilityPoll, e.storageCapability, e.storageEvictableCapability, e.storageProviderCapability, e.streamBrokerCapability, e.streamCatalogCapability, e.streamParamsCapability, e.streamPixels, e.streamQualityLabel, e.subKindsOf, e.supportedRuntimes, e.switchCapability, e.synthesizeSourceInfo, e.systemCapability, e.tamperCapability, e.taskLogEntrySchema, e.taskPhaseSchema, e.taskTargetSchema, e.temperatureSensorCapability, e.textToHtml, e.toDeviceSummary, e.toExpressionValue, e.toStreamSourceEntry, e.toastCapability, e.tokenize, e.transcodeBody, e.tryConvertUnit, e.turnProviderCapability, e.unitDimension, e.unitsForDimension, e.updateCapability, e.userManagementCapability, e.userPasskeysCapability, e.vacuumControlCapability, e.validateExpressionSource, e.valveCapability, e.vibrationCapability, e.videoclipsCapability, e.viewerUiCapability, e.waterHeaterCapability, e.weatherCapability, e.webrtcClientHintsSchema, e.webrtcSessionCapability, e.wiringAddonHealthSchema, e.wiringHealthSnapshotSchema, e.wiringNodeHealthSchema, e.wiringProbeKindSchema, e.wiringProbeResultSchema, e.zodEntriesToConfigUI, e.zoneAnalyticsCapability, e.zoneRulesCapability, e.zonesCapability, e.default;
|
|
20
|
+
}, s = i.share["default:@camstack/types"];
|
|
21
|
+
s === void 0 ? n.then(() => {
|
|
22
|
+
if (s = i.share["default:@camstack/types"], s === void 0) throw Error("[Module Federation] Shared module @camstack/types was imported before federation bootstrap finished.");
|
|
23
|
+
o(s);
|
|
24
|
+
}) : o(s);
|
|
25
|
+
//#endregion
|
|
26
|
+
export { a as t };
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../chunk-D6vf50IK.js");
|
|
6
|
-
const require_dist = require("../dist-
|
|
6
|
+
const require_dist = require("../dist-CAT3VF7A.js");
|
|
7
7
|
const require_remote_restream = require("../remote-restream-CO36Sr30.js");
|
|
8
8
|
const require_model_download_service_Cp9f4dk6 = require("../model-download-service-Cp9f4dk6-Dv-oFwjN.js");
|
|
9
9
|
let node_child_process = require("node:child_process");
|
|
@@ -10411,6 +10411,17 @@ var StreamBroker = class StreamBroker {
|
|
|
10411
10411
|
placeholderTimer;
|
|
10412
10412
|
reconnectDelayMs = INITIAL_RECONNECT_DELAY_MS;
|
|
10413
10413
|
/**
|
|
10414
|
+
* Dial rate-limiter (2026-07-23 storm fix): the earliest wall-clock at
|
|
10415
|
+
* which ANY caller may dial the source again. Armed on every dial ATTEMPT
|
|
10416
|
+
* with the current backoff window. The 30s reconnect timer was honored on
|
|
10417
|
+
* ITS path, but parallel dial channels (demand resume, broker recreation)
|
|
10418
|
+
* re-dialed instantly — an unreachable camera (614 EHOSTUNREACH) looped
|
|
10419
|
+
* hundreds of dials/sec, the relayed log flood ballooned hub-main to
|
|
10420
|
+
* 1.9 GB in 4 h and starved the HTTPS API. This gate makes the backoff a
|
|
10421
|
+
* BROKER-level invariant instead of a per-path courtesy.
|
|
10422
|
+
*/
|
|
10423
|
+
nextDialAllowedAt = 0;
|
|
10424
|
+
/**
|
|
10414
10425
|
* "First video" watchdog. Battery-cam rfc4571 sources sometimes
|
|
10415
10426
|
* complete TCP handshake on the loopback but the lib's dedicated
|
|
10416
10427
|
* session never delivers video bytes (camera fails to start the
|
|
@@ -10723,6 +10734,7 @@ var StreamBroker = class StreamBroker {
|
|
|
10723
10734
|
clearTimeout(this.reconnectTimer);
|
|
10724
10735
|
this.reconnectTimer = void 0;
|
|
10725
10736
|
this.reconnectDelayMs = INITIAL_RECONNECT_DELAY_MS;
|
|
10737
|
+
this.nextDialAllowedAt = 0;
|
|
10726
10738
|
this.lastRefreshRequestAt = 0;
|
|
10727
10739
|
this.logger?.info("reconnect kicked — publisher refreshed source");
|
|
10728
10740
|
this.scheduleReconnect();
|
|
@@ -10762,6 +10774,21 @@ var StreamBroker = class StreamBroker {
|
|
|
10762
10774
|
this.logger?.info("Broker registered idle — no demand, source dial deferred");
|
|
10763
10775
|
return;
|
|
10764
10776
|
}
|
|
10777
|
+
const dialWaitMs = this.nextDialAllowedAt - Date.now();
|
|
10778
|
+
if (dialWaitMs > 0) {
|
|
10779
|
+
this._status = "connecting";
|
|
10780
|
+
if (!this.reconnectTimer) {
|
|
10781
|
+
this.logger?.info("dial rate-limited — deferring to backoff window", { meta: { waitMs: dialWaitMs } });
|
|
10782
|
+
this.reconnectTimer = setTimeout(() => {
|
|
10783
|
+
this.reconnectTimer = void 0;
|
|
10784
|
+
if (this.manualStop) return;
|
|
10785
|
+
const src = this.resolveCurrentSource();
|
|
10786
|
+
if (src) this.start(src);
|
|
10787
|
+
}, dialWaitMs);
|
|
10788
|
+
}
|
|
10789
|
+
return;
|
|
10790
|
+
}
|
|
10791
|
+
this.nextDialAllowedAt = Date.now() + this.reconnectDelayMs;
|
|
10765
10792
|
this._status = "connecting";
|
|
10766
10793
|
if (source.ffmpegParser) {
|
|
10767
10794
|
this._status = "connecting";
|
|
@@ -11708,6 +11735,7 @@ var StreamBroker = class StreamBroker {
|
|
|
11708
11735
|
this.logger?.info("rtmp: streaming");
|
|
11709
11736
|
this._status = "streaming";
|
|
11710
11737
|
this.reconnectDelayMs = INITIAL_RECONNECT_DELAY_MS;
|
|
11738
|
+
this.nextDialAllowedAt = 0;
|
|
11711
11739
|
this.stopErrorPlaceholder();
|
|
11712
11740
|
},
|
|
11713
11741
|
onError: (error) => {
|
|
@@ -11782,6 +11810,7 @@ var StreamBroker = class StreamBroker {
|
|
|
11782
11810
|
this.logger?.info("ffmpeg source: streaming");
|
|
11783
11811
|
this._status = "streaming";
|
|
11784
11812
|
this.reconnectDelayMs = INITIAL_RECONNECT_DELAY_MS;
|
|
11813
|
+
this.nextDialAllowedAt = 0;
|
|
11785
11814
|
this.stopErrorPlaceholder();
|
|
11786
11815
|
},
|
|
11787
11816
|
onError: (error) => {
|
|
@@ -11851,6 +11880,7 @@ var StreamBroker = class StreamBroker {
|
|
|
11851
11880
|
if (this.stopping) return;
|
|
11852
11881
|
this._status = "streaming";
|
|
11853
11882
|
this.reconnectDelayMs = INITIAL_RECONNECT_DELAY_MS;
|
|
11883
|
+
this.nextDialAllowedAt = 0;
|
|
11854
11884
|
this.stopErrorPlaceholder();
|
|
11855
11885
|
this.cancelFirstVideoWatchdog();
|
|
11856
11886
|
this.kickRtpActivityWatchdog();
|
|
@@ -12160,6 +12190,7 @@ var StreamBroker = class StreamBroker {
|
|
|
12160
12190
|
this.destroyRfc4571Reader();
|
|
12161
12191
|
this._status = "error";
|
|
12162
12192
|
this.reconnectDelayMs = INITIAL_RECONNECT_DELAY_MS;
|
|
12193
|
+
this.nextDialAllowedAt = 0;
|
|
12163
12194
|
this.lastRefreshRequestAt = 0;
|
|
12164
12195
|
this.notifySourceRefresh();
|
|
12165
12196
|
this.scheduleReconnect();
|
|
@@ -12221,6 +12252,7 @@ var StreamBroker = class StreamBroker {
|
|
|
12221
12252
|
this.destroyNativeClient();
|
|
12222
12253
|
this._status = "error";
|
|
12223
12254
|
this.reconnectDelayMs = INITIAL_RECONNECT_DELAY_MS;
|
|
12255
|
+
this.nextDialAllowedAt = 0;
|
|
12224
12256
|
this.scheduleReconnect();
|
|
12225
12257
|
return;
|
|
12226
12258
|
}
|
|
@@ -12229,6 +12261,7 @@ var StreamBroker = class StreamBroker {
|
|
|
12229
12261
|
this.destroyRfc4571Reader();
|
|
12230
12262
|
this._status = "error";
|
|
12231
12263
|
this.reconnectDelayMs = INITIAL_RECONNECT_DELAY_MS;
|
|
12264
|
+
this.nextDialAllowedAt = 0;
|
|
12232
12265
|
this.notifySourceRefresh();
|
|
12233
12266
|
this.scheduleReconnect();
|
|
12234
12267
|
return;
|
|
@@ -12288,11 +12321,7 @@ var StreamBroker = class StreamBroker {
|
|
|
12288
12321
|
if (this.manualStop) return;
|
|
12289
12322
|
const src = this.resolveCurrentSource();
|
|
12290
12323
|
if (!src) return;
|
|
12291
|
-
this.
|
|
12292
|
-
if (src.ffmpegParser) this.startFfmpegSourceReader(src);
|
|
12293
|
-
else if (src.type === "rtmp") this.startRtmpReader(src);
|
|
12294
|
-
else if (src.type === "rfc4571") this.startRfc4571Reader(src);
|
|
12295
|
-
else this.startRtspReader(src);
|
|
12324
|
+
this.start(src);
|
|
12296
12325
|
}, this.reconnectDelayMs);
|
|
12297
12326
|
this.reconnectDelayMs = Math.min(this.reconnectDelayMs * 2, MAX_RECONNECT_DELAY_MS);
|
|
12298
12327
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as __require } from "../chunk-BdkLduGY.mjs";
|
|
2
|
-
import { $ as parseProfileBrokerId, G as DeviceFeature, H as errMsg, K as DeviceType, O as maskUrlCredentials, U as BaseAddon, V as webrtcSessionCapability, W as CAM_PROFILE_ORDER, X as makeProfileBrokerId, Y as isEvent, Z as makeSourceBrokerId, at as discriminatedUnion, ct as number, dt as string, ft as union, g as addonWidgetsSourceCapability, it as boolean, j as nodePin, l as EncodeProfileSchema, lt as object, m as RingBuffer, nt as _enum, pt as EventCategory, q as createEvent, rt as array, st as literal, ut as record, y as cameraStreamsCapability, z as streamBrokerCapability } from "../dist-
|
|
2
|
+
import { $ as parseProfileBrokerId, G as DeviceFeature, H as errMsg, K as DeviceType, O as maskUrlCredentials, U as BaseAddon, V as webrtcSessionCapability, W as CAM_PROFILE_ORDER, X as makeProfileBrokerId, Y as isEvent, Z as makeSourceBrokerId, at as discriminatedUnion, ct as number, dt as string, ft as union, g as addonWidgetsSourceCapability, it as boolean, j as nodePin, l as EncodeProfileSchema, lt as object, m as RingBuffer, nt as _enum, pt as EventCategory, q as createEvent, rt as array, st as literal, ut as record, y as cameraStreamsCapability, z as streamBrokerCapability } from "../dist-BwyGTnMu.mjs";
|
|
3
3
|
import { n as profileForStreamId } from "../remote-restream-BeHi78PZ.mjs";
|
|
4
4
|
import { n as createFileDataPlaneHandler } from "../model-download-service-Cp9f4dk6-CwUb5v3Y.mjs";
|
|
5
5
|
import { createRequire } from "node:module";
|
|
@@ -10406,6 +10406,17 @@ var StreamBroker = class StreamBroker {
|
|
|
10406
10406
|
placeholderTimer;
|
|
10407
10407
|
reconnectDelayMs = INITIAL_RECONNECT_DELAY_MS;
|
|
10408
10408
|
/**
|
|
10409
|
+
* Dial rate-limiter (2026-07-23 storm fix): the earliest wall-clock at
|
|
10410
|
+
* which ANY caller may dial the source again. Armed on every dial ATTEMPT
|
|
10411
|
+
* with the current backoff window. The 30s reconnect timer was honored on
|
|
10412
|
+
* ITS path, but parallel dial channels (demand resume, broker recreation)
|
|
10413
|
+
* re-dialed instantly — an unreachable camera (614 EHOSTUNREACH) looped
|
|
10414
|
+
* hundreds of dials/sec, the relayed log flood ballooned hub-main to
|
|
10415
|
+
* 1.9 GB in 4 h and starved the HTTPS API. This gate makes the backoff a
|
|
10416
|
+
* BROKER-level invariant instead of a per-path courtesy.
|
|
10417
|
+
*/
|
|
10418
|
+
nextDialAllowedAt = 0;
|
|
10419
|
+
/**
|
|
10409
10420
|
* "First video" watchdog. Battery-cam rfc4571 sources sometimes
|
|
10410
10421
|
* complete TCP handshake on the loopback but the lib's dedicated
|
|
10411
10422
|
* session never delivers video bytes (camera fails to start the
|
|
@@ -10718,6 +10729,7 @@ var StreamBroker = class StreamBroker {
|
|
|
10718
10729
|
clearTimeout(this.reconnectTimer);
|
|
10719
10730
|
this.reconnectTimer = void 0;
|
|
10720
10731
|
this.reconnectDelayMs = INITIAL_RECONNECT_DELAY_MS;
|
|
10732
|
+
this.nextDialAllowedAt = 0;
|
|
10721
10733
|
this.lastRefreshRequestAt = 0;
|
|
10722
10734
|
this.logger?.info("reconnect kicked — publisher refreshed source");
|
|
10723
10735
|
this.scheduleReconnect();
|
|
@@ -10757,6 +10769,21 @@ var StreamBroker = class StreamBroker {
|
|
|
10757
10769
|
this.logger?.info("Broker registered idle — no demand, source dial deferred");
|
|
10758
10770
|
return;
|
|
10759
10771
|
}
|
|
10772
|
+
const dialWaitMs = this.nextDialAllowedAt - Date.now();
|
|
10773
|
+
if (dialWaitMs > 0) {
|
|
10774
|
+
this._status = "connecting";
|
|
10775
|
+
if (!this.reconnectTimer) {
|
|
10776
|
+
this.logger?.info("dial rate-limited — deferring to backoff window", { meta: { waitMs: dialWaitMs } });
|
|
10777
|
+
this.reconnectTimer = setTimeout(() => {
|
|
10778
|
+
this.reconnectTimer = void 0;
|
|
10779
|
+
if (this.manualStop) return;
|
|
10780
|
+
const src = this.resolveCurrentSource();
|
|
10781
|
+
if (src) this.start(src);
|
|
10782
|
+
}, dialWaitMs);
|
|
10783
|
+
}
|
|
10784
|
+
return;
|
|
10785
|
+
}
|
|
10786
|
+
this.nextDialAllowedAt = Date.now() + this.reconnectDelayMs;
|
|
10760
10787
|
this._status = "connecting";
|
|
10761
10788
|
if (source.ffmpegParser) {
|
|
10762
10789
|
this._status = "connecting";
|
|
@@ -11703,6 +11730,7 @@ var StreamBroker = class StreamBroker {
|
|
|
11703
11730
|
this.logger?.info("rtmp: streaming");
|
|
11704
11731
|
this._status = "streaming";
|
|
11705
11732
|
this.reconnectDelayMs = INITIAL_RECONNECT_DELAY_MS;
|
|
11733
|
+
this.nextDialAllowedAt = 0;
|
|
11706
11734
|
this.stopErrorPlaceholder();
|
|
11707
11735
|
},
|
|
11708
11736
|
onError: (error) => {
|
|
@@ -11777,6 +11805,7 @@ var StreamBroker = class StreamBroker {
|
|
|
11777
11805
|
this.logger?.info("ffmpeg source: streaming");
|
|
11778
11806
|
this._status = "streaming";
|
|
11779
11807
|
this.reconnectDelayMs = INITIAL_RECONNECT_DELAY_MS;
|
|
11808
|
+
this.nextDialAllowedAt = 0;
|
|
11780
11809
|
this.stopErrorPlaceholder();
|
|
11781
11810
|
},
|
|
11782
11811
|
onError: (error) => {
|
|
@@ -11846,6 +11875,7 @@ var StreamBroker = class StreamBroker {
|
|
|
11846
11875
|
if (this.stopping) return;
|
|
11847
11876
|
this._status = "streaming";
|
|
11848
11877
|
this.reconnectDelayMs = INITIAL_RECONNECT_DELAY_MS;
|
|
11878
|
+
this.nextDialAllowedAt = 0;
|
|
11849
11879
|
this.stopErrorPlaceholder();
|
|
11850
11880
|
this.cancelFirstVideoWatchdog();
|
|
11851
11881
|
this.kickRtpActivityWatchdog();
|
|
@@ -12155,6 +12185,7 @@ var StreamBroker = class StreamBroker {
|
|
|
12155
12185
|
this.destroyRfc4571Reader();
|
|
12156
12186
|
this._status = "error";
|
|
12157
12187
|
this.reconnectDelayMs = INITIAL_RECONNECT_DELAY_MS;
|
|
12188
|
+
this.nextDialAllowedAt = 0;
|
|
12158
12189
|
this.lastRefreshRequestAt = 0;
|
|
12159
12190
|
this.notifySourceRefresh();
|
|
12160
12191
|
this.scheduleReconnect();
|
|
@@ -12216,6 +12247,7 @@ var StreamBroker = class StreamBroker {
|
|
|
12216
12247
|
this.destroyNativeClient();
|
|
12217
12248
|
this._status = "error";
|
|
12218
12249
|
this.reconnectDelayMs = INITIAL_RECONNECT_DELAY_MS;
|
|
12250
|
+
this.nextDialAllowedAt = 0;
|
|
12219
12251
|
this.scheduleReconnect();
|
|
12220
12252
|
return;
|
|
12221
12253
|
}
|
|
@@ -12224,6 +12256,7 @@ var StreamBroker = class StreamBroker {
|
|
|
12224
12256
|
this.destroyRfc4571Reader();
|
|
12225
12257
|
this._status = "error";
|
|
12226
12258
|
this.reconnectDelayMs = INITIAL_RECONNECT_DELAY_MS;
|
|
12259
|
+
this.nextDialAllowedAt = 0;
|
|
12227
12260
|
this.notifySourceRefresh();
|
|
12228
12261
|
this.scheduleReconnect();
|
|
12229
12262
|
return;
|
|
@@ -12283,11 +12316,7 @@ var StreamBroker = class StreamBroker {
|
|
|
12283
12316
|
if (this.manualStop) return;
|
|
12284
12317
|
const src = this.resolveCurrentSource();
|
|
12285
12318
|
if (!src) return;
|
|
12286
|
-
this.
|
|
12287
|
-
if (src.ffmpegParser) this.startFfmpegSourceReader(src);
|
|
12288
|
-
else if (src.type === "rtmp") this.startRtmpReader(src);
|
|
12289
|
-
else if (src.type === "rfc4571") this.startRfc4571Reader(src);
|
|
12290
|
-
else this.startRtspReader(src);
|
|
12319
|
+
this.start(src);
|
|
12291
12320
|
}, this.reconnectDelayMs);
|
|
12292
12321
|
this.reconnectDelayMs = Math.min(this.reconnectDelayMs * 2, MAX_RECONNECT_DELAY_MS);
|
|
12293
12322
|
}
|
|
@@ -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-BtN6sZcL.mjs")).catch((e) => {
|
|
34
34
|
throw l = void 0, e;
|
|
35
35
|
}), l;
|
|
36
36
|
}
|
|
@@ -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-DfcKIHhA.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-DfcKIHhA.js";import{MaskShapeCanvas as u}from"./MaskShapeCanvas-DI4BY7W2-3uL2OmvC.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-DfcKIHhA.js";import{MaskShapeCanvas as te}from"./MaskShapeCanvas-DI4BY7W2-3uL2OmvC.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};
|