@camstack/addon-provider-homematic 1.2.31 → 1.2.32
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/addon.js +77 -2
- package/dist/addon.mjs +77 -2
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -15857,7 +15857,23 @@ var NcHistoryEntrySchema = object({
|
|
|
15857
15857
|
updatedAt: number(),
|
|
15858
15858
|
/** Failure detail — present on a `dead` row. */
|
|
15859
15859
|
error: string().optional(),
|
|
15860
|
-
subject: NcHistorySubjectSchema
|
|
15860
|
+
subject: NcHistorySubjectSchema,
|
|
15861
|
+
/**
|
|
15862
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
15863
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
15864
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
15865
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
15866
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
15867
|
+
*
|
|
15868
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
15869
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
15870
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
15871
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
15872
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
15873
|
+
* Assistant export) must render as "no image right now", never as a
|
|
15874
|
+
* broken link.
|
|
15875
|
+
*/
|
|
15876
|
+
artifactIds: array(string().min(1)).optional()
|
|
15861
15877
|
});
|
|
15862
15878
|
/**
|
|
15863
15879
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -16084,7 +16100,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
16084
16100
|
}), method(object({}), object({
|
|
16085
16101
|
catalog: array(NcConditionDescriptorSchema),
|
|
16086
16102
|
taxonomy: NcTaxonomySchema.optional()
|
|
16087
|
-
})), method(object({ filter: NcHistoryFilterSchema.default({ limit: 100 }) }), object({ entries: array(NcHistoryEntrySchema) }), { auth: "admin" }), method(object({}), object({ snoozes: array(NcSnoozeSchema) }), { caller: "required" }), method(object({ snooze: NcSnoozeInputSchema }), object({ snooze: NcSnoozeSchema }), {
|
|
16103
|
+
})), method(object({ filter: NcHistoryFilterSchema.default({ limit: 100 }) }), object({ entries: array(NcHistoryEntrySchema) }), { auth: "admin" }), method(object({ artifactId: string().min(1) }), object({ url: string().nullable() }), { auth: "admin" }), method(object({}), object({ snoozes: array(NcSnoozeSchema) }), { caller: "required" }), method(object({ snooze: NcSnoozeInputSchema }), object({ snooze: NcSnoozeSchema }), {
|
|
16088
16104
|
kind: "mutation",
|
|
16089
16105
|
caller: "required"
|
|
16090
16106
|
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
@@ -27104,6 +27120,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
27104
27120
|
/** Media ms the returned fragment covers. */
|
|
27105
27121
|
gopDurMs: number()
|
|
27106
27122
|
});
|
|
27123
|
+
/**
|
|
27124
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
27125
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
27126
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
27127
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
27128
|
+
*
|
|
27129
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
27130
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
27131
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
27132
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
27133
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
27134
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
27135
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
27136
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
27137
|
+
* bytes nothing has proven decodable.
|
|
27138
|
+
*/
|
|
27139
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
27140
|
+
kind: literal("ok"),
|
|
27141
|
+
data: _instanceof(Uint8Array),
|
|
27142
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
27143
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
27144
|
+
gopStartMs: number(),
|
|
27145
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
27146
|
+
gopDurMs: number(),
|
|
27147
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
27148
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
27149
|
+
reachesRequestedEnd: boolean()
|
|
27150
|
+
}), object({
|
|
27151
|
+
kind: literal("spans-multiple-segments"),
|
|
27152
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
27153
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
27154
|
+
segmentEndMs: number()
|
|
27155
|
+
})]);
|
|
27107
27156
|
method(object({
|
|
27108
27157
|
deviceId: number(),
|
|
27109
27158
|
fromMs: number(),
|
|
@@ -27154,6 +27203,15 @@ method(object({
|
|
|
27154
27203
|
}), ReadGopBytesResultSchema, {
|
|
27155
27204
|
kind: "query",
|
|
27156
27205
|
auth: "admin"
|
|
27206
|
+
}), method(object({
|
|
27207
|
+
deviceId: number(),
|
|
27208
|
+
profile: string(),
|
|
27209
|
+
startMs: number(),
|
|
27210
|
+
fromMs: number(),
|
|
27211
|
+
toMs: number()
|
|
27212
|
+
}), ReadWindowBytesResultSchema, {
|
|
27213
|
+
kind: "query",
|
|
27214
|
+
auth: "admin"
|
|
27157
27215
|
}), method(object({
|
|
27158
27216
|
deviceId: number(),
|
|
27159
27217
|
config: RecordingConfigSchema
|
|
@@ -33241,6 +33299,12 @@ Object.freeze({
|
|
|
33241
33299
|
addonId: null,
|
|
33242
33300
|
access: "view"
|
|
33243
33301
|
},
|
|
33302
|
+
"notificationRules.resolveArtifactUrl": {
|
|
33303
|
+
capName: "notification-rules",
|
|
33304
|
+
capScope: "system",
|
|
33305
|
+
addonId: null,
|
|
33306
|
+
access: "view"
|
|
33307
|
+
},
|
|
33244
33308
|
"notificationRules.setAlarmConfig": {
|
|
33245
33309
|
capName: "notification-rules",
|
|
33246
33310
|
capScope: "system",
|
|
@@ -34645,6 +34709,12 @@ Object.freeze({
|
|
|
34645
34709
|
addonId: null,
|
|
34646
34710
|
access: "view"
|
|
34647
34711
|
},
|
|
34712
|
+
"recording.readWindowBytes": {
|
|
34713
|
+
capName: "recording",
|
|
34714
|
+
capScope: "system",
|
|
34715
|
+
addonId: null,
|
|
34716
|
+
access: "view"
|
|
34717
|
+
},
|
|
34648
34718
|
"recording.refreshStorageLocationsForMigration": {
|
|
34649
34719
|
capName: "recording",
|
|
34650
34720
|
capScope: "system",
|
|
@@ -37475,6 +37545,11 @@ Object.freeze({
|
|
|
37475
37545
|
form: "single",
|
|
37476
37546
|
optional: false
|
|
37477
37547
|
}],
|
|
37548
|
+
"recording.readWindowBytes": [{
|
|
37549
|
+
name: "deviceId",
|
|
37550
|
+
form: "single",
|
|
37551
|
+
optional: false
|
|
37552
|
+
}],
|
|
37478
37553
|
"recording.relocateFootage": [{
|
|
37479
37554
|
name: "deviceId",
|
|
37480
37555
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -15858,7 +15858,23 @@ var NcHistoryEntrySchema = object({
|
|
|
15858
15858
|
updatedAt: number(),
|
|
15859
15859
|
/** Failure detail — present on a `dead` row. */
|
|
15860
15860
|
error: string().optional(),
|
|
15861
|
-
subject: NcHistorySubjectSchema
|
|
15861
|
+
subject: NcHistorySubjectSchema,
|
|
15862
|
+
/**
|
|
15863
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
15864
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
15865
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
15866
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
15867
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
15868
|
+
*
|
|
15869
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
15870
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
15871
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
15872
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
15873
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
15874
|
+
* Assistant export) must render as "no image right now", never as a
|
|
15875
|
+
* broken link.
|
|
15876
|
+
*/
|
|
15877
|
+
artifactIds: array(string().min(1)).optional()
|
|
15862
15878
|
});
|
|
15863
15879
|
/**
|
|
15864
15880
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -16085,7 +16101,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
16085
16101
|
}), method(object({}), object({
|
|
16086
16102
|
catalog: array(NcConditionDescriptorSchema),
|
|
16087
16103
|
taxonomy: NcTaxonomySchema.optional()
|
|
16088
|
-
})), method(object({ filter: NcHistoryFilterSchema.default({ limit: 100 }) }), object({ entries: array(NcHistoryEntrySchema) }), { auth: "admin" }), method(object({}), object({ snoozes: array(NcSnoozeSchema) }), { caller: "required" }), method(object({ snooze: NcSnoozeInputSchema }), object({ snooze: NcSnoozeSchema }), {
|
|
16104
|
+
})), method(object({ filter: NcHistoryFilterSchema.default({ limit: 100 }) }), object({ entries: array(NcHistoryEntrySchema) }), { auth: "admin" }), method(object({ artifactId: string().min(1) }), object({ url: string().nullable() }), { auth: "admin" }), method(object({}), object({ snoozes: array(NcSnoozeSchema) }), { caller: "required" }), method(object({ snooze: NcSnoozeInputSchema }), object({ snooze: NcSnoozeSchema }), {
|
|
16089
16105
|
kind: "mutation",
|
|
16090
16106
|
caller: "required"
|
|
16091
16107
|
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
@@ -27105,6 +27121,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
27105
27121
|
/** Media ms the returned fragment covers. */
|
|
27106
27122
|
gopDurMs: number()
|
|
27107
27123
|
});
|
|
27124
|
+
/**
|
|
27125
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
27126
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
27127
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
27128
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
27129
|
+
*
|
|
27130
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
27131
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
27132
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
27133
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
27134
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
27135
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
27136
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
27137
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
27138
|
+
* bytes nothing has proven decodable.
|
|
27139
|
+
*/
|
|
27140
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
27141
|
+
kind: literal("ok"),
|
|
27142
|
+
data: _instanceof(Uint8Array),
|
|
27143
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
27144
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
27145
|
+
gopStartMs: number(),
|
|
27146
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
27147
|
+
gopDurMs: number(),
|
|
27148
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
27149
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
27150
|
+
reachesRequestedEnd: boolean()
|
|
27151
|
+
}), object({
|
|
27152
|
+
kind: literal("spans-multiple-segments"),
|
|
27153
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
27154
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
27155
|
+
segmentEndMs: number()
|
|
27156
|
+
})]);
|
|
27108
27157
|
method(object({
|
|
27109
27158
|
deviceId: number(),
|
|
27110
27159
|
fromMs: number(),
|
|
@@ -27155,6 +27204,15 @@ method(object({
|
|
|
27155
27204
|
}), ReadGopBytesResultSchema, {
|
|
27156
27205
|
kind: "query",
|
|
27157
27206
|
auth: "admin"
|
|
27207
|
+
}), method(object({
|
|
27208
|
+
deviceId: number(),
|
|
27209
|
+
profile: string(),
|
|
27210
|
+
startMs: number(),
|
|
27211
|
+
fromMs: number(),
|
|
27212
|
+
toMs: number()
|
|
27213
|
+
}), ReadWindowBytesResultSchema, {
|
|
27214
|
+
kind: "query",
|
|
27215
|
+
auth: "admin"
|
|
27158
27216
|
}), method(object({
|
|
27159
27217
|
deviceId: number(),
|
|
27160
27218
|
config: RecordingConfigSchema
|
|
@@ -33242,6 +33300,12 @@ Object.freeze({
|
|
|
33242
33300
|
addonId: null,
|
|
33243
33301
|
access: "view"
|
|
33244
33302
|
},
|
|
33303
|
+
"notificationRules.resolveArtifactUrl": {
|
|
33304
|
+
capName: "notification-rules",
|
|
33305
|
+
capScope: "system",
|
|
33306
|
+
addonId: null,
|
|
33307
|
+
access: "view"
|
|
33308
|
+
},
|
|
33245
33309
|
"notificationRules.setAlarmConfig": {
|
|
33246
33310
|
capName: "notification-rules",
|
|
33247
33311
|
capScope: "system",
|
|
@@ -34646,6 +34710,12 @@ Object.freeze({
|
|
|
34646
34710
|
addonId: null,
|
|
34647
34711
|
access: "view"
|
|
34648
34712
|
},
|
|
34713
|
+
"recording.readWindowBytes": {
|
|
34714
|
+
capName: "recording",
|
|
34715
|
+
capScope: "system",
|
|
34716
|
+
addonId: null,
|
|
34717
|
+
access: "view"
|
|
34718
|
+
},
|
|
34649
34719
|
"recording.refreshStorageLocationsForMigration": {
|
|
34650
34720
|
capName: "recording",
|
|
34651
34721
|
capScope: "system",
|
|
@@ -37476,6 +37546,11 @@ Object.freeze({
|
|
|
37476
37546
|
form: "single",
|
|
37477
37547
|
optional: false
|
|
37478
37548
|
}],
|
|
37549
|
+
"recording.readWindowBytes": [{
|
|
37550
|
+
name: "deviceId",
|
|
37551
|
+
form: "single",
|
|
37552
|
+
optional: false
|
|
37553
|
+
}],
|
|
37479
37554
|
"recording.relocateFootage": [{
|
|
37480
37555
|
name: "deviceId",
|
|
37481
37556
|
form: "single",
|
package/package.json
CHANGED