@camstack/addon-smtp-nodemailer 1.1.15 → 1.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/smtp.addon.js +288 -5
- package/dist/smtp.addon.mjs +288 -5
- 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()
|
|
@@ -14918,7 +15140,17 @@ var AgentAddonConfigSchema = object({
|
|
|
14918
15140
|
});
|
|
14919
15141
|
var AgentPipelineSettingsSchema = object({
|
|
14920
15142
|
addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
|
|
14921
|
-
maxCameras: number().int().nonnegative().nullable().default(null)
|
|
15143
|
+
maxCameras: number().int().nonnegative().nullable().default(null),
|
|
15144
|
+
/** Per-node detection weight (relative share for the quota balancer). */
|
|
15145
|
+
detectWeight: number().positive().optional(),
|
|
15146
|
+
/** Node is eligible to run the detection pipeline (decode + inference). */
|
|
15147
|
+
detect: boolean().optional(),
|
|
15148
|
+
/** Node is eligible to host decoder sessions. */
|
|
15149
|
+
decode: boolean().optional(),
|
|
15150
|
+
/** Node is eligible to run audio-analyzer sessions. */
|
|
15151
|
+
audio: boolean().optional(),
|
|
15152
|
+
/** Node is eligible to be the ingest / source-owner (serve the restream). */
|
|
15153
|
+
ingest: boolean().optional()
|
|
14922
15154
|
});
|
|
14923
15155
|
var CameraPipelineForAgentSchema = object({
|
|
14924
15156
|
steps: array(PipelineStepInputSchema).readonly(),
|
|
@@ -15224,6 +15456,21 @@ method(object({
|
|
|
15224
15456
|
}), object({ success: literal(true) }), {
|
|
15225
15457
|
kind: "mutation",
|
|
15226
15458
|
auth: "admin"
|
|
15459
|
+
}), method(object({
|
|
15460
|
+
agentNodeId: string(),
|
|
15461
|
+
detectWeight: number().positive().nullable()
|
|
15462
|
+
}), object({ success: literal(true) }), {
|
|
15463
|
+
kind: "mutation",
|
|
15464
|
+
auth: "admin"
|
|
15465
|
+
}), method(object({
|
|
15466
|
+
agentNodeId: string(),
|
|
15467
|
+
detect: boolean().nullable().optional(),
|
|
15468
|
+
decode: boolean().nullable().optional(),
|
|
15469
|
+
audio: boolean().nullable().optional(),
|
|
15470
|
+
ingest: boolean().nullable().optional()
|
|
15471
|
+
}), object({ success: literal(true) }), {
|
|
15472
|
+
kind: "mutation",
|
|
15473
|
+
auth: "admin"
|
|
15227
15474
|
}), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
|
|
15228
15475
|
deviceId: number(),
|
|
15229
15476
|
addonId: string(),
|
|
@@ -18984,6 +19231,18 @@ Object.freeze({
|
|
|
18984
19231
|
addonId: null,
|
|
18985
19232
|
access: "view"
|
|
18986
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
|
+
},
|
|
18987
19246
|
"decoder.createSession": {
|
|
18988
19247
|
capName: "decoder",
|
|
18989
19248
|
capScope: "system",
|
|
@@ -19914,6 +20173,18 @@ Object.freeze({
|
|
|
19914
20173
|
addonId: null,
|
|
19915
20174
|
access: "create"
|
|
19916
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
|
+
},
|
|
19917
20188
|
"integrations.create": {
|
|
19918
20189
|
capName: "integrations",
|
|
19919
20190
|
capScope: "system",
|
|
@@ -21096,6 +21367,18 @@ Object.freeze({
|
|
|
21096
21367
|
addonId: null,
|
|
21097
21368
|
access: "create"
|
|
21098
21369
|
},
|
|
21370
|
+
"pipelineOrchestrator.setAgentCapabilities": {
|
|
21371
|
+
capName: "pipeline-orchestrator",
|
|
21372
|
+
capScope: "system",
|
|
21373
|
+
addonId: null,
|
|
21374
|
+
access: "create"
|
|
21375
|
+
},
|
|
21376
|
+
"pipelineOrchestrator.setAgentDetectWeight": {
|
|
21377
|
+
capName: "pipeline-orchestrator",
|
|
21378
|
+
capScope: "system",
|
|
21379
|
+
addonId: null,
|
|
21380
|
+
access: "create"
|
|
21381
|
+
},
|
|
21099
21382
|
"pipelineOrchestrator.setAgentMaxCameras": {
|
|
21100
21383
|
capName: "pipeline-orchestrator",
|
|
21101
21384
|
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()
|
|
@@ -14916,7 +15138,17 @@ var AgentAddonConfigSchema = object({
|
|
|
14916
15138
|
});
|
|
14917
15139
|
var AgentPipelineSettingsSchema = object({
|
|
14918
15140
|
addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
|
|
14919
|
-
maxCameras: number().int().nonnegative().nullable().default(null)
|
|
15141
|
+
maxCameras: number().int().nonnegative().nullable().default(null),
|
|
15142
|
+
/** Per-node detection weight (relative share for the quota balancer). */
|
|
15143
|
+
detectWeight: number().positive().optional(),
|
|
15144
|
+
/** Node is eligible to run the detection pipeline (decode + inference). */
|
|
15145
|
+
detect: boolean().optional(),
|
|
15146
|
+
/** Node is eligible to host decoder sessions. */
|
|
15147
|
+
decode: boolean().optional(),
|
|
15148
|
+
/** Node is eligible to run audio-analyzer sessions. */
|
|
15149
|
+
audio: boolean().optional(),
|
|
15150
|
+
/** Node is eligible to be the ingest / source-owner (serve the restream). */
|
|
15151
|
+
ingest: boolean().optional()
|
|
14920
15152
|
});
|
|
14921
15153
|
var CameraPipelineForAgentSchema = object({
|
|
14922
15154
|
steps: array(PipelineStepInputSchema).readonly(),
|
|
@@ -15222,6 +15454,21 @@ method(object({
|
|
|
15222
15454
|
}), object({ success: literal(true) }), {
|
|
15223
15455
|
kind: "mutation",
|
|
15224
15456
|
auth: "admin"
|
|
15457
|
+
}), method(object({
|
|
15458
|
+
agentNodeId: string(),
|
|
15459
|
+
detectWeight: number().positive().nullable()
|
|
15460
|
+
}), object({ success: literal(true) }), {
|
|
15461
|
+
kind: "mutation",
|
|
15462
|
+
auth: "admin"
|
|
15463
|
+
}), method(object({
|
|
15464
|
+
agentNodeId: string(),
|
|
15465
|
+
detect: boolean().nullable().optional(),
|
|
15466
|
+
decode: boolean().nullable().optional(),
|
|
15467
|
+
audio: boolean().nullable().optional(),
|
|
15468
|
+
ingest: boolean().nullable().optional()
|
|
15469
|
+
}), object({ success: literal(true) }), {
|
|
15470
|
+
kind: "mutation",
|
|
15471
|
+
auth: "admin"
|
|
15225
15472
|
}), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
|
|
15226
15473
|
deviceId: number(),
|
|
15227
15474
|
addonId: string(),
|
|
@@ -18982,6 +19229,18 @@ Object.freeze({
|
|
|
18982
19229
|
addonId: null,
|
|
18983
19230
|
access: "view"
|
|
18984
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
|
+
},
|
|
18985
19244
|
"decoder.createSession": {
|
|
18986
19245
|
capName: "decoder",
|
|
18987
19246
|
capScope: "system",
|
|
@@ -19912,6 +20171,18 @@ Object.freeze({
|
|
|
19912
20171
|
addonId: null,
|
|
19913
20172
|
access: "create"
|
|
19914
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
|
+
},
|
|
19915
20186
|
"integrations.create": {
|
|
19916
20187
|
capName: "integrations",
|
|
19917
20188
|
capScope: "system",
|
|
@@ -21094,6 +21365,18 @@ Object.freeze({
|
|
|
21094
21365
|
addonId: null,
|
|
21095
21366
|
access: "create"
|
|
21096
21367
|
},
|
|
21368
|
+
"pipelineOrchestrator.setAgentCapabilities": {
|
|
21369
|
+
capName: "pipeline-orchestrator",
|
|
21370
|
+
capScope: "system",
|
|
21371
|
+
addonId: null,
|
|
21372
|
+
access: "create"
|
|
21373
|
+
},
|
|
21374
|
+
"pipelineOrchestrator.setAgentDetectWeight": {
|
|
21375
|
+
capName: "pipeline-orchestrator",
|
|
21376
|
+
capScope: "system",
|
|
21377
|
+
addonId: null,
|
|
21378
|
+
access: "create"
|
|
21379
|
+
},
|
|
21097
21380
|
"pipelineOrchestrator.setAgentMaxCameras": {
|
|
21098
21381
|
capName: "pipeline-orchestrator",
|
|
21099
21382
|
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.17",
|
|
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",
|