@camstack/addon-pipeline 1.2.248 → 1.2.250
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 +2 -2
- package/dist/audio-analyzer/index.mjs +2 -2
- package/dist/{default-detection-model-lUeRbATP.mjs → default-detection-model-Bm04eyB4.mjs} +1 -1
- package/dist/{default-detection-model-E4jtqTLD.js → default-detection-model-DGkkGNxL.js} +1 -1
- package/dist/detection-pipeline/index.js +4 -4
- package/dist/detection-pipeline/index.mjs +4 -4
- package/dist/{dist-D-0cr8AO.mjs → dist-CGIdW7g5.mjs} +133 -0
- package/dist/{dist-BkcOCL4T.js → dist-DG74yV1a.js} +133 -0
- package/dist/motion-wasm/index.js +1 -1
- package/dist/motion-wasm/index.mjs +1 -1
- package/dist/{node-C-RnU2Po.mjs → node-C7MbYv9I.mjs} +1 -1
- package/dist/{node-Cs0G-4AK.js → node-hnHqauG8.js} +1 -1
- package/dist/pipeline-runner/index.js +3 -3
- package/dist/pipeline-runner/index.mjs +3 -3
- package/dist/{process-memory-1qyVPVYA.mjs → process-memory-3qXmcKQn.mjs} +1 -1
- package/dist/{process-memory-D0qw2ERV.js → process-memory-D2e6wNF5.js} +1 -1
- package/dist/recorder/index.js +2 -2
- package/dist/recorder/index.mjs +2 -2
- package/dist/{segment-demux-js-gRC_PvUM.js → segment-demux-js-B5Kg4QOx.js} +1 -1
- package/dist/{segment-demux-js-CH8BigxE.mjs → segment-demux-js-BW5ndPxS.mjs} +1 -1
- package/dist/stream-broker/_stub.js +2 -2
- package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-lfRydR0w.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-BQlBhj7w.mjs} +3 -3
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-k114uFcJ.mjs +26 -0
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-BHtcf-Mo.mjs +26 -0
- package/dist/stream-broker/demux-worker-child.js +1 -1
- package/dist/stream-broker/demux-worker-child.mjs +1 -1
- package/dist/stream-broker/{hostInit-Cdsu6-3e.mjs → hostInit-BqE2ZTEl.mjs} +3 -3
- package/dist/stream-broker/index.js +133 -39
- package/dist/stream-broker/index.mjs +133 -39
- package/dist/stream-broker/remoteEntry.js +1 -1
- package/package.json +1 -1
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D0LwFEeG.mjs +0 -26
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Z3qtJadi.mjs +0 -26
|
@@ -3,8 +3,8 @@ 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_process_memory = require("../process-memory-
|
|
6
|
+
const require_dist = require("../dist-DG74yV1a.js");
|
|
7
|
+
const require_process_memory = require("../process-memory-D2e6wNF5.js");
|
|
8
8
|
let node_fs = require("node:fs");
|
|
9
9
|
node_fs = require_chunk.__toESM(node_fs);
|
|
10
10
|
let node_path = require("node:path");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as __require } from "../chunk-DnnnRqeS.mjs";
|
|
2
|
-
import { $t as hydrateSchema, Jt as audioChunkBytesPerSample, Lt as errMsg, N as audioAnalysisCapability, Ot as resolvePoolMemoryPolicy, P as audioAnalyzerCapability, Qt as expandAudioChunkToF32le, Wt as BaseAddon, bn as EventCategory, n as AUDIO_BACKEND_CHOICES, ot as mapAudioLabelToMacro, rn as nodePin, s as DEFAULT_AUDIO_ANALYZER_CONFIG, w as PoolMemoryWatchdog, y as HF_BASE_URL } from "../dist-
|
|
3
|
-
import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-
|
|
2
|
+
import { $t as hydrateSchema, Jt as audioChunkBytesPerSample, Lt as errMsg, N as audioAnalysisCapability, Ot as resolvePoolMemoryPolicy, P as audioAnalyzerCapability, Qt as expandAudioChunkToF32le, Wt as BaseAddon, bn as EventCategory, n as AUDIO_BACKEND_CHOICES, ot as mapAudioLabelToMacro, rn as nodePin, s as DEFAULT_AUDIO_ANALYZER_CONFIG, w as PoolMemoryWatchdog, y as HF_BASE_URL } from "../dist-CGIdW7g5.mjs";
|
|
3
|
+
import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-3qXmcKQn.mjs";
|
|
4
4
|
import * as fs from "node:fs";
|
|
5
5
|
import * as path$1 from "node:path";
|
|
6
6
|
import { downloadFile } from "@camstack/system/addon-utils";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { F as audioKindId, a as COCO_80_LABELS, o as COCO_TO_MACRO, r as AUDIO_MACRO_LABELS, tt as hfModelUrl } from "./dist-
|
|
1
|
+
import { F as audioKindId, a as COCO_80_LABELS, o as COCO_TO_MACRO, r as AUDIO_MACRO_LABELS, tt as hfModelUrl } from "./dist-CGIdW7g5.mjs";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
//#region src/detection-pipeline/pipeline/landmark-precision-gate.ts
|
|
4
4
|
/**
|
|
@@ -3,11 +3,11 @@ 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_node = require("../node-
|
|
8
|
-
const require_default_detection_model = require("../default-detection-model-
|
|
6
|
+
const require_dist = require("../dist-DG74yV1a.js");
|
|
7
|
+
const require_node = require("../node-hnHqauG8.js");
|
|
8
|
+
const require_default_detection_model = require("../default-detection-model-DGkkGNxL.js");
|
|
9
9
|
const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
|
|
10
|
-
const require_process_memory = require("../process-memory-
|
|
10
|
+
const require_process_memory = require("../process-memory-D2e6wNF5.js");
|
|
11
11
|
let node_os = require("node:os");
|
|
12
12
|
node_os = require_chunk.__toESM(node_os);
|
|
13
13
|
let node_fs = require("node:fs");
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { n as __require } from "../chunk-DnnnRqeS.mjs";
|
|
2
|
-
import { $t as hydrateSchema, At as runtimeDevices$1, Ft as supportedRuntimes$1, G as detectionPipelineCapability, J as enumerateInferenceDevices, Lt as errMsg, Ot as resolvePoolMemoryPolicy, Tt as resolveClusterStepModelId, V as defaultDeviceFor$1, Wt as BaseAddon, X as evaluateZoneRules, Yt as createEvent, bn as EventCategory, c as DEFAULT_CLUSTER_STEP_MODELS, gt as pickClusterStepSettings, hn as object, ht as pickClusterStepModels, in as parseJsonUnknown, it as loadContributionCapability, j as YAMNET_TO_MACRO, l as DEFAULT_CLUSTER_STEP_SETTINGS, ln as array, m as DEVICE_BACKEND_TO_FORMAT, nt as inferModelProvider, pt as overlayClusterStepSettings, rn as nodePin, sn as sleep, t as APPLE_SA_TO_MACRO, vn as string, w as PoolMemoryWatchdog, yn as union, yt as pipelineExecutorCapability } from "../dist-
|
|
3
|
-
import { o as readProcessCost } from "../node-
|
|
4
|
-
import { a as localFrameRegistry, c as ALL_STEPS, d as getStepDefinition, f as resolveModelForFormat, l as getDefaultModelForFormat, n as resolveDefaultDetectionModel, p as landmarkPrecisionVerdict, r as macroGateVerdict, s as ALL_PIPELINE_STEPS, u as getStep } from "../default-detection-model-
|
|
2
|
+
import { $t as hydrateSchema, At as runtimeDevices$1, Ft as supportedRuntimes$1, G as detectionPipelineCapability, J as enumerateInferenceDevices, Lt as errMsg, Ot as resolvePoolMemoryPolicy, Tt as resolveClusterStepModelId, V as defaultDeviceFor$1, Wt as BaseAddon, X as evaluateZoneRules, Yt as createEvent, bn as EventCategory, c as DEFAULT_CLUSTER_STEP_MODELS, gt as pickClusterStepSettings, hn as object, ht as pickClusterStepModels, in as parseJsonUnknown, it as loadContributionCapability, j as YAMNET_TO_MACRO, l as DEFAULT_CLUSTER_STEP_SETTINGS, ln as array, m as DEVICE_BACKEND_TO_FORMAT, nt as inferModelProvider, pt as overlayClusterStepSettings, rn as nodePin, sn as sleep, t as APPLE_SA_TO_MACRO, vn as string, w as PoolMemoryWatchdog, yn as union, yt as pipelineExecutorCapability } from "../dist-CGIdW7g5.mjs";
|
|
3
|
+
import { o as readProcessCost } from "../node-C7MbYv9I.mjs";
|
|
4
|
+
import { a as localFrameRegistry, c as ALL_STEPS, d as getStepDefinition, f as resolveModelForFormat, l as getDefaultModelForFormat, n as resolveDefaultDetectionModel, p as landmarkPrecisionVerdict, r as macroGateVerdict, s as ALL_PIPELINE_STEPS, u as getStep } from "../default-detection-model-Bm04eyB4.mjs";
|
|
5
5
|
import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
|
|
6
|
-
import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-
|
|
6
|
+
import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-3qXmcKQn.mjs";
|
|
7
7
|
import * as os from "node:os";
|
|
8
8
|
import * as fs from "node:fs";
|
|
9
9
|
import * as path$1 from "node:path";
|
|
@@ -15561,6 +15561,70 @@ var LocationIconAssignmentSchema = object({
|
|
|
15561
15561
|
locationKey: string(),
|
|
15562
15562
|
icon: LocationIconIdSchema
|
|
15563
15563
|
});
|
|
15564
|
+
/**
|
|
15565
|
+
* One (location, description) assignment as it travels.
|
|
15566
|
+
*
|
|
15567
|
+
* Same key discipline as {@link LocationIconAssignmentSchema}, and for the same
|
|
15568
|
+
* reason: this lived for a while in the post-analysis addon's own settings,
|
|
15569
|
+
* keyed by a HAND-TYPED label matched exactly and case-sensitively. A rename in
|
|
15570
|
+
* the Locations page carried the icon and silently orphaned the description —
|
|
15571
|
+
* two authorities for one thing, joined by two different rules. Now both hang
|
|
15572
|
+
* off the location itself, on `locationIconKey`.
|
|
15573
|
+
*/
|
|
15574
|
+
var LocationDescriptionAssignmentSchema = object({
|
|
15575
|
+
locationKey: string(),
|
|
15576
|
+
description: string()
|
|
15577
|
+
});
|
|
15578
|
+
/**
|
|
15579
|
+
* A SITE ZONE — a named part of the property that several locations belong to.
|
|
15580
|
+
*
|
|
15581
|
+
* "Zona notte" holds every bedroom; "Zona giorno" the living room and the
|
|
15582
|
+
* kitchen. A camera belongs to exactly one location, and a location to at most
|
|
15583
|
+
* one zone, so a camera's zone is derived and never stored on the device: the
|
|
15584
|
+
* whole point of this entity is that grouping rooms touches no device row.
|
|
15585
|
+
*
|
|
15586
|
+
* ## Why not `zone`
|
|
15587
|
+
*
|
|
15588
|
+
* Because `zone` is already the most loaded word in this product: 612 source
|
|
15589
|
+
* files and 24 Italian strings where it means a DETECTION zone drawn on a
|
|
15590
|
+
* camera. The two are unrelated — one is a polygon in a frame, the other is a
|
|
15591
|
+
* set of rooms — and a reader who confuses them will look for a camera's
|
|
15592
|
+
* bedrooms. So the code says `siteZone` everywhere, and the UI frees the plain
|
|
15593
|
+
* word by calling the drawn one what it actually is: a detection zone.
|
|
15594
|
+
*
|
|
15595
|
+
* ## The key
|
|
15596
|
+
*
|
|
15597
|
+
* `siteZoneKey(label)` — trimmed, lower-cased, the SAME derivation locations
|
|
15598
|
+
* use (`locationIconKey`). Membership and the icon both hang off it, so a
|
|
15599
|
+
* case-only rename keeps them, which is exactly the orphaning that cost us a
|
|
15600
|
+
* silently-dropped location description.
|
|
15601
|
+
*
|
|
15602
|
+
* The icon vocabulary is the location one, unchanged: a zone is drawn on the
|
|
15603
|
+
* same two surfaces by the same glyph map, so a second vocabulary would be a
|
|
15604
|
+
* second thing to keep drawable (`scripts/check-location-icons-drawable.ts`).
|
|
15605
|
+
*/
|
|
15606
|
+
/**
|
|
15607
|
+
* One zone as it travels: its key, the label the operator typed, its icon and
|
|
15608
|
+
* the locations inside it.
|
|
15609
|
+
*
|
|
15610
|
+
* The LABEL is carried alongside the key because the key is lossy on purpose —
|
|
15611
|
+
* a surface must show "Zona notte", not "zona notte". Locations are carried
|
|
15612
|
+
* here, rather than left to a second call, because every consumer wants both
|
|
15613
|
+
* at once and a viewer that asked twice could render a zone whose membership
|
|
15614
|
+
* it has not fetched yet.
|
|
15615
|
+
*
|
|
15616
|
+
* `icon: null` means nobody chose one, which is NOT the fallback pin: only one
|
|
15617
|
+
* of those two is a choice, and a picker has to draw them differently.
|
|
15618
|
+
*/
|
|
15619
|
+
var SiteZoneSchema = object({
|
|
15620
|
+
zoneKey: string(),
|
|
15621
|
+
label: string(),
|
|
15622
|
+
icon: LocationIconIdSchema.nullable(),
|
|
15623
|
+
/** Folded location keys, sorted. A location listed here need not be
|
|
15624
|
+
* REGISTERED — devices carry labels nobody registered, and those rooms are
|
|
15625
|
+
* the ones that most want grouping. */
|
|
15626
|
+
locationKeys: array(string())
|
|
15627
|
+
});
|
|
15564
15628
|
var ProviderStatusSchema = object({
|
|
15565
15629
|
connected: boolean(),
|
|
15566
15630
|
deviceCount: number(),
|
|
@@ -16078,6 +16142,33 @@ method(object({
|
|
|
16078
16142
|
}), _void(), {
|
|
16079
16143
|
kind: "mutation",
|
|
16080
16144
|
auth: "admin"
|
|
16145
|
+
}), method(_void(), array(LocationDescriptionAssignmentSchema)), method(object({
|
|
16146
|
+
location: string(),
|
|
16147
|
+
description: string().max(400).nullable()
|
|
16148
|
+
}), _void(), {
|
|
16149
|
+
kind: "mutation",
|
|
16150
|
+
auth: "admin"
|
|
16151
|
+
}), method(_void(), array(SiteZoneSchema)), method(object({
|
|
16152
|
+
name: string(),
|
|
16153
|
+
icon: LocationIconIdSchema.nullable().optional()
|
|
16154
|
+
}), _void(), {
|
|
16155
|
+
kind: "mutation",
|
|
16156
|
+
auth: "admin"
|
|
16157
|
+
}), method(object({ name: string() }), _void(), {
|
|
16158
|
+
kind: "mutation",
|
|
16159
|
+
auth: "admin"
|
|
16160
|
+
}), method(object({
|
|
16161
|
+
from: string(),
|
|
16162
|
+
to: string()
|
|
16163
|
+
}), _void(), {
|
|
16164
|
+
kind: "mutation",
|
|
16165
|
+
auth: "admin"
|
|
16166
|
+
}), method(object({
|
|
16167
|
+
location: string(),
|
|
16168
|
+
zone: string().nullable()
|
|
16169
|
+
}), _void(), {
|
|
16170
|
+
kind: "mutation",
|
|
16171
|
+
auth: "admin"
|
|
16081
16172
|
}), method(object({
|
|
16082
16173
|
deviceId: number(),
|
|
16083
16174
|
disabled: boolean()
|
|
@@ -36302,6 +36393,12 @@ Object.freeze({
|
|
|
36302
36393
|
addonId: null,
|
|
36303
36394
|
access: "view"
|
|
36304
36395
|
},
|
|
36396
|
+
"deviceManager.listLocationDescriptions": {
|
|
36397
|
+
capName: "device-manager",
|
|
36398
|
+
capScope: "system",
|
|
36399
|
+
addonId: null,
|
|
36400
|
+
access: "view"
|
|
36401
|
+
},
|
|
36305
36402
|
"deviceManager.listLocationIcons": {
|
|
36306
36403
|
capName: "device-manager",
|
|
36307
36404
|
capScope: "system",
|
|
@@ -36320,6 +36417,12 @@ Object.freeze({
|
|
|
36320
36417
|
addonId: null,
|
|
36321
36418
|
access: "view"
|
|
36322
36419
|
},
|
|
36420
|
+
"deviceManager.listSiteZones": {
|
|
36421
|
+
capName: "device-manager",
|
|
36422
|
+
capScope: "system",
|
|
36423
|
+
addonId: null,
|
|
36424
|
+
access: "view"
|
|
36425
|
+
},
|
|
36323
36426
|
"deviceManager.listWrappersForCap": {
|
|
36324
36427
|
capName: "device-manager",
|
|
36325
36428
|
capScope: "system",
|
|
@@ -36404,12 +36507,24 @@ Object.freeze({
|
|
|
36404
36507
|
addonId: null,
|
|
36405
36508
|
access: "delete"
|
|
36406
36509
|
},
|
|
36510
|
+
"deviceManager.removeSiteZone": {
|
|
36511
|
+
capName: "device-manager",
|
|
36512
|
+
capScope: "system",
|
|
36513
|
+
addonId: null,
|
|
36514
|
+
access: "delete"
|
|
36515
|
+
},
|
|
36407
36516
|
"deviceManager.renameLocation": {
|
|
36408
36517
|
capName: "device-manager",
|
|
36409
36518
|
capScope: "system",
|
|
36410
36519
|
addonId: null,
|
|
36411
36520
|
access: "create"
|
|
36412
36521
|
},
|
|
36522
|
+
"deviceManager.renameSiteZone": {
|
|
36523
|
+
capName: "device-manager",
|
|
36524
|
+
capScope: "system",
|
|
36525
|
+
addonId: null,
|
|
36526
|
+
access: "create"
|
|
36527
|
+
},
|
|
36413
36528
|
"deviceManager.runDeviceAction": {
|
|
36414
36529
|
capName: "device-manager",
|
|
36415
36530
|
capScope: "system",
|
|
@@ -36452,12 +36567,24 @@ Object.freeze({
|
|
|
36452
36567
|
addonId: null,
|
|
36453
36568
|
access: "create"
|
|
36454
36569
|
},
|
|
36570
|
+
"deviceManager.setLocationDescription": {
|
|
36571
|
+
capName: "device-manager",
|
|
36572
|
+
capScope: "system",
|
|
36573
|
+
addonId: null,
|
|
36574
|
+
access: "create"
|
|
36575
|
+
},
|
|
36455
36576
|
"deviceManager.setLocationIcon": {
|
|
36456
36577
|
capName: "device-manager",
|
|
36457
36578
|
capScope: "system",
|
|
36458
36579
|
addonId: null,
|
|
36459
36580
|
access: "create"
|
|
36460
36581
|
},
|
|
36582
|
+
"deviceManager.setLocationZone": {
|
|
36583
|
+
capName: "device-manager",
|
|
36584
|
+
capScope: "system",
|
|
36585
|
+
addonId: null,
|
|
36586
|
+
access: "create"
|
|
36587
|
+
},
|
|
36461
36588
|
"deviceManager.setMetadata": {
|
|
36462
36589
|
capName: "device-manager",
|
|
36463
36590
|
capScope: "system",
|
|
@@ -36488,6 +36615,12 @@ Object.freeze({
|
|
|
36488
36615
|
addonId: null,
|
|
36489
36616
|
access: "create"
|
|
36490
36617
|
},
|
|
36618
|
+
"deviceManager.setSiteZone": {
|
|
36619
|
+
capName: "device-manager",
|
|
36620
|
+
capScope: "system",
|
|
36621
|
+
addonId: null,
|
|
36622
|
+
access: "create"
|
|
36623
|
+
},
|
|
36491
36624
|
"deviceManager.setStreamProfileMap": {
|
|
36492
36625
|
capName: "device-manager",
|
|
36493
36626
|
capScope: "system",
|
|
@@ -15561,6 +15561,70 @@ var LocationIconAssignmentSchema = object({
|
|
|
15561
15561
|
locationKey: string(),
|
|
15562
15562
|
icon: LocationIconIdSchema
|
|
15563
15563
|
});
|
|
15564
|
+
/**
|
|
15565
|
+
* One (location, description) assignment as it travels.
|
|
15566
|
+
*
|
|
15567
|
+
* Same key discipline as {@link LocationIconAssignmentSchema}, and for the same
|
|
15568
|
+
* reason: this lived for a while in the post-analysis addon's own settings,
|
|
15569
|
+
* keyed by a HAND-TYPED label matched exactly and case-sensitively. A rename in
|
|
15570
|
+
* the Locations page carried the icon and silently orphaned the description —
|
|
15571
|
+
* two authorities for one thing, joined by two different rules. Now both hang
|
|
15572
|
+
* off the location itself, on `locationIconKey`.
|
|
15573
|
+
*/
|
|
15574
|
+
var LocationDescriptionAssignmentSchema = object({
|
|
15575
|
+
locationKey: string(),
|
|
15576
|
+
description: string()
|
|
15577
|
+
});
|
|
15578
|
+
/**
|
|
15579
|
+
* A SITE ZONE — a named part of the property that several locations belong to.
|
|
15580
|
+
*
|
|
15581
|
+
* "Zona notte" holds every bedroom; "Zona giorno" the living room and the
|
|
15582
|
+
* kitchen. A camera belongs to exactly one location, and a location to at most
|
|
15583
|
+
* one zone, so a camera's zone is derived and never stored on the device: the
|
|
15584
|
+
* whole point of this entity is that grouping rooms touches no device row.
|
|
15585
|
+
*
|
|
15586
|
+
* ## Why not `zone`
|
|
15587
|
+
*
|
|
15588
|
+
* Because `zone` is already the most loaded word in this product: 612 source
|
|
15589
|
+
* files and 24 Italian strings where it means a DETECTION zone drawn on a
|
|
15590
|
+
* camera. The two are unrelated — one is a polygon in a frame, the other is a
|
|
15591
|
+
* set of rooms — and a reader who confuses them will look for a camera's
|
|
15592
|
+
* bedrooms. So the code says `siteZone` everywhere, and the UI frees the plain
|
|
15593
|
+
* word by calling the drawn one what it actually is: a detection zone.
|
|
15594
|
+
*
|
|
15595
|
+
* ## The key
|
|
15596
|
+
*
|
|
15597
|
+
* `siteZoneKey(label)` — trimmed, lower-cased, the SAME derivation locations
|
|
15598
|
+
* use (`locationIconKey`). Membership and the icon both hang off it, so a
|
|
15599
|
+
* case-only rename keeps them, which is exactly the orphaning that cost us a
|
|
15600
|
+
* silently-dropped location description.
|
|
15601
|
+
*
|
|
15602
|
+
* The icon vocabulary is the location one, unchanged: a zone is drawn on the
|
|
15603
|
+
* same two surfaces by the same glyph map, so a second vocabulary would be a
|
|
15604
|
+
* second thing to keep drawable (`scripts/check-location-icons-drawable.ts`).
|
|
15605
|
+
*/
|
|
15606
|
+
/**
|
|
15607
|
+
* One zone as it travels: its key, the label the operator typed, its icon and
|
|
15608
|
+
* the locations inside it.
|
|
15609
|
+
*
|
|
15610
|
+
* The LABEL is carried alongside the key because the key is lossy on purpose —
|
|
15611
|
+
* a surface must show "Zona notte", not "zona notte". Locations are carried
|
|
15612
|
+
* here, rather than left to a second call, because every consumer wants both
|
|
15613
|
+
* at once and a viewer that asked twice could render a zone whose membership
|
|
15614
|
+
* it has not fetched yet.
|
|
15615
|
+
*
|
|
15616
|
+
* `icon: null` means nobody chose one, which is NOT the fallback pin: only one
|
|
15617
|
+
* of those two is a choice, and a picker has to draw them differently.
|
|
15618
|
+
*/
|
|
15619
|
+
var SiteZoneSchema = object({
|
|
15620
|
+
zoneKey: string(),
|
|
15621
|
+
label: string(),
|
|
15622
|
+
icon: LocationIconIdSchema.nullable(),
|
|
15623
|
+
/** Folded location keys, sorted. A location listed here need not be
|
|
15624
|
+
* REGISTERED — devices carry labels nobody registered, and those rooms are
|
|
15625
|
+
* the ones that most want grouping. */
|
|
15626
|
+
locationKeys: array(string())
|
|
15627
|
+
});
|
|
15564
15628
|
var ProviderStatusSchema = object({
|
|
15565
15629
|
connected: boolean(),
|
|
15566
15630
|
deviceCount: number(),
|
|
@@ -16078,6 +16142,33 @@ method(object({
|
|
|
16078
16142
|
}), _void(), {
|
|
16079
16143
|
kind: "mutation",
|
|
16080
16144
|
auth: "admin"
|
|
16145
|
+
}), method(_void(), array(LocationDescriptionAssignmentSchema)), method(object({
|
|
16146
|
+
location: string(),
|
|
16147
|
+
description: string().max(400).nullable()
|
|
16148
|
+
}), _void(), {
|
|
16149
|
+
kind: "mutation",
|
|
16150
|
+
auth: "admin"
|
|
16151
|
+
}), method(_void(), array(SiteZoneSchema)), method(object({
|
|
16152
|
+
name: string(),
|
|
16153
|
+
icon: LocationIconIdSchema.nullable().optional()
|
|
16154
|
+
}), _void(), {
|
|
16155
|
+
kind: "mutation",
|
|
16156
|
+
auth: "admin"
|
|
16157
|
+
}), method(object({ name: string() }), _void(), {
|
|
16158
|
+
kind: "mutation",
|
|
16159
|
+
auth: "admin"
|
|
16160
|
+
}), method(object({
|
|
16161
|
+
from: string(),
|
|
16162
|
+
to: string()
|
|
16163
|
+
}), _void(), {
|
|
16164
|
+
kind: "mutation",
|
|
16165
|
+
auth: "admin"
|
|
16166
|
+
}), method(object({
|
|
16167
|
+
location: string(),
|
|
16168
|
+
zone: string().nullable()
|
|
16169
|
+
}), _void(), {
|
|
16170
|
+
kind: "mutation",
|
|
16171
|
+
auth: "admin"
|
|
16081
16172
|
}), method(object({
|
|
16082
16173
|
deviceId: number(),
|
|
16083
16174
|
disabled: boolean()
|
|
@@ -36302,6 +36393,12 @@ Object.freeze({
|
|
|
36302
36393
|
addonId: null,
|
|
36303
36394
|
access: "view"
|
|
36304
36395
|
},
|
|
36396
|
+
"deviceManager.listLocationDescriptions": {
|
|
36397
|
+
capName: "device-manager",
|
|
36398
|
+
capScope: "system",
|
|
36399
|
+
addonId: null,
|
|
36400
|
+
access: "view"
|
|
36401
|
+
},
|
|
36305
36402
|
"deviceManager.listLocationIcons": {
|
|
36306
36403
|
capName: "device-manager",
|
|
36307
36404
|
capScope: "system",
|
|
@@ -36320,6 +36417,12 @@ Object.freeze({
|
|
|
36320
36417
|
addonId: null,
|
|
36321
36418
|
access: "view"
|
|
36322
36419
|
},
|
|
36420
|
+
"deviceManager.listSiteZones": {
|
|
36421
|
+
capName: "device-manager",
|
|
36422
|
+
capScope: "system",
|
|
36423
|
+
addonId: null,
|
|
36424
|
+
access: "view"
|
|
36425
|
+
},
|
|
36323
36426
|
"deviceManager.listWrappersForCap": {
|
|
36324
36427
|
capName: "device-manager",
|
|
36325
36428
|
capScope: "system",
|
|
@@ -36404,12 +36507,24 @@ Object.freeze({
|
|
|
36404
36507
|
addonId: null,
|
|
36405
36508
|
access: "delete"
|
|
36406
36509
|
},
|
|
36510
|
+
"deviceManager.removeSiteZone": {
|
|
36511
|
+
capName: "device-manager",
|
|
36512
|
+
capScope: "system",
|
|
36513
|
+
addonId: null,
|
|
36514
|
+
access: "delete"
|
|
36515
|
+
},
|
|
36407
36516
|
"deviceManager.renameLocation": {
|
|
36408
36517
|
capName: "device-manager",
|
|
36409
36518
|
capScope: "system",
|
|
36410
36519
|
addonId: null,
|
|
36411
36520
|
access: "create"
|
|
36412
36521
|
},
|
|
36522
|
+
"deviceManager.renameSiteZone": {
|
|
36523
|
+
capName: "device-manager",
|
|
36524
|
+
capScope: "system",
|
|
36525
|
+
addonId: null,
|
|
36526
|
+
access: "create"
|
|
36527
|
+
},
|
|
36413
36528
|
"deviceManager.runDeviceAction": {
|
|
36414
36529
|
capName: "device-manager",
|
|
36415
36530
|
capScope: "system",
|
|
@@ -36452,12 +36567,24 @@ Object.freeze({
|
|
|
36452
36567
|
addonId: null,
|
|
36453
36568
|
access: "create"
|
|
36454
36569
|
},
|
|
36570
|
+
"deviceManager.setLocationDescription": {
|
|
36571
|
+
capName: "device-manager",
|
|
36572
|
+
capScope: "system",
|
|
36573
|
+
addonId: null,
|
|
36574
|
+
access: "create"
|
|
36575
|
+
},
|
|
36455
36576
|
"deviceManager.setLocationIcon": {
|
|
36456
36577
|
capName: "device-manager",
|
|
36457
36578
|
capScope: "system",
|
|
36458
36579
|
addonId: null,
|
|
36459
36580
|
access: "create"
|
|
36460
36581
|
},
|
|
36582
|
+
"deviceManager.setLocationZone": {
|
|
36583
|
+
capName: "device-manager",
|
|
36584
|
+
capScope: "system",
|
|
36585
|
+
addonId: null,
|
|
36586
|
+
access: "create"
|
|
36587
|
+
},
|
|
36461
36588
|
"deviceManager.setMetadata": {
|
|
36462
36589
|
capName: "device-manager",
|
|
36463
36590
|
capScope: "system",
|
|
@@ -36488,6 +36615,12 @@ Object.freeze({
|
|
|
36488
36615
|
addonId: null,
|
|
36489
36616
|
access: "create"
|
|
36490
36617
|
},
|
|
36618
|
+
"deviceManager.setSiteZone": {
|
|
36619
|
+
capName: "device-manager",
|
|
36620
|
+
capScope: "system",
|
|
36621
|
+
addonId: null,
|
|
36622
|
+
access: "create"
|
|
36623
|
+
},
|
|
36491
36624
|
"deviceManager.setStreamProfileMap": {
|
|
36492
36625
|
capName: "device-manager",
|
|
36493
36626
|
capScope: "system",
|
|
@@ -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-DG74yV1a.js");
|
|
6
6
|
const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
|
|
7
7
|
let node_fs = require("node:fs");
|
|
8
8
|
let node_path = require("node:path");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $t as hydrateSchema, Wt as BaseAddon, X as evaluateZoneRules, ft as motionDetectionCapability, qt as DeviceType } from "../dist-
|
|
1
|
+
import { $t as hydrateSchema, Wt as BaseAddon, X as evaluateZoneRules, ft as motionDetectionCapability, qt as DeviceType } from "../dist-CGIdW7g5.mjs";
|
|
2
2
|
import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
|
|
3
3
|
import { readFileSync } from "node:fs";
|
|
4
4
|
import { join } from "node:path";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Bt as buildFfmpegArgs, Ht as isSoftwareDecode, Lt as errMsg, zt as Fmp4BoxSplitter } from "./dist-
|
|
1
|
+
import { Bt as buildFfmpegArgs, Ht as isSoftwareDecode, Lt as errMsg, zt as Fmp4BoxSplitter } from "./dist-CGIdW7g5.mjs";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import { realpathSync } from "node:fs";
|
|
4
4
|
import path from "node:path";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const require_chunk = require("./chunk-emK7D4bc.js");
|
|
2
|
-
const require_dist = require("./dist-
|
|
2
|
+
const require_dist = require("./dist-DG74yV1a.js");
|
|
3
3
|
let node_crypto = require("node:crypto");
|
|
4
4
|
let node_fs = require("node:fs");
|
|
5
5
|
node_fs = require_chunk.__toESM(node_fs, 1);
|
|
@@ -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_node = require("../node-
|
|
8
|
-
const require_default_detection_model = require("../default-detection-model-
|
|
6
|
+
const require_dist = require("../dist-DG74yV1a.js");
|
|
7
|
+
const require_node = require("../node-hnHqauG8.js");
|
|
8
|
+
const require_default_detection_model = require("../default-detection-model-DGkkGNxL.js");
|
|
9
9
|
const require_worker_protocol = require("../worker-protocol-B2MfQLlu.js");
|
|
10
10
|
const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
|
|
11
11
|
const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { $ as failureContributionCapability, Lt as errMsg, S as NativeLeaseSettingsSchema, U as deriveDetailCropRect, Wt as BaseAddon, Xt as customAction, Yt as createEvent, Zt as defineCustomActions, _ as FailureCounters, _t as pickDetailCropConvention, b as MOTION_CLOSE_AFTER_MS, bn as EventCategory, bt as pipelineRunnerCapability, cn as _enum, fn as lazy, hn as object, it as loadContributionCapability, ln as array, m as DEVICE_BACKEND_TO_FORMAT, mn as number, p as DEFAULT_NATIVE_LEASE_SETTINGS, pn as literal, rn as nodePin, u as DEFAULT_DETAIL_CROP_CONVENTION, un as boolean, vn as string, vt as pickNativeLeaseOverride, x as NativeLeaseAdmissionSchema } from "../dist-
|
|
2
|
-
import { i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-
|
|
3
|
-
import { a as localFrameRegistry, d as getStepDefinition, i as rootObjectGate, o as resolveFrameViewGeometry, r as macroGateVerdict } from "../default-detection-model-
|
|
1
|
+
import { $ as failureContributionCapability, Lt as errMsg, S as NativeLeaseSettingsSchema, U as deriveDetailCropRect, Wt as BaseAddon, Xt as customAction, Yt as createEvent, Zt as defineCustomActions, _ as FailureCounters, _t as pickDetailCropConvention, b as MOTION_CLOSE_AFTER_MS, bn as EventCategory, bt as pipelineRunnerCapability, cn as _enum, fn as lazy, hn as object, it as loadContributionCapability, ln as array, m as DEVICE_BACKEND_TO_FORMAT, mn as number, p as DEFAULT_NATIVE_LEASE_SETTINGS, pn as literal, rn as nodePin, u as DEFAULT_DETAIL_CROP_CONVENTION, un as boolean, vn as string, vt as pickNativeLeaseOverride, x as NativeLeaseAdmissionSchema } from "../dist-CGIdW7g5.mjs";
|
|
2
|
+
import { i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-C7MbYv9I.mjs";
|
|
3
|
+
import { a as localFrameRegistry, d as getStepDefinition, i as rootObjectGate, o as resolveFrameViewGeometry, r as macroGateVerdict } from "../default-detection-model-Bm04eyB4.mjs";
|
|
4
4
|
import { t as isWorkerReply } from "../worker-protocol-C_W-P_g-.mjs";
|
|
5
5
|
import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
|
|
6
6
|
import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const require_chunk = require("./chunk-emK7D4bc.js");
|
|
2
|
-
const require_dist = require("./dist-
|
|
2
|
+
const require_dist = require("./dist-DG74yV1a.js");
|
|
3
3
|
let node_fs = require("node:fs");
|
|
4
4
|
node_fs = require_chunk.__toESM(node_fs);
|
|
5
5
|
let node_child_process = require("node:child_process");
|
package/dist/recorder/index.js
CHANGED
|
@@ -3,8 +3,8 @@ 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_node = require("../node-
|
|
6
|
+
const require_dist = require("../dist-DG74yV1a.js");
|
|
7
|
+
const require_node = require("../node-hnHqauG8.js");
|
|
8
8
|
const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
|
|
9
9
|
const require_restream_intent = require("../restream-intent-C4adO0P8.js");
|
|
10
10
|
const require_retire_root_keys = require("../retire-root-keys-Csb8z2f3.js");
|
package/dist/recorder/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { $t as hydrateSchema, C as OpsLogEntrySchema, Ct as recordingExportCapability, D as RECORDING_EXPORT_MAX_READ_BYTES, Dt as resolveLocationMode, H as deriveBatteryPresence, I as batteryCapability, Kt as DeviceFeature, Lt as errMsg, Mt as storageOccupancyCapability, O as RecordingConfigSchema, Pt as stripRetiredBandPreBufferSec, Q as evictionPolicyOfLocation, St as recordingCapability, W as deriveRecordingMode, Wt as BaseAddon, Xt as customAction, Y as evaluateSensorEdge, Z as evictionPolicyForMode, Zt as defineCustomActions, _n as record, bn as EventCategory, cn as _enum, ct as mayReadLocation, d as DEFAULT_EVENTS_BAND_BUFFER_SEC, dt as modeMayWrite, et as gbToBytes, g as ExportRecordSchema, gn as preprocess, hn as object, i as BatteryStatusSchema, it as loadContributionCapability, jt as storageEvictableCapability, k as RecordingSignalStatusSchema, kt as resolveRecordingProfiles, ln as array, lt as mayWriteToLocation, mn as number, on as selectAssignedProfileSlots, qt as DeviceType, rn as nodePin, rt as isFirstLevelMacroClass, sn as sleep$1, un as boolean, ut as migrateLegacyDeviceSignalConfig, vn as string, wt as recordingSignalCapability } from "../dist-
|
|
2
|
-
import { a as physicalRootOf, i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-
|
|
1
|
+
import { $t as hydrateSchema, C as OpsLogEntrySchema, Ct as recordingExportCapability, D as RECORDING_EXPORT_MAX_READ_BYTES, Dt as resolveLocationMode, H as deriveBatteryPresence, I as batteryCapability, Kt as DeviceFeature, Lt as errMsg, Mt as storageOccupancyCapability, O as RecordingConfigSchema, Pt as stripRetiredBandPreBufferSec, Q as evictionPolicyOfLocation, St as recordingCapability, W as deriveRecordingMode, Wt as BaseAddon, Xt as customAction, Y as evaluateSensorEdge, Z as evictionPolicyForMode, Zt as defineCustomActions, _n as record, bn as EventCategory, cn as _enum, ct as mayReadLocation, d as DEFAULT_EVENTS_BAND_BUFFER_SEC, dt as modeMayWrite, et as gbToBytes, g as ExportRecordSchema, gn as preprocess, hn as object, i as BatteryStatusSchema, it as loadContributionCapability, jt as storageEvictableCapability, k as RecordingSignalStatusSchema, kt as resolveRecordingProfiles, ln as array, lt as mayWriteToLocation, mn as number, on as selectAssignedProfileSlots, qt as DeviceType, rn as nodePin, rt as isFirstLevelMacroClass, sn as sleep$1, un as boolean, ut as migrateLegacyDeviceSignalConfig, vn as string, wt as recordingSignalCapability } from "../dist-CGIdW7g5.mjs";
|
|
2
|
+
import { a as physicalRootOf, i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-C7MbYv9I.mjs";
|
|
3
3
|
import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
|
|
4
4
|
import { c as PREBUFFER_MAX_MS, r as RECORDING_PRE_ROLL_REQUEST_MS, s as withRecordingIntent } from "../restream-intent-MeJhGCK9.mjs";
|
|
5
5
|
import { n as RowMapStore, t as retireRootKeys } from "../retire-root-keys-DZvlso2l.mjs";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const require_chunk = require("./chunk-emK7D4bc.js");
|
|
2
|
-
const require_dist = require("./dist-
|
|
2
|
+
const require_dist = require("./dist-DG74yV1a.js");
|
|
3
3
|
let node_child_process = require("node:child_process");
|
|
4
4
|
//#region ../../node_modules/mp4box/dist/mp4box.all.js
|
|
5
5
|
var require_mp4box_all = /* @__PURE__ */ require_chunk.__commonJSMin(((exports) => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { r as __toESM, t as __commonJSMin } from "./chunk-DnnnRqeS.mjs";
|
|
2
|
-
import { Lt as errMsg } from "./dist-
|
|
2
|
+
import { Lt as errMsg } from "./dist-CGIdW7g5.mjs";
|
|
3
3
|
import { spawn } from "node:child_process";
|
|
4
4
|
//#region ../../node_modules/mp4box/dist/mp4box.all.js
|
|
5
5
|
var require_mp4box_all = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { a as e, c as t, d as n, f as r, i, l as a, n as o, o as s, p as c, r as l, s as u, t as d, u as f } from "./_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-
|
|
1
|
+
import { a as e, c as t, d as n, f as r, i, l as a, n as o, o as s, p as c, r as l, s as u, t as d, u as f } from "./_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-BHtcf-Mo.mjs";
|
|
2
2
|
import { a as p, i as m, n as h, o as g, r as _, t as v } from "./_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare__react__loadShare__.js-C9j-2lBe.mjs";
|
|
3
3
|
import { n as y, r as b, t as x } from "./_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-XO0-Pyu6.mjs";
|
|
4
|
-
import { t as S } from "./_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-
|
|
4
|
+
import { t as S } from "./_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-k114uFcJ.mjs";
|
|
5
5
|
import { n as C, t as w } from "./_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-BO7TIbJV.mjs";
|
|
6
6
|
//#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
|
|
7
7
|
var T = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), E = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), D = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), O = (e) => {
|
|
@@ -3,7 +3,7 @@ import "./dist-CYZr2fwk.mjs";
|
|
|
3
3
|
var e = {
|
|
4
4
|
"@camstack/sdk": {
|
|
5
5
|
name: "@camstack/sdk",
|
|
6
|
-
version: "1.2.
|
|
6
|
+
version: "1.2.110",
|
|
7
7
|
scope: ["default"],
|
|
8
8
|
loaded: !1,
|
|
9
9
|
from: "addon_stream_broker_widgets",
|
|
@@ -18,7 +18,7 @@ var e = {
|
|
|
18
18
|
},
|
|
19
19
|
"@camstack/types": {
|
|
20
20
|
name: "@camstack/types",
|
|
21
|
-
version: "1.2.
|
|
21
|
+
version: "1.2.204",
|
|
22
22
|
scope: ["default"],
|
|
23
23
|
loaded: !1,
|
|
24
24
|
from: "addon_stream_broker_widgets",
|
|
@@ -33,7 +33,7 @@ var e = {
|
|
|
33
33
|
},
|
|
34
34
|
"@camstack/ui-library": {
|
|
35
35
|
name: "@camstack/ui-library",
|
|
36
|
-
version: "1.2.
|
|
36
|
+
version: "1.2.169",
|
|
37
37
|
scope: ["default"],
|
|
38
38
|
loaded: !1,
|
|
39
39
|
from: "addon_stream_broker_widgets",
|