@camstack/addon-smtp-nodemailer 1.2.126 → 1.2.127
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 +255 -23
- package/dist/smtp.addon.mjs +255 -23
- package/package.json +1 -1
package/dist/smtp.addon.js
CHANGED
|
@@ -5451,7 +5451,7 @@ var ZodIssueCode = {
|
|
|
5451
5451
|
var ZodFirstPartyTypeKind;
|
|
5452
5452
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5453
5453
|
//#endregion
|
|
5454
|
-
//#region ../types/dist/sleep-
|
|
5454
|
+
//#region ../types/dist/sleep-BSuCCFjf.mjs
|
|
5455
5455
|
/**
|
|
5456
5456
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5457
5457
|
* window to float samples (D455).
|
|
@@ -16844,7 +16844,19 @@ var DeviceHistorySubjectSchema = discriminatedUnion("kind", [object({
|
|
|
16844
16844
|
kind: literal("node"),
|
|
16845
16845
|
nodeId: string().min(1)
|
|
16846
16846
|
})]);
|
|
16847
|
+
/**
|
|
16848
|
+
* `enum` stores a STATE as the ordinal of its value in the series' value list
|
|
16849
|
+
* (`DeviceHistorySeriesInfo.values`, append-only, so an ordinal never changes
|
|
16850
|
+
* meaning); a rollup keeps the time spent in each state (`states`).
|
|
16851
|
+
*/
|
|
16847
16852
|
var DeviceHistoryKindSchema = _enum([
|
|
16853
|
+
"gauge",
|
|
16854
|
+
"counter",
|
|
16855
|
+
"boolean",
|
|
16856
|
+
"enum"
|
|
16857
|
+
]);
|
|
16858
|
+
/** What a PRODUCER may declare. `enum` is cap-only: its value list is the cap field's. */
|
|
16859
|
+
var DeviceHistoryProducerKindSchema = _enum([
|
|
16848
16860
|
"gauge",
|
|
16849
16861
|
"counter",
|
|
16850
16862
|
"boolean"
|
|
@@ -16881,7 +16893,13 @@ var SeriesInfoSchema = object({
|
|
|
16881
16893
|
/** `null` is unknown (a `unitFrom` series whose device does not state a unit right now), never a guess. */
|
|
16882
16894
|
unit: string().nullable(),
|
|
16883
16895
|
displayName: string(),
|
|
16884
|
-
source: _enum([
|
|
16896
|
+
source: _enum([
|
|
16897
|
+
"cap",
|
|
16898
|
+
"addon",
|
|
16899
|
+
"derived"
|
|
16900
|
+
]),
|
|
16901
|
+
/** `enum`: the value of each ordinal (index = ordinal); `null` for every other kind. */
|
|
16902
|
+
values: array(string()).readonly().nullable(),
|
|
16885
16903
|
firstTs: number(),
|
|
16886
16904
|
lastTs: number()
|
|
16887
16905
|
});
|
|
@@ -16895,17 +16913,31 @@ var QueryPointSchema = object({
|
|
|
16895
16913
|
twMean: number().nullable(),
|
|
16896
16914
|
min: number(),
|
|
16897
16915
|
max: number(),
|
|
16898
|
-
/** `null` is unknown, never zero (D393). */
|
|
16899
|
-
last: number().nullable()
|
|
16916
|
+
/** `null` is unknown, never zero (D393). For an `enum` series: the ordinal of {@link state}. */
|
|
16917
|
+
last: number().nullable(),
|
|
16918
|
+
/**
|
|
16919
|
+
* The increase over the point: a `counter`'s growth since the previous point
|
|
16920
|
+
* or bucket (a drop is a reset, counted from zero), and for
|
|
16921
|
+
* {@link DEVICE_HISTORY_ENERGY_KEY} the kWh used in the bucket. `null` for
|
|
16922
|
+
* every other kind, and when it cannot be known.
|
|
16923
|
+
*/
|
|
16924
|
+
delta: number().nullable(),
|
|
16925
|
+
/** `enum`: the state in force at the end of the point (the name of `last`); `null` otherwise. */
|
|
16926
|
+
state: string().nullable(),
|
|
16927
|
+
/** `enum` rollup: milliseconds spent in each state inside the bucket; `null` for raw points and other kinds. */
|
|
16928
|
+
states: record(string(), number()).nullable()
|
|
16900
16929
|
});
|
|
16901
16930
|
var QuerySeriesSchema = object({
|
|
16902
16931
|
scope: string(),
|
|
16903
16932
|
/** The last point STRICTLY BEFORE `from` in the chosen tier, so a step chart can start at the held value. */
|
|
16904
16933
|
before: object({
|
|
16905
16934
|
t: number(),
|
|
16906
|
-
value: number().nullable()
|
|
16935
|
+
value: number().nullable(),
|
|
16936
|
+
state: string().nullable()
|
|
16907
16937
|
}).nullable(),
|
|
16908
|
-
points: array(QueryPointSchema).readonly()
|
|
16938
|
+
points: array(QueryPointSchema).readonly(),
|
|
16939
|
+
/** A derived key: the stored key its points were computed from; `null` for a stored series. */
|
|
16940
|
+
derivedFrom: string().nullable()
|
|
16909
16941
|
});
|
|
16910
16942
|
/** The window part of a query, shared by the device and node forms. */
|
|
16911
16943
|
var QueryWindowShape = {
|
|
@@ -16921,6 +16953,23 @@ var QueryResultSchema = object({
|
|
|
16921
16953
|
series: array(QuerySeriesSchema).readonly(),
|
|
16922
16954
|
truncated: boolean()
|
|
16923
16955
|
});
|
|
16956
|
+
/** One read of a batch: a device's key or a node's key (exactly one subject). */
|
|
16957
|
+
var QueryManyItemSchema = union([object({
|
|
16958
|
+
deviceId: number().int(),
|
|
16959
|
+
key: string(),
|
|
16960
|
+
scope: string().optional()
|
|
16961
|
+
}), object({
|
|
16962
|
+
forNodeId: string().min(1),
|
|
16963
|
+
key: string(),
|
|
16964
|
+
scope: string().optional()
|
|
16965
|
+
})]);
|
|
16966
|
+
var QueryManyEntrySchema = discriminatedUnion("ok", [object({
|
|
16967
|
+
ok: literal(true),
|
|
16968
|
+
result: QueryResultSchema
|
|
16969
|
+
}), object({
|
|
16970
|
+
ok: literal(false),
|
|
16971
|
+
error: string()
|
|
16972
|
+
})]);
|
|
16924
16973
|
var TierStatusSchema = object({
|
|
16925
16974
|
tier: DeviceHistoryResolutionSchema,
|
|
16926
16975
|
/** `null` until the first background count answered. */
|
|
@@ -16976,16 +17025,22 @@ var DeviceHistoryStatusSchema = object({
|
|
|
16976
17025
|
lastRefreshAt: number().nullable()
|
|
16977
17026
|
})
|
|
16978
17027
|
});
|
|
16979
|
-
method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly()), method(object({
|
|
17028
|
+
method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly()), method(object({ forNodeId: string().min(1) }), array(SeriesInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
16980
17029
|
deviceId: number().int(),
|
|
16981
17030
|
...QueryWindowShape
|
|
16982
17031
|
}), QueryResultSchema), method(object({
|
|
16983
|
-
|
|
17032
|
+
forNodeId: string().min(1),
|
|
16984
17033
|
...QueryWindowShape
|
|
16985
17034
|
}), QueryResultSchema, { auth: "admin" }), method(object({
|
|
17035
|
+
items: array(QueryManyItemSchema).min(1).max(24),
|
|
17036
|
+
from: QueryWindowShape.from,
|
|
17037
|
+
to: QueryWindowShape.to,
|
|
17038
|
+
resolution: QueryWindowShape.resolution,
|
|
17039
|
+
maxPoints: QueryWindowShape.maxPoints
|
|
17040
|
+
}), object({ results: array(QueryManyEntrySchema).readonly() }), { auth: "admin" }), method(object({
|
|
16986
17041
|
name: string().regex(/^[a-z0-9-]+$/),
|
|
16987
17042
|
subjectKind: _enum(["device", "node"]),
|
|
16988
|
-
kind:
|
|
17043
|
+
kind: DeviceHistoryProducerKindSchema,
|
|
16989
17044
|
unit: string().optional(),
|
|
16990
17045
|
displayName: string().min(1),
|
|
16991
17046
|
ingest: _enum(["points", "buckets"])
|
|
@@ -40002,14 +40057,106 @@ var LogEntrySchema = object({
|
|
|
40002
40057
|
meta: record(string(), unknown()).optional(),
|
|
40003
40058
|
tags: record(string(), string()).optional()
|
|
40004
40059
|
});
|
|
40005
|
-
|
|
40006
|
-
|
|
40060
|
+
/**
|
|
40061
|
+
* A history READ against one destination (D898).
|
|
40062
|
+
*
|
|
40063
|
+
* Every filter is applied by the PROVIDER, before the limit — a filter the
|
|
40064
|
+
* browser applied after the limit is what made a rare device's lines
|
|
40065
|
+
* unreachable behind a busy one's. `before` / `after` are cursors the provider
|
|
40066
|
+
* minted (opaque to everyone else): a file position for the rotated files, a
|
|
40067
|
+
* nanosecond timestamp for Loki.
|
|
40068
|
+
*
|
|
40069
|
+
* A read is BOUNDED by `budgetMs`: a filter that matches nothing on a 30-day
|
|
40070
|
+
* store answers `done: false` with the cursor it reached and the bytes it
|
|
40071
|
+
* scanned, and the caller decides whether to go on. That is what makes a long
|
|
40072
|
+
* scan show progress and stop when asked — `cancelRead` ends the slice in
|
|
40073
|
+
* flight, and not asking for the next slice ends the scan.
|
|
40074
|
+
*/
|
|
40075
|
+
var LogReadQuerySchema = object({
|
|
40076
|
+
/** Correlates `cancelRead`. Caller-chosen, unique per in-flight read. */
|
|
40077
|
+
requestId: string().min(1).max(64).optional(),
|
|
40078
|
+
/** The device the line is about (`tags.deviceId`, numeric). */
|
|
40079
|
+
deviceId: number().int().optional(),
|
|
40080
|
+
/**
|
|
40081
|
+
* The emitting addon — bare manifest id; `@<version>` / `::<sub>` suffixes
|
|
40082
|
+
* match. Not `addonId`: a cap router reads that name as "which provider".
|
|
40083
|
+
*/
|
|
40084
|
+
fromAddonId: string().min(1).max(200).optional(),
|
|
40085
|
+
/**
|
|
40086
|
+
* The emitting node: matches the agent that emitted the line, the node
|
|
40087
|
+
* itself, or a worker under it (`<agent>/<runner>`) — the `agentId`
|
|
40088
|
+
* semantics of `matchesLogTags`. Not `nodeId`: a cap router reads that
|
|
40089
|
+
* name as "which node's provider".
|
|
40090
|
+
*/
|
|
40091
|
+
fromNodeId: string().min(1).max(200).optional(),
|
|
40092
|
+
/** Any other tag, exact match (AND). */
|
|
40093
|
+
tags: record(string(), union([string(), number()])).optional(),
|
|
40094
|
+
/** Severity FLOOR: this level and above. */
|
|
40007
40095
|
level: LogLevelSchema.optional(),
|
|
40008
|
-
|
|
40009
|
-
|
|
40010
|
-
|
|
40011
|
-
|
|
40012
|
-
|
|
40096
|
+
/** Case-insensitive substring over message, scope, tag values and meta values. */
|
|
40097
|
+
text: string().min(1).max(200).optional(),
|
|
40098
|
+
/** Epoch ms, inclusive. */
|
|
40099
|
+
since: number().optional(),
|
|
40100
|
+
/** Epoch ms, inclusive. */
|
|
40101
|
+
until: number().optional(),
|
|
40102
|
+
/** Older than this cursor (exclusive). Absent with `after` absent ⇒ from the newest. */
|
|
40103
|
+
before: string().min(1).max(1024).optional(),
|
|
40104
|
+
/** Newer than this cursor (exclusive). */
|
|
40105
|
+
after: string().min(1).max(1024).optional(),
|
|
40106
|
+
limit: number().int().min(1).max(1e3).optional(),
|
|
40107
|
+
/** Wall-clock bound of this slice. The provider caps it. */
|
|
40108
|
+
budgetMs: number().int().min(50).max(1e4).optional()
|
|
40109
|
+
});
|
|
40110
|
+
var LogReadResultSchema = object({
|
|
40111
|
+
/** Newest first. */
|
|
40112
|
+
entries: array(object({
|
|
40113
|
+
/** `<bootId>.<seq>` minted by the emitting LogManager — the dedupe key. */
|
|
40114
|
+
id: string().optional(),
|
|
40115
|
+
/** Epoch ms. */
|
|
40116
|
+
timestamp: number(),
|
|
40117
|
+
level: LogLevelSchema,
|
|
40118
|
+
scope: string().optional(),
|
|
40119
|
+
message: string(),
|
|
40120
|
+
tags: record(string(), union([string(), number()])).optional(),
|
|
40121
|
+
meta: record(string(), unknown()).optional()
|
|
40122
|
+
})),
|
|
40123
|
+
/** Pass as `before` for the next older page; null when nothing older exists. */
|
|
40124
|
+
nextBefore: string().nullable(),
|
|
40125
|
+
/** Pass as `after` to read what arrived since; null when unknown. */
|
|
40126
|
+
nextAfter: string().nullable(),
|
|
40127
|
+
/** Bytes this slice read (files) or received (remote). Progress, not a promise. */
|
|
40128
|
+
scannedBytes: number().int().nonnegative(),
|
|
40129
|
+
/**
|
|
40130
|
+
* True when the scan in this direction reached the end of the store.
|
|
40131
|
+
* False with fewer than `limit` entries means the budget ran out first —
|
|
40132
|
+
* call again with `nextBefore` to go on.
|
|
40133
|
+
*/
|
|
40134
|
+
done: boolean(),
|
|
40135
|
+
/** True when `cancelRead` ended this slice early. */
|
|
40136
|
+
cancelled: boolean().optional()
|
|
40137
|
+
});
|
|
40138
|
+
var LogReadCapabilitiesSchema = object({
|
|
40139
|
+
/** False ⇒ this destination only ships lines (console, forwarder, an unconfigured Loki). */
|
|
40140
|
+
readable: boolean(),
|
|
40141
|
+
/** Why not, when `readable` is false — rendered next to the source. */
|
|
40142
|
+
reason: string().nullable(),
|
|
40143
|
+
/** Filters the provider applies itself. A false one is applied by nobody. */
|
|
40144
|
+
filters: object({
|
|
40145
|
+
deviceId: boolean(),
|
|
40146
|
+
addonId: boolean(),
|
|
40147
|
+
nodeId: boolean(),
|
|
40148
|
+
tags: boolean(),
|
|
40149
|
+
level: boolean(),
|
|
40150
|
+
text: boolean(),
|
|
40151
|
+
timeRange: boolean()
|
|
40152
|
+
}),
|
|
40153
|
+
/** How far back the store reaches, when the provider knows (days). */
|
|
40154
|
+
retentionDays: number().nullable()
|
|
40155
|
+
});
|
|
40156
|
+
method(LogEntrySchema, _void(), { kind: "mutation" }), optionalMethod(_void(), LogReadCapabilitiesSchema, { auth: "admin" }), optionalMethod(LogReadQuerySchema, LogReadResultSchema, { auth: "admin" }), optionalMethod(object({ requestId: string().min(1).max(64) }), object({ cancelled: boolean() }), {
|
|
40157
|
+
kind: "mutation",
|
|
40158
|
+
auth: "admin"
|
|
40159
|
+
});
|
|
40013
40160
|
/**
|
|
40014
40161
|
* `login-method` — collection cap through which auth addons contribute
|
|
40015
40162
|
* their pre-auth login surfaces to the login page. This is the SINGLE,
|
|
@@ -42565,6 +42712,33 @@ var NcRuleTargetSchema = object({
|
|
|
42565
42712
|
params: record(string(), unknown()).optional()
|
|
42566
42713
|
});
|
|
42567
42714
|
/**
|
|
42715
|
+
* WHAT THE NOTIFICATION'S PICTURE IS (D897) — the ONE media choice of a rule.
|
|
42716
|
+
*
|
|
42717
|
+
* Every mode starts from the same CLEAN source frame of the trigger moment
|
|
42718
|
+
* (keyFrame → sceneFrame → lastSceneFrame, narrowed to the trigger instant and
|
|
42719
|
+
* to the zone that fired the rule) and renders it once at send time:
|
|
42720
|
+
* - `scene-boxes` — the whole scene, the subject outlined thick in the accent
|
|
42721
|
+
* colour and every OTHER track visible at that instant outlined thin, each
|
|
42722
|
+
* labelled with class and confidence ("dog 87%").
|
|
42723
|
+
* - `crop` — the subject cut out of that frame around its box at that instant.
|
|
42724
|
+
* - `clean` — the whole scene with nothing drawn on it.
|
|
42725
|
+
* - `none` — no picture.
|
|
42726
|
+
*
|
|
42727
|
+
* A mode that cannot be honoured (no box at that instant, a photograph with no
|
|
42728
|
+
* tracked subject) ships `clean` and names the reason in the log, per camera.
|
|
42729
|
+
* It replaces the `attach` × `frame` × `zoneCrop` triple, which let one rule
|
|
42730
|
+
* ship a crop on one event and a boxed scene on the next depending on which
|
|
42731
|
+
* stored kind had landed.
|
|
42732
|
+
*/
|
|
42733
|
+
var NcMediaImageSchema = _enum([
|
|
42734
|
+
"scene-boxes",
|
|
42735
|
+
"crop",
|
|
42736
|
+
"clean",
|
|
42737
|
+
"none"
|
|
42738
|
+
]);
|
|
42739
|
+
/**
|
|
42740
|
+
* @deprecated Read only by `normalizeNcMediaPolicy` (D897) — see {@link NcMediaImageSchema}.
|
|
42741
|
+
*
|
|
42568
42742
|
* Media attachment policy (P1 still-image subset).
|
|
42569
42743
|
* - `best` — the best AVAILABLE subject image at dispatch time (D-3).
|
|
42570
42744
|
* - `best-matching` — the media that explains WHY the rule fired: a rule
|
|
@@ -42578,6 +42752,8 @@ var NcRuleTargetSchema = object({
|
|
|
42578
42752
|
* - `none` — no attachment.
|
|
42579
42753
|
*/
|
|
42580
42754
|
/**
|
|
42755
|
+
* @deprecated Read only by `normalizeNcMediaPolicy` (D897) — see {@link NcMediaImageSchema}.
|
|
42756
|
+
*
|
|
42581
42757
|
* WHAT THE PICTURE SHOWS — chosen explicitly, because the implicit ladders
|
|
42582
42758
|
* conflate it with the selection strategy and betray the request: asking for
|
|
42583
42759
|
* the clean scene frame on an object-event owner used to start at
|
|
@@ -42606,16 +42782,29 @@ var NcMediaFrameSchema = _enum([
|
|
|
42606
42782
|
*/
|
|
42607
42783
|
var NcLinkedCameraModeSchema = _enum(["mosaic", "each"]);
|
|
42608
42784
|
var NcMediaPolicySchema = object({
|
|
42785
|
+
/**
|
|
42786
|
+
* The picture — see {@link NcMediaImageSchema}. Absent on a rule nobody has
|
|
42787
|
+
* saved since D897: `normalizeNcMediaPolicy` derives it from the legacy
|
|
42788
|
+
* triple below, at load and at every write, and the store keeps only this.
|
|
42789
|
+
*/
|
|
42790
|
+
image: NcMediaImageSchema.optional(),
|
|
42791
|
+
/**
|
|
42792
|
+
* Draw the zone that FIRED the rule on the picture (`scene-boxes` / `clean`;
|
|
42793
|
+
* a `crop` never shows it). Valid only on a rule whose trigger is a zone —
|
|
42794
|
+
* `conditions.zones` or an occupancy zone — and refused on save otherwise.
|
|
42795
|
+
* Replaces `zoneCrop`.
|
|
42796
|
+
*/
|
|
42797
|
+
showTriggerZone: boolean().optional(),
|
|
42798
|
+
/** @deprecated D897 — accepted from an editor that predates `image`, folded into it on save. */
|
|
42609
42799
|
attach: _enum([
|
|
42610
42800
|
"best",
|
|
42611
42801
|
"best-matching",
|
|
42612
42802
|
"keyFrame",
|
|
42613
42803
|
"none"
|
|
42614
|
-
]).
|
|
42615
|
-
/**
|
|
42804
|
+
]).optional(),
|
|
42805
|
+
/** @deprecated D897 — accepted from an editor that predates `image`, folded into it on save. */
|
|
42616
42806
|
frame: NcMediaFrameSchema.optional(),
|
|
42617
|
-
/**
|
|
42618
|
-
* "show me the ZONE", not the whole scene or the subject crop. */
|
|
42807
|
+
/** @deprecated D897 — folded into `image: 'clean'` + `showTriggerZone` on save. */
|
|
42619
42808
|
zoneCrop: boolean().optional(),
|
|
42620
42809
|
/**
|
|
42621
42810
|
* Also attach a short GIF cut from the stream broker's clip ring around the
|
|
@@ -42787,7 +42976,9 @@ var NcRuleInputSchema = object({
|
|
|
42787
42976
|
* targets.
|
|
42788
42977
|
*/
|
|
42789
42978
|
targetUsers: array(string()).optional(),
|
|
42790
|
-
|
|
42979
|
+
/** Absent = the kind's default picture (`resolveNcMediaImage`): the subject crop for a
|
|
42980
|
+
* detection, the clean scene for a sensor or a sound. Set explicitly on save (D897). */
|
|
42981
|
+
media: NcMediaPolicySchema.default({}),
|
|
42791
42982
|
throttle: NcThrottleSchema.default({
|
|
42792
42983
|
cooldownSec: 60,
|
|
42793
42984
|
scope: "rule-device"
|
|
@@ -43724,13 +43915,37 @@ var NcAlarmModeOpeningsSchema = object({
|
|
|
43724
43915
|
/** Covered devices whose state could not be read (D49): neither open nor closed. */
|
|
43725
43916
|
unknown: array(number().int())
|
|
43726
43917
|
});
|
|
43918
|
+
/**
|
|
43919
|
+
* One alarm INPUT — a (rule, device) pair — the operator bypassed until the
|
|
43920
|
+
* next disarm ("Bypass this input until disarm" on a trigger notification, or
|
|
43921
|
+
* `nc.bypassAlarmInput`). Reported so an armed alarm with a silenced input
|
|
43922
|
+
* never looks fully armed (D62: off must never look like broken).
|
|
43923
|
+
*/
|
|
43924
|
+
var NcAlarmInputBypassViewSchema = object({
|
|
43925
|
+
ruleId: string(),
|
|
43926
|
+
/** The rule's current name (its frozen name when the rule is gone). */
|
|
43927
|
+
ruleName: string(),
|
|
43928
|
+
/** The input: the sensor of the match, else its camera. */
|
|
43929
|
+
deviceId: number().int(),
|
|
43930
|
+
/** The input's current name. */
|
|
43931
|
+
name: string(),
|
|
43932
|
+
/** When it was bypassed (ms epoch). */
|
|
43933
|
+
since: number(),
|
|
43934
|
+
/** Triggers from this input dropped since. */
|
|
43935
|
+
dropped: number().int().min(0)
|
|
43936
|
+
});
|
|
43727
43937
|
var NcAlarmLiveSchema = object({
|
|
43728
43938
|
state: AlarmStateSchema,
|
|
43729
43939
|
/** The mode being armed into (exit delay) or held; null when disarmed. */
|
|
43730
43940
|
targetMode: AlarmArmModeSchema.nullable(),
|
|
43731
43941
|
availableModes: array(AlarmArmModeSchema),
|
|
43732
43942
|
openings: array(NcAlarmModeOpeningsSchema),
|
|
43733
|
-
exclusions: array(NcAlarmExclusionViewSchema)
|
|
43943
|
+
exclusions: array(NcAlarmExclusionViewSchema),
|
|
43944
|
+
/**
|
|
43945
|
+
* Inputs bypassed for the rest of this arm session; cleared on disarm.
|
|
43946
|
+
* Defaulted so an older hub answer still parses (as "none known").
|
|
43947
|
+
*/
|
|
43948
|
+
bypassedInputs: array(NcAlarmInputBypassViewSchema).default([])
|
|
43734
43949
|
});
|
|
43735
43950
|
var NcAlarmConfigSchema = object({
|
|
43736
43951
|
/**
|
|
@@ -65382,7 +65597,19 @@ Object.freeze({
|
|
|
65382
65597
|
addonId: null,
|
|
65383
65598
|
access: "view"
|
|
65384
65599
|
},
|
|
65385
|
-
"logDestination.
|
|
65600
|
+
"logDestination.cancelRead": {
|
|
65601
|
+
capName: "log-destination",
|
|
65602
|
+
capScope: "system",
|
|
65603
|
+
addonId: null,
|
|
65604
|
+
access: "create"
|
|
65605
|
+
},
|
|
65606
|
+
"logDestination.describeRead": {
|
|
65607
|
+
capName: "log-destination",
|
|
65608
|
+
capScope: "system",
|
|
65609
|
+
addonId: null,
|
|
65610
|
+
access: "view"
|
|
65611
|
+
},
|
|
65612
|
+
"logDestination.read": {
|
|
65386
65613
|
capName: "log-destination",
|
|
65387
65614
|
capScope: "system",
|
|
65388
65615
|
addonId: null,
|
|
@@ -71389,6 +71616,11 @@ Object.freeze({
|
|
|
71389
71616
|
form: "single",
|
|
71390
71617
|
optional: false
|
|
71391
71618
|
}],
|
|
71619
|
+
"logDestination.read": [{
|
|
71620
|
+
name: "deviceId",
|
|
71621
|
+
form: "single",
|
|
71622
|
+
optional: true
|
|
71623
|
+
}],
|
|
71392
71624
|
"mediaPlayer.getStatus": [{
|
|
71393
71625
|
name: "deviceId",
|
|
71394
71626
|
form: "single",
|
package/dist/smtp.addon.mjs
CHANGED
|
@@ -5449,7 +5449,7 @@ var ZodIssueCode = {
|
|
|
5449
5449
|
var ZodFirstPartyTypeKind;
|
|
5450
5450
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5451
5451
|
//#endregion
|
|
5452
|
-
//#region ../types/dist/sleep-
|
|
5452
|
+
//#region ../types/dist/sleep-BSuCCFjf.mjs
|
|
5453
5453
|
/**
|
|
5454
5454
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5455
5455
|
* window to float samples (D455).
|
|
@@ -16842,7 +16842,19 @@ var DeviceHistorySubjectSchema = discriminatedUnion("kind", [object({
|
|
|
16842
16842
|
kind: literal("node"),
|
|
16843
16843
|
nodeId: string().min(1)
|
|
16844
16844
|
})]);
|
|
16845
|
+
/**
|
|
16846
|
+
* `enum` stores a STATE as the ordinal of its value in the series' value list
|
|
16847
|
+
* (`DeviceHistorySeriesInfo.values`, append-only, so an ordinal never changes
|
|
16848
|
+
* meaning); a rollup keeps the time spent in each state (`states`).
|
|
16849
|
+
*/
|
|
16845
16850
|
var DeviceHistoryKindSchema = _enum([
|
|
16851
|
+
"gauge",
|
|
16852
|
+
"counter",
|
|
16853
|
+
"boolean",
|
|
16854
|
+
"enum"
|
|
16855
|
+
]);
|
|
16856
|
+
/** What a PRODUCER may declare. `enum` is cap-only: its value list is the cap field's. */
|
|
16857
|
+
var DeviceHistoryProducerKindSchema = _enum([
|
|
16846
16858
|
"gauge",
|
|
16847
16859
|
"counter",
|
|
16848
16860
|
"boolean"
|
|
@@ -16879,7 +16891,13 @@ var SeriesInfoSchema = object({
|
|
|
16879
16891
|
/** `null` is unknown (a `unitFrom` series whose device does not state a unit right now), never a guess. */
|
|
16880
16892
|
unit: string().nullable(),
|
|
16881
16893
|
displayName: string(),
|
|
16882
|
-
source: _enum([
|
|
16894
|
+
source: _enum([
|
|
16895
|
+
"cap",
|
|
16896
|
+
"addon",
|
|
16897
|
+
"derived"
|
|
16898
|
+
]),
|
|
16899
|
+
/** `enum`: the value of each ordinal (index = ordinal); `null` for every other kind. */
|
|
16900
|
+
values: array(string()).readonly().nullable(),
|
|
16883
16901
|
firstTs: number(),
|
|
16884
16902
|
lastTs: number()
|
|
16885
16903
|
});
|
|
@@ -16893,17 +16911,31 @@ var QueryPointSchema = object({
|
|
|
16893
16911
|
twMean: number().nullable(),
|
|
16894
16912
|
min: number(),
|
|
16895
16913
|
max: number(),
|
|
16896
|
-
/** `null` is unknown, never zero (D393). */
|
|
16897
|
-
last: number().nullable()
|
|
16914
|
+
/** `null` is unknown, never zero (D393). For an `enum` series: the ordinal of {@link state}. */
|
|
16915
|
+
last: number().nullable(),
|
|
16916
|
+
/**
|
|
16917
|
+
* The increase over the point: a `counter`'s growth since the previous point
|
|
16918
|
+
* or bucket (a drop is a reset, counted from zero), and for
|
|
16919
|
+
* {@link DEVICE_HISTORY_ENERGY_KEY} the kWh used in the bucket. `null` for
|
|
16920
|
+
* every other kind, and when it cannot be known.
|
|
16921
|
+
*/
|
|
16922
|
+
delta: number().nullable(),
|
|
16923
|
+
/** `enum`: the state in force at the end of the point (the name of `last`); `null` otherwise. */
|
|
16924
|
+
state: string().nullable(),
|
|
16925
|
+
/** `enum` rollup: milliseconds spent in each state inside the bucket; `null` for raw points and other kinds. */
|
|
16926
|
+
states: record(string(), number()).nullable()
|
|
16898
16927
|
});
|
|
16899
16928
|
var QuerySeriesSchema = object({
|
|
16900
16929
|
scope: string(),
|
|
16901
16930
|
/** The last point STRICTLY BEFORE `from` in the chosen tier, so a step chart can start at the held value. */
|
|
16902
16931
|
before: object({
|
|
16903
16932
|
t: number(),
|
|
16904
|
-
value: number().nullable()
|
|
16933
|
+
value: number().nullable(),
|
|
16934
|
+
state: string().nullable()
|
|
16905
16935
|
}).nullable(),
|
|
16906
|
-
points: array(QueryPointSchema).readonly()
|
|
16936
|
+
points: array(QueryPointSchema).readonly(),
|
|
16937
|
+
/** A derived key: the stored key its points were computed from; `null` for a stored series. */
|
|
16938
|
+
derivedFrom: string().nullable()
|
|
16907
16939
|
});
|
|
16908
16940
|
/** The window part of a query, shared by the device and node forms. */
|
|
16909
16941
|
var QueryWindowShape = {
|
|
@@ -16919,6 +16951,23 @@ var QueryResultSchema = object({
|
|
|
16919
16951
|
series: array(QuerySeriesSchema).readonly(),
|
|
16920
16952
|
truncated: boolean()
|
|
16921
16953
|
});
|
|
16954
|
+
/** One read of a batch: a device's key or a node's key (exactly one subject). */
|
|
16955
|
+
var QueryManyItemSchema = union([object({
|
|
16956
|
+
deviceId: number().int(),
|
|
16957
|
+
key: string(),
|
|
16958
|
+
scope: string().optional()
|
|
16959
|
+
}), object({
|
|
16960
|
+
forNodeId: string().min(1),
|
|
16961
|
+
key: string(),
|
|
16962
|
+
scope: string().optional()
|
|
16963
|
+
})]);
|
|
16964
|
+
var QueryManyEntrySchema = discriminatedUnion("ok", [object({
|
|
16965
|
+
ok: literal(true),
|
|
16966
|
+
result: QueryResultSchema
|
|
16967
|
+
}), object({
|
|
16968
|
+
ok: literal(false),
|
|
16969
|
+
error: string()
|
|
16970
|
+
})]);
|
|
16922
16971
|
var TierStatusSchema = object({
|
|
16923
16972
|
tier: DeviceHistoryResolutionSchema,
|
|
16924
16973
|
/** `null` until the first background count answered. */
|
|
@@ -16974,16 +17023,22 @@ var DeviceHistoryStatusSchema = object({
|
|
|
16974
17023
|
lastRefreshAt: number().nullable()
|
|
16975
17024
|
})
|
|
16976
17025
|
});
|
|
16977
|
-
method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly()), method(object({
|
|
17026
|
+
method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly()), method(object({ forNodeId: string().min(1) }), array(SeriesInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
16978
17027
|
deviceId: number().int(),
|
|
16979
17028
|
...QueryWindowShape
|
|
16980
17029
|
}), QueryResultSchema), method(object({
|
|
16981
|
-
|
|
17030
|
+
forNodeId: string().min(1),
|
|
16982
17031
|
...QueryWindowShape
|
|
16983
17032
|
}), QueryResultSchema, { auth: "admin" }), method(object({
|
|
17033
|
+
items: array(QueryManyItemSchema).min(1).max(24),
|
|
17034
|
+
from: QueryWindowShape.from,
|
|
17035
|
+
to: QueryWindowShape.to,
|
|
17036
|
+
resolution: QueryWindowShape.resolution,
|
|
17037
|
+
maxPoints: QueryWindowShape.maxPoints
|
|
17038
|
+
}), object({ results: array(QueryManyEntrySchema).readonly() }), { auth: "admin" }), method(object({
|
|
16984
17039
|
name: string().regex(/^[a-z0-9-]+$/),
|
|
16985
17040
|
subjectKind: _enum(["device", "node"]),
|
|
16986
|
-
kind:
|
|
17041
|
+
kind: DeviceHistoryProducerKindSchema,
|
|
16987
17042
|
unit: string().optional(),
|
|
16988
17043
|
displayName: string().min(1),
|
|
16989
17044
|
ingest: _enum(["points", "buckets"])
|
|
@@ -40000,14 +40055,106 @@ var LogEntrySchema = object({
|
|
|
40000
40055
|
meta: record(string(), unknown()).optional(),
|
|
40001
40056
|
tags: record(string(), string()).optional()
|
|
40002
40057
|
});
|
|
40003
|
-
|
|
40004
|
-
|
|
40058
|
+
/**
|
|
40059
|
+
* A history READ against one destination (D898).
|
|
40060
|
+
*
|
|
40061
|
+
* Every filter is applied by the PROVIDER, before the limit — a filter the
|
|
40062
|
+
* browser applied after the limit is what made a rare device's lines
|
|
40063
|
+
* unreachable behind a busy one's. `before` / `after` are cursors the provider
|
|
40064
|
+
* minted (opaque to everyone else): a file position for the rotated files, a
|
|
40065
|
+
* nanosecond timestamp for Loki.
|
|
40066
|
+
*
|
|
40067
|
+
* A read is BOUNDED by `budgetMs`: a filter that matches nothing on a 30-day
|
|
40068
|
+
* store answers `done: false` with the cursor it reached and the bytes it
|
|
40069
|
+
* scanned, and the caller decides whether to go on. That is what makes a long
|
|
40070
|
+
* scan show progress and stop when asked — `cancelRead` ends the slice in
|
|
40071
|
+
* flight, and not asking for the next slice ends the scan.
|
|
40072
|
+
*/
|
|
40073
|
+
var LogReadQuerySchema = object({
|
|
40074
|
+
/** Correlates `cancelRead`. Caller-chosen, unique per in-flight read. */
|
|
40075
|
+
requestId: string().min(1).max(64).optional(),
|
|
40076
|
+
/** The device the line is about (`tags.deviceId`, numeric). */
|
|
40077
|
+
deviceId: number().int().optional(),
|
|
40078
|
+
/**
|
|
40079
|
+
* The emitting addon — bare manifest id; `@<version>` / `::<sub>` suffixes
|
|
40080
|
+
* match. Not `addonId`: a cap router reads that name as "which provider".
|
|
40081
|
+
*/
|
|
40082
|
+
fromAddonId: string().min(1).max(200).optional(),
|
|
40083
|
+
/**
|
|
40084
|
+
* The emitting node: matches the agent that emitted the line, the node
|
|
40085
|
+
* itself, or a worker under it (`<agent>/<runner>`) — the `agentId`
|
|
40086
|
+
* semantics of `matchesLogTags`. Not `nodeId`: a cap router reads that
|
|
40087
|
+
* name as "which node's provider".
|
|
40088
|
+
*/
|
|
40089
|
+
fromNodeId: string().min(1).max(200).optional(),
|
|
40090
|
+
/** Any other tag, exact match (AND). */
|
|
40091
|
+
tags: record(string(), union([string(), number()])).optional(),
|
|
40092
|
+
/** Severity FLOOR: this level and above. */
|
|
40005
40093
|
level: LogLevelSchema.optional(),
|
|
40006
|
-
|
|
40007
|
-
|
|
40008
|
-
|
|
40009
|
-
|
|
40010
|
-
|
|
40094
|
+
/** Case-insensitive substring over message, scope, tag values and meta values. */
|
|
40095
|
+
text: string().min(1).max(200).optional(),
|
|
40096
|
+
/** Epoch ms, inclusive. */
|
|
40097
|
+
since: number().optional(),
|
|
40098
|
+
/** Epoch ms, inclusive. */
|
|
40099
|
+
until: number().optional(),
|
|
40100
|
+
/** Older than this cursor (exclusive). Absent with `after` absent ⇒ from the newest. */
|
|
40101
|
+
before: string().min(1).max(1024).optional(),
|
|
40102
|
+
/** Newer than this cursor (exclusive). */
|
|
40103
|
+
after: string().min(1).max(1024).optional(),
|
|
40104
|
+
limit: number().int().min(1).max(1e3).optional(),
|
|
40105
|
+
/** Wall-clock bound of this slice. The provider caps it. */
|
|
40106
|
+
budgetMs: number().int().min(50).max(1e4).optional()
|
|
40107
|
+
});
|
|
40108
|
+
var LogReadResultSchema = object({
|
|
40109
|
+
/** Newest first. */
|
|
40110
|
+
entries: array(object({
|
|
40111
|
+
/** `<bootId>.<seq>` minted by the emitting LogManager — the dedupe key. */
|
|
40112
|
+
id: string().optional(),
|
|
40113
|
+
/** Epoch ms. */
|
|
40114
|
+
timestamp: number(),
|
|
40115
|
+
level: LogLevelSchema,
|
|
40116
|
+
scope: string().optional(),
|
|
40117
|
+
message: string(),
|
|
40118
|
+
tags: record(string(), union([string(), number()])).optional(),
|
|
40119
|
+
meta: record(string(), unknown()).optional()
|
|
40120
|
+
})),
|
|
40121
|
+
/** Pass as `before` for the next older page; null when nothing older exists. */
|
|
40122
|
+
nextBefore: string().nullable(),
|
|
40123
|
+
/** Pass as `after` to read what arrived since; null when unknown. */
|
|
40124
|
+
nextAfter: string().nullable(),
|
|
40125
|
+
/** Bytes this slice read (files) or received (remote). Progress, not a promise. */
|
|
40126
|
+
scannedBytes: number().int().nonnegative(),
|
|
40127
|
+
/**
|
|
40128
|
+
* True when the scan in this direction reached the end of the store.
|
|
40129
|
+
* False with fewer than `limit` entries means the budget ran out first —
|
|
40130
|
+
* call again with `nextBefore` to go on.
|
|
40131
|
+
*/
|
|
40132
|
+
done: boolean(),
|
|
40133
|
+
/** True when `cancelRead` ended this slice early. */
|
|
40134
|
+
cancelled: boolean().optional()
|
|
40135
|
+
});
|
|
40136
|
+
var LogReadCapabilitiesSchema = object({
|
|
40137
|
+
/** False ⇒ this destination only ships lines (console, forwarder, an unconfigured Loki). */
|
|
40138
|
+
readable: boolean(),
|
|
40139
|
+
/** Why not, when `readable` is false — rendered next to the source. */
|
|
40140
|
+
reason: string().nullable(),
|
|
40141
|
+
/** Filters the provider applies itself. A false one is applied by nobody. */
|
|
40142
|
+
filters: object({
|
|
40143
|
+
deviceId: boolean(),
|
|
40144
|
+
addonId: boolean(),
|
|
40145
|
+
nodeId: boolean(),
|
|
40146
|
+
tags: boolean(),
|
|
40147
|
+
level: boolean(),
|
|
40148
|
+
text: boolean(),
|
|
40149
|
+
timeRange: boolean()
|
|
40150
|
+
}),
|
|
40151
|
+
/** How far back the store reaches, when the provider knows (days). */
|
|
40152
|
+
retentionDays: number().nullable()
|
|
40153
|
+
});
|
|
40154
|
+
method(LogEntrySchema, _void(), { kind: "mutation" }), optionalMethod(_void(), LogReadCapabilitiesSchema, { auth: "admin" }), optionalMethod(LogReadQuerySchema, LogReadResultSchema, { auth: "admin" }), optionalMethod(object({ requestId: string().min(1).max(64) }), object({ cancelled: boolean() }), {
|
|
40155
|
+
kind: "mutation",
|
|
40156
|
+
auth: "admin"
|
|
40157
|
+
});
|
|
40011
40158
|
/**
|
|
40012
40159
|
* `login-method` — collection cap through which auth addons contribute
|
|
40013
40160
|
* their pre-auth login surfaces to the login page. This is the SINGLE,
|
|
@@ -42563,6 +42710,33 @@ var NcRuleTargetSchema = object({
|
|
|
42563
42710
|
params: record(string(), unknown()).optional()
|
|
42564
42711
|
});
|
|
42565
42712
|
/**
|
|
42713
|
+
* WHAT THE NOTIFICATION'S PICTURE IS (D897) — the ONE media choice of a rule.
|
|
42714
|
+
*
|
|
42715
|
+
* Every mode starts from the same CLEAN source frame of the trigger moment
|
|
42716
|
+
* (keyFrame → sceneFrame → lastSceneFrame, narrowed to the trigger instant and
|
|
42717
|
+
* to the zone that fired the rule) and renders it once at send time:
|
|
42718
|
+
* - `scene-boxes` — the whole scene, the subject outlined thick in the accent
|
|
42719
|
+
* colour and every OTHER track visible at that instant outlined thin, each
|
|
42720
|
+
* labelled with class and confidence ("dog 87%").
|
|
42721
|
+
* - `crop` — the subject cut out of that frame around its box at that instant.
|
|
42722
|
+
* - `clean` — the whole scene with nothing drawn on it.
|
|
42723
|
+
* - `none` — no picture.
|
|
42724
|
+
*
|
|
42725
|
+
* A mode that cannot be honoured (no box at that instant, a photograph with no
|
|
42726
|
+
* tracked subject) ships `clean` and names the reason in the log, per camera.
|
|
42727
|
+
* It replaces the `attach` × `frame` × `zoneCrop` triple, which let one rule
|
|
42728
|
+
* ship a crop on one event and a boxed scene on the next depending on which
|
|
42729
|
+
* stored kind had landed.
|
|
42730
|
+
*/
|
|
42731
|
+
var NcMediaImageSchema = _enum([
|
|
42732
|
+
"scene-boxes",
|
|
42733
|
+
"crop",
|
|
42734
|
+
"clean",
|
|
42735
|
+
"none"
|
|
42736
|
+
]);
|
|
42737
|
+
/**
|
|
42738
|
+
* @deprecated Read only by `normalizeNcMediaPolicy` (D897) — see {@link NcMediaImageSchema}.
|
|
42739
|
+
*
|
|
42566
42740
|
* Media attachment policy (P1 still-image subset).
|
|
42567
42741
|
* - `best` — the best AVAILABLE subject image at dispatch time (D-3).
|
|
42568
42742
|
* - `best-matching` — the media that explains WHY the rule fired: a rule
|
|
@@ -42576,6 +42750,8 @@ var NcRuleTargetSchema = object({
|
|
|
42576
42750
|
* - `none` — no attachment.
|
|
42577
42751
|
*/
|
|
42578
42752
|
/**
|
|
42753
|
+
* @deprecated Read only by `normalizeNcMediaPolicy` (D897) — see {@link NcMediaImageSchema}.
|
|
42754
|
+
*
|
|
42579
42755
|
* WHAT THE PICTURE SHOWS — chosen explicitly, because the implicit ladders
|
|
42580
42756
|
* conflate it with the selection strategy and betray the request: asking for
|
|
42581
42757
|
* the clean scene frame on an object-event owner used to start at
|
|
@@ -42604,16 +42780,29 @@ var NcMediaFrameSchema = _enum([
|
|
|
42604
42780
|
*/
|
|
42605
42781
|
var NcLinkedCameraModeSchema = _enum(["mosaic", "each"]);
|
|
42606
42782
|
var NcMediaPolicySchema = object({
|
|
42783
|
+
/**
|
|
42784
|
+
* The picture — see {@link NcMediaImageSchema}. Absent on a rule nobody has
|
|
42785
|
+
* saved since D897: `normalizeNcMediaPolicy` derives it from the legacy
|
|
42786
|
+
* triple below, at load and at every write, and the store keeps only this.
|
|
42787
|
+
*/
|
|
42788
|
+
image: NcMediaImageSchema.optional(),
|
|
42789
|
+
/**
|
|
42790
|
+
* Draw the zone that FIRED the rule on the picture (`scene-boxes` / `clean`;
|
|
42791
|
+
* a `crop` never shows it). Valid only on a rule whose trigger is a zone —
|
|
42792
|
+
* `conditions.zones` or an occupancy zone — and refused on save otherwise.
|
|
42793
|
+
* Replaces `zoneCrop`.
|
|
42794
|
+
*/
|
|
42795
|
+
showTriggerZone: boolean().optional(),
|
|
42796
|
+
/** @deprecated D897 — accepted from an editor that predates `image`, folded into it on save. */
|
|
42607
42797
|
attach: _enum([
|
|
42608
42798
|
"best",
|
|
42609
42799
|
"best-matching",
|
|
42610
42800
|
"keyFrame",
|
|
42611
42801
|
"none"
|
|
42612
|
-
]).
|
|
42613
|
-
/**
|
|
42802
|
+
]).optional(),
|
|
42803
|
+
/** @deprecated D897 — accepted from an editor that predates `image`, folded into it on save. */
|
|
42614
42804
|
frame: NcMediaFrameSchema.optional(),
|
|
42615
|
-
/**
|
|
42616
|
-
* "show me the ZONE", not the whole scene or the subject crop. */
|
|
42805
|
+
/** @deprecated D897 — folded into `image: 'clean'` + `showTriggerZone` on save. */
|
|
42617
42806
|
zoneCrop: boolean().optional(),
|
|
42618
42807
|
/**
|
|
42619
42808
|
* Also attach a short GIF cut from the stream broker's clip ring around the
|
|
@@ -42785,7 +42974,9 @@ var NcRuleInputSchema = object({
|
|
|
42785
42974
|
* targets.
|
|
42786
42975
|
*/
|
|
42787
42976
|
targetUsers: array(string()).optional(),
|
|
42788
|
-
|
|
42977
|
+
/** Absent = the kind's default picture (`resolveNcMediaImage`): the subject crop for a
|
|
42978
|
+
* detection, the clean scene for a sensor or a sound. Set explicitly on save (D897). */
|
|
42979
|
+
media: NcMediaPolicySchema.default({}),
|
|
42789
42980
|
throttle: NcThrottleSchema.default({
|
|
42790
42981
|
cooldownSec: 60,
|
|
42791
42982
|
scope: "rule-device"
|
|
@@ -43722,13 +43913,37 @@ var NcAlarmModeOpeningsSchema = object({
|
|
|
43722
43913
|
/** Covered devices whose state could not be read (D49): neither open nor closed. */
|
|
43723
43914
|
unknown: array(number().int())
|
|
43724
43915
|
});
|
|
43916
|
+
/**
|
|
43917
|
+
* One alarm INPUT — a (rule, device) pair — the operator bypassed until the
|
|
43918
|
+
* next disarm ("Bypass this input until disarm" on a trigger notification, or
|
|
43919
|
+
* `nc.bypassAlarmInput`). Reported so an armed alarm with a silenced input
|
|
43920
|
+
* never looks fully armed (D62: off must never look like broken).
|
|
43921
|
+
*/
|
|
43922
|
+
var NcAlarmInputBypassViewSchema = object({
|
|
43923
|
+
ruleId: string(),
|
|
43924
|
+
/** The rule's current name (its frozen name when the rule is gone). */
|
|
43925
|
+
ruleName: string(),
|
|
43926
|
+
/** The input: the sensor of the match, else its camera. */
|
|
43927
|
+
deviceId: number().int(),
|
|
43928
|
+
/** The input's current name. */
|
|
43929
|
+
name: string(),
|
|
43930
|
+
/** When it was bypassed (ms epoch). */
|
|
43931
|
+
since: number(),
|
|
43932
|
+
/** Triggers from this input dropped since. */
|
|
43933
|
+
dropped: number().int().min(0)
|
|
43934
|
+
});
|
|
43725
43935
|
var NcAlarmLiveSchema = object({
|
|
43726
43936
|
state: AlarmStateSchema,
|
|
43727
43937
|
/** The mode being armed into (exit delay) or held; null when disarmed. */
|
|
43728
43938
|
targetMode: AlarmArmModeSchema.nullable(),
|
|
43729
43939
|
availableModes: array(AlarmArmModeSchema),
|
|
43730
43940
|
openings: array(NcAlarmModeOpeningsSchema),
|
|
43731
|
-
exclusions: array(NcAlarmExclusionViewSchema)
|
|
43941
|
+
exclusions: array(NcAlarmExclusionViewSchema),
|
|
43942
|
+
/**
|
|
43943
|
+
* Inputs bypassed for the rest of this arm session; cleared on disarm.
|
|
43944
|
+
* Defaulted so an older hub answer still parses (as "none known").
|
|
43945
|
+
*/
|
|
43946
|
+
bypassedInputs: array(NcAlarmInputBypassViewSchema).default([])
|
|
43732
43947
|
});
|
|
43733
43948
|
var NcAlarmConfigSchema = object({
|
|
43734
43949
|
/**
|
|
@@ -65380,7 +65595,19 @@ Object.freeze({
|
|
|
65380
65595
|
addonId: null,
|
|
65381
65596
|
access: "view"
|
|
65382
65597
|
},
|
|
65383
|
-
"logDestination.
|
|
65598
|
+
"logDestination.cancelRead": {
|
|
65599
|
+
capName: "log-destination",
|
|
65600
|
+
capScope: "system",
|
|
65601
|
+
addonId: null,
|
|
65602
|
+
access: "create"
|
|
65603
|
+
},
|
|
65604
|
+
"logDestination.describeRead": {
|
|
65605
|
+
capName: "log-destination",
|
|
65606
|
+
capScope: "system",
|
|
65607
|
+
addonId: null,
|
|
65608
|
+
access: "view"
|
|
65609
|
+
},
|
|
65610
|
+
"logDestination.read": {
|
|
65384
65611
|
capName: "log-destination",
|
|
65385
65612
|
capScope: "system",
|
|
65386
65613
|
addonId: null,
|
|
@@ -71387,6 +71614,11 @@ Object.freeze({
|
|
|
71387
71614
|
form: "single",
|
|
71388
71615
|
optional: false
|
|
71389
71616
|
}],
|
|
71617
|
+
"logDestination.read": [{
|
|
71618
|
+
name: "deviceId",
|
|
71619
|
+
form: "single",
|
|
71620
|
+
optional: true
|
|
71621
|
+
}],
|
|
71390
71622
|
"mediaPlayer.getStatus": [{
|
|
71391
71623
|
name: "deviceId",
|
|
71392
71624
|
form: "single",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-smtp-nodemailer",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.127",
|
|
4
4
|
"description": "SMTP email provider addon for CamStack — wraps `nodemailer` and registers a `smtp-provider` cap collection entry. Used by notifier addons.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|