@camstack/addon-export-alexa 1.1.16 → 1.1.18

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.
@@ -4655,7 +4655,7 @@ function _instanceof(cls, params = {}) {
4655
4655
  return inst;
4656
4656
  }
4657
4657
  //#endregion
4658
- //#region ../types/dist/sleep-BiDFW0E7.mjs
4658
+ //#region ../types/dist/sleep-CZDdRBua.mjs
4659
4659
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4660
4660
  EventCategory["SystemBoot"] = "system.boot";
4661
4661
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -7390,7 +7390,16 @@ var DecoderStatsSchema = object({
7390
7390
  inputFps: number(),
7391
7391
  outputFps: number(),
7392
7392
  avgDecodeTimeMs: number(),
7393
- droppedFrames: number()
7393
+ droppedFrames: number(),
7394
+ /**
7395
+ * Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
7396
+ * lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
7397
+ * the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
7398
+ * is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
7399
+ */
7400
+ lagMs: number().optional(),
7401
+ effectiveFps: number().optional(),
7402
+ adaptiveFps: number().optional()
7394
7403
  });
7395
7404
  var DecoderSessionConfigSchema = object({
7396
7405
  codec: string(),
@@ -7431,7 +7440,15 @@ var DecoderSessionConfigSchema = object({
7431
7440
  * other — `pullFrames` returns nothing for an `'shm'` session and
7432
7441
  * `pullHandles` returns nothing for a `'callback'` session.
7433
7442
  */
7434
- frameSink: _enum(["callback", "shm"]).default("callback")
7443
+ frameSink: _enum(["callback", "shm"]).default("callback"),
7444
+ /**
7445
+ * Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
7446
+ * a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
7447
+ * real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
7448
+ * stream-broker's `streamingDebug` gate — off by default so production logs
7449
+ * stay quiet and the emit path pays zero per-frame cost when disabled.
7450
+ */
7451
+ debug: boolean().optional()
7435
7452
  });
7436
7453
  var EncodeProfileSchema = object({
7437
7454
  video: object({
@@ -9643,6 +9660,75 @@ DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _vo
9643
9660
  auth: "admin"
9644
9661
  });
9645
9662
  /**
9663
+ * Vendor-neutral day/night (IR-cut) control — the per-camera config cap
9664
+ * shared by reolink / hikvision / amcrest. Models the common firmware
9665
+ * surface: the IR-cut switching MODE plus the two knobs that gate it
9666
+ * (photocell `sensitivity` + `switchDelaySec`). Each vendor maps these
9667
+ * onto its own ISAPI / Baichuan / Dahua-CGI fields; the cap standardises
9668
+ * the shape so ONE derived-form renders every camera.
9669
+ *
9670
+ * Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
9671
+ * `getOptions` advertises per-camera availability, `getStatus` (auto-
9672
+ * injected from `status`) reports the live values, and a single
9673
+ * `setSettings` mutation applies a partial change. No hand-written
9674
+ * settings-contribution methods — the framework derives the UI + save
9675
+ * routing from this surface.
9676
+ */
9677
+ /** IR-cut switching mode. `schedule` = time-of-day table configured on the camera. */
9678
+ var DayNightModeSchema = _enum([
9679
+ "auto",
9680
+ "day",
9681
+ "night",
9682
+ "schedule"
9683
+ ]);
9684
+ /** Normalized numeric range descriptor — `{ min, max, step }` per the
9685
+ * getOptions availability convention. Normalized values are 0–100. */
9686
+ var NormalizedRangeSchema$1 = object({
9687
+ min: number(),
9688
+ max: number(),
9689
+ step: number()
9690
+ });
9691
+ object({
9692
+ mode: DayNightModeSchema,
9693
+ /** IR-cut trigger sensitivity, NORMALIZED 0–100 (higher = switches to night sooner). */
9694
+ sensitivity: number().optional(),
9695
+ /** Delay before the IR-cut filter flips, in seconds. */
9696
+ switchDelaySec: number().optional(),
9697
+ lastFetchedAt: number()
9698
+ });
9699
+ /**
9700
+ * Per-camera availability descriptor — drives which controls the admin UI
9701
+ * renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
9702
+ * (normalized 0–100); the mode choice-set as an array. A provider returns
9703
+ * honest, camera-probed values — never hardcoded.
9704
+ */
9705
+ var DayNightOptionsSchema = object({
9706
+ /** Modes this camera accepts. Empty → the camera has no configurable day/night mode. */
9707
+ modes: array(DayNightModeSchema),
9708
+ supportsSensitivity: boolean(),
9709
+ /** Present when `supportsSensitivity` — the normalized 0–100 range. */
9710
+ sensitivity: NormalizedRangeSchema$1.optional(),
9711
+ supportsSwitchDelay: boolean(),
9712
+ /** Present when `supportsSwitchDelay` — the allowed delay range in seconds. */
9713
+ switchDelaySec: NormalizedRangeSchema$1.optional()
9714
+ });
9715
+ /**
9716
+ * Partial change to the day/night config — every field optional. A
9717
+ * provider ignores fields it does not support.
9718
+ */
9719
+ var DayNightSettingsPatchSchema = object({
9720
+ mode: DayNightModeSchema.optional(),
9721
+ sensitivity: number().optional(),
9722
+ switchDelaySec: number().optional()
9723
+ });
9724
+ DeviceType.Camera, method(object({ deviceId: number() }), DayNightOptionsSchema), method(object({
9725
+ deviceId: number(),
9726
+ settings: DayNightSettingsPatchSchema
9727
+ }), _void(), {
9728
+ kind: "mutation",
9729
+ auth: "admin"
9730
+ });
9731
+ /**
9646
9732
  * Identity envelope for a device's upstream-system metadata.
9647
9733
  *
9648
9734
  * Two jobs:
@@ -9998,6 +10084,130 @@ object({
9998
10084
  });
9999
10085
  DeviceType.Image;
10000
10086
  /**
10087
+ * Vendor-neutral image / picture-adjustment cap — the per-camera config
10088
+ * cap shared by reolink / hikvision / amcrest. Models the common ISP
10089
+ * surface: the four picture sliders (brightness / contrast / saturation /
10090
+ * sharpness), orientation (mirror / flip / rotate), white-balance,
10091
+ * exposure and backlight-compensation modes.
10092
+ *
10093
+ * NORMALIZATION: every slider is a normalized int 0–100. Vendors expose
10094
+ * these natively as 0–100 or 0–255 (or other ranges); each provider maps
10095
+ * its native range to/from this normalized 0–100 space so the cap surface
10096
+ * (and the derived form) is identical across cameras. `warmth` (manual
10097
+ * white-balance) is likewise normalized 0–100.
10098
+ *
10099
+ * Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
10100
+ * `getOptions` advertises per-camera availability, `getStatus` (auto-
10101
+ * injected from `status`) reports the live values, and a single
10102
+ * `setSettings` mutation applies a partial change. No hand-written
10103
+ * settings-contribution methods — the framework derives the UI + save
10104
+ * routing from this surface.
10105
+ */
10106
+ /** Sensor/image rotation, degrees clockwise. */
10107
+ var ImageRotateSchema = _enum([
10108
+ "0",
10109
+ "90",
10110
+ "180",
10111
+ "270"
10112
+ ]);
10113
+ /** White-balance mode. `manual` unlocks the normalized `warmth` knob. */
10114
+ var WhiteBalanceModeSchema = _enum(["auto", "manual"]);
10115
+ /** Exposure mode. */
10116
+ var ExposureModeSchema = _enum(["auto", "manual"]);
10117
+ /**
10118
+ * Backlight-compensation mode:
10119
+ * - `off` — disabled
10120
+ * - `blc` — backlight compensation
10121
+ * - `wdr` — wide dynamic range
10122
+ * - `hlc` — highlight compensation
10123
+ */
10124
+ var BacklightModeSchema = _enum([
10125
+ "off",
10126
+ "blc",
10127
+ "wdr",
10128
+ "hlc"
10129
+ ]);
10130
+ /** Normalized numeric range descriptor — `{ min, max, step }` per the
10131
+ * getOptions availability convention. Slider values are normalized 0–100. */
10132
+ var NormalizedRangeSchema = object({
10133
+ min: number(),
10134
+ max: number(),
10135
+ step: number()
10136
+ });
10137
+ object({
10138
+ /** Normalized 0–100. */
10139
+ brightness: number().optional(),
10140
+ /** Normalized 0–100. */
10141
+ contrast: number().optional(),
10142
+ /** Normalized 0–100. */
10143
+ saturation: number().optional(),
10144
+ /** Normalized 0–100. */
10145
+ sharpness: number().optional(),
10146
+ mirror: boolean().optional(),
10147
+ flip: boolean().optional(),
10148
+ rotate: ImageRotateSchema.optional(),
10149
+ whiteBalance: WhiteBalanceModeSchema.optional(),
10150
+ /** Manual white-balance warmth, NORMALIZED 0–100. Meaningful only when `whiteBalance === 'manual'`. */
10151
+ warmth: number().optional(),
10152
+ exposureMode: ExposureModeSchema.optional(),
10153
+ backlightMode: BacklightModeSchema.optional(),
10154
+ lastFetchedAt: number()
10155
+ });
10156
+ /**
10157
+ * Per-camera availability descriptor — drives which controls the admin UI
10158
+ * renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
10159
+ * (the normalized 0–100 range); enums as arrays of supported values (empty
10160
+ * array → control hidden). A provider returns honest, camera-probed values
10161
+ * — never hardcoded.
10162
+ */
10163
+ var ImageSettingsOptionsSchema = object({
10164
+ supportsBrightness: boolean(),
10165
+ brightness: NormalizedRangeSchema.optional(),
10166
+ supportsContrast: boolean(),
10167
+ contrast: NormalizedRangeSchema.optional(),
10168
+ supportsSaturation: boolean(),
10169
+ saturation: NormalizedRangeSchema.optional(),
10170
+ supportsSharpness: boolean(),
10171
+ sharpness: NormalizedRangeSchema.optional(),
10172
+ supportsMirror: boolean(),
10173
+ supportsFlip: boolean(),
10174
+ /** Supported rotation values. Empty → rotation not configurable. */
10175
+ rotateOptions: array(ImageRotateSchema),
10176
+ /** Supported white-balance modes. Empty → white-balance not configurable. */
10177
+ whiteBalanceModes: array(WhiteBalanceModeSchema),
10178
+ supportsWarmth: boolean(),
10179
+ /** Present when `supportsWarmth` — the normalized 0–100 range. */
10180
+ warmth: NormalizedRangeSchema.optional(),
10181
+ /** Supported exposure modes. Empty → exposure not configurable. */
10182
+ exposureModes: array(ExposureModeSchema),
10183
+ /** Supported backlight modes. Empty → backlight-compensation not configurable. */
10184
+ backlightModes: array(BacklightModeSchema)
10185
+ });
10186
+ /**
10187
+ * Partial change to the image config — every field optional. Slider values
10188
+ * are normalized 0–100. A provider ignores fields it does not support.
10189
+ */
10190
+ var ImageSettingsPatchSchema = object({
10191
+ brightness: number().optional(),
10192
+ contrast: number().optional(),
10193
+ saturation: number().optional(),
10194
+ sharpness: number().optional(),
10195
+ mirror: boolean().optional(),
10196
+ flip: boolean().optional(),
10197
+ rotate: ImageRotateSchema.optional(),
10198
+ whiteBalance: WhiteBalanceModeSchema.optional(),
10199
+ warmth: number().optional(),
10200
+ exposureMode: ExposureModeSchema.optional(),
10201
+ backlightMode: BacklightModeSchema.optional()
10202
+ });
10203
+ DeviceType.Camera, method(object({ deviceId: number() }), ImageSettingsOptionsSchema), method(object({
10204
+ deviceId: number(),
10205
+ settings: ImageSettingsPatchSchema
10206
+ }), _void(), {
10207
+ kind: "mutation",
10208
+ auth: "admin"
10209
+ });
10210
+ /**
10001
10211
  * Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
10002
10212
  * with a mowing lifecycle plus a dock action.
10003
10213
  *
@@ -10892,6 +11102,16 @@ var RunnerCameraConfigSchema = object({
10892
11102
  * this gate is bypassed.
10893
11103
  */
10894
11104
  onboardMotionDrivesAnalyzer: boolean().default(true),
11105
+ /**
11106
+ * Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
11107
+ * never arms the periodic recheck timer, regardless of `occupancyRecheckSec` —
11108
+ * this is off by default because the recheck re-subscribes a detection session
11109
+ * every N seconds while `watching`, a major source of pull-decoder re-dial
11110
+ * churn (each cycle creates+tears a session → RTSP re-dial → latency). The
11111
+ * `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
11112
+ * (and only render) when this is enabled.
11113
+ */
11114
+ occupancyRecheckEnabled: boolean().default(false),
10895
11115
  occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
10896
11116
  occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
10897
11117
  /**
@@ -13228,7 +13448,9 @@ method(object({ codec: string() }), boolean()), method(_void(), object({
13228
13448
  id: string(),
13229
13449
  name: string(),
13230
13450
  isPullMode: boolean().optional(),
13231
- priority: number().optional()
13451
+ priority: number().optional(),
13452
+ hwaccel: string().optional(),
13453
+ probedBestHwaccel: string().optional()
13232
13454
  })), method(DecoderSessionConfigSchema, object({
13233
13455
  sessionId: string(),
13234
13456
  nodeId: string()
@@ -19251,6 +19473,18 @@ Object.freeze({
19251
19473
  addonId: null,
19252
19474
  access: "view"
19253
19475
  },
19476
+ "dayNight.getOptions": {
19477
+ capName: "day-night",
19478
+ capScope: "device",
19479
+ addonId: null,
19480
+ access: "view"
19481
+ },
19482
+ "dayNight.setSettings": {
19483
+ capName: "day-night",
19484
+ capScope: "device",
19485
+ addonId: null,
19486
+ access: "create"
19487
+ },
19254
19488
  "decoder.createSession": {
19255
19489
  capName: "decoder",
19256
19490
  capScope: "system",
@@ -20181,6 +20415,18 @@ Object.freeze({
20181
20415
  addonId: null,
20182
20416
  access: "create"
20183
20417
  },
20418
+ "imageSettings.getOptions": {
20419
+ capName: "image-settings",
20420
+ capScope: "device",
20421
+ addonId: null,
20422
+ access: "view"
20423
+ },
20424
+ "imageSettings.setSettings": {
20425
+ capName: "image-settings",
20426
+ capScope: "device",
20427
+ addonId: null,
20428
+ access: "create"
20429
+ },
20184
20430
  "integrations.create": {
20185
20431
  capName: "integrations",
20186
20432
  capScope: "system",
@@ -4629,7 +4629,7 @@ function _instanceof(cls, params = {}) {
4629
4629
  return inst;
4630
4630
  }
4631
4631
  //#endregion
4632
- //#region ../types/dist/sleep-BiDFW0E7.mjs
4632
+ //#region ../types/dist/sleep-CZDdRBua.mjs
4633
4633
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4634
4634
  EventCategory["SystemBoot"] = "system.boot";
4635
4635
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -7364,7 +7364,16 @@ var DecoderStatsSchema = object({
7364
7364
  inputFps: number(),
7365
7365
  outputFps: number(),
7366
7366
  avgDecodeTimeMs: number(),
7367
- droppedFrames: number()
7367
+ droppedFrames: number(),
7368
+ /**
7369
+ * Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
7370
+ * lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
7371
+ * the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
7372
+ * is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
7373
+ */
7374
+ lagMs: number().optional(),
7375
+ effectiveFps: number().optional(),
7376
+ adaptiveFps: number().optional()
7368
7377
  });
7369
7378
  var DecoderSessionConfigSchema = object({
7370
7379
  codec: string(),
@@ -7405,7 +7414,15 @@ var DecoderSessionConfigSchema = object({
7405
7414
  * other — `pullFrames` returns nothing for an `'shm'` session and
7406
7415
  * `pullHandles` returns nothing for a `'callback'` session.
7407
7416
  */
7408
- frameSink: _enum(["callback", "shm"]).default("callback")
7417
+ frameSink: _enum(["callback", "shm"]).default("callback"),
7418
+ /**
7419
+ * Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
7420
+ * a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
7421
+ * real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
7422
+ * stream-broker's `streamingDebug` gate — off by default so production logs
7423
+ * stay quiet and the emit path pays zero per-frame cost when disabled.
7424
+ */
7425
+ debug: boolean().optional()
7409
7426
  });
7410
7427
  var EncodeProfileSchema = object({
7411
7428
  video: object({
@@ -9617,6 +9634,75 @@ DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _vo
9617
9634
  auth: "admin"
9618
9635
  });
9619
9636
  /**
9637
+ * Vendor-neutral day/night (IR-cut) control — the per-camera config cap
9638
+ * shared by reolink / hikvision / amcrest. Models the common firmware
9639
+ * surface: the IR-cut switching MODE plus the two knobs that gate it
9640
+ * (photocell `sensitivity` + `switchDelaySec`). Each vendor maps these
9641
+ * onto its own ISAPI / Baichuan / Dahua-CGI fields; the cap standardises
9642
+ * the shape so ONE derived-form renders every camera.
9643
+ *
9644
+ * Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
9645
+ * `getOptions` advertises per-camera availability, `getStatus` (auto-
9646
+ * injected from `status`) reports the live values, and a single
9647
+ * `setSettings` mutation applies a partial change. No hand-written
9648
+ * settings-contribution methods — the framework derives the UI + save
9649
+ * routing from this surface.
9650
+ */
9651
+ /** IR-cut switching mode. `schedule` = time-of-day table configured on the camera. */
9652
+ var DayNightModeSchema = _enum([
9653
+ "auto",
9654
+ "day",
9655
+ "night",
9656
+ "schedule"
9657
+ ]);
9658
+ /** Normalized numeric range descriptor — `{ min, max, step }` per the
9659
+ * getOptions availability convention. Normalized values are 0–100. */
9660
+ var NormalizedRangeSchema$1 = object({
9661
+ min: number(),
9662
+ max: number(),
9663
+ step: number()
9664
+ });
9665
+ object({
9666
+ mode: DayNightModeSchema,
9667
+ /** IR-cut trigger sensitivity, NORMALIZED 0–100 (higher = switches to night sooner). */
9668
+ sensitivity: number().optional(),
9669
+ /** Delay before the IR-cut filter flips, in seconds. */
9670
+ switchDelaySec: number().optional(),
9671
+ lastFetchedAt: number()
9672
+ });
9673
+ /**
9674
+ * Per-camera availability descriptor — drives which controls the admin UI
9675
+ * renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
9676
+ * (normalized 0–100); the mode choice-set as an array. A provider returns
9677
+ * honest, camera-probed values — never hardcoded.
9678
+ */
9679
+ var DayNightOptionsSchema = object({
9680
+ /** Modes this camera accepts. Empty → the camera has no configurable day/night mode. */
9681
+ modes: array(DayNightModeSchema),
9682
+ supportsSensitivity: boolean(),
9683
+ /** Present when `supportsSensitivity` — the normalized 0–100 range. */
9684
+ sensitivity: NormalizedRangeSchema$1.optional(),
9685
+ supportsSwitchDelay: boolean(),
9686
+ /** Present when `supportsSwitchDelay` — the allowed delay range in seconds. */
9687
+ switchDelaySec: NormalizedRangeSchema$1.optional()
9688
+ });
9689
+ /**
9690
+ * Partial change to the day/night config — every field optional. A
9691
+ * provider ignores fields it does not support.
9692
+ */
9693
+ var DayNightSettingsPatchSchema = object({
9694
+ mode: DayNightModeSchema.optional(),
9695
+ sensitivity: number().optional(),
9696
+ switchDelaySec: number().optional()
9697
+ });
9698
+ DeviceType.Camera, method(object({ deviceId: number() }), DayNightOptionsSchema), method(object({
9699
+ deviceId: number(),
9700
+ settings: DayNightSettingsPatchSchema
9701
+ }), _void(), {
9702
+ kind: "mutation",
9703
+ auth: "admin"
9704
+ });
9705
+ /**
9620
9706
  * Identity envelope for a device's upstream-system metadata.
9621
9707
  *
9622
9708
  * Two jobs:
@@ -9972,6 +10058,130 @@ object({
9972
10058
  });
9973
10059
  DeviceType.Image;
9974
10060
  /**
10061
+ * Vendor-neutral image / picture-adjustment cap — the per-camera config
10062
+ * cap shared by reolink / hikvision / amcrest. Models the common ISP
10063
+ * surface: the four picture sliders (brightness / contrast / saturation /
10064
+ * sharpness), orientation (mirror / flip / rotate), white-balance,
10065
+ * exposure and backlight-compensation modes.
10066
+ *
10067
+ * NORMALIZATION: every slider is a normalized int 0–100. Vendors expose
10068
+ * these natively as 0–100 or 0–255 (or other ranges); each provider maps
10069
+ * its native range to/from this normalized 0–100 space so the cap surface
10070
+ * (and the derived form) is identical across cameras. `warmth` (manual
10071
+ * white-balance) is likewise normalized 0–100.
10072
+ *
10073
+ * Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
10074
+ * `getOptions` advertises per-camera availability, `getStatus` (auto-
10075
+ * injected from `status`) reports the live values, and a single
10076
+ * `setSettings` mutation applies a partial change. No hand-written
10077
+ * settings-contribution methods — the framework derives the UI + save
10078
+ * routing from this surface.
10079
+ */
10080
+ /** Sensor/image rotation, degrees clockwise. */
10081
+ var ImageRotateSchema = _enum([
10082
+ "0",
10083
+ "90",
10084
+ "180",
10085
+ "270"
10086
+ ]);
10087
+ /** White-balance mode. `manual` unlocks the normalized `warmth` knob. */
10088
+ var WhiteBalanceModeSchema = _enum(["auto", "manual"]);
10089
+ /** Exposure mode. */
10090
+ var ExposureModeSchema = _enum(["auto", "manual"]);
10091
+ /**
10092
+ * Backlight-compensation mode:
10093
+ * - `off` — disabled
10094
+ * - `blc` — backlight compensation
10095
+ * - `wdr` — wide dynamic range
10096
+ * - `hlc` — highlight compensation
10097
+ */
10098
+ var BacklightModeSchema = _enum([
10099
+ "off",
10100
+ "blc",
10101
+ "wdr",
10102
+ "hlc"
10103
+ ]);
10104
+ /** Normalized numeric range descriptor — `{ min, max, step }` per the
10105
+ * getOptions availability convention. Slider values are normalized 0–100. */
10106
+ var NormalizedRangeSchema = object({
10107
+ min: number(),
10108
+ max: number(),
10109
+ step: number()
10110
+ });
10111
+ object({
10112
+ /** Normalized 0–100. */
10113
+ brightness: number().optional(),
10114
+ /** Normalized 0–100. */
10115
+ contrast: number().optional(),
10116
+ /** Normalized 0–100. */
10117
+ saturation: number().optional(),
10118
+ /** Normalized 0–100. */
10119
+ sharpness: number().optional(),
10120
+ mirror: boolean().optional(),
10121
+ flip: boolean().optional(),
10122
+ rotate: ImageRotateSchema.optional(),
10123
+ whiteBalance: WhiteBalanceModeSchema.optional(),
10124
+ /** Manual white-balance warmth, NORMALIZED 0–100. Meaningful only when `whiteBalance === 'manual'`. */
10125
+ warmth: number().optional(),
10126
+ exposureMode: ExposureModeSchema.optional(),
10127
+ backlightMode: BacklightModeSchema.optional(),
10128
+ lastFetchedAt: number()
10129
+ });
10130
+ /**
10131
+ * Per-camera availability descriptor — drives which controls the admin UI
10132
+ * renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
10133
+ * (the normalized 0–100 range); enums as arrays of supported values (empty
10134
+ * array → control hidden). A provider returns honest, camera-probed values
10135
+ * — never hardcoded.
10136
+ */
10137
+ var ImageSettingsOptionsSchema = object({
10138
+ supportsBrightness: boolean(),
10139
+ brightness: NormalizedRangeSchema.optional(),
10140
+ supportsContrast: boolean(),
10141
+ contrast: NormalizedRangeSchema.optional(),
10142
+ supportsSaturation: boolean(),
10143
+ saturation: NormalizedRangeSchema.optional(),
10144
+ supportsSharpness: boolean(),
10145
+ sharpness: NormalizedRangeSchema.optional(),
10146
+ supportsMirror: boolean(),
10147
+ supportsFlip: boolean(),
10148
+ /** Supported rotation values. Empty → rotation not configurable. */
10149
+ rotateOptions: array(ImageRotateSchema),
10150
+ /** Supported white-balance modes. Empty → white-balance not configurable. */
10151
+ whiteBalanceModes: array(WhiteBalanceModeSchema),
10152
+ supportsWarmth: boolean(),
10153
+ /** Present when `supportsWarmth` — the normalized 0–100 range. */
10154
+ warmth: NormalizedRangeSchema.optional(),
10155
+ /** Supported exposure modes. Empty → exposure not configurable. */
10156
+ exposureModes: array(ExposureModeSchema),
10157
+ /** Supported backlight modes. Empty → backlight-compensation not configurable. */
10158
+ backlightModes: array(BacklightModeSchema)
10159
+ });
10160
+ /**
10161
+ * Partial change to the image config — every field optional. Slider values
10162
+ * are normalized 0–100. A provider ignores fields it does not support.
10163
+ */
10164
+ var ImageSettingsPatchSchema = object({
10165
+ brightness: number().optional(),
10166
+ contrast: number().optional(),
10167
+ saturation: number().optional(),
10168
+ sharpness: number().optional(),
10169
+ mirror: boolean().optional(),
10170
+ flip: boolean().optional(),
10171
+ rotate: ImageRotateSchema.optional(),
10172
+ whiteBalance: WhiteBalanceModeSchema.optional(),
10173
+ warmth: number().optional(),
10174
+ exposureMode: ExposureModeSchema.optional(),
10175
+ backlightMode: BacklightModeSchema.optional()
10176
+ });
10177
+ DeviceType.Camera, method(object({ deviceId: number() }), ImageSettingsOptionsSchema), method(object({
10178
+ deviceId: number(),
10179
+ settings: ImageSettingsPatchSchema
10180
+ }), _void(), {
10181
+ kind: "mutation",
10182
+ auth: "admin"
10183
+ });
10184
+ /**
9975
10185
  * Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
9976
10186
  * with a mowing lifecycle plus a dock action.
9977
10187
  *
@@ -10866,6 +11076,16 @@ var RunnerCameraConfigSchema = object({
10866
11076
  * this gate is bypassed.
10867
11077
  */
10868
11078
  onboardMotionDrivesAnalyzer: boolean().default(true),
11079
+ /**
11080
+ * Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
11081
+ * never arms the periodic recheck timer, regardless of `occupancyRecheckSec` —
11082
+ * this is off by default because the recheck re-subscribes a detection session
11083
+ * every N seconds while `watching`, a major source of pull-decoder re-dial
11084
+ * churn (each cycle creates+tears a session → RTSP re-dial → latency). The
11085
+ * `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
11086
+ * (and only render) when this is enabled.
11087
+ */
11088
+ occupancyRecheckEnabled: boolean().default(false),
10869
11089
  occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
10870
11090
  occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
10871
11091
  /**
@@ -13202,7 +13422,9 @@ method(object({ codec: string() }), boolean()), method(_void(), object({
13202
13422
  id: string(),
13203
13423
  name: string(),
13204
13424
  isPullMode: boolean().optional(),
13205
- priority: number().optional()
13425
+ priority: number().optional(),
13426
+ hwaccel: string().optional(),
13427
+ probedBestHwaccel: string().optional()
13206
13428
  })), method(DecoderSessionConfigSchema, object({
13207
13429
  sessionId: string(),
13208
13430
  nodeId: string()
@@ -19225,6 +19447,18 @@ Object.freeze({
19225
19447
  addonId: null,
19226
19448
  access: "view"
19227
19449
  },
19450
+ "dayNight.getOptions": {
19451
+ capName: "day-night",
19452
+ capScope: "device",
19453
+ addonId: null,
19454
+ access: "view"
19455
+ },
19456
+ "dayNight.setSettings": {
19457
+ capName: "day-night",
19458
+ capScope: "device",
19459
+ addonId: null,
19460
+ access: "create"
19461
+ },
19228
19462
  "decoder.createSession": {
19229
19463
  capName: "decoder",
19230
19464
  capScope: "system",
@@ -20155,6 +20389,18 @@ Object.freeze({
20155
20389
  addonId: null,
20156
20390
  access: "create"
20157
20391
  },
20392
+ "imageSettings.getOptions": {
20393
+ capName: "image-settings",
20394
+ capScope: "device",
20395
+ addonId: null,
20396
+ access: "view"
20397
+ },
20398
+ "imageSettings.setSettings": {
20399
+ capName: "image-settings",
20400
+ capScope: "device",
20401
+ addonId: null,
20402
+ access: "create"
20403
+ },
20158
20404
  "integrations.create": {
20159
20405
  capName: "integrations",
20160
20406
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-export-alexa",
3
- "version": "1.1.16",
3
+ "version": "1.1.18",
4
4
  "description": "Alexa Smart Home Skill export — hub-side OAuth provider + directive handler. The companion AWS Lambda forwards Alexa directives to this addon's /addon/export-alexa/directive endpoint.",
5
5
  "keywords": [
6
6
  "camstack",