@camstack/addon-provider-bosch 0.1.5 → 0.1.7
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/{account-integration-offline-DW2D0vf8.mjs → account-integration-offline-CzuH3BBe.mjs} +1 -1
- package/dist/{account-integration-offline-BhjIPfv5.js → account-integration-offline-DphhJEuL.js} +1 -1
- package/dist/{dist-DNznrlG_.mjs → dist-Bq7pq5mZ.mjs} +348 -41
- package/dist/{dist-CIIror0W.js → dist-DabGJIyi.js} +348 -41
- package/dist/home-connect/addon.js +42 -14
- package/dist/home-connect/addon.mjs +42 -14
- package/dist/homecom/addon.js +2 -2
- package/dist/homecom/addon.mjs +2 -2
- package/dist/shc/addon.js +1 -1
- package/dist/shc/addon.mjs +1 -1
- package/package.json +1 -1
|
@@ -5414,7 +5414,7 @@ var ZodIssueCode = {
|
|
|
5414
5414
|
var ZodFirstPartyTypeKind;
|
|
5415
5415
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5416
5416
|
//#endregion
|
|
5417
|
-
//#region ../types/dist/sleep-
|
|
5417
|
+
//#region ../types/dist/sleep-BSuCCFjf.mjs
|
|
5418
5418
|
/**
|
|
5419
5419
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5420
5420
|
* window to float samples (D455).
|
|
@@ -17020,7 +17020,19 @@ var DeviceHistorySubjectSchema = discriminatedUnion("kind", [object({
|
|
|
17020
17020
|
kind: literal("node"),
|
|
17021
17021
|
nodeId: string().min(1)
|
|
17022
17022
|
})]);
|
|
17023
|
+
/**
|
|
17024
|
+
* `enum` stores a STATE as the ordinal of its value in the series' value list
|
|
17025
|
+
* (`DeviceHistorySeriesInfo.values`, append-only, so an ordinal never changes
|
|
17026
|
+
* meaning); a rollup keeps the time spent in each state (`states`).
|
|
17027
|
+
*/
|
|
17023
17028
|
var DeviceHistoryKindSchema = _enum([
|
|
17029
|
+
"gauge",
|
|
17030
|
+
"counter",
|
|
17031
|
+
"boolean",
|
|
17032
|
+
"enum"
|
|
17033
|
+
]);
|
|
17034
|
+
/** What a PRODUCER may declare. `enum` is cap-only: its value list is the cap field's. */
|
|
17035
|
+
var DeviceHistoryProducerKindSchema = _enum([
|
|
17024
17036
|
"gauge",
|
|
17025
17037
|
"counter",
|
|
17026
17038
|
"boolean"
|
|
@@ -17057,7 +17069,13 @@ var SeriesInfoSchema = object({
|
|
|
17057
17069
|
/** `null` is unknown (a `unitFrom` series whose device does not state a unit right now), never a guess. */
|
|
17058
17070
|
unit: string().nullable(),
|
|
17059
17071
|
displayName: string(),
|
|
17060
|
-
source: _enum([
|
|
17072
|
+
source: _enum([
|
|
17073
|
+
"cap",
|
|
17074
|
+
"addon",
|
|
17075
|
+
"derived"
|
|
17076
|
+
]),
|
|
17077
|
+
/** `enum`: the value of each ordinal (index = ordinal); `null` for every other kind. */
|
|
17078
|
+
values: array(string()).readonly().nullable(),
|
|
17061
17079
|
firstTs: number(),
|
|
17062
17080
|
lastTs: number()
|
|
17063
17081
|
});
|
|
@@ -17071,17 +17089,31 @@ var QueryPointSchema = object({
|
|
|
17071
17089
|
twMean: number().nullable(),
|
|
17072
17090
|
min: number(),
|
|
17073
17091
|
max: number(),
|
|
17074
|
-
/** `null` is unknown, never zero (D393). */
|
|
17075
|
-
last: number().nullable()
|
|
17092
|
+
/** `null` is unknown, never zero (D393). For an `enum` series: the ordinal of {@link state}. */
|
|
17093
|
+
last: number().nullable(),
|
|
17094
|
+
/**
|
|
17095
|
+
* The increase over the point: a `counter`'s growth since the previous point
|
|
17096
|
+
* or bucket (a drop is a reset, counted from zero), and for
|
|
17097
|
+
* {@link DEVICE_HISTORY_ENERGY_KEY} the kWh used in the bucket. `null` for
|
|
17098
|
+
* every other kind, and when it cannot be known.
|
|
17099
|
+
*/
|
|
17100
|
+
delta: number().nullable(),
|
|
17101
|
+
/** `enum`: the state in force at the end of the point (the name of `last`); `null` otherwise. */
|
|
17102
|
+
state: string().nullable(),
|
|
17103
|
+
/** `enum` rollup: milliseconds spent in each state inside the bucket; `null` for raw points and other kinds. */
|
|
17104
|
+
states: record(string(), number()).nullable()
|
|
17076
17105
|
});
|
|
17077
17106
|
var QuerySeriesSchema = object({
|
|
17078
17107
|
scope: string(),
|
|
17079
17108
|
/** The last point STRICTLY BEFORE `from` in the chosen tier, so a step chart can start at the held value. */
|
|
17080
17109
|
before: object({
|
|
17081
17110
|
t: number(),
|
|
17082
|
-
value: number().nullable()
|
|
17111
|
+
value: number().nullable(),
|
|
17112
|
+
state: string().nullable()
|
|
17083
17113
|
}).nullable(),
|
|
17084
|
-
points: array(QueryPointSchema).readonly()
|
|
17114
|
+
points: array(QueryPointSchema).readonly(),
|
|
17115
|
+
/** A derived key: the stored key its points were computed from; `null` for a stored series. */
|
|
17116
|
+
derivedFrom: string().nullable()
|
|
17085
17117
|
});
|
|
17086
17118
|
/** The window part of a query, shared by the device and node forms. */
|
|
17087
17119
|
var QueryWindowShape = {
|
|
@@ -17097,6 +17129,23 @@ var QueryResultSchema = object({
|
|
|
17097
17129
|
series: array(QuerySeriesSchema).readonly(),
|
|
17098
17130
|
truncated: boolean()
|
|
17099
17131
|
});
|
|
17132
|
+
/** One read of a batch: a device's key or a node's key (exactly one subject). */
|
|
17133
|
+
var QueryManyItemSchema = union([object({
|
|
17134
|
+
deviceId: number().int(),
|
|
17135
|
+
key: string(),
|
|
17136
|
+
scope: string().optional()
|
|
17137
|
+
}), object({
|
|
17138
|
+
forNodeId: string().min(1),
|
|
17139
|
+
key: string(),
|
|
17140
|
+
scope: string().optional()
|
|
17141
|
+
})]);
|
|
17142
|
+
var QueryManyEntrySchema = discriminatedUnion("ok", [object({
|
|
17143
|
+
ok: literal(true),
|
|
17144
|
+
result: QueryResultSchema
|
|
17145
|
+
}), object({
|
|
17146
|
+
ok: literal(false),
|
|
17147
|
+
error: string()
|
|
17148
|
+
})]);
|
|
17100
17149
|
var TierStatusSchema = object({
|
|
17101
17150
|
tier: DeviceHistoryResolutionSchema,
|
|
17102
17151
|
/** `null` until the first background count answered. */
|
|
@@ -17152,16 +17201,22 @@ var DeviceHistoryStatusSchema = object({
|
|
|
17152
17201
|
lastRefreshAt: number().nullable()
|
|
17153
17202
|
})
|
|
17154
17203
|
});
|
|
17155
|
-
method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly()), method(object({
|
|
17204
|
+
method(object({ deviceId: number().int() }), array(SeriesInfoSchema).readonly()), method(object({ forNodeId: string().min(1) }), array(SeriesInfoSchema).readonly(), { auth: "admin" }), method(object({
|
|
17156
17205
|
deviceId: number().int(),
|
|
17157
17206
|
...QueryWindowShape
|
|
17158
17207
|
}), QueryResultSchema), method(object({
|
|
17159
|
-
|
|
17208
|
+
forNodeId: string().min(1),
|
|
17160
17209
|
...QueryWindowShape
|
|
17161
17210
|
}), QueryResultSchema, { auth: "admin" }), method(object({
|
|
17211
|
+
items: array(QueryManyItemSchema).min(1).max(24),
|
|
17212
|
+
from: QueryWindowShape.from,
|
|
17213
|
+
to: QueryWindowShape.to,
|
|
17214
|
+
resolution: QueryWindowShape.resolution,
|
|
17215
|
+
maxPoints: QueryWindowShape.maxPoints
|
|
17216
|
+
}), object({ results: array(QueryManyEntrySchema).readonly() }), { auth: "admin" }), method(object({
|
|
17162
17217
|
name: string().regex(/^[a-z0-9-]+$/),
|
|
17163
17218
|
subjectKind: _enum(["device", "node"]),
|
|
17164
|
-
kind:
|
|
17219
|
+
kind: DeviceHistoryProducerKindSchema,
|
|
17165
17220
|
unit: string().optional(),
|
|
17166
17221
|
displayName: string().min(1),
|
|
17167
17222
|
ingest: _enum(["points", "buckets"])
|
|
@@ -40387,14 +40442,106 @@ var LogEntrySchema = object({
|
|
|
40387
40442
|
meta: record(string(), unknown()).optional(),
|
|
40388
40443
|
tags: record(string(), string()).optional()
|
|
40389
40444
|
});
|
|
40390
|
-
|
|
40391
|
-
|
|
40445
|
+
/**
|
|
40446
|
+
* A history READ against one destination (D898).
|
|
40447
|
+
*
|
|
40448
|
+
* Every filter is applied by the PROVIDER, before the limit — a filter the
|
|
40449
|
+
* browser applied after the limit is what made a rare device's lines
|
|
40450
|
+
* unreachable behind a busy one's. `before` / `after` are cursors the provider
|
|
40451
|
+
* minted (opaque to everyone else): a file position for the rotated files, a
|
|
40452
|
+
* nanosecond timestamp for Loki.
|
|
40453
|
+
*
|
|
40454
|
+
* A read is BOUNDED by `budgetMs`: a filter that matches nothing on a 30-day
|
|
40455
|
+
* store answers `done: false` with the cursor it reached and the bytes it
|
|
40456
|
+
* scanned, and the caller decides whether to go on. That is what makes a long
|
|
40457
|
+
* scan show progress and stop when asked — `cancelRead` ends the slice in
|
|
40458
|
+
* flight, and not asking for the next slice ends the scan.
|
|
40459
|
+
*/
|
|
40460
|
+
var LogReadQuerySchema = object({
|
|
40461
|
+
/** Correlates `cancelRead`. Caller-chosen, unique per in-flight read. */
|
|
40462
|
+
requestId: string().min(1).max(64).optional(),
|
|
40463
|
+
/** The device the line is about (`tags.deviceId`, numeric). */
|
|
40464
|
+
deviceId: number().int().optional(),
|
|
40465
|
+
/**
|
|
40466
|
+
* The emitting addon — bare manifest id; `@<version>` / `::<sub>` suffixes
|
|
40467
|
+
* match. Not `addonId`: a cap router reads that name as "which provider".
|
|
40468
|
+
*/
|
|
40469
|
+
fromAddonId: string().min(1).max(200).optional(),
|
|
40470
|
+
/**
|
|
40471
|
+
* The emitting node: matches the agent that emitted the line, the node
|
|
40472
|
+
* itself, or a worker under it (`<agent>/<runner>`) — the `agentId`
|
|
40473
|
+
* semantics of `matchesLogTags`. Not `nodeId`: a cap router reads that
|
|
40474
|
+
* name as "which node's provider".
|
|
40475
|
+
*/
|
|
40476
|
+
fromNodeId: string().min(1).max(200).optional(),
|
|
40477
|
+
/** Any other tag, exact match (AND). */
|
|
40478
|
+
tags: record(string(), union([string(), number()])).optional(),
|
|
40479
|
+
/** Severity FLOOR: this level and above. */
|
|
40392
40480
|
level: LogLevelSchema.optional(),
|
|
40393
|
-
|
|
40394
|
-
|
|
40395
|
-
|
|
40396
|
-
|
|
40397
|
-
|
|
40481
|
+
/** Case-insensitive substring over message, scope, tag values and meta values. */
|
|
40482
|
+
text: string().min(1).max(200).optional(),
|
|
40483
|
+
/** Epoch ms, inclusive. */
|
|
40484
|
+
since: number().optional(),
|
|
40485
|
+
/** Epoch ms, inclusive. */
|
|
40486
|
+
until: number().optional(),
|
|
40487
|
+
/** Older than this cursor (exclusive). Absent with `after` absent ⇒ from the newest. */
|
|
40488
|
+
before: string().min(1).max(1024).optional(),
|
|
40489
|
+
/** Newer than this cursor (exclusive). */
|
|
40490
|
+
after: string().min(1).max(1024).optional(),
|
|
40491
|
+
limit: number().int().min(1).max(1e3).optional(),
|
|
40492
|
+
/** Wall-clock bound of this slice. The provider caps it. */
|
|
40493
|
+
budgetMs: number().int().min(50).max(1e4).optional()
|
|
40494
|
+
});
|
|
40495
|
+
var LogReadResultSchema = object({
|
|
40496
|
+
/** Newest first. */
|
|
40497
|
+
entries: array(object({
|
|
40498
|
+
/** `<bootId>.<seq>` minted by the emitting LogManager — the dedupe key. */
|
|
40499
|
+
id: string().optional(),
|
|
40500
|
+
/** Epoch ms. */
|
|
40501
|
+
timestamp: number(),
|
|
40502
|
+
level: LogLevelSchema,
|
|
40503
|
+
scope: string().optional(),
|
|
40504
|
+
message: string(),
|
|
40505
|
+
tags: record(string(), union([string(), number()])).optional(),
|
|
40506
|
+
meta: record(string(), unknown()).optional()
|
|
40507
|
+
})),
|
|
40508
|
+
/** Pass as `before` for the next older page; null when nothing older exists. */
|
|
40509
|
+
nextBefore: string().nullable(),
|
|
40510
|
+
/** Pass as `after` to read what arrived since; null when unknown. */
|
|
40511
|
+
nextAfter: string().nullable(),
|
|
40512
|
+
/** Bytes this slice read (files) or received (remote). Progress, not a promise. */
|
|
40513
|
+
scannedBytes: number().int().nonnegative(),
|
|
40514
|
+
/**
|
|
40515
|
+
* True when the scan in this direction reached the end of the store.
|
|
40516
|
+
* False with fewer than `limit` entries means the budget ran out first —
|
|
40517
|
+
* call again with `nextBefore` to go on.
|
|
40518
|
+
*/
|
|
40519
|
+
done: boolean(),
|
|
40520
|
+
/** True when `cancelRead` ended this slice early. */
|
|
40521
|
+
cancelled: boolean().optional()
|
|
40522
|
+
});
|
|
40523
|
+
var LogReadCapabilitiesSchema = object({
|
|
40524
|
+
/** False ⇒ this destination only ships lines (console, forwarder, an unconfigured Loki). */
|
|
40525
|
+
readable: boolean(),
|
|
40526
|
+
/** Why not, when `readable` is false — rendered next to the source. */
|
|
40527
|
+
reason: string().nullable(),
|
|
40528
|
+
/** Filters the provider applies itself. A false one is applied by nobody. */
|
|
40529
|
+
filters: object({
|
|
40530
|
+
deviceId: boolean(),
|
|
40531
|
+
addonId: boolean(),
|
|
40532
|
+
nodeId: boolean(),
|
|
40533
|
+
tags: boolean(),
|
|
40534
|
+
level: boolean(),
|
|
40535
|
+
text: boolean(),
|
|
40536
|
+
timeRange: boolean()
|
|
40537
|
+
}),
|
|
40538
|
+
/** How far back the store reaches, when the provider knows (days). */
|
|
40539
|
+
retentionDays: number().nullable()
|
|
40540
|
+
});
|
|
40541
|
+
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() }), {
|
|
40542
|
+
kind: "mutation",
|
|
40543
|
+
auth: "admin"
|
|
40544
|
+
});
|
|
40398
40545
|
/**
|
|
40399
40546
|
* `login-method` — collection cap through which auth addons contribute
|
|
40400
40547
|
* their pre-auth login surfaces to the login page. This is the SINGLE,
|
|
@@ -42112,9 +42259,11 @@ var alarmPanelCapability = {
|
|
|
42112
42259
|
*/
|
|
42113
42260
|
durability: "restored",
|
|
42114
42261
|
/**
|
|
42115
|
-
* History (D850):
|
|
42262
|
+
* History (D850): the panel's lifecycle state as an `enum` series —
|
|
42263
|
+
* change-only, no floor, so an `arming -> pending -> triggered` sequence of a
|
|
42264
|
+
* few seconds keeps every step. Who armed it stays in the events ledger.
|
|
42116
42265
|
*/
|
|
42117
|
-
history: "
|
|
42266
|
+
history: { fields: { state: { kind: "enum" } } },
|
|
42118
42267
|
/** Clock fields: written, but excluded from the compare that decides
|
|
42119
42268
|
* whether persisting is worth a SQLite commit. */
|
|
42120
42269
|
volatileStateFields: ["lastChangedAt"]
|
|
@@ -42992,6 +43141,33 @@ var NcRuleTargetSchema = object({
|
|
|
42992
43141
|
params: record(string(), unknown()).optional()
|
|
42993
43142
|
});
|
|
42994
43143
|
/**
|
|
43144
|
+
* WHAT THE NOTIFICATION'S PICTURE IS (D897) — the ONE media choice of a rule.
|
|
43145
|
+
*
|
|
43146
|
+
* Every mode starts from the same CLEAN source frame of the trigger moment
|
|
43147
|
+
* (keyFrame → sceneFrame → lastSceneFrame, narrowed to the trigger instant and
|
|
43148
|
+
* to the zone that fired the rule) and renders it once at send time:
|
|
43149
|
+
* - `scene-boxes` — the whole scene, the subject outlined thick in the accent
|
|
43150
|
+
* colour and every OTHER track visible at that instant outlined thin, each
|
|
43151
|
+
* labelled with class and confidence ("dog 87%").
|
|
43152
|
+
* - `crop` — the subject cut out of that frame around its box at that instant.
|
|
43153
|
+
* - `clean` — the whole scene with nothing drawn on it.
|
|
43154
|
+
* - `none` — no picture.
|
|
43155
|
+
*
|
|
43156
|
+
* A mode that cannot be honoured (no box at that instant, a photograph with no
|
|
43157
|
+
* tracked subject) ships `clean` and names the reason in the log, per camera.
|
|
43158
|
+
* It replaces the `attach` × `frame` × `zoneCrop` triple, which let one rule
|
|
43159
|
+
* ship a crop on one event and a boxed scene on the next depending on which
|
|
43160
|
+
* stored kind had landed.
|
|
43161
|
+
*/
|
|
43162
|
+
var NcMediaImageSchema = _enum([
|
|
43163
|
+
"scene-boxes",
|
|
43164
|
+
"crop",
|
|
43165
|
+
"clean",
|
|
43166
|
+
"none"
|
|
43167
|
+
]);
|
|
43168
|
+
/**
|
|
43169
|
+
* @deprecated Read only by `normalizeNcMediaPolicy` (D897) — see {@link NcMediaImageSchema}.
|
|
43170
|
+
*
|
|
42995
43171
|
* Media attachment policy (P1 still-image subset).
|
|
42996
43172
|
* - `best` — the best AVAILABLE subject image at dispatch time (D-3).
|
|
42997
43173
|
* - `best-matching` — the media that explains WHY the rule fired: a rule
|
|
@@ -43005,6 +43181,8 @@ var NcRuleTargetSchema = object({
|
|
|
43005
43181
|
* - `none` — no attachment.
|
|
43006
43182
|
*/
|
|
43007
43183
|
/**
|
|
43184
|
+
* @deprecated Read only by `normalizeNcMediaPolicy` (D897) — see {@link NcMediaImageSchema}.
|
|
43185
|
+
*
|
|
43008
43186
|
* WHAT THE PICTURE SHOWS — chosen explicitly, because the implicit ladders
|
|
43009
43187
|
* conflate it with the selection strategy and betray the request: asking for
|
|
43010
43188
|
* the clean scene frame on an object-event owner used to start at
|
|
@@ -43033,16 +43211,29 @@ var NcMediaFrameSchema = _enum([
|
|
|
43033
43211
|
*/
|
|
43034
43212
|
var NcLinkedCameraModeSchema = _enum(["mosaic", "each"]);
|
|
43035
43213
|
var NcMediaPolicySchema = object({
|
|
43214
|
+
/**
|
|
43215
|
+
* The picture — see {@link NcMediaImageSchema}. Absent on a rule nobody has
|
|
43216
|
+
* saved since D897: `normalizeNcMediaPolicy` derives it from the legacy
|
|
43217
|
+
* triple below, at load and at every write, and the store keeps only this.
|
|
43218
|
+
*/
|
|
43219
|
+
image: NcMediaImageSchema.optional(),
|
|
43220
|
+
/**
|
|
43221
|
+
* Draw the zone that FIRED the rule on the picture (`scene-boxes` / `clean`;
|
|
43222
|
+
* a `crop` never shows it). Valid only on a rule whose trigger is a zone —
|
|
43223
|
+
* `conditions.zones` or an occupancy zone — and refused on save otherwise.
|
|
43224
|
+
* Replaces `zoneCrop`.
|
|
43225
|
+
*/
|
|
43226
|
+
showTriggerZone: boolean().optional(),
|
|
43227
|
+
/** @deprecated D897 — accepted from an editor that predates `image`, folded into it on save. */
|
|
43036
43228
|
attach: _enum([
|
|
43037
43229
|
"best",
|
|
43038
43230
|
"best-matching",
|
|
43039
43231
|
"keyFrame",
|
|
43040
43232
|
"none"
|
|
43041
|
-
]).
|
|
43042
|
-
/**
|
|
43233
|
+
]).optional(),
|
|
43234
|
+
/** @deprecated D897 — accepted from an editor that predates `image`, folded into it on save. */
|
|
43043
43235
|
frame: NcMediaFrameSchema.optional(),
|
|
43044
|
-
/**
|
|
43045
|
-
* "show me the ZONE", not the whole scene or the subject crop. */
|
|
43236
|
+
/** @deprecated D897 — folded into `image: 'clean'` + `showTriggerZone` on save. */
|
|
43046
43237
|
zoneCrop: boolean().optional(),
|
|
43047
43238
|
/**
|
|
43048
43239
|
* Also attach a short GIF cut from the stream broker's clip ring around the
|
|
@@ -43214,7 +43405,9 @@ var NcRuleInputSchema = object({
|
|
|
43214
43405
|
* targets.
|
|
43215
43406
|
*/
|
|
43216
43407
|
targetUsers: array(string()).optional(),
|
|
43217
|
-
|
|
43408
|
+
/** Absent = the kind's default picture (`resolveNcMediaImage`): the subject crop for a
|
|
43409
|
+
* detection, the clean scene for a sensor or a sound. Set explicitly on save (D897). */
|
|
43410
|
+
media: NcMediaPolicySchema.default({}),
|
|
43218
43411
|
throttle: NcThrottleSchema.default({
|
|
43219
43412
|
cooldownSec: 60,
|
|
43220
43413
|
scope: "rule-device"
|
|
@@ -44151,13 +44344,37 @@ var NcAlarmModeOpeningsSchema = object({
|
|
|
44151
44344
|
/** Covered devices whose state could not be read (D49): neither open nor closed. */
|
|
44152
44345
|
unknown: array(number().int())
|
|
44153
44346
|
});
|
|
44347
|
+
/**
|
|
44348
|
+
* One alarm INPUT — a (rule, device) pair — the operator bypassed until the
|
|
44349
|
+
* next disarm ("Bypass this input until disarm" on a trigger notification, or
|
|
44350
|
+
* `nc.bypassAlarmInput`). Reported so an armed alarm with a silenced input
|
|
44351
|
+
* never looks fully armed (D62: off must never look like broken).
|
|
44352
|
+
*/
|
|
44353
|
+
var NcAlarmInputBypassViewSchema = object({
|
|
44354
|
+
ruleId: string(),
|
|
44355
|
+
/** The rule's current name (its frozen name when the rule is gone). */
|
|
44356
|
+
ruleName: string(),
|
|
44357
|
+
/** The input: the sensor of the match, else its camera. */
|
|
44358
|
+
deviceId: number().int(),
|
|
44359
|
+
/** The input's current name. */
|
|
44360
|
+
name: string(),
|
|
44361
|
+
/** When it was bypassed (ms epoch). */
|
|
44362
|
+
since: number(),
|
|
44363
|
+
/** Triggers from this input dropped since. */
|
|
44364
|
+
dropped: number().int().min(0)
|
|
44365
|
+
});
|
|
44154
44366
|
var NcAlarmLiveSchema = object({
|
|
44155
44367
|
state: AlarmStateSchema,
|
|
44156
44368
|
/** The mode being armed into (exit delay) or held; null when disarmed. */
|
|
44157
44369
|
targetMode: AlarmArmModeSchema.nullable(),
|
|
44158
44370
|
availableModes: array(AlarmArmModeSchema),
|
|
44159
44371
|
openings: array(NcAlarmModeOpeningsSchema),
|
|
44160
|
-
exclusions: array(NcAlarmExclusionViewSchema)
|
|
44372
|
+
exclusions: array(NcAlarmExclusionViewSchema),
|
|
44373
|
+
/**
|
|
44374
|
+
* Inputs bypassed for the rest of this arm session; cleared on disarm.
|
|
44375
|
+
* Defaulted so an older hub answer still parses (as "none known").
|
|
44376
|
+
*/
|
|
44377
|
+
bypassedInputs: array(NcAlarmInputBypassViewSchema).default([])
|
|
44161
44378
|
});
|
|
44162
44379
|
var NcAlarmConfigSchema = object({
|
|
44163
44380
|
/**
|
|
@@ -54884,9 +55101,11 @@ var connectivityCapability = {
|
|
|
54884
55101
|
*/
|
|
54885
55102
|
durability: "restored",
|
|
54886
55103
|
/**
|
|
54887
|
-
* History (D850):
|
|
55104
|
+
* History (D850): `connected` as a boolean series — change-only, no floor. It
|
|
55105
|
+
* is the upstream entity's own link (a HA connectivity sensor), not the
|
|
55106
|
+
* device's reachability, which stays `device-status.online`.
|
|
54888
55107
|
*/
|
|
54889
|
-
history: "
|
|
55108
|
+
history: { fields: { connected: { kind: "boolean" } } },
|
|
54890
55109
|
/** Clock fields: written, but excluded from the compare that decides
|
|
54891
55110
|
* whether persisting is worth a SQLite commit. */
|
|
54892
55111
|
volatileStateFields: ["lastChangedAt"]
|
|
@@ -55710,11 +55929,22 @@ var dishwasherCapability = {
|
|
|
55710
55929
|
},
|
|
55711
55930
|
runtimeState: DishwasherStatusSchema,
|
|
55712
55931
|
durability: "session",
|
|
55713
|
-
history: { fields: {
|
|
55714
|
-
|
|
55715
|
-
|
|
55716
|
-
|
|
55717
|
-
|
|
55932
|
+
history: { fields: {
|
|
55933
|
+
progressPercent: {
|
|
55934
|
+
kind: "gauge",
|
|
55935
|
+
unit: "%",
|
|
55936
|
+
deadband: 2
|
|
55937
|
+
},
|
|
55938
|
+
state: { kind: "enum" },
|
|
55939
|
+
operationState: { kind: "enum" },
|
|
55940
|
+
remainingSeconds: {
|
|
55941
|
+
kind: "gauge",
|
|
55942
|
+
unit: "s",
|
|
55943
|
+
minIntervalMs: 6e4
|
|
55944
|
+
},
|
|
55945
|
+
doorOpen: { kind: "boolean" },
|
|
55946
|
+
powerOn: { kind: "boolean" }
|
|
55947
|
+
} }
|
|
55718
55948
|
};
|
|
55719
55949
|
var DoorbellStatusSchema = object({
|
|
55720
55950
|
/** Ms epoch of the last press. null = never observed since this provider started. */
|
|
@@ -55831,9 +56061,15 @@ var enumSensorCapability = {
|
|
|
55831
56061
|
*/
|
|
55832
56062
|
durability: "restored",
|
|
55833
56063
|
/**
|
|
55834
|
-
* History (D850):
|
|
56064
|
+
* History (D850): the value as an `enum` series (an appliance's program or
|
|
56065
|
+
* operation state, an HVAC action). The option set is per device, so the
|
|
56066
|
+
* value list is LEARNED as values are first seen (bounded). A sensor with a
|
|
56067
|
+
* `format` carries a timestamp, not a state, and is not recorded.
|
|
55835
56068
|
*/
|
|
55836
|
-
history:
|
|
56069
|
+
history: { fields: { value: {
|
|
56070
|
+
kind: "enum",
|
|
56071
|
+
skipWhenSet: "format"
|
|
56072
|
+
} } },
|
|
55837
56073
|
/** Clock fields: written, but excluded from the compare that decides
|
|
55838
56074
|
* whether persisting is worth a SQLite commit. */
|
|
55839
56075
|
volatileStateFields: ["lastFetchedAt"]
|
|
@@ -57807,9 +58043,10 @@ var lockControlCapability = {
|
|
|
57807
58043
|
*/
|
|
57808
58044
|
durability: "restored",
|
|
57809
58045
|
/**
|
|
57810
|
-
* History (D850):
|
|
58046
|
+
* History (D850): the lock's state as an `enum` series — change-only, no
|
|
58047
|
+
* floor: a jam or an unlock lasting seconds is the edge an operator looks for.
|
|
57811
58048
|
*/
|
|
57812
|
-
history: "
|
|
58049
|
+
history: { fields: { state: { kind: "enum" } } },
|
|
57813
58050
|
/** Clock fields: written, but excluded from the compare that decides
|
|
57814
58051
|
* whether persisting is worth a SQLite commit. */
|
|
57815
58052
|
volatileStateFields: ["lastChangedAt"]
|
|
@@ -57983,9 +58220,18 @@ var mediaPlayerCapability = {
|
|
|
57983
58220
|
*/
|
|
57984
58221
|
durability: "session",
|
|
57985
58222
|
/**
|
|
57986
|
-
* History (D850):
|
|
58223
|
+
* History (D850): volume (a level an operator or an automation sets; the
|
|
58224
|
+
* default 10 s floor folds a slider drag into its end value) and mute.
|
|
58225
|
+
* `positionMs` is not recorded: it moves continuously while playing.
|
|
57987
58226
|
*/
|
|
57988
|
-
history:
|
|
58227
|
+
history: { fields: {
|
|
58228
|
+
volumeLevel: {
|
|
58229
|
+
kind: "gauge",
|
|
58230
|
+
unit: "%",
|
|
58231
|
+
deadband: 1
|
|
58232
|
+
},
|
|
58233
|
+
isMuted: { kind: "boolean" }
|
|
58234
|
+
} }
|
|
57989
58235
|
};
|
|
57990
58236
|
/**
|
|
57991
58237
|
* mesh-network — collection cap for mesh-VPN providers.
|
|
@@ -60129,9 +60375,24 @@ var NpuInfoSchema = object({
|
|
|
60129
60375
|
name: string().optional(),
|
|
60130
60376
|
generation: _enum(["xdna1", "xdna2"]).optional()
|
|
60131
60377
|
});
|
|
60378
|
+
var CoralBusSchema = _enum(["usb", "pci"]);
|
|
60132
60379
|
var CoralInfoSchema = object({
|
|
60133
60380
|
type: literal("coral-edgetpu"),
|
|
60134
|
-
bus
|
|
60381
|
+
/** Legacy single-bus report (older nodes) — read via `coralUsableUnits`. */
|
|
60382
|
+
bus: string().optional(),
|
|
60383
|
+
/** Legacy USB unit count (older nodes) — read via `coralUsableUnits`. */
|
|
60384
|
+
count: number().int().nonnegative().optional(),
|
|
60385
|
+
/** Usable units per bus — each one is its own `edgetpu:<bus>[:N]` device. */
|
|
60386
|
+
units: array(object({
|
|
60387
|
+
bus: CoralBusSchema,
|
|
60388
|
+
count: number().int().nonnegative()
|
|
60389
|
+
})).readonly().optional(),
|
|
60390
|
+
/** Present-but-unusable units, each with its typed reason (never "absent"). */
|
|
60391
|
+
unavailable: array(object({
|
|
60392
|
+
bus: CoralBusSchema,
|
|
60393
|
+
count: number().int().nonnegative(),
|
|
60394
|
+
reason: _enum(["driver-missing", "device-not-accessible"])
|
|
60395
|
+
})).readonly().optional()
|
|
60135
60396
|
});
|
|
60136
60397
|
var HardwareInfoSchema = object({
|
|
60137
60398
|
platform: HardwarePlatformSchema,
|
|
@@ -63278,9 +63539,29 @@ var streamParamsCapability = {
|
|
|
63278
63539
|
*/
|
|
63279
63540
|
durability: "restored",
|
|
63280
63541
|
/**
|
|
63281
|
-
* History (D850):
|
|
63542
|
+
* History (D850): the configured bitrate and frame rate of the main and sub
|
|
63543
|
+
* profiles. Configuration, so change-only on the default floor: a point is an
|
|
63544
|
+
* operator's (or a tuner's) edit, which is exactly what a chart of a stream's
|
|
63545
|
+
* quality over time must show.
|
|
63282
63546
|
*/
|
|
63283
|
-
history:
|
|
63547
|
+
history: { fields: {
|
|
63548
|
+
"main.bitrate": {
|
|
63549
|
+
kind: "gauge",
|
|
63550
|
+
unit: "kbps"
|
|
63551
|
+
},
|
|
63552
|
+
"main.framerate": {
|
|
63553
|
+
kind: "gauge",
|
|
63554
|
+
unit: "fps"
|
|
63555
|
+
},
|
|
63556
|
+
"sub.bitrate": {
|
|
63557
|
+
kind: "gauge",
|
|
63558
|
+
unit: "kbps"
|
|
63559
|
+
},
|
|
63560
|
+
"sub.framerate": {
|
|
63561
|
+
kind: "gauge",
|
|
63562
|
+
unit: "fps"
|
|
63563
|
+
}
|
|
63564
|
+
} },
|
|
63284
63565
|
/** Clock fields: written, but excluded from the compare that decides
|
|
63285
63566
|
* whether persisting is worth a SQLite commit. */
|
|
63286
63567
|
volatileStateFields: ["lastFetchedAt"]
|
|
@@ -66458,6 +66739,15 @@ var BaseDevice = class {
|
|
|
66458
66739
|
* Drivers can use the `getProbeFlags()` helper to read the flag bag
|
|
66459
66740
|
* with a typed cast.
|
|
66460
66741
|
*
|
|
66742
|
+
* Answer what you KNOW. A plain array is read as the complete list only
|
|
66743
|
+
* while this device is `online` and probed; return
|
|
66744
|
+
* `accessoryChildrenUnknown(reason)` whenever you cannot know the list right
|
|
66745
|
+
* now (no credentials, parent not connected, a failed or partial read) —
|
|
66746
|
+
* the kernel then deletes nothing. Return `accessoryChildrenComplete(list)`
|
|
66747
|
+
* to say "connected, and this is the complete list" explicitly. A shrink is
|
|
66748
|
+
* deleted only after a second agreeing complete read on a later probe (D49;
|
|
66749
|
+
* `packages/system/src/kernel/moleculer/accessory-prune-gate.ts`).
|
|
66750
|
+
*
|
|
66461
66751
|
* Default: no children.
|
|
66462
66752
|
*/
|
|
66463
66753
|
getAccessoryChildren() {
|
|
@@ -70589,7 +70879,19 @@ Object.freeze({
|
|
|
70589
70879
|
addonId: null,
|
|
70590
70880
|
access: "view"
|
|
70591
70881
|
},
|
|
70592
|
-
"logDestination.
|
|
70882
|
+
"logDestination.cancelRead": {
|
|
70883
|
+
capName: "log-destination",
|
|
70884
|
+
capScope: "system",
|
|
70885
|
+
addonId: null,
|
|
70886
|
+
access: "create"
|
|
70887
|
+
},
|
|
70888
|
+
"logDestination.describeRead": {
|
|
70889
|
+
capName: "log-destination",
|
|
70890
|
+
capScope: "system",
|
|
70891
|
+
addonId: null,
|
|
70892
|
+
access: "view"
|
|
70893
|
+
},
|
|
70894
|
+
"logDestination.read": {
|
|
70593
70895
|
capName: "log-destination",
|
|
70594
70896
|
capScope: "system",
|
|
70595
70897
|
addonId: null,
|
|
@@ -76596,6 +76898,11 @@ Object.freeze({
|
|
|
76596
76898
|
form: "single",
|
|
76597
76899
|
optional: false
|
|
76598
76900
|
}],
|
|
76901
|
+
"logDestination.read": [{
|
|
76902
|
+
name: "deviceId",
|
|
76903
|
+
form: "single",
|
|
76904
|
+
optional: true
|
|
76905
|
+
}],
|
|
76599
76906
|
"mediaPlayer.getStatus": [{
|
|
76600
76907
|
name: "deviceId",
|
|
76601
76908
|
form: "single",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_dist = require("../dist-
|
|
3
|
-
const require_account_integration_offline = require("../account-integration-offline-
|
|
2
|
+
const require_dist = require("../dist-DabGJIyi.js");
|
|
3
|
+
const require_account_integration_offline = require("../account-integration-offline-DphhJEuL.js");
|
|
4
4
|
let node_crypto = require("node:crypto");
|
|
5
5
|
let node_tls = require("node:tls");
|
|
6
6
|
let node_zlib = require("node:zlib");
|
|
@@ -3917,19 +3917,28 @@ function legacyChildBindings(children) {
|
|
|
3917
3917
|
const suffix = Reflect.get(row, "stableIdSuffix");
|
|
3918
3918
|
const name = Reflect.get(row, "name");
|
|
3919
3919
|
if (typeof suffix !== "string") continue;
|
|
3920
|
-
const
|
|
3921
|
-
if (
|
|
3922
|
-
out.push({
|
|
3923
|
-
stableIdSuffix: suffix,
|
|
3924
|
-
key: known.key,
|
|
3925
|
-
cap: known.cap,
|
|
3926
|
-
convert: "none",
|
|
3927
|
-
role: known.role,
|
|
3928
|
-
name: typeof name === "string" && name.length > 0 ? name : suffix
|
|
3929
|
-
});
|
|
3920
|
+
const binding = legacyKindBinding(suffix, typeof name === "string" ? name : "");
|
|
3921
|
+
if (binding !== null) out.push(binding);
|
|
3930
3922
|
}
|
|
3931
3923
|
return out;
|
|
3932
3924
|
}
|
|
3925
|
+
/**
|
|
3926
|
+
* The binding a child of the OLD fixed catalog stands for. Its kind is its stable suffix
|
|
3927
|
+
* (`energy-forecast`, `program-phase`, …); the child row it was persisted with carries that
|
|
3928
|
+
* kind as `sensorKind` and no `binding`. `null` for a kind the catalog never had.
|
|
3929
|
+
*/
|
|
3930
|
+
function legacyKindBinding(kind, name) {
|
|
3931
|
+
const known = LEGACY_CHILD_KEYS[kind];
|
|
3932
|
+
if (known === void 0) return null;
|
|
3933
|
+
return {
|
|
3934
|
+
stableIdSuffix: kind,
|
|
3935
|
+
key: known.key,
|
|
3936
|
+
cap: known.cap,
|
|
3937
|
+
convert: "none",
|
|
3938
|
+
role: known.role,
|
|
3939
|
+
name: name.length > 0 ? name : kind
|
|
3940
|
+
};
|
|
3941
|
+
}
|
|
3933
3942
|
function isSyntheticKey(key) {
|
|
3934
3943
|
return key.startsWith("HomeConnect.Info.") || key.startsWith("HomeConnect.Network.");
|
|
3935
3944
|
}
|
|
@@ -4371,11 +4380,30 @@ var HomeConnectEventDevice = class extends require_dist.BaseDevice {
|
|
|
4371
4380
|
var homeConnectSensorSchema = require_dist.object({
|
|
4372
4381
|
haId: require_dist.string().min(1),
|
|
4373
4382
|
brokerId: require_dist.string().min(1),
|
|
4374
|
-
|
|
4383
|
+
/**
|
|
4384
|
+
* The entity this child reads. Absent on a child persisted by the fixed-catalog build,
|
|
4385
|
+
* which wrote `sensorKind` instead — see {@link resolveSensorBinding}.
|
|
4386
|
+
*/
|
|
4387
|
+
binding: HomeConnectChildBindingSchema.optional(),
|
|
4388
|
+
/** Fixed-catalog children only: the old kind, which is also their stable suffix. */
|
|
4389
|
+
sensorKind: require_dist.string().min(1).optional(),
|
|
4375
4390
|
system: require_dist.literal("home-connect").optional(),
|
|
4376
4391
|
integrationId: require_dist.string().optional()
|
|
4377
4392
|
});
|
|
4378
4393
|
/**
|
|
4394
|
+
* The binding of a persisted child row. A restored child's config is the row the KERNEL
|
|
4395
|
+
* kept (a spawn reuses the persisted config for an existing stableId), so a child saved by
|
|
4396
|
+
* the fixed-catalog build arrives with `sensorKind` and no `binding`: it is translated, never
|
|
4397
|
+
* refused — refusing it failed the restore of every such child and left the container's
|
|
4398
|
+
* sensors dead until a re-pair. A row with neither is malformed and throws.
|
|
4399
|
+
*/
|
|
4400
|
+
function resolveSensorBinding(config, name) {
|
|
4401
|
+
if (config.binding !== void 0) return config.binding;
|
|
4402
|
+
const legacy = config.sensorKind === void 0 ? null : legacyKindBinding(config.sensorKind, name);
|
|
4403
|
+
if (legacy === null) throw new Error(`Home Connect sensor row has no binding and no known sensorKind (${config.sensorKind ?? "none"})`);
|
|
4404
|
+
return legacy;
|
|
4405
|
+
}
|
|
4406
|
+
/**
|
|
4379
4407
|
* What `getStatus` answers before the appliance has reported anything. `lastFetchedAt: 0`
|
|
4380
4408
|
* is the cap's "never fetched" marker; the number beside it is a placeholder the type
|
|
4381
4409
|
* demands, and it is NEVER written to the runtime slice — a sensor with no value is
|
|
@@ -4410,7 +4438,7 @@ var HomeConnectSensorDevice = class extends require_dist.BaseDevice {
|
|
|
4410
4438
|
super(ctx, homeConnectSensorSchema, { type: ctx.deviceMeta.type });
|
|
4411
4439
|
this.#haId = persisted.haId;
|
|
4412
4440
|
this.#brokerId = persisted.brokerId;
|
|
4413
|
-
this.#binding = persisted.
|
|
4441
|
+
this.#binding = resolveSensorBinding(persisted, ctx.deviceMeta.name);
|
|
4414
4442
|
this.updateSourceInfo({
|
|
4415
4443
|
id: `${this.#haId}:${this.#binding.stableIdSuffix}`,
|
|
4416
4444
|
system: "home-connect"
|