@camstack/addon-export-hap 1.1.15 → 1.1.17
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/export-hap.addon.js +288 -5
- package/dist/export-hap.addon.mjs +288 -5
- package/package.json +1 -1
package/dist/export-hap.addon.js
CHANGED
|
@@ -4664,7 +4664,7 @@ function _instanceof(cls, params = {}) {
|
|
|
4664
4664
|
return inst;
|
|
4665
4665
|
}
|
|
4666
4666
|
//#endregion
|
|
4667
|
-
//#region ../types/dist/sleep-
|
|
4667
|
+
//#region ../types/dist/sleep-CZDdRBua.mjs
|
|
4668
4668
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4669
4669
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4670
4670
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -7259,7 +7259,16 @@ var DecoderStatsSchema = object({
|
|
|
7259
7259
|
inputFps: number(),
|
|
7260
7260
|
outputFps: number(),
|
|
7261
7261
|
avgDecodeTimeMs: number(),
|
|
7262
|
-
droppedFrames: number()
|
|
7262
|
+
droppedFrames: number(),
|
|
7263
|
+
/**
|
|
7264
|
+
* Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
|
|
7265
|
+
* lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
|
|
7266
|
+
* the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
|
|
7267
|
+
* is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
|
|
7268
|
+
*/
|
|
7269
|
+
lagMs: number().optional(),
|
|
7270
|
+
effectiveFps: number().optional(),
|
|
7271
|
+
adaptiveFps: number().optional()
|
|
7263
7272
|
});
|
|
7264
7273
|
var DecoderSessionConfigSchema = object({
|
|
7265
7274
|
codec: string(),
|
|
@@ -7300,7 +7309,15 @@ var DecoderSessionConfigSchema = object({
|
|
|
7300
7309
|
* other — `pullFrames` returns nothing for an `'shm'` session and
|
|
7301
7310
|
* `pullHandles` returns nothing for a `'callback'` session.
|
|
7302
7311
|
*/
|
|
7303
|
-
frameSink: _enum(["callback", "shm"]).default("callback")
|
|
7312
|
+
frameSink: _enum(["callback", "shm"]).default("callback"),
|
|
7313
|
+
/**
|
|
7314
|
+
* Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
|
|
7315
|
+
* a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
|
|
7316
|
+
* real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
|
|
7317
|
+
* stream-broker's `streamingDebug` gate — off by default so production logs
|
|
7318
|
+
* stay quiet and the emit path pays zero per-frame cost when disabled.
|
|
7319
|
+
*/
|
|
7320
|
+
debug: boolean().optional()
|
|
7304
7321
|
});
|
|
7305
7322
|
var EncodeProfileSchema = object({
|
|
7306
7323
|
video: object({
|
|
@@ -9512,6 +9529,75 @@ DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _vo
|
|
|
9512
9529
|
auth: "admin"
|
|
9513
9530
|
});
|
|
9514
9531
|
/**
|
|
9532
|
+
* Vendor-neutral day/night (IR-cut) control — the per-camera config cap
|
|
9533
|
+
* shared by reolink / hikvision / amcrest. Models the common firmware
|
|
9534
|
+
* surface: the IR-cut switching MODE plus the two knobs that gate it
|
|
9535
|
+
* (photocell `sensitivity` + `switchDelaySec`). Each vendor maps these
|
|
9536
|
+
* onto its own ISAPI / Baichuan / Dahua-CGI fields; the cap standardises
|
|
9537
|
+
* the shape so ONE derived-form renders every camera.
|
|
9538
|
+
*
|
|
9539
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9540
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9541
|
+
* injected from `status`) reports the live values, and a single
|
|
9542
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9543
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9544
|
+
* routing from this surface.
|
|
9545
|
+
*/
|
|
9546
|
+
/** IR-cut switching mode. `schedule` = time-of-day table configured on the camera. */
|
|
9547
|
+
var DayNightModeSchema = _enum([
|
|
9548
|
+
"auto",
|
|
9549
|
+
"day",
|
|
9550
|
+
"night",
|
|
9551
|
+
"schedule"
|
|
9552
|
+
]);
|
|
9553
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
9554
|
+
* getOptions availability convention. Normalized values are 0–100. */
|
|
9555
|
+
var NormalizedRangeSchema$1 = object({
|
|
9556
|
+
min: number(),
|
|
9557
|
+
max: number(),
|
|
9558
|
+
step: number()
|
|
9559
|
+
});
|
|
9560
|
+
object({
|
|
9561
|
+
mode: DayNightModeSchema,
|
|
9562
|
+
/** IR-cut trigger sensitivity, NORMALIZED 0–100 (higher = switches to night sooner). */
|
|
9563
|
+
sensitivity: number().optional(),
|
|
9564
|
+
/** Delay before the IR-cut filter flips, in seconds. */
|
|
9565
|
+
switchDelaySec: number().optional(),
|
|
9566
|
+
lastFetchedAt: number()
|
|
9567
|
+
});
|
|
9568
|
+
/**
|
|
9569
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
9570
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
9571
|
+
* (normalized 0–100); the mode choice-set as an array. A provider returns
|
|
9572
|
+
* honest, camera-probed values — never hardcoded.
|
|
9573
|
+
*/
|
|
9574
|
+
var DayNightOptionsSchema = object({
|
|
9575
|
+
/** Modes this camera accepts. Empty → the camera has no configurable day/night mode. */
|
|
9576
|
+
modes: array(DayNightModeSchema),
|
|
9577
|
+
supportsSensitivity: boolean(),
|
|
9578
|
+
/** Present when `supportsSensitivity` — the normalized 0–100 range. */
|
|
9579
|
+
sensitivity: NormalizedRangeSchema$1.optional(),
|
|
9580
|
+
supportsSwitchDelay: boolean(),
|
|
9581
|
+
/** Present when `supportsSwitchDelay` — the allowed delay range in seconds. */
|
|
9582
|
+
switchDelaySec: NormalizedRangeSchema$1.optional()
|
|
9583
|
+
});
|
|
9584
|
+
/**
|
|
9585
|
+
* Partial change to the day/night config — every field optional. A
|
|
9586
|
+
* provider ignores fields it does not support.
|
|
9587
|
+
*/
|
|
9588
|
+
var DayNightSettingsPatchSchema = object({
|
|
9589
|
+
mode: DayNightModeSchema.optional(),
|
|
9590
|
+
sensitivity: number().optional(),
|
|
9591
|
+
switchDelaySec: number().optional()
|
|
9592
|
+
});
|
|
9593
|
+
DeviceType.Camera, method(object({ deviceId: number() }), DayNightOptionsSchema), method(object({
|
|
9594
|
+
deviceId: number(),
|
|
9595
|
+
settings: DayNightSettingsPatchSchema
|
|
9596
|
+
}), _void(), {
|
|
9597
|
+
kind: "mutation",
|
|
9598
|
+
auth: "admin"
|
|
9599
|
+
});
|
|
9600
|
+
/**
|
|
9515
9601
|
* Identity envelope for a device's upstream-system metadata.
|
|
9516
9602
|
*
|
|
9517
9603
|
* Two jobs:
|
|
@@ -9867,6 +9953,130 @@ object({
|
|
|
9867
9953
|
});
|
|
9868
9954
|
DeviceType.Image;
|
|
9869
9955
|
/**
|
|
9956
|
+
* Vendor-neutral image / picture-adjustment cap — the per-camera config
|
|
9957
|
+
* cap shared by reolink / hikvision / amcrest. Models the common ISP
|
|
9958
|
+
* surface: the four picture sliders (brightness / contrast / saturation /
|
|
9959
|
+
* sharpness), orientation (mirror / flip / rotate), white-balance,
|
|
9960
|
+
* exposure and backlight-compensation modes.
|
|
9961
|
+
*
|
|
9962
|
+
* NORMALIZATION: every slider is a normalized int 0–100. Vendors expose
|
|
9963
|
+
* these natively as 0–100 or 0–255 (or other ranges); each provider maps
|
|
9964
|
+
* its native range to/from this normalized 0–100 space so the cap surface
|
|
9965
|
+
* (and the derived form) is identical across cameras. `warmth` (manual
|
|
9966
|
+
* white-balance) is likewise normalized 0–100.
|
|
9967
|
+
*
|
|
9968
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9969
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9970
|
+
* injected from `status`) reports the live values, and a single
|
|
9971
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9972
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9973
|
+
* routing from this surface.
|
|
9974
|
+
*/
|
|
9975
|
+
/** Sensor/image rotation, degrees clockwise. */
|
|
9976
|
+
var ImageRotateSchema = _enum([
|
|
9977
|
+
"0",
|
|
9978
|
+
"90",
|
|
9979
|
+
"180",
|
|
9980
|
+
"270"
|
|
9981
|
+
]);
|
|
9982
|
+
/** White-balance mode. `manual` unlocks the normalized `warmth` knob. */
|
|
9983
|
+
var WhiteBalanceModeSchema = _enum(["auto", "manual"]);
|
|
9984
|
+
/** Exposure mode. */
|
|
9985
|
+
var ExposureModeSchema = _enum(["auto", "manual"]);
|
|
9986
|
+
/**
|
|
9987
|
+
* Backlight-compensation mode:
|
|
9988
|
+
* - `off` — disabled
|
|
9989
|
+
* - `blc` — backlight compensation
|
|
9990
|
+
* - `wdr` — wide dynamic range
|
|
9991
|
+
* - `hlc` — highlight compensation
|
|
9992
|
+
*/
|
|
9993
|
+
var BacklightModeSchema = _enum([
|
|
9994
|
+
"off",
|
|
9995
|
+
"blc",
|
|
9996
|
+
"wdr",
|
|
9997
|
+
"hlc"
|
|
9998
|
+
]);
|
|
9999
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
10000
|
+
* getOptions availability convention. Slider values are normalized 0–100. */
|
|
10001
|
+
var NormalizedRangeSchema = object({
|
|
10002
|
+
min: number(),
|
|
10003
|
+
max: number(),
|
|
10004
|
+
step: number()
|
|
10005
|
+
});
|
|
10006
|
+
object({
|
|
10007
|
+
/** Normalized 0–100. */
|
|
10008
|
+
brightness: number().optional(),
|
|
10009
|
+
/** Normalized 0–100. */
|
|
10010
|
+
contrast: number().optional(),
|
|
10011
|
+
/** Normalized 0–100. */
|
|
10012
|
+
saturation: number().optional(),
|
|
10013
|
+
/** Normalized 0–100. */
|
|
10014
|
+
sharpness: number().optional(),
|
|
10015
|
+
mirror: boolean().optional(),
|
|
10016
|
+
flip: boolean().optional(),
|
|
10017
|
+
rotate: ImageRotateSchema.optional(),
|
|
10018
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
10019
|
+
/** Manual white-balance warmth, NORMALIZED 0–100. Meaningful only when `whiteBalance === 'manual'`. */
|
|
10020
|
+
warmth: number().optional(),
|
|
10021
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
10022
|
+
backlightMode: BacklightModeSchema.optional(),
|
|
10023
|
+
lastFetchedAt: number()
|
|
10024
|
+
});
|
|
10025
|
+
/**
|
|
10026
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
10027
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
10028
|
+
* (the normalized 0–100 range); enums as arrays of supported values (empty
|
|
10029
|
+
* array → control hidden). A provider returns honest, camera-probed values
|
|
10030
|
+
* — never hardcoded.
|
|
10031
|
+
*/
|
|
10032
|
+
var ImageSettingsOptionsSchema = object({
|
|
10033
|
+
supportsBrightness: boolean(),
|
|
10034
|
+
brightness: NormalizedRangeSchema.optional(),
|
|
10035
|
+
supportsContrast: boolean(),
|
|
10036
|
+
contrast: NormalizedRangeSchema.optional(),
|
|
10037
|
+
supportsSaturation: boolean(),
|
|
10038
|
+
saturation: NormalizedRangeSchema.optional(),
|
|
10039
|
+
supportsSharpness: boolean(),
|
|
10040
|
+
sharpness: NormalizedRangeSchema.optional(),
|
|
10041
|
+
supportsMirror: boolean(),
|
|
10042
|
+
supportsFlip: boolean(),
|
|
10043
|
+
/** Supported rotation values. Empty → rotation not configurable. */
|
|
10044
|
+
rotateOptions: array(ImageRotateSchema),
|
|
10045
|
+
/** Supported white-balance modes. Empty → white-balance not configurable. */
|
|
10046
|
+
whiteBalanceModes: array(WhiteBalanceModeSchema),
|
|
10047
|
+
supportsWarmth: boolean(),
|
|
10048
|
+
/** Present when `supportsWarmth` — the normalized 0–100 range. */
|
|
10049
|
+
warmth: NormalizedRangeSchema.optional(),
|
|
10050
|
+
/** Supported exposure modes. Empty → exposure not configurable. */
|
|
10051
|
+
exposureModes: array(ExposureModeSchema),
|
|
10052
|
+
/** Supported backlight modes. Empty → backlight-compensation not configurable. */
|
|
10053
|
+
backlightModes: array(BacklightModeSchema)
|
|
10054
|
+
});
|
|
10055
|
+
/**
|
|
10056
|
+
* Partial change to the image config — every field optional. Slider values
|
|
10057
|
+
* are normalized 0–100. A provider ignores fields it does not support.
|
|
10058
|
+
*/
|
|
10059
|
+
var ImageSettingsPatchSchema = object({
|
|
10060
|
+
brightness: number().optional(),
|
|
10061
|
+
contrast: number().optional(),
|
|
10062
|
+
saturation: number().optional(),
|
|
10063
|
+
sharpness: number().optional(),
|
|
10064
|
+
mirror: boolean().optional(),
|
|
10065
|
+
flip: boolean().optional(),
|
|
10066
|
+
rotate: ImageRotateSchema.optional(),
|
|
10067
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
10068
|
+
warmth: number().optional(),
|
|
10069
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
10070
|
+
backlightMode: BacklightModeSchema.optional()
|
|
10071
|
+
});
|
|
10072
|
+
DeviceType.Camera, method(object({ deviceId: number() }), ImageSettingsOptionsSchema), method(object({
|
|
10073
|
+
deviceId: number(),
|
|
10074
|
+
settings: ImageSettingsPatchSchema
|
|
10075
|
+
}), _void(), {
|
|
10076
|
+
kind: "mutation",
|
|
10077
|
+
auth: "admin"
|
|
10078
|
+
});
|
|
10079
|
+
/**
|
|
9870
10080
|
* Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
|
|
9871
10081
|
* with a mowing lifecycle plus a dock action.
|
|
9872
10082
|
*
|
|
@@ -10761,6 +10971,16 @@ var RunnerCameraConfigSchema = object({
|
|
|
10761
10971
|
* this gate is bypassed.
|
|
10762
10972
|
*/
|
|
10763
10973
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
10974
|
+
/**
|
|
10975
|
+
* Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
|
|
10976
|
+
* never arms the periodic recheck timer, regardless of `occupancyRecheckSec` —
|
|
10977
|
+
* this is off by default because the recheck re-subscribes a detection session
|
|
10978
|
+
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
10979
|
+
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
10980
|
+
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
10981
|
+
* (and only render) when this is enabled.
|
|
10982
|
+
*/
|
|
10983
|
+
occupancyRecheckEnabled: boolean().default(false),
|
|
10764
10984
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
10765
10985
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
10766
10986
|
/**
|
|
@@ -13057,7 +13277,9 @@ method(object({ codec: string() }), boolean()), method(_void(), object({
|
|
|
13057
13277
|
id: string(),
|
|
13058
13278
|
name: string(),
|
|
13059
13279
|
isPullMode: boolean().optional(),
|
|
13060
|
-
priority: number().optional()
|
|
13280
|
+
priority: number().optional(),
|
|
13281
|
+
hwaccel: string().optional(),
|
|
13282
|
+
probedBestHwaccel: string().optional()
|
|
13061
13283
|
})), method(DecoderSessionConfigSchema, object({
|
|
13062
13284
|
sessionId: string(),
|
|
13063
13285
|
nodeId: string()
|
|
@@ -14996,7 +15218,17 @@ var AgentAddonConfigSchema = object({
|
|
|
14996
15218
|
});
|
|
14997
15219
|
var AgentPipelineSettingsSchema = object({
|
|
14998
15220
|
addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
|
|
14999
|
-
maxCameras: number().int().nonnegative().nullable().default(null)
|
|
15221
|
+
maxCameras: number().int().nonnegative().nullable().default(null),
|
|
15222
|
+
/** Per-node detection weight (relative share for the quota balancer). */
|
|
15223
|
+
detectWeight: number().positive().optional(),
|
|
15224
|
+
/** Node is eligible to run the detection pipeline (decode + inference). */
|
|
15225
|
+
detect: boolean().optional(),
|
|
15226
|
+
/** Node is eligible to host decoder sessions. */
|
|
15227
|
+
decode: boolean().optional(),
|
|
15228
|
+
/** Node is eligible to run audio-analyzer sessions. */
|
|
15229
|
+
audio: boolean().optional(),
|
|
15230
|
+
/** Node is eligible to be the ingest / source-owner (serve the restream). */
|
|
15231
|
+
ingest: boolean().optional()
|
|
15000
15232
|
});
|
|
15001
15233
|
var CameraPipelineForAgentSchema = object({
|
|
15002
15234
|
steps: array(PipelineStepInputSchema).readonly(),
|
|
@@ -15302,6 +15534,21 @@ method(object({
|
|
|
15302
15534
|
}), object({ success: literal(true) }), {
|
|
15303
15535
|
kind: "mutation",
|
|
15304
15536
|
auth: "admin"
|
|
15537
|
+
}), method(object({
|
|
15538
|
+
agentNodeId: string(),
|
|
15539
|
+
detectWeight: number().positive().nullable()
|
|
15540
|
+
}), object({ success: literal(true) }), {
|
|
15541
|
+
kind: "mutation",
|
|
15542
|
+
auth: "admin"
|
|
15543
|
+
}), method(object({
|
|
15544
|
+
agentNodeId: string(),
|
|
15545
|
+
detect: boolean().nullable().optional(),
|
|
15546
|
+
decode: boolean().nullable().optional(),
|
|
15547
|
+
audio: boolean().nullable().optional(),
|
|
15548
|
+
ingest: boolean().nullable().optional()
|
|
15549
|
+
}), object({ success: literal(true) }), {
|
|
15550
|
+
kind: "mutation",
|
|
15551
|
+
auth: "admin"
|
|
15305
15552
|
}), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
|
|
15306
15553
|
deviceId: number(),
|
|
15307
15554
|
addonId: string(),
|
|
@@ -19049,6 +19296,18 @@ Object.freeze({
|
|
|
19049
19296
|
addonId: null,
|
|
19050
19297
|
access: "view"
|
|
19051
19298
|
},
|
|
19299
|
+
"dayNight.getOptions": {
|
|
19300
|
+
capName: "day-night",
|
|
19301
|
+
capScope: "device",
|
|
19302
|
+
addonId: null,
|
|
19303
|
+
access: "view"
|
|
19304
|
+
},
|
|
19305
|
+
"dayNight.setSettings": {
|
|
19306
|
+
capName: "day-night",
|
|
19307
|
+
capScope: "device",
|
|
19308
|
+
addonId: null,
|
|
19309
|
+
access: "create"
|
|
19310
|
+
},
|
|
19052
19311
|
"decoder.createSession": {
|
|
19053
19312
|
capName: "decoder",
|
|
19054
19313
|
capScope: "system",
|
|
@@ -19979,6 +20238,18 @@ Object.freeze({
|
|
|
19979
20238
|
addonId: null,
|
|
19980
20239
|
access: "create"
|
|
19981
20240
|
},
|
|
20241
|
+
"imageSettings.getOptions": {
|
|
20242
|
+
capName: "image-settings",
|
|
20243
|
+
capScope: "device",
|
|
20244
|
+
addonId: null,
|
|
20245
|
+
access: "view"
|
|
20246
|
+
},
|
|
20247
|
+
"imageSettings.setSettings": {
|
|
20248
|
+
capName: "image-settings",
|
|
20249
|
+
capScope: "device",
|
|
20250
|
+
addonId: null,
|
|
20251
|
+
access: "create"
|
|
20252
|
+
},
|
|
19982
20253
|
"integrations.create": {
|
|
19983
20254
|
capName: "integrations",
|
|
19984
20255
|
capScope: "system",
|
|
@@ -21161,6 +21432,18 @@ Object.freeze({
|
|
|
21161
21432
|
addonId: null,
|
|
21162
21433
|
access: "create"
|
|
21163
21434
|
},
|
|
21435
|
+
"pipelineOrchestrator.setAgentCapabilities": {
|
|
21436
|
+
capName: "pipeline-orchestrator",
|
|
21437
|
+
capScope: "system",
|
|
21438
|
+
addonId: null,
|
|
21439
|
+
access: "create"
|
|
21440
|
+
},
|
|
21441
|
+
"pipelineOrchestrator.setAgentDetectWeight": {
|
|
21442
|
+
capName: "pipeline-orchestrator",
|
|
21443
|
+
capScope: "system",
|
|
21444
|
+
addonId: null,
|
|
21445
|
+
access: "create"
|
|
21446
|
+
},
|
|
21164
21447
|
"pipelineOrchestrator.setAgentMaxCameras": {
|
|
21165
21448
|
capName: "pipeline-orchestrator",
|
|
21166
21449
|
capScope: "system",
|
|
@@ -4639,7 +4639,7 @@ function _instanceof(cls, params = {}) {
|
|
|
4639
4639
|
return inst;
|
|
4640
4640
|
}
|
|
4641
4641
|
//#endregion
|
|
4642
|
-
//#region ../types/dist/sleep-
|
|
4642
|
+
//#region ../types/dist/sleep-CZDdRBua.mjs
|
|
4643
4643
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4644
4644
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4645
4645
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -7234,7 +7234,16 @@ var DecoderStatsSchema = object({
|
|
|
7234
7234
|
inputFps: number(),
|
|
7235
7235
|
outputFps: number(),
|
|
7236
7236
|
avgDecodeTimeMs: number(),
|
|
7237
|
-
droppedFrames: number()
|
|
7237
|
+
droppedFrames: number(),
|
|
7238
|
+
/**
|
|
7239
|
+
* Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
|
|
7240
|
+
* lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
|
|
7241
|
+
* the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
|
|
7242
|
+
* is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
|
|
7243
|
+
*/
|
|
7244
|
+
lagMs: number().optional(),
|
|
7245
|
+
effectiveFps: number().optional(),
|
|
7246
|
+
adaptiveFps: number().optional()
|
|
7238
7247
|
});
|
|
7239
7248
|
var DecoderSessionConfigSchema = object({
|
|
7240
7249
|
codec: string(),
|
|
@@ -7275,7 +7284,15 @@ var DecoderSessionConfigSchema = object({
|
|
|
7275
7284
|
* other — `pullFrames` returns nothing for an `'shm'` session and
|
|
7276
7285
|
* `pullHandles` returns nothing for a `'callback'` session.
|
|
7277
7286
|
*/
|
|
7278
|
-
frameSink: _enum(["callback", "shm"]).default("callback")
|
|
7287
|
+
frameSink: _enum(["callback", "shm"]).default("callback"),
|
|
7288
|
+
/**
|
|
7289
|
+
* Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
|
|
7290
|
+
* a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
|
|
7291
|
+
* real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
|
|
7292
|
+
* stream-broker's `streamingDebug` gate — off by default so production logs
|
|
7293
|
+
* stay quiet and the emit path pays zero per-frame cost when disabled.
|
|
7294
|
+
*/
|
|
7295
|
+
debug: boolean().optional()
|
|
7279
7296
|
});
|
|
7280
7297
|
var EncodeProfileSchema = object({
|
|
7281
7298
|
video: object({
|
|
@@ -9487,6 +9504,75 @@ DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _vo
|
|
|
9487
9504
|
auth: "admin"
|
|
9488
9505
|
});
|
|
9489
9506
|
/**
|
|
9507
|
+
* Vendor-neutral day/night (IR-cut) control — the per-camera config cap
|
|
9508
|
+
* shared by reolink / hikvision / amcrest. Models the common firmware
|
|
9509
|
+
* surface: the IR-cut switching MODE plus the two knobs that gate it
|
|
9510
|
+
* (photocell `sensitivity` + `switchDelaySec`). Each vendor maps these
|
|
9511
|
+
* onto its own ISAPI / Baichuan / Dahua-CGI fields; the cap standardises
|
|
9512
|
+
* the shape so ONE derived-form renders every camera.
|
|
9513
|
+
*
|
|
9514
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9515
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9516
|
+
* injected from `status`) reports the live values, and a single
|
|
9517
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9518
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9519
|
+
* routing from this surface.
|
|
9520
|
+
*/
|
|
9521
|
+
/** IR-cut switching mode. `schedule` = time-of-day table configured on the camera. */
|
|
9522
|
+
var DayNightModeSchema = _enum([
|
|
9523
|
+
"auto",
|
|
9524
|
+
"day",
|
|
9525
|
+
"night",
|
|
9526
|
+
"schedule"
|
|
9527
|
+
]);
|
|
9528
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
9529
|
+
* getOptions availability convention. Normalized values are 0–100. */
|
|
9530
|
+
var NormalizedRangeSchema$1 = object({
|
|
9531
|
+
min: number(),
|
|
9532
|
+
max: number(),
|
|
9533
|
+
step: number()
|
|
9534
|
+
});
|
|
9535
|
+
object({
|
|
9536
|
+
mode: DayNightModeSchema,
|
|
9537
|
+
/** IR-cut trigger sensitivity, NORMALIZED 0–100 (higher = switches to night sooner). */
|
|
9538
|
+
sensitivity: number().optional(),
|
|
9539
|
+
/** Delay before the IR-cut filter flips, in seconds. */
|
|
9540
|
+
switchDelaySec: number().optional(),
|
|
9541
|
+
lastFetchedAt: number()
|
|
9542
|
+
});
|
|
9543
|
+
/**
|
|
9544
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
9545
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
9546
|
+
* (normalized 0–100); the mode choice-set as an array. A provider returns
|
|
9547
|
+
* honest, camera-probed values — never hardcoded.
|
|
9548
|
+
*/
|
|
9549
|
+
var DayNightOptionsSchema = object({
|
|
9550
|
+
/** Modes this camera accepts. Empty → the camera has no configurable day/night mode. */
|
|
9551
|
+
modes: array(DayNightModeSchema),
|
|
9552
|
+
supportsSensitivity: boolean(),
|
|
9553
|
+
/** Present when `supportsSensitivity` — the normalized 0–100 range. */
|
|
9554
|
+
sensitivity: NormalizedRangeSchema$1.optional(),
|
|
9555
|
+
supportsSwitchDelay: boolean(),
|
|
9556
|
+
/** Present when `supportsSwitchDelay` — the allowed delay range in seconds. */
|
|
9557
|
+
switchDelaySec: NormalizedRangeSchema$1.optional()
|
|
9558
|
+
});
|
|
9559
|
+
/**
|
|
9560
|
+
* Partial change to the day/night config — every field optional. A
|
|
9561
|
+
* provider ignores fields it does not support.
|
|
9562
|
+
*/
|
|
9563
|
+
var DayNightSettingsPatchSchema = object({
|
|
9564
|
+
mode: DayNightModeSchema.optional(),
|
|
9565
|
+
sensitivity: number().optional(),
|
|
9566
|
+
switchDelaySec: number().optional()
|
|
9567
|
+
});
|
|
9568
|
+
DeviceType.Camera, method(object({ deviceId: number() }), DayNightOptionsSchema), method(object({
|
|
9569
|
+
deviceId: number(),
|
|
9570
|
+
settings: DayNightSettingsPatchSchema
|
|
9571
|
+
}), _void(), {
|
|
9572
|
+
kind: "mutation",
|
|
9573
|
+
auth: "admin"
|
|
9574
|
+
});
|
|
9575
|
+
/**
|
|
9490
9576
|
* Identity envelope for a device's upstream-system metadata.
|
|
9491
9577
|
*
|
|
9492
9578
|
* Two jobs:
|
|
@@ -9842,6 +9928,130 @@ object({
|
|
|
9842
9928
|
});
|
|
9843
9929
|
DeviceType.Image;
|
|
9844
9930
|
/**
|
|
9931
|
+
* Vendor-neutral image / picture-adjustment cap — the per-camera config
|
|
9932
|
+
* cap shared by reolink / hikvision / amcrest. Models the common ISP
|
|
9933
|
+
* surface: the four picture sliders (brightness / contrast / saturation /
|
|
9934
|
+
* sharpness), orientation (mirror / flip / rotate), white-balance,
|
|
9935
|
+
* exposure and backlight-compensation modes.
|
|
9936
|
+
*
|
|
9937
|
+
* NORMALIZATION: every slider is a normalized int 0–100. Vendors expose
|
|
9938
|
+
* these natively as 0–100 or 0–255 (or other ranges); each provider maps
|
|
9939
|
+
* its native range to/from this normalized 0–100 space so the cap surface
|
|
9940
|
+
* (and the derived form) is identical across cameras. `warmth` (manual
|
|
9941
|
+
* white-balance) is likewise normalized 0–100.
|
|
9942
|
+
*
|
|
9943
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9944
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9945
|
+
* injected from `status`) reports the live values, and a single
|
|
9946
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9947
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9948
|
+
* routing from this surface.
|
|
9949
|
+
*/
|
|
9950
|
+
/** Sensor/image rotation, degrees clockwise. */
|
|
9951
|
+
var ImageRotateSchema = _enum([
|
|
9952
|
+
"0",
|
|
9953
|
+
"90",
|
|
9954
|
+
"180",
|
|
9955
|
+
"270"
|
|
9956
|
+
]);
|
|
9957
|
+
/** White-balance mode. `manual` unlocks the normalized `warmth` knob. */
|
|
9958
|
+
var WhiteBalanceModeSchema = _enum(["auto", "manual"]);
|
|
9959
|
+
/** Exposure mode. */
|
|
9960
|
+
var ExposureModeSchema = _enum(["auto", "manual"]);
|
|
9961
|
+
/**
|
|
9962
|
+
* Backlight-compensation mode:
|
|
9963
|
+
* - `off` — disabled
|
|
9964
|
+
* - `blc` — backlight compensation
|
|
9965
|
+
* - `wdr` — wide dynamic range
|
|
9966
|
+
* - `hlc` — highlight compensation
|
|
9967
|
+
*/
|
|
9968
|
+
var BacklightModeSchema = _enum([
|
|
9969
|
+
"off",
|
|
9970
|
+
"blc",
|
|
9971
|
+
"wdr",
|
|
9972
|
+
"hlc"
|
|
9973
|
+
]);
|
|
9974
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
9975
|
+
* getOptions availability convention. Slider values are normalized 0–100. */
|
|
9976
|
+
var NormalizedRangeSchema = object({
|
|
9977
|
+
min: number(),
|
|
9978
|
+
max: number(),
|
|
9979
|
+
step: number()
|
|
9980
|
+
});
|
|
9981
|
+
object({
|
|
9982
|
+
/** Normalized 0–100. */
|
|
9983
|
+
brightness: number().optional(),
|
|
9984
|
+
/** Normalized 0–100. */
|
|
9985
|
+
contrast: number().optional(),
|
|
9986
|
+
/** Normalized 0–100. */
|
|
9987
|
+
saturation: number().optional(),
|
|
9988
|
+
/** Normalized 0–100. */
|
|
9989
|
+
sharpness: number().optional(),
|
|
9990
|
+
mirror: boolean().optional(),
|
|
9991
|
+
flip: boolean().optional(),
|
|
9992
|
+
rotate: ImageRotateSchema.optional(),
|
|
9993
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
9994
|
+
/** Manual white-balance warmth, NORMALIZED 0–100. Meaningful only when `whiteBalance === 'manual'`. */
|
|
9995
|
+
warmth: number().optional(),
|
|
9996
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
9997
|
+
backlightMode: BacklightModeSchema.optional(),
|
|
9998
|
+
lastFetchedAt: number()
|
|
9999
|
+
});
|
|
10000
|
+
/**
|
|
10001
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
10002
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
10003
|
+
* (the normalized 0–100 range); enums as arrays of supported values (empty
|
|
10004
|
+
* array → control hidden). A provider returns honest, camera-probed values
|
|
10005
|
+
* — never hardcoded.
|
|
10006
|
+
*/
|
|
10007
|
+
var ImageSettingsOptionsSchema = object({
|
|
10008
|
+
supportsBrightness: boolean(),
|
|
10009
|
+
brightness: NormalizedRangeSchema.optional(),
|
|
10010
|
+
supportsContrast: boolean(),
|
|
10011
|
+
contrast: NormalizedRangeSchema.optional(),
|
|
10012
|
+
supportsSaturation: boolean(),
|
|
10013
|
+
saturation: NormalizedRangeSchema.optional(),
|
|
10014
|
+
supportsSharpness: boolean(),
|
|
10015
|
+
sharpness: NormalizedRangeSchema.optional(),
|
|
10016
|
+
supportsMirror: boolean(),
|
|
10017
|
+
supportsFlip: boolean(),
|
|
10018
|
+
/** Supported rotation values. Empty → rotation not configurable. */
|
|
10019
|
+
rotateOptions: array(ImageRotateSchema),
|
|
10020
|
+
/** Supported white-balance modes. Empty → white-balance not configurable. */
|
|
10021
|
+
whiteBalanceModes: array(WhiteBalanceModeSchema),
|
|
10022
|
+
supportsWarmth: boolean(),
|
|
10023
|
+
/** Present when `supportsWarmth` — the normalized 0–100 range. */
|
|
10024
|
+
warmth: NormalizedRangeSchema.optional(),
|
|
10025
|
+
/** Supported exposure modes. Empty → exposure not configurable. */
|
|
10026
|
+
exposureModes: array(ExposureModeSchema),
|
|
10027
|
+
/** Supported backlight modes. Empty → backlight-compensation not configurable. */
|
|
10028
|
+
backlightModes: array(BacklightModeSchema)
|
|
10029
|
+
});
|
|
10030
|
+
/**
|
|
10031
|
+
* Partial change to the image config — every field optional. Slider values
|
|
10032
|
+
* are normalized 0–100. A provider ignores fields it does not support.
|
|
10033
|
+
*/
|
|
10034
|
+
var ImageSettingsPatchSchema = object({
|
|
10035
|
+
brightness: number().optional(),
|
|
10036
|
+
contrast: number().optional(),
|
|
10037
|
+
saturation: number().optional(),
|
|
10038
|
+
sharpness: number().optional(),
|
|
10039
|
+
mirror: boolean().optional(),
|
|
10040
|
+
flip: boolean().optional(),
|
|
10041
|
+
rotate: ImageRotateSchema.optional(),
|
|
10042
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
10043
|
+
warmth: number().optional(),
|
|
10044
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
10045
|
+
backlightMode: BacklightModeSchema.optional()
|
|
10046
|
+
});
|
|
10047
|
+
DeviceType.Camera, method(object({ deviceId: number() }), ImageSettingsOptionsSchema), method(object({
|
|
10048
|
+
deviceId: number(),
|
|
10049
|
+
settings: ImageSettingsPatchSchema
|
|
10050
|
+
}), _void(), {
|
|
10051
|
+
kind: "mutation",
|
|
10052
|
+
auth: "admin"
|
|
10053
|
+
});
|
|
10054
|
+
/**
|
|
9845
10055
|
* Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
|
|
9846
10056
|
* with a mowing lifecycle plus a dock action.
|
|
9847
10057
|
*
|
|
@@ -10736,6 +10946,16 @@ var RunnerCameraConfigSchema = object({
|
|
|
10736
10946
|
* this gate is bypassed.
|
|
10737
10947
|
*/
|
|
10738
10948
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
10949
|
+
/**
|
|
10950
|
+
* Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
|
|
10951
|
+
* never arms the periodic recheck timer, regardless of `occupancyRecheckSec` —
|
|
10952
|
+
* this is off by default because the recheck re-subscribes a detection session
|
|
10953
|
+
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
10954
|
+
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
10955
|
+
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
10956
|
+
* (and only render) when this is enabled.
|
|
10957
|
+
*/
|
|
10958
|
+
occupancyRecheckEnabled: boolean().default(false),
|
|
10739
10959
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
10740
10960
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
10741
10961
|
/**
|
|
@@ -13032,7 +13252,9 @@ method(object({ codec: string() }), boolean()), method(_void(), object({
|
|
|
13032
13252
|
id: string(),
|
|
13033
13253
|
name: string(),
|
|
13034
13254
|
isPullMode: boolean().optional(),
|
|
13035
|
-
priority: number().optional()
|
|
13255
|
+
priority: number().optional(),
|
|
13256
|
+
hwaccel: string().optional(),
|
|
13257
|
+
probedBestHwaccel: string().optional()
|
|
13036
13258
|
})), method(DecoderSessionConfigSchema, object({
|
|
13037
13259
|
sessionId: string(),
|
|
13038
13260
|
nodeId: string()
|
|
@@ -14971,7 +15193,17 @@ var AgentAddonConfigSchema = object({
|
|
|
14971
15193
|
});
|
|
14972
15194
|
var AgentPipelineSettingsSchema = object({
|
|
14973
15195
|
addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
|
|
14974
|
-
maxCameras: number().int().nonnegative().nullable().default(null)
|
|
15196
|
+
maxCameras: number().int().nonnegative().nullable().default(null),
|
|
15197
|
+
/** Per-node detection weight (relative share for the quota balancer). */
|
|
15198
|
+
detectWeight: number().positive().optional(),
|
|
15199
|
+
/** Node is eligible to run the detection pipeline (decode + inference). */
|
|
15200
|
+
detect: boolean().optional(),
|
|
15201
|
+
/** Node is eligible to host decoder sessions. */
|
|
15202
|
+
decode: boolean().optional(),
|
|
15203
|
+
/** Node is eligible to run audio-analyzer sessions. */
|
|
15204
|
+
audio: boolean().optional(),
|
|
15205
|
+
/** Node is eligible to be the ingest / source-owner (serve the restream). */
|
|
15206
|
+
ingest: boolean().optional()
|
|
14975
15207
|
});
|
|
14976
15208
|
var CameraPipelineForAgentSchema = object({
|
|
14977
15209
|
steps: array(PipelineStepInputSchema).readonly(),
|
|
@@ -15277,6 +15509,21 @@ method(object({
|
|
|
15277
15509
|
}), object({ success: literal(true) }), {
|
|
15278
15510
|
kind: "mutation",
|
|
15279
15511
|
auth: "admin"
|
|
15512
|
+
}), method(object({
|
|
15513
|
+
agentNodeId: string(),
|
|
15514
|
+
detectWeight: number().positive().nullable()
|
|
15515
|
+
}), object({ success: literal(true) }), {
|
|
15516
|
+
kind: "mutation",
|
|
15517
|
+
auth: "admin"
|
|
15518
|
+
}), method(object({
|
|
15519
|
+
agentNodeId: string(),
|
|
15520
|
+
detect: boolean().nullable().optional(),
|
|
15521
|
+
decode: boolean().nullable().optional(),
|
|
15522
|
+
audio: boolean().nullable().optional(),
|
|
15523
|
+
ingest: boolean().nullable().optional()
|
|
15524
|
+
}), object({ success: literal(true) }), {
|
|
15525
|
+
kind: "mutation",
|
|
15526
|
+
auth: "admin"
|
|
15280
15527
|
}), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
|
|
15281
15528
|
deviceId: number(),
|
|
15282
15529
|
addonId: string(),
|
|
@@ -19024,6 +19271,18 @@ Object.freeze({
|
|
|
19024
19271
|
addonId: null,
|
|
19025
19272
|
access: "view"
|
|
19026
19273
|
},
|
|
19274
|
+
"dayNight.getOptions": {
|
|
19275
|
+
capName: "day-night",
|
|
19276
|
+
capScope: "device",
|
|
19277
|
+
addonId: null,
|
|
19278
|
+
access: "view"
|
|
19279
|
+
},
|
|
19280
|
+
"dayNight.setSettings": {
|
|
19281
|
+
capName: "day-night",
|
|
19282
|
+
capScope: "device",
|
|
19283
|
+
addonId: null,
|
|
19284
|
+
access: "create"
|
|
19285
|
+
},
|
|
19027
19286
|
"decoder.createSession": {
|
|
19028
19287
|
capName: "decoder",
|
|
19029
19288
|
capScope: "system",
|
|
@@ -19954,6 +20213,18 @@ Object.freeze({
|
|
|
19954
20213
|
addonId: null,
|
|
19955
20214
|
access: "create"
|
|
19956
20215
|
},
|
|
20216
|
+
"imageSettings.getOptions": {
|
|
20217
|
+
capName: "image-settings",
|
|
20218
|
+
capScope: "device",
|
|
20219
|
+
addonId: null,
|
|
20220
|
+
access: "view"
|
|
20221
|
+
},
|
|
20222
|
+
"imageSettings.setSettings": {
|
|
20223
|
+
capName: "image-settings",
|
|
20224
|
+
capScope: "device",
|
|
20225
|
+
addonId: null,
|
|
20226
|
+
access: "create"
|
|
20227
|
+
},
|
|
19957
20228
|
"integrations.create": {
|
|
19958
20229
|
capName: "integrations",
|
|
19959
20230
|
capScope: "system",
|
|
@@ -21136,6 +21407,18 @@ Object.freeze({
|
|
|
21136
21407
|
addonId: null,
|
|
21137
21408
|
access: "create"
|
|
21138
21409
|
},
|
|
21410
|
+
"pipelineOrchestrator.setAgentCapabilities": {
|
|
21411
|
+
capName: "pipeline-orchestrator",
|
|
21412
|
+
capScope: "system",
|
|
21413
|
+
addonId: null,
|
|
21414
|
+
access: "create"
|
|
21415
|
+
},
|
|
21416
|
+
"pipelineOrchestrator.setAgentDetectWeight": {
|
|
21417
|
+
capName: "pipeline-orchestrator",
|
|
21418
|
+
capScope: "system",
|
|
21419
|
+
addonId: null,
|
|
21420
|
+
access: "create"
|
|
21421
|
+
},
|
|
21139
21422
|
"pipelineOrchestrator.setAgentMaxCameras": {
|
|
21140
21423
|
capName: "pipeline-orchestrator",
|
|
21141
21424
|
capScope: "system",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-export-hap",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.17",
|
|
4
4
|
"description": "HomeKit (HAP) bridge exporter for CamStack devices. Publishes a bridged accessory per exposed device — MotionSensor in this MVP; Camera/Doorbell/Switch/Light follow.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|