@camstack/addon-osd-manager 0.1.114 → 0.1.116
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/{MotionZonesSettings-BdNUZENC.mjs → MotionZonesSettings-UmnzuMVo.mjs} +2 -2
- package/dist/{PrivacyMaskSettings-BAxcyb6o.mjs → PrivacyMaskSettings-Iurq6UOK.mjs} +4 -4
- package/dist/{SceneMonitorEditor-QKNP2Oqi.mjs → SceneMonitorEditor-iThkwqyU.mjs} +3 -3
- package/dist/_stub.js +10 -10
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-DP50dzL3.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-zsqJg38M.mjs} +3 -3
- package/dist/_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-jtQo5ytj.mjs +26 -0
- package/dist/addon-osd-manager.css +1 -1
- package/dist/{hostInit-Cg175nrR.mjs → hostInit-DH-Bs_SM.mjs} +2 -2
- package/dist/index.js +171 -3
- package/dist/index.mjs +171 -3
- package/dist/{player-overlays-DNgswryR.mjs → player-overlays-CGmnO3IW.mjs} +1 -1
- package/dist/remoteEntry.js +1 -1
- package/dist/{responsive-CyxVQv1w.mjs → responsive-BE9iwgH2.mjs} +1 -1
- package/dist/{scene-monitor-copy-c-4L86AE.mjs → scene-monitor-copy-BAjfOlLd.mjs} +1 -1
- package/dist/{square-CO2tx5lX.mjs → square-BGuz1y74.mjs} +1 -1
- package/dist/{trash-2-5PosLPsE.mjs → trash-2-CUjdJqhf.mjs} +1 -1
- package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-B9k6WP4J.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-D0jfEGFZ.mjs} +1 -1
- package/package.json +1 -1
- package/dist/_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DceUVoHS.mjs +0 -26
package/dist/index.js
CHANGED
|
@@ -5363,7 +5363,7 @@ var ZodIssueCode = {
|
|
|
5363
5363
|
var ZodFirstPartyTypeKind;
|
|
5364
5364
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5365
5365
|
//#endregion
|
|
5366
|
-
//#region ../types/dist/sleep-
|
|
5366
|
+
//#region ../types/dist/sleep-CiR4z7r9.mjs
|
|
5367
5367
|
/**
|
|
5368
5368
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5369
5369
|
* window to float samples (D455).
|
|
@@ -6505,6 +6505,17 @@ var CamProfileSchema = _enum([
|
|
|
6505
6505
|
"mid",
|
|
6506
6506
|
"low"
|
|
6507
6507
|
]);
|
|
6508
|
+
/**
|
|
6509
|
+
* Which rung a per-camera consumer listens on: an explicit profile, or `auto`.
|
|
6510
|
+
*
|
|
6511
|
+
* `auto` is a REAL value, not an absent one — it means "resolve it by the rule
|
|
6512
|
+
* that consumer owns". It lives beside `CamProfile` because a rung is the only
|
|
6513
|
+
* operator-facing way to name a stream: a cam-stream id is broker-internal and
|
|
6514
|
+
* moves when a slot is reassigned, so a stored id silently stops meaning what
|
|
6515
|
+
* the operator picked. Today's one user is the audio analyser, whose rule is
|
|
6516
|
+
* "the lowest AVAILABLE native rung" (D537).
|
|
6517
|
+
*/
|
|
6518
|
+
var AudioStreamPickSchema = union([CamProfileSchema, literal("auto")]);
|
|
6508
6519
|
var CamStreamKindSchema = _enum([
|
|
6509
6520
|
"pull-rtsp",
|
|
6510
6521
|
"pull-rtmp",
|
|
@@ -23172,6 +23183,7 @@ var MediaFileKindEnum = _enum([
|
|
|
23172
23183
|
"keyFrameSmall",
|
|
23173
23184
|
"thumbnailSmall",
|
|
23174
23185
|
"confirmationCrop",
|
|
23186
|
+
"debugCrop",
|
|
23175
23187
|
"sceneFrame"
|
|
23176
23188
|
]);
|
|
23177
23189
|
/**
|
|
@@ -25472,6 +25484,18 @@ var RunnerCameraConfigSchema = object({
|
|
|
25472
25484
|
motionStreamId: string(),
|
|
25473
25485
|
detectionStreamId: string(),
|
|
25474
25486
|
/**
|
|
25487
|
+
* Which rung this camera's audio analysis listens on — `auto` (the lowest
|
|
25488
|
+
* AVAILABLE native rung) or an explicit one.
|
|
25489
|
+
*
|
|
25490
|
+
* Not consumed by the runner: carried here so it travels with the camera's
|
|
25491
|
+
* config the way `audioMotionWindowMs` does, and so the orchestrator's
|
|
25492
|
+
* watchdog resolves the same stream the audio subscription did. OPTIONAL
|
|
25493
|
+
* with no default — absent means `auto`, which is what every camera written
|
|
25494
|
+
* before this field had, and an absent optional adds nothing to the
|
|
25495
|
+
* generated cap-input defaults (D537).
|
|
25496
|
+
*/
|
|
25497
|
+
audioStreamPick: AudioStreamPickSchema.optional(),
|
|
25498
|
+
/**
|
|
25475
25499
|
* Motion sources that can activate the pipeline. At least one must
|
|
25476
25500
|
* be present. Multiple sources OR-ed: any one firing arms the
|
|
25477
25501
|
* cooldown timer and transitions watching → active. The same
|
|
@@ -29008,6 +29032,104 @@ var WebrtcStreamChoiceSchema = object({
|
|
|
29008
29032
|
bitrateKbps: number().nullable()
|
|
29009
29033
|
});
|
|
29010
29034
|
/**
|
|
29035
|
+
* The last move the adaptive ladder made on this session, and the numbers it
|
|
29036
|
+
* rested on. Mirrors `LadderDecision` in the stream-broker's
|
|
29037
|
+
* `adaptive-controller.ts` — the log line's evidence, made readable.
|
|
29038
|
+
*
|
|
29039
|
+
* Nullability is load-bearing: `lossRatio: null` means the loss tracker had
|
|
29040
|
+
* no window to report, which is NOT a link with zero loss.
|
|
29041
|
+
*/
|
|
29042
|
+
var WebrtcLadderDecisionSchema = object({
|
|
29043
|
+
/** `loss` — RTCP / client-reported packet loss; `stall` — the picture
|
|
29044
|
+
* stopped moving; `healthy` — a promotion. */
|
|
29045
|
+
cause: _enum([
|
|
29046
|
+
"loss",
|
|
29047
|
+
"stall",
|
|
29048
|
+
"healthy"
|
|
29049
|
+
]),
|
|
29050
|
+
/** The rung the ladder moved TO. Null for a move that changed no rung
|
|
29051
|
+
* (an MTU reduction, a forced transcode-down at the bottom). */
|
|
29052
|
+
tier: CamProfileSchema.nullable(),
|
|
29053
|
+
/** Whether that move forced the egress transcode-down rung. */
|
|
29054
|
+
forcedTranscodeDown: boolean(),
|
|
29055
|
+
/** Loss ratio over the tracker's window at the moment of the decision. */
|
|
29056
|
+
lossRatio: number().nullable(),
|
|
29057
|
+
/** The client's reported downlink at that moment, in kbps. */
|
|
29058
|
+
clientKbps: number().nullable(),
|
|
29059
|
+
/** How long the stall detector had been seeing nothing arrive. */
|
|
29060
|
+
stalledForMs: number().nullable(),
|
|
29061
|
+
/** Whether the broker WAS sending while that was measured — the half that
|
|
29062
|
+
* separates "the camera stopped" from "the link stopped". */
|
|
29063
|
+
serverSending: boolean().nullable(),
|
|
29064
|
+
/** Epoch ms. The overlay prints its age; a decision from 40 minutes ago
|
|
29065
|
+
* must not read like one from this second. */
|
|
29066
|
+
at: number()
|
|
29067
|
+
});
|
|
29068
|
+
/** Per-tier count of MEASURED downgrades this viewer session has suffered. */
|
|
29069
|
+
var WebrtcTierFailureSchema = object({
|
|
29070
|
+
tier: CamProfileSchema,
|
|
29071
|
+
failures: number().int().nonnegative()
|
|
29072
|
+
});
|
|
29073
|
+
/**
|
|
29074
|
+
* What the SERVER decided for one WebRTC session — the half the client cannot
|
|
29075
|
+
* measure. See `getSessionDebug`.
|
|
29076
|
+
*/
|
|
29077
|
+
var WebrtcSessionDebugSchema = object({
|
|
29078
|
+
sessionId: string(),
|
|
29079
|
+
/** Whether the session still exists here. Everything below is null when
|
|
29080
|
+
* it does not — a dead session has no measurements, not zero ones. */
|
|
29081
|
+
alive: boolean(),
|
|
29082
|
+
/** Epoch ms this snapshot was taken, so the overlay can show its age. */
|
|
29083
|
+
observedAt: number(),
|
|
29084
|
+
/** The broker actually feeding this session (`<deviceId>/<camStreamId>`). */
|
|
29085
|
+
brokerId: string().nullable(),
|
|
29086
|
+
camStreamId: string().nullable(),
|
|
29087
|
+
/** `derived` = this hub BUILT the rung being served (a transcode/scale of
|
|
29088
|
+
* another stream); `native` = the camera's own encode. */
|
|
29089
|
+
sourceKind: _enum([
|
|
29090
|
+
"native",
|
|
29091
|
+
"derived",
|
|
29092
|
+
"unknown"
|
|
29093
|
+
]),
|
|
29094
|
+
/** Whether the ladder is running at all (an `adaptive` target). */
|
|
29095
|
+
adaptive: boolean(),
|
|
29096
|
+
/** The rung `auto` ACTUALLY resolved to right now. Null when the broker
|
|
29097
|
+
* is bound to no profile slot (a manually-activated stream). */
|
|
29098
|
+
servedTier: CamProfileSchema.nullable(),
|
|
29099
|
+
/** Which node ingests the source. Null when unresolved. */
|
|
29100
|
+
ingestNodeId: string().nullable(),
|
|
29101
|
+
/** Whether that node is a remote one (the media crosses a node boundary
|
|
29102
|
+
* before it reaches this session). Null when unresolved. */
|
|
29103
|
+
ingestIsRemote: boolean().nullable(),
|
|
29104
|
+
/** Codec off the source, and the one negotiated with this client. */
|
|
29105
|
+
sourceCodec: string().nullable(),
|
|
29106
|
+
negotiatedCodec: string().nullable(),
|
|
29107
|
+
/** Whether the EGRESS leg re-encodes for this client or forwards the
|
|
29108
|
+
* source bytes untouched. */
|
|
29109
|
+
egressLeg: _enum([
|
|
29110
|
+
"copy",
|
|
29111
|
+
"transcode",
|
|
29112
|
+
"unknown"
|
|
29113
|
+
]),
|
|
29114
|
+
/** What the broker itself reports about the rung it is serving. */
|
|
29115
|
+
brokerStatus: string().nullable(),
|
|
29116
|
+
brokerCodec: string().nullable(),
|
|
29117
|
+
brokerBitrateKbps: number().nullable(),
|
|
29118
|
+
brokerInputFps: number().nullable(),
|
|
29119
|
+
brokerUptimeMs: number().nullable(),
|
|
29120
|
+
/** RTP packets this session has sent — the server's own "am I sending?". */
|
|
29121
|
+
rtpPacketsSent: number().nullable(),
|
|
29122
|
+
/** D42: the track may be carrying the recorded feeder, not live. The ladder
|
|
29123
|
+
* is suspended there, so a frozen picture in `recorded` mode means
|
|
29124
|
+
* something entirely different. */
|
|
29125
|
+
trackMode: _enum(["live", "recorded"]).nullable(),
|
|
29126
|
+
lastDecision: WebrtcLadderDecisionSchema.nullable(),
|
|
29127
|
+
tierFailures: array(WebrtcTierFailureSchema),
|
|
29128
|
+
/** Successful promotions in this viewer session (drives the progressive
|
|
29129
|
+
* healthy timer). Null when no ladder is running. */
|
|
29130
|
+
upgradeCount: number().nullable()
|
|
29131
|
+
});
|
|
29132
|
+
/**
|
|
29011
29133
|
* WebRTC session — device-scoped facade over the system `webrtc` cap.
|
|
29012
29134
|
*
|
|
29013
29135
|
* Exposes per-device signaling (`createSession`, `handleAnswer`,
|
|
@@ -29247,7 +29369,27 @@ var webrtcSessionCapability = {
|
|
|
29247
29369
|
* the same answer as "it ended": either way nothing is holding it up.
|
|
29248
29370
|
*/
|
|
29249
29371
|
alive: boolean()
|
|
29250
|
-
}))
|
|
29372
|
+
})),
|
|
29373
|
+
/**
|
|
29374
|
+
* The SERVER's half of the stream-debug overlay, for one live session.
|
|
29375
|
+
*
|
|
29376
|
+
* The client can measure its own transport (`getStats()`); it cannot see
|
|
29377
|
+
* which rung `auto` actually resolved to, why the ladder last moved, or
|
|
29378
|
+
* whether the rung it is being served is the camera's own encode or
|
|
29379
|
+
* something this hub built. That asymmetry is why "quality is stuck on
|
|
29380
|
+
* low" reports have historically been unanswerable from the viewer alone.
|
|
29381
|
+
*
|
|
29382
|
+
* EVERY measurement here is nullable and `null` means UNKNOWN, never zero
|
|
29383
|
+
* (D393): a session whose ladder has never moved reports
|
|
29384
|
+
* `lastDecision: null`, which is a different fact from a ladder that moved
|
|
29385
|
+
* for `healthy` with a 0 loss ratio.
|
|
29386
|
+
*
|
|
29387
|
+
* Read-only, ~1 Hz, polled by the overlay only while it is visible.
|
|
29388
|
+
*/
|
|
29389
|
+
getSessionDebug: method(object({
|
|
29390
|
+
deviceId: number().int().nonnegative(),
|
|
29391
|
+
sessionId: string()
|
|
29392
|
+
}), WebrtcSessionDebugSchema, { kind: "query" })
|
|
29251
29393
|
},
|
|
29252
29394
|
/** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
|
|
29253
29395
|
mount: { kind: "server-provided" }
|
|
@@ -34188,7 +34330,16 @@ var GridProfileOfferSchema = object({
|
|
|
34188
34330
|
* grid came out as, and because it is the number an operator would otherwise
|
|
34189
34331
|
* expect to type.
|
|
34190
34332
|
*/
|
|
34191
|
-
canvas: string()
|
|
34333
|
+
canvas: string(),
|
|
34334
|
+
/**
|
|
34335
|
+
* Whether this profile is PUBLISHED, of the ones the grid could serve.
|
|
34336
|
+
*
|
|
34337
|
+
* A grid's `high` is composed of its sources' `high`, so on a 4K fleet it is
|
|
34338
|
+
* a 4K canvas built from 4K decodes — something to opt into, not something a
|
|
34339
|
+
* viewer's adaptive should be handed by climbing to the top rung it can see.
|
|
34340
|
+
* Default is `mid` + `low`.
|
|
34341
|
+
*/
|
|
34342
|
+
published: boolean()
|
|
34192
34343
|
});
|
|
34193
34344
|
var GridLayoutViewSchema = object({
|
|
34194
34345
|
/** The persisted grid row this camera was declared from. */
|
|
@@ -34211,6 +34362,12 @@ var GridLayoutPatchSchema = object({
|
|
|
34211
34362
|
deviceId: number().int().nonnegative(),
|
|
34212
34363
|
name: string().min(1).max(160).optional(),
|
|
34213
34364
|
fps: number().int().min(1).max(60).optional(),
|
|
34365
|
+
/** Which profiles to publish. See `GridProfileOffer.published`. */
|
|
34366
|
+
publishedProfiles: array(_enum([
|
|
34367
|
+
"high",
|
|
34368
|
+
"mid",
|
|
34369
|
+
"low"
|
|
34370
|
+
])).max(3).optional(),
|
|
34214
34371
|
/**
|
|
34215
34372
|
* The whole cell list at once. A per-cell patch would need an ordering the
|
|
34216
34373
|
* editor does not have, and a half-applied layout is a picture nobody asked
|
|
@@ -46948,6 +47105,12 @@ Object.freeze({
|
|
|
46948
47105
|
addonId: null,
|
|
46949
47106
|
access: "view"
|
|
46950
47107
|
},
|
|
47108
|
+
"webrtcSession.getSessionDebug": {
|
|
47109
|
+
capName: "webrtc-session",
|
|
47110
|
+
capScope: "device",
|
|
47111
|
+
addonId: null,
|
|
47112
|
+
access: "view"
|
|
47113
|
+
},
|
|
46951
47114
|
"webrtcSession.getSessionState": {
|
|
46952
47115
|
capName: "webrtc-session",
|
|
46953
47116
|
capScope: "device",
|
|
@@ -48931,6 +49094,11 @@ Object.freeze({
|
|
|
48931
49094
|
form: "single",
|
|
48932
49095
|
optional: false
|
|
48933
49096
|
}],
|
|
49097
|
+
"webrtcSession.getSessionDebug": [{
|
|
49098
|
+
name: "deviceId",
|
|
49099
|
+
form: "single",
|
|
49100
|
+
optional: false
|
|
49101
|
+
}],
|
|
48934
49102
|
"webrtcSession.getSessionState": [{
|
|
48935
49103
|
name: "deviceId",
|
|
48936
49104
|
form: "single",
|
package/dist/index.mjs
CHANGED
|
@@ -5359,7 +5359,7 @@ var ZodIssueCode = {
|
|
|
5359
5359
|
var ZodFirstPartyTypeKind;
|
|
5360
5360
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5361
5361
|
//#endregion
|
|
5362
|
-
//#region ../types/dist/sleep-
|
|
5362
|
+
//#region ../types/dist/sleep-CiR4z7r9.mjs
|
|
5363
5363
|
/**
|
|
5364
5364
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5365
5365
|
* window to float samples (D455).
|
|
@@ -6501,6 +6501,17 @@ var CamProfileSchema = _enum([
|
|
|
6501
6501
|
"mid",
|
|
6502
6502
|
"low"
|
|
6503
6503
|
]);
|
|
6504
|
+
/**
|
|
6505
|
+
* Which rung a per-camera consumer listens on: an explicit profile, or `auto`.
|
|
6506
|
+
*
|
|
6507
|
+
* `auto` is a REAL value, not an absent one — it means "resolve it by the rule
|
|
6508
|
+
* that consumer owns". It lives beside `CamProfile` because a rung is the only
|
|
6509
|
+
* operator-facing way to name a stream: a cam-stream id is broker-internal and
|
|
6510
|
+
* moves when a slot is reassigned, so a stored id silently stops meaning what
|
|
6511
|
+
* the operator picked. Today's one user is the audio analyser, whose rule is
|
|
6512
|
+
* "the lowest AVAILABLE native rung" (D537).
|
|
6513
|
+
*/
|
|
6514
|
+
var AudioStreamPickSchema = union([CamProfileSchema, literal("auto")]);
|
|
6504
6515
|
var CamStreamKindSchema = _enum([
|
|
6505
6516
|
"pull-rtsp",
|
|
6506
6517
|
"pull-rtmp",
|
|
@@ -23168,6 +23179,7 @@ var MediaFileKindEnum = _enum([
|
|
|
23168
23179
|
"keyFrameSmall",
|
|
23169
23180
|
"thumbnailSmall",
|
|
23170
23181
|
"confirmationCrop",
|
|
23182
|
+
"debugCrop",
|
|
23171
23183
|
"sceneFrame"
|
|
23172
23184
|
]);
|
|
23173
23185
|
/**
|
|
@@ -25468,6 +25480,18 @@ var RunnerCameraConfigSchema = object({
|
|
|
25468
25480
|
motionStreamId: string(),
|
|
25469
25481
|
detectionStreamId: string(),
|
|
25470
25482
|
/**
|
|
25483
|
+
* Which rung this camera's audio analysis listens on — `auto` (the lowest
|
|
25484
|
+
* AVAILABLE native rung) or an explicit one.
|
|
25485
|
+
*
|
|
25486
|
+
* Not consumed by the runner: carried here so it travels with the camera's
|
|
25487
|
+
* config the way `audioMotionWindowMs` does, and so the orchestrator's
|
|
25488
|
+
* watchdog resolves the same stream the audio subscription did. OPTIONAL
|
|
25489
|
+
* with no default — absent means `auto`, which is what every camera written
|
|
25490
|
+
* before this field had, and an absent optional adds nothing to the
|
|
25491
|
+
* generated cap-input defaults (D537).
|
|
25492
|
+
*/
|
|
25493
|
+
audioStreamPick: AudioStreamPickSchema.optional(),
|
|
25494
|
+
/**
|
|
25471
25495
|
* Motion sources that can activate the pipeline. At least one must
|
|
25472
25496
|
* be present. Multiple sources OR-ed: any one firing arms the
|
|
25473
25497
|
* cooldown timer and transitions watching → active. The same
|
|
@@ -29004,6 +29028,104 @@ var WebrtcStreamChoiceSchema = object({
|
|
|
29004
29028
|
bitrateKbps: number().nullable()
|
|
29005
29029
|
});
|
|
29006
29030
|
/**
|
|
29031
|
+
* The last move the adaptive ladder made on this session, and the numbers it
|
|
29032
|
+
* rested on. Mirrors `LadderDecision` in the stream-broker's
|
|
29033
|
+
* `adaptive-controller.ts` — the log line's evidence, made readable.
|
|
29034
|
+
*
|
|
29035
|
+
* Nullability is load-bearing: `lossRatio: null` means the loss tracker had
|
|
29036
|
+
* no window to report, which is NOT a link with zero loss.
|
|
29037
|
+
*/
|
|
29038
|
+
var WebrtcLadderDecisionSchema = object({
|
|
29039
|
+
/** `loss` — RTCP / client-reported packet loss; `stall` — the picture
|
|
29040
|
+
* stopped moving; `healthy` — a promotion. */
|
|
29041
|
+
cause: _enum([
|
|
29042
|
+
"loss",
|
|
29043
|
+
"stall",
|
|
29044
|
+
"healthy"
|
|
29045
|
+
]),
|
|
29046
|
+
/** The rung the ladder moved TO. Null for a move that changed no rung
|
|
29047
|
+
* (an MTU reduction, a forced transcode-down at the bottom). */
|
|
29048
|
+
tier: CamProfileSchema.nullable(),
|
|
29049
|
+
/** Whether that move forced the egress transcode-down rung. */
|
|
29050
|
+
forcedTranscodeDown: boolean(),
|
|
29051
|
+
/** Loss ratio over the tracker's window at the moment of the decision. */
|
|
29052
|
+
lossRatio: number().nullable(),
|
|
29053
|
+
/** The client's reported downlink at that moment, in kbps. */
|
|
29054
|
+
clientKbps: number().nullable(),
|
|
29055
|
+
/** How long the stall detector had been seeing nothing arrive. */
|
|
29056
|
+
stalledForMs: number().nullable(),
|
|
29057
|
+
/** Whether the broker WAS sending while that was measured — the half that
|
|
29058
|
+
* separates "the camera stopped" from "the link stopped". */
|
|
29059
|
+
serverSending: boolean().nullable(),
|
|
29060
|
+
/** Epoch ms. The overlay prints its age; a decision from 40 minutes ago
|
|
29061
|
+
* must not read like one from this second. */
|
|
29062
|
+
at: number()
|
|
29063
|
+
});
|
|
29064
|
+
/** Per-tier count of MEASURED downgrades this viewer session has suffered. */
|
|
29065
|
+
var WebrtcTierFailureSchema = object({
|
|
29066
|
+
tier: CamProfileSchema,
|
|
29067
|
+
failures: number().int().nonnegative()
|
|
29068
|
+
});
|
|
29069
|
+
/**
|
|
29070
|
+
* What the SERVER decided for one WebRTC session — the half the client cannot
|
|
29071
|
+
* measure. See `getSessionDebug`.
|
|
29072
|
+
*/
|
|
29073
|
+
var WebrtcSessionDebugSchema = object({
|
|
29074
|
+
sessionId: string(),
|
|
29075
|
+
/** Whether the session still exists here. Everything below is null when
|
|
29076
|
+
* it does not — a dead session has no measurements, not zero ones. */
|
|
29077
|
+
alive: boolean(),
|
|
29078
|
+
/** Epoch ms this snapshot was taken, so the overlay can show its age. */
|
|
29079
|
+
observedAt: number(),
|
|
29080
|
+
/** The broker actually feeding this session (`<deviceId>/<camStreamId>`). */
|
|
29081
|
+
brokerId: string().nullable(),
|
|
29082
|
+
camStreamId: string().nullable(),
|
|
29083
|
+
/** `derived` = this hub BUILT the rung being served (a transcode/scale of
|
|
29084
|
+
* another stream); `native` = the camera's own encode. */
|
|
29085
|
+
sourceKind: _enum([
|
|
29086
|
+
"native",
|
|
29087
|
+
"derived",
|
|
29088
|
+
"unknown"
|
|
29089
|
+
]),
|
|
29090
|
+
/** Whether the ladder is running at all (an `adaptive` target). */
|
|
29091
|
+
adaptive: boolean(),
|
|
29092
|
+
/** The rung `auto` ACTUALLY resolved to right now. Null when the broker
|
|
29093
|
+
* is bound to no profile slot (a manually-activated stream). */
|
|
29094
|
+
servedTier: CamProfileSchema.nullable(),
|
|
29095
|
+
/** Which node ingests the source. Null when unresolved. */
|
|
29096
|
+
ingestNodeId: string().nullable(),
|
|
29097
|
+
/** Whether that node is a remote one (the media crosses a node boundary
|
|
29098
|
+
* before it reaches this session). Null when unresolved. */
|
|
29099
|
+
ingestIsRemote: boolean().nullable(),
|
|
29100
|
+
/** Codec off the source, and the one negotiated with this client. */
|
|
29101
|
+
sourceCodec: string().nullable(),
|
|
29102
|
+
negotiatedCodec: string().nullable(),
|
|
29103
|
+
/** Whether the EGRESS leg re-encodes for this client or forwards the
|
|
29104
|
+
* source bytes untouched. */
|
|
29105
|
+
egressLeg: _enum([
|
|
29106
|
+
"copy",
|
|
29107
|
+
"transcode",
|
|
29108
|
+
"unknown"
|
|
29109
|
+
]),
|
|
29110
|
+
/** What the broker itself reports about the rung it is serving. */
|
|
29111
|
+
brokerStatus: string().nullable(),
|
|
29112
|
+
brokerCodec: string().nullable(),
|
|
29113
|
+
brokerBitrateKbps: number().nullable(),
|
|
29114
|
+
brokerInputFps: number().nullable(),
|
|
29115
|
+
brokerUptimeMs: number().nullable(),
|
|
29116
|
+
/** RTP packets this session has sent — the server's own "am I sending?". */
|
|
29117
|
+
rtpPacketsSent: number().nullable(),
|
|
29118
|
+
/** D42: the track may be carrying the recorded feeder, not live. The ladder
|
|
29119
|
+
* is suspended there, so a frozen picture in `recorded` mode means
|
|
29120
|
+
* something entirely different. */
|
|
29121
|
+
trackMode: _enum(["live", "recorded"]).nullable(),
|
|
29122
|
+
lastDecision: WebrtcLadderDecisionSchema.nullable(),
|
|
29123
|
+
tierFailures: array(WebrtcTierFailureSchema),
|
|
29124
|
+
/** Successful promotions in this viewer session (drives the progressive
|
|
29125
|
+
* healthy timer). Null when no ladder is running. */
|
|
29126
|
+
upgradeCount: number().nullable()
|
|
29127
|
+
});
|
|
29128
|
+
/**
|
|
29007
29129
|
* WebRTC session — device-scoped facade over the system `webrtc` cap.
|
|
29008
29130
|
*
|
|
29009
29131
|
* Exposes per-device signaling (`createSession`, `handleAnswer`,
|
|
@@ -29243,7 +29365,27 @@ var webrtcSessionCapability = {
|
|
|
29243
29365
|
* the same answer as "it ended": either way nothing is holding it up.
|
|
29244
29366
|
*/
|
|
29245
29367
|
alive: boolean()
|
|
29246
|
-
}))
|
|
29368
|
+
})),
|
|
29369
|
+
/**
|
|
29370
|
+
* The SERVER's half of the stream-debug overlay, for one live session.
|
|
29371
|
+
*
|
|
29372
|
+
* The client can measure its own transport (`getStats()`); it cannot see
|
|
29373
|
+
* which rung `auto` actually resolved to, why the ladder last moved, or
|
|
29374
|
+
* whether the rung it is being served is the camera's own encode or
|
|
29375
|
+
* something this hub built. That asymmetry is why "quality is stuck on
|
|
29376
|
+
* low" reports have historically been unanswerable from the viewer alone.
|
|
29377
|
+
*
|
|
29378
|
+
* EVERY measurement here is nullable and `null` means UNKNOWN, never zero
|
|
29379
|
+
* (D393): a session whose ladder has never moved reports
|
|
29380
|
+
* `lastDecision: null`, which is a different fact from a ladder that moved
|
|
29381
|
+
* for `healthy` with a 0 loss ratio.
|
|
29382
|
+
*
|
|
29383
|
+
* Read-only, ~1 Hz, polled by the overlay only while it is visible.
|
|
29384
|
+
*/
|
|
29385
|
+
getSessionDebug: method(object({
|
|
29386
|
+
deviceId: number().int().nonnegative(),
|
|
29387
|
+
sessionId: string()
|
|
29388
|
+
}), WebrtcSessionDebugSchema, { kind: "query" })
|
|
29247
29389
|
},
|
|
29248
29390
|
/** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
|
|
29249
29391
|
mount: { kind: "server-provided" }
|
|
@@ -34184,7 +34326,16 @@ var GridProfileOfferSchema = object({
|
|
|
34184
34326
|
* grid came out as, and because it is the number an operator would otherwise
|
|
34185
34327
|
* expect to type.
|
|
34186
34328
|
*/
|
|
34187
|
-
canvas: string()
|
|
34329
|
+
canvas: string(),
|
|
34330
|
+
/**
|
|
34331
|
+
* Whether this profile is PUBLISHED, of the ones the grid could serve.
|
|
34332
|
+
*
|
|
34333
|
+
* A grid's `high` is composed of its sources' `high`, so on a 4K fleet it is
|
|
34334
|
+
* a 4K canvas built from 4K decodes — something to opt into, not something a
|
|
34335
|
+
* viewer's adaptive should be handed by climbing to the top rung it can see.
|
|
34336
|
+
* Default is `mid` + `low`.
|
|
34337
|
+
*/
|
|
34338
|
+
published: boolean()
|
|
34188
34339
|
});
|
|
34189
34340
|
var GridLayoutViewSchema = object({
|
|
34190
34341
|
/** The persisted grid row this camera was declared from. */
|
|
@@ -34207,6 +34358,12 @@ var GridLayoutPatchSchema = object({
|
|
|
34207
34358
|
deviceId: number().int().nonnegative(),
|
|
34208
34359
|
name: string().min(1).max(160).optional(),
|
|
34209
34360
|
fps: number().int().min(1).max(60).optional(),
|
|
34361
|
+
/** Which profiles to publish. See `GridProfileOffer.published`. */
|
|
34362
|
+
publishedProfiles: array(_enum([
|
|
34363
|
+
"high",
|
|
34364
|
+
"mid",
|
|
34365
|
+
"low"
|
|
34366
|
+
])).max(3).optional(),
|
|
34210
34367
|
/**
|
|
34211
34368
|
* The whole cell list at once. A per-cell patch would need an ordering the
|
|
34212
34369
|
* editor does not have, and a half-applied layout is a picture nobody asked
|
|
@@ -46944,6 +47101,12 @@ Object.freeze({
|
|
|
46944
47101
|
addonId: null,
|
|
46945
47102
|
access: "view"
|
|
46946
47103
|
},
|
|
47104
|
+
"webrtcSession.getSessionDebug": {
|
|
47105
|
+
capName: "webrtc-session",
|
|
47106
|
+
capScope: "device",
|
|
47107
|
+
addonId: null,
|
|
47108
|
+
access: "view"
|
|
47109
|
+
},
|
|
46947
47110
|
"webrtcSession.getSessionState": {
|
|
46948
47111
|
capName: "webrtc-session",
|
|
46949
47112
|
capScope: "device",
|
|
@@ -48927,6 +49090,11 @@ Object.freeze({
|
|
|
48927
49090
|
form: "single",
|
|
48928
49091
|
optional: false
|
|
48929
49092
|
}],
|
|
49093
|
+
"webrtcSession.getSessionDebug": [{
|
|
49094
|
+
name: "deviceId",
|
|
49095
|
+
form: "single",
|
|
49096
|
+
optional: false
|
|
49097
|
+
}],
|
|
48930
49098
|
"webrtcSession.getSessionState": [{
|
|
48931
49099
|
name: "deviceId",
|
|
48932
49100
|
form: "single",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { h as e, l as t, u as n, y as r } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react__loadShare__.js-Bs1t18EM.mjs";
|
|
2
|
-
import { o as i, s as a } from "./responsive-
|
|
2
|
+
import { o as i, s as a } from "./responsive-BE9iwgH2.mjs";
|
|
3
3
|
import { n as o, r as s, t as c } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-DalfdIDw.mjs";
|
|
4
4
|
var l = a("chevron-down", [["path", {
|
|
5
5
|
d: "m6 9 6 6 6-6",
|
package/dist/remoteEntry.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-
|
|
1
|
+
import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-D0jfEGFZ.mjs";
|
|
2
2
|
export { t as get, e as init };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { c as e, g as t, h as n, l as r, n as i, p as a, r as o, t as s, u as c, y as l } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react__loadShare__.js-Bs1t18EM.mjs";
|
|
2
2
|
import "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-DalfdIDw.mjs";
|
|
3
|
-
import { n as u } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-
|
|
3
|
+
import { n as u } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-jtQo5ytj.mjs";
|
|
4
4
|
//#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
|
|
5
5
|
l();
|
|
6
6
|
var d = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), f = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), p = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), m = (e) => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { c as e, h as t, p as n, y as r } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react__loadShare__.js-Bs1t18EM.mjs";
|
|
2
|
-
import { s as i } from "./responsive-
|
|
2
|
+
import { s as i } from "./responsive-BE9iwgH2.mjs";
|
|
3
3
|
var a = i("camera", [["path", {
|
|
4
4
|
d: "M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z",
|
|
5
5
|
key: "18u6gg"
|
|
@@ -2753,7 +2753,7 @@ async function rr(e) {
|
|
|
2753
2753
|
}
|
|
2754
2754
|
}
|
|
2755
2755
|
async function ir() {
|
|
2756
|
-
return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-
|
|
2756
|
+
return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-zsqJg38M.mjs")).catch((e) => {
|
|
2757
2757
|
throw tr = void 0, e;
|
|
2758
2758
|
}), tr;
|
|
2759
2759
|
}
|