@camstack/addon-smtp-nodemailer 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.
- package/dist/smtp.addon.js +250 -4
- package/dist/smtp.addon.mjs +250 -4
- package/package.json +1 -1
package/dist/smtp.addon.js
CHANGED
|
@@ -4665,7 +4665,7 @@ function _instanceof(cls, params = {}) {
|
|
|
4665
4665
|
return inst;
|
|
4666
4666
|
}
|
|
4667
4667
|
//#endregion
|
|
4668
|
-
//#region ../types/dist/sleep-
|
|
4668
|
+
//#region ../types/dist/sleep-CZDdRBua.mjs
|
|
4669
4669
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4670
4670
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4671
4671
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -7260,7 +7260,16 @@ var DecoderStatsSchema = object({
|
|
|
7260
7260
|
inputFps: number(),
|
|
7261
7261
|
outputFps: number(),
|
|
7262
7262
|
avgDecodeTimeMs: number(),
|
|
7263
|
-
droppedFrames: number()
|
|
7263
|
+
droppedFrames: number(),
|
|
7264
|
+
/**
|
|
7265
|
+
* Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
|
|
7266
|
+
* lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
|
|
7267
|
+
* the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
|
|
7268
|
+
* is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
|
|
7269
|
+
*/
|
|
7270
|
+
lagMs: number().optional(),
|
|
7271
|
+
effectiveFps: number().optional(),
|
|
7272
|
+
adaptiveFps: number().optional()
|
|
7264
7273
|
});
|
|
7265
7274
|
var DecoderSessionConfigSchema = object({
|
|
7266
7275
|
codec: string(),
|
|
@@ -7301,7 +7310,15 @@ var DecoderSessionConfigSchema = object({
|
|
|
7301
7310
|
* other — `pullFrames` returns nothing for an `'shm'` session and
|
|
7302
7311
|
* `pullHandles` returns nothing for a `'callback'` session.
|
|
7303
7312
|
*/
|
|
7304
|
-
frameSink: _enum(["callback", "shm"]).default("callback")
|
|
7313
|
+
frameSink: _enum(["callback", "shm"]).default("callback"),
|
|
7314
|
+
/**
|
|
7315
|
+
* Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
|
|
7316
|
+
* a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
|
|
7317
|
+
* real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
|
|
7318
|
+
* stream-broker's `streamingDebug` gate — off by default so production logs
|
|
7319
|
+
* stay quiet and the emit path pays zero per-frame cost when disabled.
|
|
7320
|
+
*/
|
|
7321
|
+
debug: boolean().optional()
|
|
7305
7322
|
});
|
|
7306
7323
|
var EncodeProfileSchema = object({
|
|
7307
7324
|
video: object({
|
|
@@ -9459,6 +9476,75 @@ DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _vo
|
|
|
9459
9476
|
auth: "admin"
|
|
9460
9477
|
});
|
|
9461
9478
|
/**
|
|
9479
|
+
* Vendor-neutral day/night (IR-cut) control — the per-camera config cap
|
|
9480
|
+
* shared by reolink / hikvision / amcrest. Models the common firmware
|
|
9481
|
+
* surface: the IR-cut switching MODE plus the two knobs that gate it
|
|
9482
|
+
* (photocell `sensitivity` + `switchDelaySec`). Each vendor maps these
|
|
9483
|
+
* onto its own ISAPI / Baichuan / Dahua-CGI fields; the cap standardises
|
|
9484
|
+
* the shape so ONE derived-form renders every camera.
|
|
9485
|
+
*
|
|
9486
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9487
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9488
|
+
* injected from `status`) reports the live values, and a single
|
|
9489
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9490
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9491
|
+
* routing from this surface.
|
|
9492
|
+
*/
|
|
9493
|
+
/** IR-cut switching mode. `schedule` = time-of-day table configured on the camera. */
|
|
9494
|
+
var DayNightModeSchema = _enum([
|
|
9495
|
+
"auto",
|
|
9496
|
+
"day",
|
|
9497
|
+
"night",
|
|
9498
|
+
"schedule"
|
|
9499
|
+
]);
|
|
9500
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
9501
|
+
* getOptions availability convention. Normalized values are 0–100. */
|
|
9502
|
+
var NormalizedRangeSchema$1 = object({
|
|
9503
|
+
min: number(),
|
|
9504
|
+
max: number(),
|
|
9505
|
+
step: number()
|
|
9506
|
+
});
|
|
9507
|
+
object({
|
|
9508
|
+
mode: DayNightModeSchema,
|
|
9509
|
+
/** IR-cut trigger sensitivity, NORMALIZED 0–100 (higher = switches to night sooner). */
|
|
9510
|
+
sensitivity: number().optional(),
|
|
9511
|
+
/** Delay before the IR-cut filter flips, in seconds. */
|
|
9512
|
+
switchDelaySec: number().optional(),
|
|
9513
|
+
lastFetchedAt: number()
|
|
9514
|
+
});
|
|
9515
|
+
/**
|
|
9516
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
9517
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
9518
|
+
* (normalized 0–100); the mode choice-set as an array. A provider returns
|
|
9519
|
+
* honest, camera-probed values — never hardcoded.
|
|
9520
|
+
*/
|
|
9521
|
+
var DayNightOptionsSchema = object({
|
|
9522
|
+
/** Modes this camera accepts. Empty → the camera has no configurable day/night mode. */
|
|
9523
|
+
modes: array(DayNightModeSchema),
|
|
9524
|
+
supportsSensitivity: boolean(),
|
|
9525
|
+
/** Present when `supportsSensitivity` — the normalized 0–100 range. */
|
|
9526
|
+
sensitivity: NormalizedRangeSchema$1.optional(),
|
|
9527
|
+
supportsSwitchDelay: boolean(),
|
|
9528
|
+
/** Present when `supportsSwitchDelay` — the allowed delay range in seconds. */
|
|
9529
|
+
switchDelaySec: NormalizedRangeSchema$1.optional()
|
|
9530
|
+
});
|
|
9531
|
+
/**
|
|
9532
|
+
* Partial change to the day/night config — every field optional. A
|
|
9533
|
+
* provider ignores fields it does not support.
|
|
9534
|
+
*/
|
|
9535
|
+
var DayNightSettingsPatchSchema = object({
|
|
9536
|
+
mode: DayNightModeSchema.optional(),
|
|
9537
|
+
sensitivity: number().optional(),
|
|
9538
|
+
switchDelaySec: number().optional()
|
|
9539
|
+
});
|
|
9540
|
+
DeviceType.Camera, method(object({ deviceId: number() }), DayNightOptionsSchema), method(object({
|
|
9541
|
+
deviceId: number(),
|
|
9542
|
+
settings: DayNightSettingsPatchSchema
|
|
9543
|
+
}), _void(), {
|
|
9544
|
+
kind: "mutation",
|
|
9545
|
+
auth: "admin"
|
|
9546
|
+
});
|
|
9547
|
+
/**
|
|
9462
9548
|
* Identity envelope for a device's upstream-system metadata.
|
|
9463
9549
|
*
|
|
9464
9550
|
* Two jobs:
|
|
@@ -9814,6 +9900,130 @@ object({
|
|
|
9814
9900
|
});
|
|
9815
9901
|
DeviceType.Image;
|
|
9816
9902
|
/**
|
|
9903
|
+
* Vendor-neutral image / picture-adjustment cap — the per-camera config
|
|
9904
|
+
* cap shared by reolink / hikvision / amcrest. Models the common ISP
|
|
9905
|
+
* surface: the four picture sliders (brightness / contrast / saturation /
|
|
9906
|
+
* sharpness), orientation (mirror / flip / rotate), white-balance,
|
|
9907
|
+
* exposure and backlight-compensation modes.
|
|
9908
|
+
*
|
|
9909
|
+
* NORMALIZATION: every slider is a normalized int 0–100. Vendors expose
|
|
9910
|
+
* these natively as 0–100 or 0–255 (or other ranges); each provider maps
|
|
9911
|
+
* its native range to/from this normalized 0–100 space so the cap surface
|
|
9912
|
+
* (and the derived form) is identical across cameras. `warmth` (manual
|
|
9913
|
+
* white-balance) is likewise normalized 0–100.
|
|
9914
|
+
*
|
|
9915
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9916
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9917
|
+
* injected from `status`) reports the live values, and a single
|
|
9918
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9919
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9920
|
+
* routing from this surface.
|
|
9921
|
+
*/
|
|
9922
|
+
/** Sensor/image rotation, degrees clockwise. */
|
|
9923
|
+
var ImageRotateSchema = _enum([
|
|
9924
|
+
"0",
|
|
9925
|
+
"90",
|
|
9926
|
+
"180",
|
|
9927
|
+
"270"
|
|
9928
|
+
]);
|
|
9929
|
+
/** White-balance mode. `manual` unlocks the normalized `warmth` knob. */
|
|
9930
|
+
var WhiteBalanceModeSchema = _enum(["auto", "manual"]);
|
|
9931
|
+
/** Exposure mode. */
|
|
9932
|
+
var ExposureModeSchema = _enum(["auto", "manual"]);
|
|
9933
|
+
/**
|
|
9934
|
+
* Backlight-compensation mode:
|
|
9935
|
+
* - `off` — disabled
|
|
9936
|
+
* - `blc` — backlight compensation
|
|
9937
|
+
* - `wdr` — wide dynamic range
|
|
9938
|
+
* - `hlc` — highlight compensation
|
|
9939
|
+
*/
|
|
9940
|
+
var BacklightModeSchema = _enum([
|
|
9941
|
+
"off",
|
|
9942
|
+
"blc",
|
|
9943
|
+
"wdr",
|
|
9944
|
+
"hlc"
|
|
9945
|
+
]);
|
|
9946
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
9947
|
+
* getOptions availability convention. Slider values are normalized 0–100. */
|
|
9948
|
+
var NormalizedRangeSchema = object({
|
|
9949
|
+
min: number(),
|
|
9950
|
+
max: number(),
|
|
9951
|
+
step: number()
|
|
9952
|
+
});
|
|
9953
|
+
object({
|
|
9954
|
+
/** Normalized 0–100. */
|
|
9955
|
+
brightness: number().optional(),
|
|
9956
|
+
/** Normalized 0–100. */
|
|
9957
|
+
contrast: number().optional(),
|
|
9958
|
+
/** Normalized 0–100. */
|
|
9959
|
+
saturation: number().optional(),
|
|
9960
|
+
/** Normalized 0–100. */
|
|
9961
|
+
sharpness: number().optional(),
|
|
9962
|
+
mirror: boolean().optional(),
|
|
9963
|
+
flip: boolean().optional(),
|
|
9964
|
+
rotate: ImageRotateSchema.optional(),
|
|
9965
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
9966
|
+
/** Manual white-balance warmth, NORMALIZED 0–100. Meaningful only when `whiteBalance === 'manual'`. */
|
|
9967
|
+
warmth: number().optional(),
|
|
9968
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
9969
|
+
backlightMode: BacklightModeSchema.optional(),
|
|
9970
|
+
lastFetchedAt: number()
|
|
9971
|
+
});
|
|
9972
|
+
/**
|
|
9973
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
9974
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
9975
|
+
* (the normalized 0–100 range); enums as arrays of supported values (empty
|
|
9976
|
+
* array → control hidden). A provider returns honest, camera-probed values
|
|
9977
|
+
* — never hardcoded.
|
|
9978
|
+
*/
|
|
9979
|
+
var ImageSettingsOptionsSchema = object({
|
|
9980
|
+
supportsBrightness: boolean(),
|
|
9981
|
+
brightness: NormalizedRangeSchema.optional(),
|
|
9982
|
+
supportsContrast: boolean(),
|
|
9983
|
+
contrast: NormalizedRangeSchema.optional(),
|
|
9984
|
+
supportsSaturation: boolean(),
|
|
9985
|
+
saturation: NormalizedRangeSchema.optional(),
|
|
9986
|
+
supportsSharpness: boolean(),
|
|
9987
|
+
sharpness: NormalizedRangeSchema.optional(),
|
|
9988
|
+
supportsMirror: boolean(),
|
|
9989
|
+
supportsFlip: boolean(),
|
|
9990
|
+
/** Supported rotation values. Empty → rotation not configurable. */
|
|
9991
|
+
rotateOptions: array(ImageRotateSchema),
|
|
9992
|
+
/** Supported white-balance modes. Empty → white-balance not configurable. */
|
|
9993
|
+
whiteBalanceModes: array(WhiteBalanceModeSchema),
|
|
9994
|
+
supportsWarmth: boolean(),
|
|
9995
|
+
/** Present when `supportsWarmth` — the normalized 0–100 range. */
|
|
9996
|
+
warmth: NormalizedRangeSchema.optional(),
|
|
9997
|
+
/** Supported exposure modes. Empty → exposure not configurable. */
|
|
9998
|
+
exposureModes: array(ExposureModeSchema),
|
|
9999
|
+
/** Supported backlight modes. Empty → backlight-compensation not configurable. */
|
|
10000
|
+
backlightModes: array(BacklightModeSchema)
|
|
10001
|
+
});
|
|
10002
|
+
/**
|
|
10003
|
+
* Partial change to the image config — every field optional. Slider values
|
|
10004
|
+
* are normalized 0–100. A provider ignores fields it does not support.
|
|
10005
|
+
*/
|
|
10006
|
+
var ImageSettingsPatchSchema = object({
|
|
10007
|
+
brightness: number().optional(),
|
|
10008
|
+
contrast: number().optional(),
|
|
10009
|
+
saturation: number().optional(),
|
|
10010
|
+
sharpness: number().optional(),
|
|
10011
|
+
mirror: boolean().optional(),
|
|
10012
|
+
flip: boolean().optional(),
|
|
10013
|
+
rotate: ImageRotateSchema.optional(),
|
|
10014
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
10015
|
+
warmth: number().optional(),
|
|
10016
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
10017
|
+
backlightMode: BacklightModeSchema.optional()
|
|
10018
|
+
});
|
|
10019
|
+
DeviceType.Camera, method(object({ deviceId: number() }), ImageSettingsOptionsSchema), method(object({
|
|
10020
|
+
deviceId: number(),
|
|
10021
|
+
settings: ImageSettingsPatchSchema
|
|
10022
|
+
}), _void(), {
|
|
10023
|
+
kind: "mutation",
|
|
10024
|
+
auth: "admin"
|
|
10025
|
+
});
|
|
10026
|
+
/**
|
|
9817
10027
|
* Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
|
|
9818
10028
|
* with a mowing lifecycle plus a dock action.
|
|
9819
10029
|
*
|
|
@@ -10708,6 +10918,16 @@ var RunnerCameraConfigSchema = object({
|
|
|
10708
10918
|
* this gate is bypassed.
|
|
10709
10919
|
*/
|
|
10710
10920
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
10921
|
+
/**
|
|
10922
|
+
* Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
|
|
10923
|
+
* never arms the periodic recheck timer, regardless of `occupancyRecheckSec` —
|
|
10924
|
+
* this is off by default because the recheck re-subscribes a detection session
|
|
10925
|
+
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
10926
|
+
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
10927
|
+
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
10928
|
+
* (and only render) when this is enabled.
|
|
10929
|
+
*/
|
|
10930
|
+
occupancyRecheckEnabled: boolean().default(false),
|
|
10711
10931
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
10712
10932
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
10713
10933
|
/**
|
|
@@ -13004,7 +13224,9 @@ method(object({ codec: string() }), boolean()), method(_void(), object({
|
|
|
13004
13224
|
id: string(),
|
|
13005
13225
|
name: string(),
|
|
13006
13226
|
isPullMode: boolean().optional(),
|
|
13007
|
-
priority: number().optional()
|
|
13227
|
+
priority: number().optional(),
|
|
13228
|
+
hwaccel: string().optional(),
|
|
13229
|
+
probedBestHwaccel: string().optional()
|
|
13008
13230
|
})), method(DecoderSessionConfigSchema, object({
|
|
13009
13231
|
sessionId: string(),
|
|
13010
13232
|
nodeId: string()
|
|
@@ -19009,6 +19231,18 @@ Object.freeze({
|
|
|
19009
19231
|
addonId: null,
|
|
19010
19232
|
access: "view"
|
|
19011
19233
|
},
|
|
19234
|
+
"dayNight.getOptions": {
|
|
19235
|
+
capName: "day-night",
|
|
19236
|
+
capScope: "device",
|
|
19237
|
+
addonId: null,
|
|
19238
|
+
access: "view"
|
|
19239
|
+
},
|
|
19240
|
+
"dayNight.setSettings": {
|
|
19241
|
+
capName: "day-night",
|
|
19242
|
+
capScope: "device",
|
|
19243
|
+
addonId: null,
|
|
19244
|
+
access: "create"
|
|
19245
|
+
},
|
|
19012
19246
|
"decoder.createSession": {
|
|
19013
19247
|
capName: "decoder",
|
|
19014
19248
|
capScope: "system",
|
|
@@ -19939,6 +20173,18 @@ Object.freeze({
|
|
|
19939
20173
|
addonId: null,
|
|
19940
20174
|
access: "create"
|
|
19941
20175
|
},
|
|
20176
|
+
"imageSettings.getOptions": {
|
|
20177
|
+
capName: "image-settings",
|
|
20178
|
+
capScope: "device",
|
|
20179
|
+
addonId: null,
|
|
20180
|
+
access: "view"
|
|
20181
|
+
},
|
|
20182
|
+
"imageSettings.setSettings": {
|
|
20183
|
+
capName: "image-settings",
|
|
20184
|
+
capScope: "device",
|
|
20185
|
+
addonId: null,
|
|
20186
|
+
access: "create"
|
|
20187
|
+
},
|
|
19942
20188
|
"integrations.create": {
|
|
19943
20189
|
capName: "integrations",
|
|
19944
20190
|
capScope: "system",
|
package/dist/smtp.addon.mjs
CHANGED
|
@@ -4663,7 +4663,7 @@ function _instanceof(cls, params = {}) {
|
|
|
4663
4663
|
return inst;
|
|
4664
4664
|
}
|
|
4665
4665
|
//#endregion
|
|
4666
|
-
//#region ../types/dist/sleep-
|
|
4666
|
+
//#region ../types/dist/sleep-CZDdRBua.mjs
|
|
4667
4667
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4668
4668
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4669
4669
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -7258,7 +7258,16 @@ var DecoderStatsSchema = object({
|
|
|
7258
7258
|
inputFps: number(),
|
|
7259
7259
|
outputFps: number(),
|
|
7260
7260
|
avgDecodeTimeMs: number(),
|
|
7261
|
-
droppedFrames: number()
|
|
7261
|
+
droppedFrames: number(),
|
|
7262
|
+
/**
|
|
7263
|
+
* Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
|
|
7264
|
+
* lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
|
|
7265
|
+
* the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
|
|
7266
|
+
* is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
|
|
7267
|
+
*/
|
|
7268
|
+
lagMs: number().optional(),
|
|
7269
|
+
effectiveFps: number().optional(),
|
|
7270
|
+
adaptiveFps: number().optional()
|
|
7262
7271
|
});
|
|
7263
7272
|
var DecoderSessionConfigSchema = object({
|
|
7264
7273
|
codec: string(),
|
|
@@ -7299,7 +7308,15 @@ var DecoderSessionConfigSchema = object({
|
|
|
7299
7308
|
* other — `pullFrames` returns nothing for an `'shm'` session and
|
|
7300
7309
|
* `pullHandles` returns nothing for a `'callback'` session.
|
|
7301
7310
|
*/
|
|
7302
|
-
frameSink: _enum(["callback", "shm"]).default("callback")
|
|
7311
|
+
frameSink: _enum(["callback", "shm"]).default("callback"),
|
|
7312
|
+
/**
|
|
7313
|
+
* Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
|
|
7314
|
+
* a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
|
|
7315
|
+
* real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
|
|
7316
|
+
* stream-broker's `streamingDebug` gate — off by default so production logs
|
|
7317
|
+
* stay quiet and the emit path pays zero per-frame cost when disabled.
|
|
7318
|
+
*/
|
|
7319
|
+
debug: boolean().optional()
|
|
7303
7320
|
});
|
|
7304
7321
|
var EncodeProfileSchema = object({
|
|
7305
7322
|
video: object({
|
|
@@ -9457,6 +9474,75 @@ DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _vo
|
|
|
9457
9474
|
auth: "admin"
|
|
9458
9475
|
});
|
|
9459
9476
|
/**
|
|
9477
|
+
* Vendor-neutral day/night (IR-cut) control — the per-camera config cap
|
|
9478
|
+
* shared by reolink / hikvision / amcrest. Models the common firmware
|
|
9479
|
+
* surface: the IR-cut switching MODE plus the two knobs that gate it
|
|
9480
|
+
* (photocell `sensitivity` + `switchDelaySec`). Each vendor maps these
|
|
9481
|
+
* onto its own ISAPI / Baichuan / Dahua-CGI fields; the cap standardises
|
|
9482
|
+
* the shape so ONE derived-form renders every camera.
|
|
9483
|
+
*
|
|
9484
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9485
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9486
|
+
* injected from `status`) reports the live values, and a single
|
|
9487
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9488
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9489
|
+
* routing from this surface.
|
|
9490
|
+
*/
|
|
9491
|
+
/** IR-cut switching mode. `schedule` = time-of-day table configured on the camera. */
|
|
9492
|
+
var DayNightModeSchema = _enum([
|
|
9493
|
+
"auto",
|
|
9494
|
+
"day",
|
|
9495
|
+
"night",
|
|
9496
|
+
"schedule"
|
|
9497
|
+
]);
|
|
9498
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
9499
|
+
* getOptions availability convention. Normalized values are 0–100. */
|
|
9500
|
+
var NormalizedRangeSchema$1 = object({
|
|
9501
|
+
min: number(),
|
|
9502
|
+
max: number(),
|
|
9503
|
+
step: number()
|
|
9504
|
+
});
|
|
9505
|
+
object({
|
|
9506
|
+
mode: DayNightModeSchema,
|
|
9507
|
+
/** IR-cut trigger sensitivity, NORMALIZED 0–100 (higher = switches to night sooner). */
|
|
9508
|
+
sensitivity: number().optional(),
|
|
9509
|
+
/** Delay before the IR-cut filter flips, in seconds. */
|
|
9510
|
+
switchDelaySec: number().optional(),
|
|
9511
|
+
lastFetchedAt: number()
|
|
9512
|
+
});
|
|
9513
|
+
/**
|
|
9514
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
9515
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
9516
|
+
* (normalized 0–100); the mode choice-set as an array. A provider returns
|
|
9517
|
+
* honest, camera-probed values — never hardcoded.
|
|
9518
|
+
*/
|
|
9519
|
+
var DayNightOptionsSchema = object({
|
|
9520
|
+
/** Modes this camera accepts. Empty → the camera has no configurable day/night mode. */
|
|
9521
|
+
modes: array(DayNightModeSchema),
|
|
9522
|
+
supportsSensitivity: boolean(),
|
|
9523
|
+
/** Present when `supportsSensitivity` — the normalized 0–100 range. */
|
|
9524
|
+
sensitivity: NormalizedRangeSchema$1.optional(),
|
|
9525
|
+
supportsSwitchDelay: boolean(),
|
|
9526
|
+
/** Present when `supportsSwitchDelay` — the allowed delay range in seconds. */
|
|
9527
|
+
switchDelaySec: NormalizedRangeSchema$1.optional()
|
|
9528
|
+
});
|
|
9529
|
+
/**
|
|
9530
|
+
* Partial change to the day/night config — every field optional. A
|
|
9531
|
+
* provider ignores fields it does not support.
|
|
9532
|
+
*/
|
|
9533
|
+
var DayNightSettingsPatchSchema = object({
|
|
9534
|
+
mode: DayNightModeSchema.optional(),
|
|
9535
|
+
sensitivity: number().optional(),
|
|
9536
|
+
switchDelaySec: number().optional()
|
|
9537
|
+
});
|
|
9538
|
+
DeviceType.Camera, method(object({ deviceId: number() }), DayNightOptionsSchema), method(object({
|
|
9539
|
+
deviceId: number(),
|
|
9540
|
+
settings: DayNightSettingsPatchSchema
|
|
9541
|
+
}), _void(), {
|
|
9542
|
+
kind: "mutation",
|
|
9543
|
+
auth: "admin"
|
|
9544
|
+
});
|
|
9545
|
+
/**
|
|
9460
9546
|
* Identity envelope for a device's upstream-system metadata.
|
|
9461
9547
|
*
|
|
9462
9548
|
* Two jobs:
|
|
@@ -9812,6 +9898,130 @@ object({
|
|
|
9812
9898
|
});
|
|
9813
9899
|
DeviceType.Image;
|
|
9814
9900
|
/**
|
|
9901
|
+
* Vendor-neutral image / picture-adjustment cap — the per-camera config
|
|
9902
|
+
* cap shared by reolink / hikvision / amcrest. Models the common ISP
|
|
9903
|
+
* surface: the four picture sliders (brightness / contrast / saturation /
|
|
9904
|
+
* sharpness), orientation (mirror / flip / rotate), white-balance,
|
|
9905
|
+
* exposure and backlight-compensation modes.
|
|
9906
|
+
*
|
|
9907
|
+
* NORMALIZATION: every slider is a normalized int 0–100. Vendors expose
|
|
9908
|
+
* these natively as 0–100 or 0–255 (or other ranges); each provider maps
|
|
9909
|
+
* its native range to/from this normalized 0–100 space so the cap surface
|
|
9910
|
+
* (and the derived form) is identical across cameras. `warmth` (manual
|
|
9911
|
+
* white-balance) is likewise normalized 0–100.
|
|
9912
|
+
*
|
|
9913
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9914
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9915
|
+
* injected from `status`) reports the live values, and a single
|
|
9916
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9917
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9918
|
+
* routing from this surface.
|
|
9919
|
+
*/
|
|
9920
|
+
/** Sensor/image rotation, degrees clockwise. */
|
|
9921
|
+
var ImageRotateSchema = _enum([
|
|
9922
|
+
"0",
|
|
9923
|
+
"90",
|
|
9924
|
+
"180",
|
|
9925
|
+
"270"
|
|
9926
|
+
]);
|
|
9927
|
+
/** White-balance mode. `manual` unlocks the normalized `warmth` knob. */
|
|
9928
|
+
var WhiteBalanceModeSchema = _enum(["auto", "manual"]);
|
|
9929
|
+
/** Exposure mode. */
|
|
9930
|
+
var ExposureModeSchema = _enum(["auto", "manual"]);
|
|
9931
|
+
/**
|
|
9932
|
+
* Backlight-compensation mode:
|
|
9933
|
+
* - `off` — disabled
|
|
9934
|
+
* - `blc` — backlight compensation
|
|
9935
|
+
* - `wdr` — wide dynamic range
|
|
9936
|
+
* - `hlc` — highlight compensation
|
|
9937
|
+
*/
|
|
9938
|
+
var BacklightModeSchema = _enum([
|
|
9939
|
+
"off",
|
|
9940
|
+
"blc",
|
|
9941
|
+
"wdr",
|
|
9942
|
+
"hlc"
|
|
9943
|
+
]);
|
|
9944
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
9945
|
+
* getOptions availability convention. Slider values are normalized 0–100. */
|
|
9946
|
+
var NormalizedRangeSchema = object({
|
|
9947
|
+
min: number(),
|
|
9948
|
+
max: number(),
|
|
9949
|
+
step: number()
|
|
9950
|
+
});
|
|
9951
|
+
object({
|
|
9952
|
+
/** Normalized 0–100. */
|
|
9953
|
+
brightness: number().optional(),
|
|
9954
|
+
/** Normalized 0–100. */
|
|
9955
|
+
contrast: number().optional(),
|
|
9956
|
+
/** Normalized 0–100. */
|
|
9957
|
+
saturation: number().optional(),
|
|
9958
|
+
/** Normalized 0–100. */
|
|
9959
|
+
sharpness: number().optional(),
|
|
9960
|
+
mirror: boolean().optional(),
|
|
9961
|
+
flip: boolean().optional(),
|
|
9962
|
+
rotate: ImageRotateSchema.optional(),
|
|
9963
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
9964
|
+
/** Manual white-balance warmth, NORMALIZED 0–100. Meaningful only when `whiteBalance === 'manual'`. */
|
|
9965
|
+
warmth: number().optional(),
|
|
9966
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
9967
|
+
backlightMode: BacklightModeSchema.optional(),
|
|
9968
|
+
lastFetchedAt: number()
|
|
9969
|
+
});
|
|
9970
|
+
/**
|
|
9971
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
9972
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
9973
|
+
* (the normalized 0–100 range); enums as arrays of supported values (empty
|
|
9974
|
+
* array → control hidden). A provider returns honest, camera-probed values
|
|
9975
|
+
* — never hardcoded.
|
|
9976
|
+
*/
|
|
9977
|
+
var ImageSettingsOptionsSchema = object({
|
|
9978
|
+
supportsBrightness: boolean(),
|
|
9979
|
+
brightness: NormalizedRangeSchema.optional(),
|
|
9980
|
+
supportsContrast: boolean(),
|
|
9981
|
+
contrast: NormalizedRangeSchema.optional(),
|
|
9982
|
+
supportsSaturation: boolean(),
|
|
9983
|
+
saturation: NormalizedRangeSchema.optional(),
|
|
9984
|
+
supportsSharpness: boolean(),
|
|
9985
|
+
sharpness: NormalizedRangeSchema.optional(),
|
|
9986
|
+
supportsMirror: boolean(),
|
|
9987
|
+
supportsFlip: boolean(),
|
|
9988
|
+
/** Supported rotation values. Empty → rotation not configurable. */
|
|
9989
|
+
rotateOptions: array(ImageRotateSchema),
|
|
9990
|
+
/** Supported white-balance modes. Empty → white-balance not configurable. */
|
|
9991
|
+
whiteBalanceModes: array(WhiteBalanceModeSchema),
|
|
9992
|
+
supportsWarmth: boolean(),
|
|
9993
|
+
/** Present when `supportsWarmth` — the normalized 0–100 range. */
|
|
9994
|
+
warmth: NormalizedRangeSchema.optional(),
|
|
9995
|
+
/** Supported exposure modes. Empty → exposure not configurable. */
|
|
9996
|
+
exposureModes: array(ExposureModeSchema),
|
|
9997
|
+
/** Supported backlight modes. Empty → backlight-compensation not configurable. */
|
|
9998
|
+
backlightModes: array(BacklightModeSchema)
|
|
9999
|
+
});
|
|
10000
|
+
/**
|
|
10001
|
+
* Partial change to the image config — every field optional. Slider values
|
|
10002
|
+
* are normalized 0–100. A provider ignores fields it does not support.
|
|
10003
|
+
*/
|
|
10004
|
+
var ImageSettingsPatchSchema = object({
|
|
10005
|
+
brightness: number().optional(),
|
|
10006
|
+
contrast: number().optional(),
|
|
10007
|
+
saturation: number().optional(),
|
|
10008
|
+
sharpness: number().optional(),
|
|
10009
|
+
mirror: boolean().optional(),
|
|
10010
|
+
flip: boolean().optional(),
|
|
10011
|
+
rotate: ImageRotateSchema.optional(),
|
|
10012
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
10013
|
+
warmth: number().optional(),
|
|
10014
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
10015
|
+
backlightMode: BacklightModeSchema.optional()
|
|
10016
|
+
});
|
|
10017
|
+
DeviceType.Camera, method(object({ deviceId: number() }), ImageSettingsOptionsSchema), method(object({
|
|
10018
|
+
deviceId: number(),
|
|
10019
|
+
settings: ImageSettingsPatchSchema
|
|
10020
|
+
}), _void(), {
|
|
10021
|
+
kind: "mutation",
|
|
10022
|
+
auth: "admin"
|
|
10023
|
+
});
|
|
10024
|
+
/**
|
|
9815
10025
|
* Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
|
|
9816
10026
|
* with a mowing lifecycle plus a dock action.
|
|
9817
10027
|
*
|
|
@@ -10706,6 +10916,16 @@ var RunnerCameraConfigSchema = object({
|
|
|
10706
10916
|
* this gate is bypassed.
|
|
10707
10917
|
*/
|
|
10708
10918
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
10919
|
+
/**
|
|
10920
|
+
* Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
|
|
10921
|
+
* never arms the periodic recheck timer, regardless of `occupancyRecheckSec` —
|
|
10922
|
+
* this is off by default because the recheck re-subscribes a detection session
|
|
10923
|
+
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
10924
|
+
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
10925
|
+
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
10926
|
+
* (and only render) when this is enabled.
|
|
10927
|
+
*/
|
|
10928
|
+
occupancyRecheckEnabled: boolean().default(false),
|
|
10709
10929
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
10710
10930
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
10711
10931
|
/**
|
|
@@ -13002,7 +13222,9 @@ method(object({ codec: string() }), boolean()), method(_void(), object({
|
|
|
13002
13222
|
id: string(),
|
|
13003
13223
|
name: string(),
|
|
13004
13224
|
isPullMode: boolean().optional(),
|
|
13005
|
-
priority: number().optional()
|
|
13225
|
+
priority: number().optional(),
|
|
13226
|
+
hwaccel: string().optional(),
|
|
13227
|
+
probedBestHwaccel: string().optional()
|
|
13006
13228
|
})), method(DecoderSessionConfigSchema, object({
|
|
13007
13229
|
sessionId: string(),
|
|
13008
13230
|
nodeId: string()
|
|
@@ -19007,6 +19229,18 @@ Object.freeze({
|
|
|
19007
19229
|
addonId: null,
|
|
19008
19230
|
access: "view"
|
|
19009
19231
|
},
|
|
19232
|
+
"dayNight.getOptions": {
|
|
19233
|
+
capName: "day-night",
|
|
19234
|
+
capScope: "device",
|
|
19235
|
+
addonId: null,
|
|
19236
|
+
access: "view"
|
|
19237
|
+
},
|
|
19238
|
+
"dayNight.setSettings": {
|
|
19239
|
+
capName: "day-night",
|
|
19240
|
+
capScope: "device",
|
|
19241
|
+
addonId: null,
|
|
19242
|
+
access: "create"
|
|
19243
|
+
},
|
|
19010
19244
|
"decoder.createSession": {
|
|
19011
19245
|
capName: "decoder",
|
|
19012
19246
|
capScope: "system",
|
|
@@ -19937,6 +20171,18 @@ Object.freeze({
|
|
|
19937
20171
|
addonId: null,
|
|
19938
20172
|
access: "create"
|
|
19939
20173
|
},
|
|
20174
|
+
"imageSettings.getOptions": {
|
|
20175
|
+
capName: "image-settings",
|
|
20176
|
+
capScope: "device",
|
|
20177
|
+
addonId: null,
|
|
20178
|
+
access: "view"
|
|
20179
|
+
},
|
|
20180
|
+
"imageSettings.setSettings": {
|
|
20181
|
+
capName: "image-settings",
|
|
20182
|
+
capScope: "device",
|
|
20183
|
+
addonId: null,
|
|
20184
|
+
access: "create"
|
|
20185
|
+
},
|
|
19940
20186
|
"integrations.create": {
|
|
19941
20187
|
capName: "integrations",
|
|
19942
20188
|
capScope: "system",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-smtp-nodemailer",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.18",
|
|
4
4
|
"description": "SMTP email provider addon for CamStack — wraps `nodemailer` and registers a `smtp-provider` cap collection entry. Used by magic-link login + notifier addons.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|