@camstack/addon-notifiers 1.1.17 → 1.1.19
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/addon.js +288 -5
- package/dist/addon.mjs +288 -5
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -4631,7 +4631,7 @@ function _instanceof(cls, params = {}) {
|
|
|
4631
4631
|
return inst;
|
|
4632
4632
|
}
|
|
4633
4633
|
//#endregion
|
|
4634
|
-
//#region ../types/dist/sleep-
|
|
4634
|
+
//#region ../types/dist/sleep-CZDdRBua.mjs
|
|
4635
4635
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4636
4636
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4637
4637
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -7226,7 +7226,16 @@ var DecoderStatsSchema = object({
|
|
|
7226
7226
|
inputFps: number(),
|
|
7227
7227
|
outputFps: number(),
|
|
7228
7228
|
avgDecodeTimeMs: number(),
|
|
7229
|
-
droppedFrames: number()
|
|
7229
|
+
droppedFrames: number(),
|
|
7230
|
+
/**
|
|
7231
|
+
* Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
|
|
7232
|
+
* lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
|
|
7233
|
+
* the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
|
|
7234
|
+
* is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
|
|
7235
|
+
*/
|
|
7236
|
+
lagMs: number().optional(),
|
|
7237
|
+
effectiveFps: number().optional(),
|
|
7238
|
+
adaptiveFps: number().optional()
|
|
7230
7239
|
});
|
|
7231
7240
|
var DecoderSessionConfigSchema = object({
|
|
7232
7241
|
codec: string(),
|
|
@@ -7267,7 +7276,15 @@ var DecoderSessionConfigSchema = object({
|
|
|
7267
7276
|
* other — `pullFrames` returns nothing for an `'shm'` session and
|
|
7268
7277
|
* `pullHandles` returns nothing for a `'callback'` session.
|
|
7269
7278
|
*/
|
|
7270
|
-
frameSink: _enum(["callback", "shm"]).default("callback")
|
|
7279
|
+
frameSink: _enum(["callback", "shm"]).default("callback"),
|
|
7280
|
+
/**
|
|
7281
|
+
* Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
|
|
7282
|
+
* a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
|
|
7283
|
+
* real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
|
|
7284
|
+
* stream-broker's `streamingDebug` gate — off by default so production logs
|
|
7285
|
+
* stay quiet and the emit path pays zero per-frame cost when disabled.
|
|
7286
|
+
*/
|
|
7287
|
+
debug: boolean().optional()
|
|
7271
7288
|
});
|
|
7272
7289
|
var EncodeProfileSchema = object({
|
|
7273
7290
|
video: object({
|
|
@@ -9618,6 +9635,75 @@ DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _vo
|
|
|
9618
9635
|
auth: "admin"
|
|
9619
9636
|
});
|
|
9620
9637
|
/**
|
|
9638
|
+
* Vendor-neutral day/night (IR-cut) control — the per-camera config cap
|
|
9639
|
+
* shared by reolink / hikvision / amcrest. Models the common firmware
|
|
9640
|
+
* surface: the IR-cut switching MODE plus the two knobs that gate it
|
|
9641
|
+
* (photocell `sensitivity` + `switchDelaySec`). Each vendor maps these
|
|
9642
|
+
* onto its own ISAPI / Baichuan / Dahua-CGI fields; the cap standardises
|
|
9643
|
+
* the shape so ONE derived-form renders every camera.
|
|
9644
|
+
*
|
|
9645
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9646
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9647
|
+
* injected from `status`) reports the live values, and a single
|
|
9648
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9649
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9650
|
+
* routing from this surface.
|
|
9651
|
+
*/
|
|
9652
|
+
/** IR-cut switching mode. `schedule` = time-of-day table configured on the camera. */
|
|
9653
|
+
var DayNightModeSchema = _enum([
|
|
9654
|
+
"auto",
|
|
9655
|
+
"day",
|
|
9656
|
+
"night",
|
|
9657
|
+
"schedule"
|
|
9658
|
+
]);
|
|
9659
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
9660
|
+
* getOptions availability convention. Normalized values are 0–100. */
|
|
9661
|
+
var NormalizedRangeSchema$1 = object({
|
|
9662
|
+
min: number(),
|
|
9663
|
+
max: number(),
|
|
9664
|
+
step: number()
|
|
9665
|
+
});
|
|
9666
|
+
object({
|
|
9667
|
+
mode: DayNightModeSchema,
|
|
9668
|
+
/** IR-cut trigger sensitivity, NORMALIZED 0–100 (higher = switches to night sooner). */
|
|
9669
|
+
sensitivity: number().optional(),
|
|
9670
|
+
/** Delay before the IR-cut filter flips, in seconds. */
|
|
9671
|
+
switchDelaySec: number().optional(),
|
|
9672
|
+
lastFetchedAt: number()
|
|
9673
|
+
});
|
|
9674
|
+
/**
|
|
9675
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
9676
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
9677
|
+
* (normalized 0–100); the mode choice-set as an array. A provider returns
|
|
9678
|
+
* honest, camera-probed values — never hardcoded.
|
|
9679
|
+
*/
|
|
9680
|
+
var DayNightOptionsSchema = object({
|
|
9681
|
+
/** Modes this camera accepts. Empty → the camera has no configurable day/night mode. */
|
|
9682
|
+
modes: array(DayNightModeSchema),
|
|
9683
|
+
supportsSensitivity: boolean(),
|
|
9684
|
+
/** Present when `supportsSensitivity` — the normalized 0–100 range. */
|
|
9685
|
+
sensitivity: NormalizedRangeSchema$1.optional(),
|
|
9686
|
+
supportsSwitchDelay: boolean(),
|
|
9687
|
+
/** Present when `supportsSwitchDelay` — the allowed delay range in seconds. */
|
|
9688
|
+
switchDelaySec: NormalizedRangeSchema$1.optional()
|
|
9689
|
+
});
|
|
9690
|
+
/**
|
|
9691
|
+
* Partial change to the day/night config — every field optional. A
|
|
9692
|
+
* provider ignores fields it does not support.
|
|
9693
|
+
*/
|
|
9694
|
+
var DayNightSettingsPatchSchema = object({
|
|
9695
|
+
mode: DayNightModeSchema.optional(),
|
|
9696
|
+
sensitivity: number().optional(),
|
|
9697
|
+
switchDelaySec: number().optional()
|
|
9698
|
+
});
|
|
9699
|
+
DeviceType.Camera, method(object({ deviceId: number() }), DayNightOptionsSchema), method(object({
|
|
9700
|
+
deviceId: number(),
|
|
9701
|
+
settings: DayNightSettingsPatchSchema
|
|
9702
|
+
}), _void(), {
|
|
9703
|
+
kind: "mutation",
|
|
9704
|
+
auth: "admin"
|
|
9705
|
+
});
|
|
9706
|
+
/**
|
|
9621
9707
|
* Identity envelope for a device's upstream-system metadata.
|
|
9622
9708
|
*
|
|
9623
9709
|
* Two jobs:
|
|
@@ -9973,6 +10059,130 @@ object({
|
|
|
9973
10059
|
});
|
|
9974
10060
|
DeviceType.Image;
|
|
9975
10061
|
/**
|
|
10062
|
+
* Vendor-neutral image / picture-adjustment cap — the per-camera config
|
|
10063
|
+
* cap shared by reolink / hikvision / amcrest. Models the common ISP
|
|
10064
|
+
* surface: the four picture sliders (brightness / contrast / saturation /
|
|
10065
|
+
* sharpness), orientation (mirror / flip / rotate), white-balance,
|
|
10066
|
+
* exposure and backlight-compensation modes.
|
|
10067
|
+
*
|
|
10068
|
+
* NORMALIZATION: every slider is a normalized int 0–100. Vendors expose
|
|
10069
|
+
* these natively as 0–100 or 0–255 (or other ranges); each provider maps
|
|
10070
|
+
* its native range to/from this normalized 0–100 space so the cap surface
|
|
10071
|
+
* (and the derived form) is identical across cameras. `warmth` (manual
|
|
10072
|
+
* white-balance) is likewise normalized 0–100.
|
|
10073
|
+
*
|
|
10074
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
10075
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
10076
|
+
* injected from `status`) reports the live values, and a single
|
|
10077
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
10078
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
10079
|
+
* routing from this surface.
|
|
10080
|
+
*/
|
|
10081
|
+
/** Sensor/image rotation, degrees clockwise. */
|
|
10082
|
+
var ImageRotateSchema = _enum([
|
|
10083
|
+
"0",
|
|
10084
|
+
"90",
|
|
10085
|
+
"180",
|
|
10086
|
+
"270"
|
|
10087
|
+
]);
|
|
10088
|
+
/** White-balance mode. `manual` unlocks the normalized `warmth` knob. */
|
|
10089
|
+
var WhiteBalanceModeSchema = _enum(["auto", "manual"]);
|
|
10090
|
+
/** Exposure mode. */
|
|
10091
|
+
var ExposureModeSchema = _enum(["auto", "manual"]);
|
|
10092
|
+
/**
|
|
10093
|
+
* Backlight-compensation mode:
|
|
10094
|
+
* - `off` — disabled
|
|
10095
|
+
* - `blc` — backlight compensation
|
|
10096
|
+
* - `wdr` — wide dynamic range
|
|
10097
|
+
* - `hlc` — highlight compensation
|
|
10098
|
+
*/
|
|
10099
|
+
var BacklightModeSchema = _enum([
|
|
10100
|
+
"off",
|
|
10101
|
+
"blc",
|
|
10102
|
+
"wdr",
|
|
10103
|
+
"hlc"
|
|
10104
|
+
]);
|
|
10105
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
10106
|
+
* getOptions availability convention. Slider values are normalized 0–100. */
|
|
10107
|
+
var NormalizedRangeSchema = object({
|
|
10108
|
+
min: number(),
|
|
10109
|
+
max: number(),
|
|
10110
|
+
step: number()
|
|
10111
|
+
});
|
|
10112
|
+
object({
|
|
10113
|
+
/** Normalized 0–100. */
|
|
10114
|
+
brightness: number().optional(),
|
|
10115
|
+
/** Normalized 0–100. */
|
|
10116
|
+
contrast: number().optional(),
|
|
10117
|
+
/** Normalized 0–100. */
|
|
10118
|
+
saturation: number().optional(),
|
|
10119
|
+
/** Normalized 0–100. */
|
|
10120
|
+
sharpness: number().optional(),
|
|
10121
|
+
mirror: boolean().optional(),
|
|
10122
|
+
flip: boolean().optional(),
|
|
10123
|
+
rotate: ImageRotateSchema.optional(),
|
|
10124
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
10125
|
+
/** Manual white-balance warmth, NORMALIZED 0–100. Meaningful only when `whiteBalance === 'manual'`. */
|
|
10126
|
+
warmth: number().optional(),
|
|
10127
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
10128
|
+
backlightMode: BacklightModeSchema.optional(),
|
|
10129
|
+
lastFetchedAt: number()
|
|
10130
|
+
});
|
|
10131
|
+
/**
|
|
10132
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
10133
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
10134
|
+
* (the normalized 0–100 range); enums as arrays of supported values (empty
|
|
10135
|
+
* array → control hidden). A provider returns honest, camera-probed values
|
|
10136
|
+
* — never hardcoded.
|
|
10137
|
+
*/
|
|
10138
|
+
var ImageSettingsOptionsSchema = object({
|
|
10139
|
+
supportsBrightness: boolean(),
|
|
10140
|
+
brightness: NormalizedRangeSchema.optional(),
|
|
10141
|
+
supportsContrast: boolean(),
|
|
10142
|
+
contrast: NormalizedRangeSchema.optional(),
|
|
10143
|
+
supportsSaturation: boolean(),
|
|
10144
|
+
saturation: NormalizedRangeSchema.optional(),
|
|
10145
|
+
supportsSharpness: boolean(),
|
|
10146
|
+
sharpness: NormalizedRangeSchema.optional(),
|
|
10147
|
+
supportsMirror: boolean(),
|
|
10148
|
+
supportsFlip: boolean(),
|
|
10149
|
+
/** Supported rotation values. Empty → rotation not configurable. */
|
|
10150
|
+
rotateOptions: array(ImageRotateSchema),
|
|
10151
|
+
/** Supported white-balance modes. Empty → white-balance not configurable. */
|
|
10152
|
+
whiteBalanceModes: array(WhiteBalanceModeSchema),
|
|
10153
|
+
supportsWarmth: boolean(),
|
|
10154
|
+
/** Present when `supportsWarmth` — the normalized 0–100 range. */
|
|
10155
|
+
warmth: NormalizedRangeSchema.optional(),
|
|
10156
|
+
/** Supported exposure modes. Empty → exposure not configurable. */
|
|
10157
|
+
exposureModes: array(ExposureModeSchema),
|
|
10158
|
+
/** Supported backlight modes. Empty → backlight-compensation not configurable. */
|
|
10159
|
+
backlightModes: array(BacklightModeSchema)
|
|
10160
|
+
});
|
|
10161
|
+
/**
|
|
10162
|
+
* Partial change to the image config — every field optional. Slider values
|
|
10163
|
+
* are normalized 0–100. A provider ignores fields it does not support.
|
|
10164
|
+
*/
|
|
10165
|
+
var ImageSettingsPatchSchema = object({
|
|
10166
|
+
brightness: number().optional(),
|
|
10167
|
+
contrast: number().optional(),
|
|
10168
|
+
saturation: number().optional(),
|
|
10169
|
+
sharpness: number().optional(),
|
|
10170
|
+
mirror: boolean().optional(),
|
|
10171
|
+
flip: boolean().optional(),
|
|
10172
|
+
rotate: ImageRotateSchema.optional(),
|
|
10173
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
10174
|
+
warmth: number().optional(),
|
|
10175
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
10176
|
+
backlightMode: BacklightModeSchema.optional()
|
|
10177
|
+
});
|
|
10178
|
+
DeviceType.Camera, method(object({ deviceId: number() }), ImageSettingsOptionsSchema), method(object({
|
|
10179
|
+
deviceId: number(),
|
|
10180
|
+
settings: ImageSettingsPatchSchema
|
|
10181
|
+
}), _void(), {
|
|
10182
|
+
kind: "mutation",
|
|
10183
|
+
auth: "admin"
|
|
10184
|
+
});
|
|
10185
|
+
/**
|
|
9976
10186
|
* Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
|
|
9977
10187
|
* with a mowing lifecycle plus a dock action.
|
|
9978
10188
|
*
|
|
@@ -10867,6 +11077,16 @@ var RunnerCameraConfigSchema = object({
|
|
|
10867
11077
|
* this gate is bypassed.
|
|
10868
11078
|
*/
|
|
10869
11079
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
11080
|
+
/**
|
|
11081
|
+
* Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
|
|
11082
|
+
* never arms the periodic recheck timer, regardless of `occupancyRecheckSec` —
|
|
11083
|
+
* this is off by default because the recheck re-subscribes a detection session
|
|
11084
|
+
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
11085
|
+
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
11086
|
+
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
11087
|
+
* (and only render) when this is enabled.
|
|
11088
|
+
*/
|
|
11089
|
+
occupancyRecheckEnabled: boolean().default(false),
|
|
10870
11090
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
10871
11091
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
10872
11092
|
/**
|
|
@@ -13163,7 +13383,9 @@ method(object({ codec: string() }), boolean()), method(_void(), object({
|
|
|
13163
13383
|
id: string(),
|
|
13164
13384
|
name: string(),
|
|
13165
13385
|
isPullMode: boolean().optional(),
|
|
13166
|
-
priority: number().optional()
|
|
13386
|
+
priority: number().optional(),
|
|
13387
|
+
hwaccel: string().optional(),
|
|
13388
|
+
probedBestHwaccel: string().optional()
|
|
13167
13389
|
})), method(DecoderSessionConfigSchema, object({
|
|
13168
13390
|
sessionId: string(),
|
|
13169
13391
|
nodeId: string()
|
|
@@ -15091,7 +15313,17 @@ var AgentAddonConfigSchema = object({
|
|
|
15091
15313
|
});
|
|
15092
15314
|
var AgentPipelineSettingsSchema = object({
|
|
15093
15315
|
addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
|
|
15094
|
-
maxCameras: number().int().nonnegative().nullable().default(null)
|
|
15316
|
+
maxCameras: number().int().nonnegative().nullable().default(null),
|
|
15317
|
+
/** Per-node detection weight (relative share for the quota balancer). */
|
|
15318
|
+
detectWeight: number().positive().optional(),
|
|
15319
|
+
/** Node is eligible to run the detection pipeline (decode + inference). */
|
|
15320
|
+
detect: boolean().optional(),
|
|
15321
|
+
/** Node is eligible to host decoder sessions. */
|
|
15322
|
+
decode: boolean().optional(),
|
|
15323
|
+
/** Node is eligible to run audio-analyzer sessions. */
|
|
15324
|
+
audio: boolean().optional(),
|
|
15325
|
+
/** Node is eligible to be the ingest / source-owner (serve the restream). */
|
|
15326
|
+
ingest: boolean().optional()
|
|
15095
15327
|
});
|
|
15096
15328
|
var CameraPipelineForAgentSchema = object({
|
|
15097
15329
|
steps: array(PipelineStepInputSchema).readonly(),
|
|
@@ -15397,6 +15629,21 @@ method(object({
|
|
|
15397
15629
|
}), object({ success: literal(true) }), {
|
|
15398
15630
|
kind: "mutation",
|
|
15399
15631
|
auth: "admin"
|
|
15632
|
+
}), method(object({
|
|
15633
|
+
agentNodeId: string(),
|
|
15634
|
+
detectWeight: number().positive().nullable()
|
|
15635
|
+
}), object({ success: literal(true) }), {
|
|
15636
|
+
kind: "mutation",
|
|
15637
|
+
auth: "admin"
|
|
15638
|
+
}), method(object({
|
|
15639
|
+
agentNodeId: string(),
|
|
15640
|
+
detect: boolean().nullable().optional(),
|
|
15641
|
+
decode: boolean().nullable().optional(),
|
|
15642
|
+
audio: boolean().nullable().optional(),
|
|
15643
|
+
ingest: boolean().nullable().optional()
|
|
15644
|
+
}), object({ success: literal(true) }), {
|
|
15645
|
+
kind: "mutation",
|
|
15646
|
+
auth: "admin"
|
|
15400
15647
|
}), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
|
|
15401
15648
|
deviceId: number(),
|
|
15402
15649
|
addonId: string(),
|
|
@@ -19144,6 +19391,18 @@ Object.freeze({
|
|
|
19144
19391
|
addonId: null,
|
|
19145
19392
|
access: "view"
|
|
19146
19393
|
},
|
|
19394
|
+
"dayNight.getOptions": {
|
|
19395
|
+
capName: "day-night",
|
|
19396
|
+
capScope: "device",
|
|
19397
|
+
addonId: null,
|
|
19398
|
+
access: "view"
|
|
19399
|
+
},
|
|
19400
|
+
"dayNight.setSettings": {
|
|
19401
|
+
capName: "day-night",
|
|
19402
|
+
capScope: "device",
|
|
19403
|
+
addonId: null,
|
|
19404
|
+
access: "create"
|
|
19405
|
+
},
|
|
19147
19406
|
"decoder.createSession": {
|
|
19148
19407
|
capName: "decoder",
|
|
19149
19408
|
capScope: "system",
|
|
@@ -20074,6 +20333,18 @@ Object.freeze({
|
|
|
20074
20333
|
addonId: null,
|
|
20075
20334
|
access: "create"
|
|
20076
20335
|
},
|
|
20336
|
+
"imageSettings.getOptions": {
|
|
20337
|
+
capName: "image-settings",
|
|
20338
|
+
capScope: "device",
|
|
20339
|
+
addonId: null,
|
|
20340
|
+
access: "view"
|
|
20341
|
+
},
|
|
20342
|
+
"imageSettings.setSettings": {
|
|
20343
|
+
capName: "image-settings",
|
|
20344
|
+
capScope: "device",
|
|
20345
|
+
addonId: null,
|
|
20346
|
+
access: "create"
|
|
20347
|
+
},
|
|
20077
20348
|
"integrations.create": {
|
|
20078
20349
|
capName: "integrations",
|
|
20079
20350
|
capScope: "system",
|
|
@@ -21256,6 +21527,18 @@ Object.freeze({
|
|
|
21256
21527
|
addonId: null,
|
|
21257
21528
|
access: "create"
|
|
21258
21529
|
},
|
|
21530
|
+
"pipelineOrchestrator.setAgentCapabilities": {
|
|
21531
|
+
capName: "pipeline-orchestrator",
|
|
21532
|
+
capScope: "system",
|
|
21533
|
+
addonId: null,
|
|
21534
|
+
access: "create"
|
|
21535
|
+
},
|
|
21536
|
+
"pipelineOrchestrator.setAgentDetectWeight": {
|
|
21537
|
+
capName: "pipeline-orchestrator",
|
|
21538
|
+
capScope: "system",
|
|
21539
|
+
addonId: null,
|
|
21540
|
+
access: "create"
|
|
21541
|
+
},
|
|
21259
21542
|
"pipelineOrchestrator.setAgentMaxCameras": {
|
|
21260
21543
|
capName: "pipeline-orchestrator",
|
|
21261
21544
|
capScope: "system",
|
package/dist/addon.mjs
CHANGED
|
@@ -4627,7 +4627,7 @@ function _instanceof(cls, params = {}) {
|
|
|
4627
4627
|
return inst;
|
|
4628
4628
|
}
|
|
4629
4629
|
//#endregion
|
|
4630
|
-
//#region ../types/dist/sleep-
|
|
4630
|
+
//#region ../types/dist/sleep-CZDdRBua.mjs
|
|
4631
4631
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4632
4632
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4633
4633
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -7222,7 +7222,16 @@ var DecoderStatsSchema = object({
|
|
|
7222
7222
|
inputFps: number(),
|
|
7223
7223
|
outputFps: number(),
|
|
7224
7224
|
avgDecodeTimeMs: number(),
|
|
7225
|
-
droppedFrames: number()
|
|
7225
|
+
droppedFrames: number(),
|
|
7226
|
+
/**
|
|
7227
|
+
* Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
|
|
7228
|
+
* lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
|
|
7229
|
+
* the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
|
|
7230
|
+
* is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
|
|
7231
|
+
*/
|
|
7232
|
+
lagMs: number().optional(),
|
|
7233
|
+
effectiveFps: number().optional(),
|
|
7234
|
+
adaptiveFps: number().optional()
|
|
7226
7235
|
});
|
|
7227
7236
|
var DecoderSessionConfigSchema = object({
|
|
7228
7237
|
codec: string(),
|
|
@@ -7263,7 +7272,15 @@ var DecoderSessionConfigSchema = object({
|
|
|
7263
7272
|
* other — `pullFrames` returns nothing for an `'shm'` session and
|
|
7264
7273
|
* `pullHandles` returns nothing for a `'callback'` session.
|
|
7265
7274
|
*/
|
|
7266
|
-
frameSink: _enum(["callback", "shm"]).default("callback")
|
|
7275
|
+
frameSink: _enum(["callback", "shm"]).default("callback"),
|
|
7276
|
+
/**
|
|
7277
|
+
* Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
|
|
7278
|
+
* a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
|
|
7279
|
+
* real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
|
|
7280
|
+
* stream-broker's `streamingDebug` gate — off by default so production logs
|
|
7281
|
+
* stay quiet and the emit path pays zero per-frame cost when disabled.
|
|
7282
|
+
*/
|
|
7283
|
+
debug: boolean().optional()
|
|
7267
7284
|
});
|
|
7268
7285
|
var EncodeProfileSchema = object({
|
|
7269
7286
|
video: object({
|
|
@@ -9614,6 +9631,75 @@ DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _vo
|
|
|
9614
9631
|
auth: "admin"
|
|
9615
9632
|
});
|
|
9616
9633
|
/**
|
|
9634
|
+
* Vendor-neutral day/night (IR-cut) control — the per-camera config cap
|
|
9635
|
+
* shared by reolink / hikvision / amcrest. Models the common firmware
|
|
9636
|
+
* surface: the IR-cut switching MODE plus the two knobs that gate it
|
|
9637
|
+
* (photocell `sensitivity` + `switchDelaySec`). Each vendor maps these
|
|
9638
|
+
* onto its own ISAPI / Baichuan / Dahua-CGI fields; the cap standardises
|
|
9639
|
+
* the shape so ONE derived-form renders every camera.
|
|
9640
|
+
*
|
|
9641
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9642
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9643
|
+
* injected from `status`) reports the live values, and a single
|
|
9644
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9645
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9646
|
+
* routing from this surface.
|
|
9647
|
+
*/
|
|
9648
|
+
/** IR-cut switching mode. `schedule` = time-of-day table configured on the camera. */
|
|
9649
|
+
var DayNightModeSchema = _enum([
|
|
9650
|
+
"auto",
|
|
9651
|
+
"day",
|
|
9652
|
+
"night",
|
|
9653
|
+
"schedule"
|
|
9654
|
+
]);
|
|
9655
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
9656
|
+
* getOptions availability convention. Normalized values are 0–100. */
|
|
9657
|
+
var NormalizedRangeSchema$1 = object({
|
|
9658
|
+
min: number(),
|
|
9659
|
+
max: number(),
|
|
9660
|
+
step: number()
|
|
9661
|
+
});
|
|
9662
|
+
object({
|
|
9663
|
+
mode: DayNightModeSchema,
|
|
9664
|
+
/** IR-cut trigger sensitivity, NORMALIZED 0–100 (higher = switches to night sooner). */
|
|
9665
|
+
sensitivity: number().optional(),
|
|
9666
|
+
/** Delay before the IR-cut filter flips, in seconds. */
|
|
9667
|
+
switchDelaySec: number().optional(),
|
|
9668
|
+
lastFetchedAt: number()
|
|
9669
|
+
});
|
|
9670
|
+
/**
|
|
9671
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
9672
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
9673
|
+
* (normalized 0–100); the mode choice-set as an array. A provider returns
|
|
9674
|
+
* honest, camera-probed values — never hardcoded.
|
|
9675
|
+
*/
|
|
9676
|
+
var DayNightOptionsSchema = object({
|
|
9677
|
+
/** Modes this camera accepts. Empty → the camera has no configurable day/night mode. */
|
|
9678
|
+
modes: array(DayNightModeSchema),
|
|
9679
|
+
supportsSensitivity: boolean(),
|
|
9680
|
+
/** Present when `supportsSensitivity` — the normalized 0–100 range. */
|
|
9681
|
+
sensitivity: NormalizedRangeSchema$1.optional(),
|
|
9682
|
+
supportsSwitchDelay: boolean(),
|
|
9683
|
+
/** Present when `supportsSwitchDelay` — the allowed delay range in seconds. */
|
|
9684
|
+
switchDelaySec: NormalizedRangeSchema$1.optional()
|
|
9685
|
+
});
|
|
9686
|
+
/**
|
|
9687
|
+
* Partial change to the day/night config — every field optional. A
|
|
9688
|
+
* provider ignores fields it does not support.
|
|
9689
|
+
*/
|
|
9690
|
+
var DayNightSettingsPatchSchema = object({
|
|
9691
|
+
mode: DayNightModeSchema.optional(),
|
|
9692
|
+
sensitivity: number().optional(),
|
|
9693
|
+
switchDelaySec: number().optional()
|
|
9694
|
+
});
|
|
9695
|
+
DeviceType.Camera, method(object({ deviceId: number() }), DayNightOptionsSchema), method(object({
|
|
9696
|
+
deviceId: number(),
|
|
9697
|
+
settings: DayNightSettingsPatchSchema
|
|
9698
|
+
}), _void(), {
|
|
9699
|
+
kind: "mutation",
|
|
9700
|
+
auth: "admin"
|
|
9701
|
+
});
|
|
9702
|
+
/**
|
|
9617
9703
|
* Identity envelope for a device's upstream-system metadata.
|
|
9618
9704
|
*
|
|
9619
9705
|
* Two jobs:
|
|
@@ -9969,6 +10055,130 @@ object({
|
|
|
9969
10055
|
});
|
|
9970
10056
|
DeviceType.Image;
|
|
9971
10057
|
/**
|
|
10058
|
+
* Vendor-neutral image / picture-adjustment cap — the per-camera config
|
|
10059
|
+
* cap shared by reolink / hikvision / amcrest. Models the common ISP
|
|
10060
|
+
* surface: the four picture sliders (brightness / contrast / saturation /
|
|
10061
|
+
* sharpness), orientation (mirror / flip / rotate), white-balance,
|
|
10062
|
+
* exposure and backlight-compensation modes.
|
|
10063
|
+
*
|
|
10064
|
+
* NORMALIZATION: every slider is a normalized int 0–100. Vendors expose
|
|
10065
|
+
* these natively as 0–100 or 0–255 (or other ranges); each provider maps
|
|
10066
|
+
* its native range to/from this normalized 0–100 space so the cap surface
|
|
10067
|
+
* (and the derived form) is identical across cameras. `warmth` (manual
|
|
10068
|
+
* white-balance) is likewise normalized 0–100.
|
|
10069
|
+
*
|
|
10070
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
10071
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
10072
|
+
* injected from `status`) reports the live values, and a single
|
|
10073
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
10074
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
10075
|
+
* routing from this surface.
|
|
10076
|
+
*/
|
|
10077
|
+
/** Sensor/image rotation, degrees clockwise. */
|
|
10078
|
+
var ImageRotateSchema = _enum([
|
|
10079
|
+
"0",
|
|
10080
|
+
"90",
|
|
10081
|
+
"180",
|
|
10082
|
+
"270"
|
|
10083
|
+
]);
|
|
10084
|
+
/** White-balance mode. `manual` unlocks the normalized `warmth` knob. */
|
|
10085
|
+
var WhiteBalanceModeSchema = _enum(["auto", "manual"]);
|
|
10086
|
+
/** Exposure mode. */
|
|
10087
|
+
var ExposureModeSchema = _enum(["auto", "manual"]);
|
|
10088
|
+
/**
|
|
10089
|
+
* Backlight-compensation mode:
|
|
10090
|
+
* - `off` — disabled
|
|
10091
|
+
* - `blc` — backlight compensation
|
|
10092
|
+
* - `wdr` — wide dynamic range
|
|
10093
|
+
* - `hlc` — highlight compensation
|
|
10094
|
+
*/
|
|
10095
|
+
var BacklightModeSchema = _enum([
|
|
10096
|
+
"off",
|
|
10097
|
+
"blc",
|
|
10098
|
+
"wdr",
|
|
10099
|
+
"hlc"
|
|
10100
|
+
]);
|
|
10101
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
10102
|
+
* getOptions availability convention. Slider values are normalized 0–100. */
|
|
10103
|
+
var NormalizedRangeSchema = object({
|
|
10104
|
+
min: number(),
|
|
10105
|
+
max: number(),
|
|
10106
|
+
step: number()
|
|
10107
|
+
});
|
|
10108
|
+
object({
|
|
10109
|
+
/** Normalized 0–100. */
|
|
10110
|
+
brightness: number().optional(),
|
|
10111
|
+
/** Normalized 0–100. */
|
|
10112
|
+
contrast: number().optional(),
|
|
10113
|
+
/** Normalized 0–100. */
|
|
10114
|
+
saturation: number().optional(),
|
|
10115
|
+
/** Normalized 0–100. */
|
|
10116
|
+
sharpness: number().optional(),
|
|
10117
|
+
mirror: boolean().optional(),
|
|
10118
|
+
flip: boolean().optional(),
|
|
10119
|
+
rotate: ImageRotateSchema.optional(),
|
|
10120
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
10121
|
+
/** Manual white-balance warmth, NORMALIZED 0–100. Meaningful only when `whiteBalance === 'manual'`. */
|
|
10122
|
+
warmth: number().optional(),
|
|
10123
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
10124
|
+
backlightMode: BacklightModeSchema.optional(),
|
|
10125
|
+
lastFetchedAt: number()
|
|
10126
|
+
});
|
|
10127
|
+
/**
|
|
10128
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
10129
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
10130
|
+
* (the normalized 0–100 range); enums as arrays of supported values (empty
|
|
10131
|
+
* array → control hidden). A provider returns honest, camera-probed values
|
|
10132
|
+
* — never hardcoded.
|
|
10133
|
+
*/
|
|
10134
|
+
var ImageSettingsOptionsSchema = object({
|
|
10135
|
+
supportsBrightness: boolean(),
|
|
10136
|
+
brightness: NormalizedRangeSchema.optional(),
|
|
10137
|
+
supportsContrast: boolean(),
|
|
10138
|
+
contrast: NormalizedRangeSchema.optional(),
|
|
10139
|
+
supportsSaturation: boolean(),
|
|
10140
|
+
saturation: NormalizedRangeSchema.optional(),
|
|
10141
|
+
supportsSharpness: boolean(),
|
|
10142
|
+
sharpness: NormalizedRangeSchema.optional(),
|
|
10143
|
+
supportsMirror: boolean(),
|
|
10144
|
+
supportsFlip: boolean(),
|
|
10145
|
+
/** Supported rotation values. Empty → rotation not configurable. */
|
|
10146
|
+
rotateOptions: array(ImageRotateSchema),
|
|
10147
|
+
/** Supported white-balance modes. Empty → white-balance not configurable. */
|
|
10148
|
+
whiteBalanceModes: array(WhiteBalanceModeSchema),
|
|
10149
|
+
supportsWarmth: boolean(),
|
|
10150
|
+
/** Present when `supportsWarmth` — the normalized 0–100 range. */
|
|
10151
|
+
warmth: NormalizedRangeSchema.optional(),
|
|
10152
|
+
/** Supported exposure modes. Empty → exposure not configurable. */
|
|
10153
|
+
exposureModes: array(ExposureModeSchema),
|
|
10154
|
+
/** Supported backlight modes. Empty → backlight-compensation not configurable. */
|
|
10155
|
+
backlightModes: array(BacklightModeSchema)
|
|
10156
|
+
});
|
|
10157
|
+
/**
|
|
10158
|
+
* Partial change to the image config — every field optional. Slider values
|
|
10159
|
+
* are normalized 0–100. A provider ignores fields it does not support.
|
|
10160
|
+
*/
|
|
10161
|
+
var ImageSettingsPatchSchema = object({
|
|
10162
|
+
brightness: number().optional(),
|
|
10163
|
+
contrast: number().optional(),
|
|
10164
|
+
saturation: number().optional(),
|
|
10165
|
+
sharpness: number().optional(),
|
|
10166
|
+
mirror: boolean().optional(),
|
|
10167
|
+
flip: boolean().optional(),
|
|
10168
|
+
rotate: ImageRotateSchema.optional(),
|
|
10169
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
10170
|
+
warmth: number().optional(),
|
|
10171
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
10172
|
+
backlightMode: BacklightModeSchema.optional()
|
|
10173
|
+
});
|
|
10174
|
+
DeviceType.Camera, method(object({ deviceId: number() }), ImageSettingsOptionsSchema), method(object({
|
|
10175
|
+
deviceId: number(),
|
|
10176
|
+
settings: ImageSettingsPatchSchema
|
|
10177
|
+
}), _void(), {
|
|
10178
|
+
kind: "mutation",
|
|
10179
|
+
auth: "admin"
|
|
10180
|
+
});
|
|
10181
|
+
/**
|
|
9972
10182
|
* Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
|
|
9973
10183
|
* with a mowing lifecycle plus a dock action.
|
|
9974
10184
|
*
|
|
@@ -10863,6 +11073,16 @@ var RunnerCameraConfigSchema = object({
|
|
|
10863
11073
|
* this gate is bypassed.
|
|
10864
11074
|
*/
|
|
10865
11075
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
11076
|
+
/**
|
|
11077
|
+
* Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
|
|
11078
|
+
* never arms the periodic recheck timer, regardless of `occupancyRecheckSec` —
|
|
11079
|
+
* this is off by default because the recheck re-subscribes a detection session
|
|
11080
|
+
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
11081
|
+
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
11082
|
+
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
11083
|
+
* (and only render) when this is enabled.
|
|
11084
|
+
*/
|
|
11085
|
+
occupancyRecheckEnabled: boolean().default(false),
|
|
10866
11086
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
10867
11087
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
10868
11088
|
/**
|
|
@@ -13159,7 +13379,9 @@ method(object({ codec: string() }), boolean()), method(_void(), object({
|
|
|
13159
13379
|
id: string(),
|
|
13160
13380
|
name: string(),
|
|
13161
13381
|
isPullMode: boolean().optional(),
|
|
13162
|
-
priority: number().optional()
|
|
13382
|
+
priority: number().optional(),
|
|
13383
|
+
hwaccel: string().optional(),
|
|
13384
|
+
probedBestHwaccel: string().optional()
|
|
13163
13385
|
})), method(DecoderSessionConfigSchema, object({
|
|
13164
13386
|
sessionId: string(),
|
|
13165
13387
|
nodeId: string()
|
|
@@ -15087,7 +15309,17 @@ var AgentAddonConfigSchema = object({
|
|
|
15087
15309
|
});
|
|
15088
15310
|
var AgentPipelineSettingsSchema = object({
|
|
15089
15311
|
addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
|
|
15090
|
-
maxCameras: number().int().nonnegative().nullable().default(null)
|
|
15312
|
+
maxCameras: number().int().nonnegative().nullable().default(null),
|
|
15313
|
+
/** Per-node detection weight (relative share for the quota balancer). */
|
|
15314
|
+
detectWeight: number().positive().optional(),
|
|
15315
|
+
/** Node is eligible to run the detection pipeline (decode + inference). */
|
|
15316
|
+
detect: boolean().optional(),
|
|
15317
|
+
/** Node is eligible to host decoder sessions. */
|
|
15318
|
+
decode: boolean().optional(),
|
|
15319
|
+
/** Node is eligible to run audio-analyzer sessions. */
|
|
15320
|
+
audio: boolean().optional(),
|
|
15321
|
+
/** Node is eligible to be the ingest / source-owner (serve the restream). */
|
|
15322
|
+
ingest: boolean().optional()
|
|
15091
15323
|
});
|
|
15092
15324
|
var CameraPipelineForAgentSchema = object({
|
|
15093
15325
|
steps: array(PipelineStepInputSchema).readonly(),
|
|
@@ -15393,6 +15625,21 @@ method(object({
|
|
|
15393
15625
|
}), object({ success: literal(true) }), {
|
|
15394
15626
|
kind: "mutation",
|
|
15395
15627
|
auth: "admin"
|
|
15628
|
+
}), method(object({
|
|
15629
|
+
agentNodeId: string(),
|
|
15630
|
+
detectWeight: number().positive().nullable()
|
|
15631
|
+
}), object({ success: literal(true) }), {
|
|
15632
|
+
kind: "mutation",
|
|
15633
|
+
auth: "admin"
|
|
15634
|
+
}), method(object({
|
|
15635
|
+
agentNodeId: string(),
|
|
15636
|
+
detect: boolean().nullable().optional(),
|
|
15637
|
+
decode: boolean().nullable().optional(),
|
|
15638
|
+
audio: boolean().nullable().optional(),
|
|
15639
|
+
ingest: boolean().nullable().optional()
|
|
15640
|
+
}), object({ success: literal(true) }), {
|
|
15641
|
+
kind: "mutation",
|
|
15642
|
+
auth: "admin"
|
|
15396
15643
|
}), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
|
|
15397
15644
|
deviceId: number(),
|
|
15398
15645
|
addonId: string(),
|
|
@@ -19140,6 +19387,18 @@ Object.freeze({
|
|
|
19140
19387
|
addonId: null,
|
|
19141
19388
|
access: "view"
|
|
19142
19389
|
},
|
|
19390
|
+
"dayNight.getOptions": {
|
|
19391
|
+
capName: "day-night",
|
|
19392
|
+
capScope: "device",
|
|
19393
|
+
addonId: null,
|
|
19394
|
+
access: "view"
|
|
19395
|
+
},
|
|
19396
|
+
"dayNight.setSettings": {
|
|
19397
|
+
capName: "day-night",
|
|
19398
|
+
capScope: "device",
|
|
19399
|
+
addonId: null,
|
|
19400
|
+
access: "create"
|
|
19401
|
+
},
|
|
19143
19402
|
"decoder.createSession": {
|
|
19144
19403
|
capName: "decoder",
|
|
19145
19404
|
capScope: "system",
|
|
@@ -20070,6 +20329,18 @@ Object.freeze({
|
|
|
20070
20329
|
addonId: null,
|
|
20071
20330
|
access: "create"
|
|
20072
20331
|
},
|
|
20332
|
+
"imageSettings.getOptions": {
|
|
20333
|
+
capName: "image-settings",
|
|
20334
|
+
capScope: "device",
|
|
20335
|
+
addonId: null,
|
|
20336
|
+
access: "view"
|
|
20337
|
+
},
|
|
20338
|
+
"imageSettings.setSettings": {
|
|
20339
|
+
capName: "image-settings",
|
|
20340
|
+
capScope: "device",
|
|
20341
|
+
addonId: null,
|
|
20342
|
+
access: "create"
|
|
20343
|
+
},
|
|
20073
20344
|
"integrations.create": {
|
|
20074
20345
|
capName: "integrations",
|
|
20075
20346
|
capScope: "system",
|
|
@@ -21252,6 +21523,18 @@ Object.freeze({
|
|
|
21252
21523
|
addonId: null,
|
|
21253
21524
|
access: "create"
|
|
21254
21525
|
},
|
|
21526
|
+
"pipelineOrchestrator.setAgentCapabilities": {
|
|
21527
|
+
capName: "pipeline-orchestrator",
|
|
21528
|
+
capScope: "system",
|
|
21529
|
+
addonId: null,
|
|
21530
|
+
access: "create"
|
|
21531
|
+
},
|
|
21532
|
+
"pipelineOrchestrator.setAgentDetectWeight": {
|
|
21533
|
+
capName: "pipeline-orchestrator",
|
|
21534
|
+
capScope: "system",
|
|
21535
|
+
addonId: null,
|
|
21536
|
+
access: "create"
|
|
21537
|
+
},
|
|
21255
21538
|
"pipelineOrchestrator.setAgentMaxCameras": {
|
|
21256
21539
|
capName: "pipeline-orchestrator",
|
|
21257
21540
|
capScope: "system",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-notifiers",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.19",
|
|
4
4
|
"description": "System notifiers addon for CamStack — a `notification-output` collection provider hosting per-kind notifier adapters (ntfy, pushover, gotify, telegram, discord, webhook, zentik).",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|