@camstack/addon-cloudflare 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/{dist-B33Abq-d.js → dist-CcLXZ_31.js} +250 -4
- package/dist/{dist-BtDJPh1F.mjs → dist-jW8o528S.mjs} +250 -4
- package/dist/tunnel/cloudflare-tunnel.addon.js +1 -1
- package/dist/tunnel/cloudflare-tunnel.addon.mjs +1 -1
- package/dist/turn/cloudflare-turn.addon.js +2 -2
- package/dist/turn/cloudflare-turn.addon.mjs +2 -2
- package/package.json +1 -1
|
@@ -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({
|
|
@@ -9421,6 +9438,75 @@ DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _vo
|
|
|
9421
9438
|
auth: "admin"
|
|
9422
9439
|
});
|
|
9423
9440
|
/**
|
|
9441
|
+
* Vendor-neutral day/night (IR-cut) control — the per-camera config cap
|
|
9442
|
+
* shared by reolink / hikvision / amcrest. Models the common firmware
|
|
9443
|
+
* surface: the IR-cut switching MODE plus the two knobs that gate it
|
|
9444
|
+
* (photocell `sensitivity` + `switchDelaySec`). Each vendor maps these
|
|
9445
|
+
* onto its own ISAPI / Baichuan / Dahua-CGI fields; the cap standardises
|
|
9446
|
+
* the shape so ONE derived-form renders every camera.
|
|
9447
|
+
*
|
|
9448
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9449
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9450
|
+
* injected from `status`) reports the live values, and a single
|
|
9451
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9452
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9453
|
+
* routing from this surface.
|
|
9454
|
+
*/
|
|
9455
|
+
/** IR-cut switching mode. `schedule` = time-of-day table configured on the camera. */
|
|
9456
|
+
var DayNightModeSchema = _enum([
|
|
9457
|
+
"auto",
|
|
9458
|
+
"day",
|
|
9459
|
+
"night",
|
|
9460
|
+
"schedule"
|
|
9461
|
+
]);
|
|
9462
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
9463
|
+
* getOptions availability convention. Normalized values are 0–100. */
|
|
9464
|
+
var NormalizedRangeSchema$1 = object({
|
|
9465
|
+
min: number(),
|
|
9466
|
+
max: number(),
|
|
9467
|
+
step: number()
|
|
9468
|
+
});
|
|
9469
|
+
object({
|
|
9470
|
+
mode: DayNightModeSchema,
|
|
9471
|
+
/** IR-cut trigger sensitivity, NORMALIZED 0–100 (higher = switches to night sooner). */
|
|
9472
|
+
sensitivity: number().optional(),
|
|
9473
|
+
/** Delay before the IR-cut filter flips, in seconds. */
|
|
9474
|
+
switchDelaySec: number().optional(),
|
|
9475
|
+
lastFetchedAt: number()
|
|
9476
|
+
});
|
|
9477
|
+
/**
|
|
9478
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
9479
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
9480
|
+
* (normalized 0–100); the mode choice-set as an array. A provider returns
|
|
9481
|
+
* honest, camera-probed values — never hardcoded.
|
|
9482
|
+
*/
|
|
9483
|
+
var DayNightOptionsSchema = object({
|
|
9484
|
+
/** Modes this camera accepts. Empty → the camera has no configurable day/night mode. */
|
|
9485
|
+
modes: array(DayNightModeSchema),
|
|
9486
|
+
supportsSensitivity: boolean(),
|
|
9487
|
+
/** Present when `supportsSensitivity` — the normalized 0–100 range. */
|
|
9488
|
+
sensitivity: NormalizedRangeSchema$1.optional(),
|
|
9489
|
+
supportsSwitchDelay: boolean(),
|
|
9490
|
+
/** Present when `supportsSwitchDelay` — the allowed delay range in seconds. */
|
|
9491
|
+
switchDelaySec: NormalizedRangeSchema$1.optional()
|
|
9492
|
+
});
|
|
9493
|
+
/**
|
|
9494
|
+
* Partial change to the day/night config — every field optional. A
|
|
9495
|
+
* provider ignores fields it does not support.
|
|
9496
|
+
*/
|
|
9497
|
+
var DayNightSettingsPatchSchema = object({
|
|
9498
|
+
mode: DayNightModeSchema.optional(),
|
|
9499
|
+
sensitivity: number().optional(),
|
|
9500
|
+
switchDelaySec: number().optional()
|
|
9501
|
+
});
|
|
9502
|
+
DeviceType.Camera, method(object({ deviceId: number() }), DayNightOptionsSchema), method(object({
|
|
9503
|
+
deviceId: number(),
|
|
9504
|
+
settings: DayNightSettingsPatchSchema
|
|
9505
|
+
}), _void(), {
|
|
9506
|
+
kind: "mutation",
|
|
9507
|
+
auth: "admin"
|
|
9508
|
+
});
|
|
9509
|
+
/**
|
|
9424
9510
|
* Identity envelope for a device's upstream-system metadata.
|
|
9425
9511
|
*
|
|
9426
9512
|
* Two jobs:
|
|
@@ -9776,6 +9862,130 @@ object({
|
|
|
9776
9862
|
});
|
|
9777
9863
|
DeviceType.Image;
|
|
9778
9864
|
/**
|
|
9865
|
+
* Vendor-neutral image / picture-adjustment cap — the per-camera config
|
|
9866
|
+
* cap shared by reolink / hikvision / amcrest. Models the common ISP
|
|
9867
|
+
* surface: the four picture sliders (brightness / contrast / saturation /
|
|
9868
|
+
* sharpness), orientation (mirror / flip / rotate), white-balance,
|
|
9869
|
+
* exposure and backlight-compensation modes.
|
|
9870
|
+
*
|
|
9871
|
+
* NORMALIZATION: every slider is a normalized int 0–100. Vendors expose
|
|
9872
|
+
* these natively as 0–100 or 0–255 (or other ranges); each provider maps
|
|
9873
|
+
* its native range to/from this normalized 0–100 space so the cap surface
|
|
9874
|
+
* (and the derived form) is identical across cameras. `warmth` (manual
|
|
9875
|
+
* white-balance) is likewise normalized 0–100.
|
|
9876
|
+
*
|
|
9877
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9878
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9879
|
+
* injected from `status`) reports the live values, and a single
|
|
9880
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9881
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9882
|
+
* routing from this surface.
|
|
9883
|
+
*/
|
|
9884
|
+
/** Sensor/image rotation, degrees clockwise. */
|
|
9885
|
+
var ImageRotateSchema = _enum([
|
|
9886
|
+
"0",
|
|
9887
|
+
"90",
|
|
9888
|
+
"180",
|
|
9889
|
+
"270"
|
|
9890
|
+
]);
|
|
9891
|
+
/** White-balance mode. `manual` unlocks the normalized `warmth` knob. */
|
|
9892
|
+
var WhiteBalanceModeSchema = _enum(["auto", "manual"]);
|
|
9893
|
+
/** Exposure mode. */
|
|
9894
|
+
var ExposureModeSchema = _enum(["auto", "manual"]);
|
|
9895
|
+
/**
|
|
9896
|
+
* Backlight-compensation mode:
|
|
9897
|
+
* - `off` — disabled
|
|
9898
|
+
* - `blc` — backlight compensation
|
|
9899
|
+
* - `wdr` — wide dynamic range
|
|
9900
|
+
* - `hlc` — highlight compensation
|
|
9901
|
+
*/
|
|
9902
|
+
var BacklightModeSchema = _enum([
|
|
9903
|
+
"off",
|
|
9904
|
+
"blc",
|
|
9905
|
+
"wdr",
|
|
9906
|
+
"hlc"
|
|
9907
|
+
]);
|
|
9908
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
9909
|
+
* getOptions availability convention. Slider values are normalized 0–100. */
|
|
9910
|
+
var NormalizedRangeSchema = object({
|
|
9911
|
+
min: number(),
|
|
9912
|
+
max: number(),
|
|
9913
|
+
step: number()
|
|
9914
|
+
});
|
|
9915
|
+
object({
|
|
9916
|
+
/** Normalized 0–100. */
|
|
9917
|
+
brightness: number().optional(),
|
|
9918
|
+
/** Normalized 0–100. */
|
|
9919
|
+
contrast: number().optional(),
|
|
9920
|
+
/** Normalized 0–100. */
|
|
9921
|
+
saturation: number().optional(),
|
|
9922
|
+
/** Normalized 0–100. */
|
|
9923
|
+
sharpness: number().optional(),
|
|
9924
|
+
mirror: boolean().optional(),
|
|
9925
|
+
flip: boolean().optional(),
|
|
9926
|
+
rotate: ImageRotateSchema.optional(),
|
|
9927
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
9928
|
+
/** Manual white-balance warmth, NORMALIZED 0–100. Meaningful only when `whiteBalance === 'manual'`. */
|
|
9929
|
+
warmth: number().optional(),
|
|
9930
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
9931
|
+
backlightMode: BacklightModeSchema.optional(),
|
|
9932
|
+
lastFetchedAt: number()
|
|
9933
|
+
});
|
|
9934
|
+
/**
|
|
9935
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
9936
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
9937
|
+
* (the normalized 0–100 range); enums as arrays of supported values (empty
|
|
9938
|
+
* array → control hidden). A provider returns honest, camera-probed values
|
|
9939
|
+
* — never hardcoded.
|
|
9940
|
+
*/
|
|
9941
|
+
var ImageSettingsOptionsSchema = object({
|
|
9942
|
+
supportsBrightness: boolean(),
|
|
9943
|
+
brightness: NormalizedRangeSchema.optional(),
|
|
9944
|
+
supportsContrast: boolean(),
|
|
9945
|
+
contrast: NormalizedRangeSchema.optional(),
|
|
9946
|
+
supportsSaturation: boolean(),
|
|
9947
|
+
saturation: NormalizedRangeSchema.optional(),
|
|
9948
|
+
supportsSharpness: boolean(),
|
|
9949
|
+
sharpness: NormalizedRangeSchema.optional(),
|
|
9950
|
+
supportsMirror: boolean(),
|
|
9951
|
+
supportsFlip: boolean(),
|
|
9952
|
+
/** Supported rotation values. Empty → rotation not configurable. */
|
|
9953
|
+
rotateOptions: array(ImageRotateSchema),
|
|
9954
|
+
/** Supported white-balance modes. Empty → white-balance not configurable. */
|
|
9955
|
+
whiteBalanceModes: array(WhiteBalanceModeSchema),
|
|
9956
|
+
supportsWarmth: boolean(),
|
|
9957
|
+
/** Present when `supportsWarmth` — the normalized 0–100 range. */
|
|
9958
|
+
warmth: NormalizedRangeSchema.optional(),
|
|
9959
|
+
/** Supported exposure modes. Empty → exposure not configurable. */
|
|
9960
|
+
exposureModes: array(ExposureModeSchema),
|
|
9961
|
+
/** Supported backlight modes. Empty → backlight-compensation not configurable. */
|
|
9962
|
+
backlightModes: array(BacklightModeSchema)
|
|
9963
|
+
});
|
|
9964
|
+
/**
|
|
9965
|
+
* Partial change to the image config — every field optional. Slider values
|
|
9966
|
+
* are normalized 0–100. A provider ignores fields it does not support.
|
|
9967
|
+
*/
|
|
9968
|
+
var ImageSettingsPatchSchema = object({
|
|
9969
|
+
brightness: number().optional(),
|
|
9970
|
+
contrast: number().optional(),
|
|
9971
|
+
saturation: number().optional(),
|
|
9972
|
+
sharpness: number().optional(),
|
|
9973
|
+
mirror: boolean().optional(),
|
|
9974
|
+
flip: boolean().optional(),
|
|
9975
|
+
rotate: ImageRotateSchema.optional(),
|
|
9976
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
9977
|
+
warmth: number().optional(),
|
|
9978
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
9979
|
+
backlightMode: BacklightModeSchema.optional()
|
|
9980
|
+
});
|
|
9981
|
+
DeviceType.Camera, method(object({ deviceId: number() }), ImageSettingsOptionsSchema), method(object({
|
|
9982
|
+
deviceId: number(),
|
|
9983
|
+
settings: ImageSettingsPatchSchema
|
|
9984
|
+
}), _void(), {
|
|
9985
|
+
kind: "mutation",
|
|
9986
|
+
auth: "admin"
|
|
9987
|
+
});
|
|
9988
|
+
/**
|
|
9779
9989
|
* Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
|
|
9780
9990
|
* with a mowing lifecycle plus a dock action.
|
|
9781
9991
|
*
|
|
@@ -10670,6 +10880,16 @@ var RunnerCameraConfigSchema = object({
|
|
|
10670
10880
|
* this gate is bypassed.
|
|
10671
10881
|
*/
|
|
10672
10882
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
10883
|
+
/**
|
|
10884
|
+
* Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
|
|
10885
|
+
* never arms the periodic recheck timer, regardless of `occupancyRecheckSec` —
|
|
10886
|
+
* this is off by default because the recheck re-subscribes a detection session
|
|
10887
|
+
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
10888
|
+
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
10889
|
+
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
10890
|
+
* (and only render) when this is enabled.
|
|
10891
|
+
*/
|
|
10892
|
+
occupancyRecheckEnabled: boolean().default(false),
|
|
10673
10893
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
10674
10894
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
10675
10895
|
/**
|
|
@@ -12987,7 +13207,9 @@ method(object({ codec: string() }), boolean()), method(_void(), object({
|
|
|
12987
13207
|
id: string(),
|
|
12988
13208
|
name: string(),
|
|
12989
13209
|
isPullMode: boolean().optional(),
|
|
12990
|
-
priority: number().optional()
|
|
13210
|
+
priority: number().optional(),
|
|
13211
|
+
hwaccel: string().optional(),
|
|
13212
|
+
probedBestHwaccel: string().optional()
|
|
12991
13213
|
})), method(DecoderSessionConfigSchema, object({
|
|
12992
13214
|
sessionId: string(),
|
|
12993
13215
|
nodeId: string()
|
|
@@ -19019,6 +19241,18 @@ Object.freeze({
|
|
|
19019
19241
|
addonId: null,
|
|
19020
19242
|
access: "view"
|
|
19021
19243
|
},
|
|
19244
|
+
"dayNight.getOptions": {
|
|
19245
|
+
capName: "day-night",
|
|
19246
|
+
capScope: "device",
|
|
19247
|
+
addonId: null,
|
|
19248
|
+
access: "view"
|
|
19249
|
+
},
|
|
19250
|
+
"dayNight.setSettings": {
|
|
19251
|
+
capName: "day-night",
|
|
19252
|
+
capScope: "device",
|
|
19253
|
+
addonId: null,
|
|
19254
|
+
access: "create"
|
|
19255
|
+
},
|
|
19022
19256
|
"decoder.createSession": {
|
|
19023
19257
|
capName: "decoder",
|
|
19024
19258
|
capScope: "system",
|
|
@@ -19949,6 +20183,18 @@ Object.freeze({
|
|
|
19949
20183
|
addonId: null,
|
|
19950
20184
|
access: "create"
|
|
19951
20185
|
},
|
|
20186
|
+
"imageSettings.getOptions": {
|
|
20187
|
+
capName: "image-settings",
|
|
20188
|
+
capScope: "device",
|
|
20189
|
+
addonId: null,
|
|
20190
|
+
access: "view"
|
|
20191
|
+
},
|
|
20192
|
+
"imageSettings.setSettings": {
|
|
20193
|
+
capName: "image-settings",
|
|
20194
|
+
capScope: "device",
|
|
20195
|
+
addonId: null,
|
|
20196
|
+
access: "create"
|
|
20197
|
+
},
|
|
19952
20198
|
"integrations.create": {
|
|
19953
20199
|
capName: "integrations",
|
|
19954
20200
|
capScope: "system",
|
|
@@ -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({
|
|
@@ -9421,6 +9438,75 @@ DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _vo
|
|
|
9421
9438
|
auth: "admin"
|
|
9422
9439
|
});
|
|
9423
9440
|
/**
|
|
9441
|
+
* Vendor-neutral day/night (IR-cut) control — the per-camera config cap
|
|
9442
|
+
* shared by reolink / hikvision / amcrest. Models the common firmware
|
|
9443
|
+
* surface: the IR-cut switching MODE plus the two knobs that gate it
|
|
9444
|
+
* (photocell `sensitivity` + `switchDelaySec`). Each vendor maps these
|
|
9445
|
+
* onto its own ISAPI / Baichuan / Dahua-CGI fields; the cap standardises
|
|
9446
|
+
* the shape so ONE derived-form renders every camera.
|
|
9447
|
+
*
|
|
9448
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9449
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9450
|
+
* injected from `status`) reports the live values, and a single
|
|
9451
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9452
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9453
|
+
* routing from this surface.
|
|
9454
|
+
*/
|
|
9455
|
+
/** IR-cut switching mode. `schedule` = time-of-day table configured on the camera. */
|
|
9456
|
+
var DayNightModeSchema = _enum([
|
|
9457
|
+
"auto",
|
|
9458
|
+
"day",
|
|
9459
|
+
"night",
|
|
9460
|
+
"schedule"
|
|
9461
|
+
]);
|
|
9462
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
9463
|
+
* getOptions availability convention. Normalized values are 0–100. */
|
|
9464
|
+
var NormalizedRangeSchema$1 = object({
|
|
9465
|
+
min: number(),
|
|
9466
|
+
max: number(),
|
|
9467
|
+
step: number()
|
|
9468
|
+
});
|
|
9469
|
+
object({
|
|
9470
|
+
mode: DayNightModeSchema,
|
|
9471
|
+
/** IR-cut trigger sensitivity, NORMALIZED 0–100 (higher = switches to night sooner). */
|
|
9472
|
+
sensitivity: number().optional(),
|
|
9473
|
+
/** Delay before the IR-cut filter flips, in seconds. */
|
|
9474
|
+
switchDelaySec: number().optional(),
|
|
9475
|
+
lastFetchedAt: number()
|
|
9476
|
+
});
|
|
9477
|
+
/**
|
|
9478
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
9479
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
9480
|
+
* (normalized 0–100); the mode choice-set as an array. A provider returns
|
|
9481
|
+
* honest, camera-probed values — never hardcoded.
|
|
9482
|
+
*/
|
|
9483
|
+
var DayNightOptionsSchema = object({
|
|
9484
|
+
/** Modes this camera accepts. Empty → the camera has no configurable day/night mode. */
|
|
9485
|
+
modes: array(DayNightModeSchema),
|
|
9486
|
+
supportsSensitivity: boolean(),
|
|
9487
|
+
/** Present when `supportsSensitivity` — the normalized 0–100 range. */
|
|
9488
|
+
sensitivity: NormalizedRangeSchema$1.optional(),
|
|
9489
|
+
supportsSwitchDelay: boolean(),
|
|
9490
|
+
/** Present when `supportsSwitchDelay` — the allowed delay range in seconds. */
|
|
9491
|
+
switchDelaySec: NormalizedRangeSchema$1.optional()
|
|
9492
|
+
});
|
|
9493
|
+
/**
|
|
9494
|
+
* Partial change to the day/night config — every field optional. A
|
|
9495
|
+
* provider ignores fields it does not support.
|
|
9496
|
+
*/
|
|
9497
|
+
var DayNightSettingsPatchSchema = object({
|
|
9498
|
+
mode: DayNightModeSchema.optional(),
|
|
9499
|
+
sensitivity: number().optional(),
|
|
9500
|
+
switchDelaySec: number().optional()
|
|
9501
|
+
});
|
|
9502
|
+
DeviceType.Camera, method(object({ deviceId: number() }), DayNightOptionsSchema), method(object({
|
|
9503
|
+
deviceId: number(),
|
|
9504
|
+
settings: DayNightSettingsPatchSchema
|
|
9505
|
+
}), _void(), {
|
|
9506
|
+
kind: "mutation",
|
|
9507
|
+
auth: "admin"
|
|
9508
|
+
});
|
|
9509
|
+
/**
|
|
9424
9510
|
* Identity envelope for a device's upstream-system metadata.
|
|
9425
9511
|
*
|
|
9426
9512
|
* Two jobs:
|
|
@@ -9776,6 +9862,130 @@ object({
|
|
|
9776
9862
|
});
|
|
9777
9863
|
DeviceType.Image;
|
|
9778
9864
|
/**
|
|
9865
|
+
* Vendor-neutral image / picture-adjustment cap — the per-camera config
|
|
9866
|
+
* cap shared by reolink / hikvision / amcrest. Models the common ISP
|
|
9867
|
+
* surface: the four picture sliders (brightness / contrast / saturation /
|
|
9868
|
+
* sharpness), orientation (mirror / flip / rotate), white-balance,
|
|
9869
|
+
* exposure and backlight-compensation modes.
|
|
9870
|
+
*
|
|
9871
|
+
* NORMALIZATION: every slider is a normalized int 0–100. Vendors expose
|
|
9872
|
+
* these natively as 0–100 or 0–255 (or other ranges); each provider maps
|
|
9873
|
+
* its native range to/from this normalized 0–100 space so the cap surface
|
|
9874
|
+
* (and the derived form) is identical across cameras. `warmth` (manual
|
|
9875
|
+
* white-balance) is likewise normalized 0–100.
|
|
9876
|
+
*
|
|
9877
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9878
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9879
|
+
* injected from `status`) reports the live values, and a single
|
|
9880
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9881
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9882
|
+
* routing from this surface.
|
|
9883
|
+
*/
|
|
9884
|
+
/** Sensor/image rotation, degrees clockwise. */
|
|
9885
|
+
var ImageRotateSchema = _enum([
|
|
9886
|
+
"0",
|
|
9887
|
+
"90",
|
|
9888
|
+
"180",
|
|
9889
|
+
"270"
|
|
9890
|
+
]);
|
|
9891
|
+
/** White-balance mode. `manual` unlocks the normalized `warmth` knob. */
|
|
9892
|
+
var WhiteBalanceModeSchema = _enum(["auto", "manual"]);
|
|
9893
|
+
/** Exposure mode. */
|
|
9894
|
+
var ExposureModeSchema = _enum(["auto", "manual"]);
|
|
9895
|
+
/**
|
|
9896
|
+
* Backlight-compensation mode:
|
|
9897
|
+
* - `off` — disabled
|
|
9898
|
+
* - `blc` — backlight compensation
|
|
9899
|
+
* - `wdr` — wide dynamic range
|
|
9900
|
+
* - `hlc` — highlight compensation
|
|
9901
|
+
*/
|
|
9902
|
+
var BacklightModeSchema = _enum([
|
|
9903
|
+
"off",
|
|
9904
|
+
"blc",
|
|
9905
|
+
"wdr",
|
|
9906
|
+
"hlc"
|
|
9907
|
+
]);
|
|
9908
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
9909
|
+
* getOptions availability convention. Slider values are normalized 0–100. */
|
|
9910
|
+
var NormalizedRangeSchema = object({
|
|
9911
|
+
min: number(),
|
|
9912
|
+
max: number(),
|
|
9913
|
+
step: number()
|
|
9914
|
+
});
|
|
9915
|
+
object({
|
|
9916
|
+
/** Normalized 0–100. */
|
|
9917
|
+
brightness: number().optional(),
|
|
9918
|
+
/** Normalized 0–100. */
|
|
9919
|
+
contrast: number().optional(),
|
|
9920
|
+
/** Normalized 0–100. */
|
|
9921
|
+
saturation: number().optional(),
|
|
9922
|
+
/** Normalized 0–100. */
|
|
9923
|
+
sharpness: number().optional(),
|
|
9924
|
+
mirror: boolean().optional(),
|
|
9925
|
+
flip: boolean().optional(),
|
|
9926
|
+
rotate: ImageRotateSchema.optional(),
|
|
9927
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
9928
|
+
/** Manual white-balance warmth, NORMALIZED 0–100. Meaningful only when `whiteBalance === 'manual'`. */
|
|
9929
|
+
warmth: number().optional(),
|
|
9930
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
9931
|
+
backlightMode: BacklightModeSchema.optional(),
|
|
9932
|
+
lastFetchedAt: number()
|
|
9933
|
+
});
|
|
9934
|
+
/**
|
|
9935
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
9936
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
9937
|
+
* (the normalized 0–100 range); enums as arrays of supported values (empty
|
|
9938
|
+
* array → control hidden). A provider returns honest, camera-probed values
|
|
9939
|
+
* — never hardcoded.
|
|
9940
|
+
*/
|
|
9941
|
+
var ImageSettingsOptionsSchema = object({
|
|
9942
|
+
supportsBrightness: boolean(),
|
|
9943
|
+
brightness: NormalizedRangeSchema.optional(),
|
|
9944
|
+
supportsContrast: boolean(),
|
|
9945
|
+
contrast: NormalizedRangeSchema.optional(),
|
|
9946
|
+
supportsSaturation: boolean(),
|
|
9947
|
+
saturation: NormalizedRangeSchema.optional(),
|
|
9948
|
+
supportsSharpness: boolean(),
|
|
9949
|
+
sharpness: NormalizedRangeSchema.optional(),
|
|
9950
|
+
supportsMirror: boolean(),
|
|
9951
|
+
supportsFlip: boolean(),
|
|
9952
|
+
/** Supported rotation values. Empty → rotation not configurable. */
|
|
9953
|
+
rotateOptions: array(ImageRotateSchema),
|
|
9954
|
+
/** Supported white-balance modes. Empty → white-balance not configurable. */
|
|
9955
|
+
whiteBalanceModes: array(WhiteBalanceModeSchema),
|
|
9956
|
+
supportsWarmth: boolean(),
|
|
9957
|
+
/** Present when `supportsWarmth` — the normalized 0–100 range. */
|
|
9958
|
+
warmth: NormalizedRangeSchema.optional(),
|
|
9959
|
+
/** Supported exposure modes. Empty → exposure not configurable. */
|
|
9960
|
+
exposureModes: array(ExposureModeSchema),
|
|
9961
|
+
/** Supported backlight modes. Empty → backlight-compensation not configurable. */
|
|
9962
|
+
backlightModes: array(BacklightModeSchema)
|
|
9963
|
+
});
|
|
9964
|
+
/**
|
|
9965
|
+
* Partial change to the image config — every field optional. Slider values
|
|
9966
|
+
* are normalized 0–100. A provider ignores fields it does not support.
|
|
9967
|
+
*/
|
|
9968
|
+
var ImageSettingsPatchSchema = object({
|
|
9969
|
+
brightness: number().optional(),
|
|
9970
|
+
contrast: number().optional(),
|
|
9971
|
+
saturation: number().optional(),
|
|
9972
|
+
sharpness: number().optional(),
|
|
9973
|
+
mirror: boolean().optional(),
|
|
9974
|
+
flip: boolean().optional(),
|
|
9975
|
+
rotate: ImageRotateSchema.optional(),
|
|
9976
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
9977
|
+
warmth: number().optional(),
|
|
9978
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
9979
|
+
backlightMode: BacklightModeSchema.optional()
|
|
9980
|
+
});
|
|
9981
|
+
DeviceType.Camera, method(object({ deviceId: number() }), ImageSettingsOptionsSchema), method(object({
|
|
9982
|
+
deviceId: number(),
|
|
9983
|
+
settings: ImageSettingsPatchSchema
|
|
9984
|
+
}), _void(), {
|
|
9985
|
+
kind: "mutation",
|
|
9986
|
+
auth: "admin"
|
|
9987
|
+
});
|
|
9988
|
+
/**
|
|
9779
9989
|
* Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
|
|
9780
9990
|
* with a mowing lifecycle plus a dock action.
|
|
9781
9991
|
*
|
|
@@ -10670,6 +10880,16 @@ var RunnerCameraConfigSchema = object({
|
|
|
10670
10880
|
* this gate is bypassed.
|
|
10671
10881
|
*/
|
|
10672
10882
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
10883
|
+
/**
|
|
10884
|
+
* Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
|
|
10885
|
+
* never arms the periodic recheck timer, regardless of `occupancyRecheckSec` —
|
|
10886
|
+
* this is off by default because the recheck re-subscribes a detection session
|
|
10887
|
+
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
10888
|
+
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
10889
|
+
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
10890
|
+
* (and only render) when this is enabled.
|
|
10891
|
+
*/
|
|
10892
|
+
occupancyRecheckEnabled: boolean().default(false),
|
|
10673
10893
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
10674
10894
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
10675
10895
|
/**
|
|
@@ -12987,7 +13207,9 @@ method(object({ codec: string() }), boolean()), method(_void(), object({
|
|
|
12987
13207
|
id: string(),
|
|
12988
13208
|
name: string(),
|
|
12989
13209
|
isPullMode: boolean().optional(),
|
|
12990
|
-
priority: number().optional()
|
|
13210
|
+
priority: number().optional(),
|
|
13211
|
+
hwaccel: string().optional(),
|
|
13212
|
+
probedBestHwaccel: string().optional()
|
|
12991
13213
|
})), method(DecoderSessionConfigSchema, object({
|
|
12992
13214
|
sessionId: string(),
|
|
12993
13215
|
nodeId: string()
|
|
@@ -19019,6 +19241,18 @@ Object.freeze({
|
|
|
19019
19241
|
addonId: null,
|
|
19020
19242
|
access: "view"
|
|
19021
19243
|
},
|
|
19244
|
+
"dayNight.getOptions": {
|
|
19245
|
+
capName: "day-night",
|
|
19246
|
+
capScope: "device",
|
|
19247
|
+
addonId: null,
|
|
19248
|
+
access: "view"
|
|
19249
|
+
},
|
|
19250
|
+
"dayNight.setSettings": {
|
|
19251
|
+
capName: "day-night",
|
|
19252
|
+
capScope: "device",
|
|
19253
|
+
addonId: null,
|
|
19254
|
+
access: "create"
|
|
19255
|
+
},
|
|
19022
19256
|
"decoder.createSession": {
|
|
19023
19257
|
capName: "decoder",
|
|
19024
19258
|
capScope: "system",
|
|
@@ -19949,6 +20183,18 @@ Object.freeze({
|
|
|
19949
20183
|
addonId: null,
|
|
19950
20184
|
access: "create"
|
|
19951
20185
|
},
|
|
20186
|
+
"imageSettings.getOptions": {
|
|
20187
|
+
capName: "image-settings",
|
|
20188
|
+
capScope: "device",
|
|
20189
|
+
addonId: null,
|
|
20190
|
+
access: "view"
|
|
20191
|
+
},
|
|
20192
|
+
"imageSettings.setSettings": {
|
|
20193
|
+
capName: "image-settings",
|
|
20194
|
+
capScope: "device",
|
|
20195
|
+
addonId: null,
|
|
20196
|
+
access: "create"
|
|
20197
|
+
},
|
|
19952
20198
|
"integrations.create": {
|
|
19953
20199
|
capName: "integrations",
|
|
19954
20200
|
capScope: "system",
|
|
@@ -21,7 +21,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
21
21
|
enumerable: true
|
|
22
22
|
}) : target, mod));
|
|
23
23
|
//#endregion
|
|
24
|
-
const require_dist = require("../dist-
|
|
24
|
+
const require_dist = require("../dist-CcLXZ_31.js");
|
|
25
25
|
let node_path = require("node:path");
|
|
26
26
|
node_path = __toESM(node_path);
|
|
27
27
|
let node_crypto = require("node:crypto");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as BaseAddon, c as array, d as literal, f as number, l as boolean, m as string, n as defineCustomActions, o as EventCategory, p as object, r as networkAccessCapability, s as _enum, t as customAction } from "../dist-
|
|
1
|
+
import { a as BaseAddon, c as array, d as literal, f as number, l as boolean, m as string, n as defineCustomActions, o as EventCategory, p as object, r as networkAccessCapability, s as _enum, t as customAction } from "../dist-jW8o528S.mjs";
|
|
2
2
|
import * as path from "node:path";
|
|
3
3
|
import { randomUUID } from "node:crypto";
|
|
4
4
|
import { spawn } from "node:child_process";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_dist = require("../dist-
|
|
2
|
+
const require_dist = require("../dist-CcLXZ_31.js");
|
|
3
3
|
//#region src/turn/cloudflare-turn.ts
|
|
4
4
|
/**
|
|
5
5
|
* Cloudflare returns ICE servers in several flavours depending on which
|
|
@@ -144,7 +144,7 @@ var CloudflareTurnService = class {
|
|
|
144
144
|
}
|
|
145
145
|
async getTurnServers() {
|
|
146
146
|
if (!this.config.accountId || !this.config.apiToken) {
|
|
147
|
-
this.logger.
|
|
147
|
+
this.logger.debug("Cloudflare TURN: credentials not configured — skipping fetch");
|
|
148
148
|
return [];
|
|
149
149
|
}
|
|
150
150
|
if (this.cached) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as BaseAddon, d as literal, f as number, i as turnProviderCapability, l as boolean, m as string, n as defineCustomActions, p as object, t as customAction, u as discriminatedUnion } from "../dist-
|
|
1
|
+
import { a as BaseAddon, d as literal, f as number, i as turnProviderCapability, l as boolean, m as string, n as defineCustomActions, p as object, t as customAction, u as discriminatedUnion } from "../dist-jW8o528S.mjs";
|
|
2
2
|
//#region src/turn/cloudflare-turn.ts
|
|
3
3
|
/**
|
|
4
4
|
* Cloudflare returns ICE servers in several flavours depending on which
|
|
@@ -143,7 +143,7 @@ var CloudflareTurnService = class {
|
|
|
143
143
|
}
|
|
144
144
|
async getTurnServers() {
|
|
145
145
|
if (!this.config.accountId || !this.config.apiToken) {
|
|
146
|
-
this.logger.
|
|
146
|
+
this.logger.debug("Cloudflare TURN: credentials not configured — skipping fetch");
|
|
147
147
|
return [];
|
|
148
148
|
}
|
|
149
149
|
if (this.cached) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-cloudflare",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.19",
|
|
4
4
|
"description": "Cloudflare bundle — Tunnel (network-access) + TURN relay (turn-provider). Multi-entry npm package shipping 2 addons under a single bundle.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|