@camstack/addon-provider-velux 0.2.30 → 0.2.31
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
|
@@ -15782,7 +15782,23 @@ var NcHistoryEntrySchema = object({
|
|
|
15782
15782
|
updatedAt: number(),
|
|
15783
15783
|
/** Failure detail — present on a `dead` row. */
|
|
15784
15784
|
error: string().optional(),
|
|
15785
|
-
subject: NcHistorySubjectSchema
|
|
15785
|
+
subject: NcHistorySubjectSchema,
|
|
15786
|
+
/**
|
|
15787
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
15788
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
15789
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
15790
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
15791
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
15792
|
+
*
|
|
15793
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
15794
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
15795
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
15796
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
15797
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
15798
|
+
* Assistant export) must render as "no image right now", never as a
|
|
15799
|
+
* broken link.
|
|
15800
|
+
*/
|
|
15801
|
+
artifactIds: array(string().min(1)).optional()
|
|
15786
15802
|
});
|
|
15787
15803
|
/**
|
|
15788
15804
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -16009,7 +16025,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
16009
16025
|
}), method(object({}), object({
|
|
16010
16026
|
catalog: array(NcConditionDescriptorSchema),
|
|
16011
16027
|
taxonomy: NcTaxonomySchema.optional()
|
|
16012
|
-
})), 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 }), {
|
|
16028
|
+
})), 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 }), {
|
|
16013
16029
|
kind: "mutation",
|
|
16014
16030
|
caller: "required"
|
|
16015
16031
|
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
@@ -27029,6 +27045,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
27029
27045
|
/** Media ms the returned fragment covers. */
|
|
27030
27046
|
gopDurMs: number()
|
|
27031
27047
|
});
|
|
27048
|
+
/**
|
|
27049
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
27050
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
27051
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
27052
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
27053
|
+
*
|
|
27054
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
27055
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
27056
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
27057
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
27058
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
27059
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
27060
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
27061
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
27062
|
+
* bytes nothing has proven decodable.
|
|
27063
|
+
*/
|
|
27064
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
27065
|
+
kind: literal("ok"),
|
|
27066
|
+
data: _instanceof(Uint8Array),
|
|
27067
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
27068
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
27069
|
+
gopStartMs: number(),
|
|
27070
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
27071
|
+
gopDurMs: number(),
|
|
27072
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
27073
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
27074
|
+
reachesRequestedEnd: boolean()
|
|
27075
|
+
}), object({
|
|
27076
|
+
kind: literal("spans-multiple-segments"),
|
|
27077
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
27078
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
27079
|
+
segmentEndMs: number()
|
|
27080
|
+
})]);
|
|
27032
27081
|
method(object({
|
|
27033
27082
|
deviceId: number(),
|
|
27034
27083
|
fromMs: number(),
|
|
@@ -27079,6 +27128,15 @@ method(object({
|
|
|
27079
27128
|
}), ReadGopBytesResultSchema, {
|
|
27080
27129
|
kind: "query",
|
|
27081
27130
|
auth: "admin"
|
|
27131
|
+
}), method(object({
|
|
27132
|
+
deviceId: number(),
|
|
27133
|
+
profile: string(),
|
|
27134
|
+
startMs: number(),
|
|
27135
|
+
fromMs: number(),
|
|
27136
|
+
toMs: number()
|
|
27137
|
+
}), ReadWindowBytesResultSchema, {
|
|
27138
|
+
kind: "query",
|
|
27139
|
+
auth: "admin"
|
|
27082
27140
|
}), method(object({
|
|
27083
27141
|
deviceId: number(),
|
|
27084
27142
|
config: RecordingConfigSchema
|
|
@@ -33166,6 +33224,12 @@ Object.freeze({
|
|
|
33166
33224
|
addonId: null,
|
|
33167
33225
|
access: "view"
|
|
33168
33226
|
},
|
|
33227
|
+
"notificationRules.resolveArtifactUrl": {
|
|
33228
|
+
capName: "notification-rules",
|
|
33229
|
+
capScope: "system",
|
|
33230
|
+
addonId: null,
|
|
33231
|
+
access: "view"
|
|
33232
|
+
},
|
|
33169
33233
|
"notificationRules.setAlarmConfig": {
|
|
33170
33234
|
capName: "notification-rules",
|
|
33171
33235
|
capScope: "system",
|
|
@@ -34570,6 +34634,12 @@ Object.freeze({
|
|
|
34570
34634
|
addonId: null,
|
|
34571
34635
|
access: "view"
|
|
34572
34636
|
},
|
|
34637
|
+
"recording.readWindowBytes": {
|
|
34638
|
+
capName: "recording",
|
|
34639
|
+
capScope: "system",
|
|
34640
|
+
addonId: null,
|
|
34641
|
+
access: "view"
|
|
34642
|
+
},
|
|
34573
34643
|
"recording.refreshStorageLocationsForMigration": {
|
|
34574
34644
|
capName: "recording",
|
|
34575
34645
|
capScope: "system",
|
|
@@ -37400,6 +37470,11 @@ Object.freeze({
|
|
|
37400
37470
|
form: "single",
|
|
37401
37471
|
optional: false
|
|
37402
37472
|
}],
|
|
37473
|
+
"recording.readWindowBytes": [{
|
|
37474
|
+
name: "deviceId",
|
|
37475
|
+
form: "single",
|
|
37476
|
+
optional: false
|
|
37477
|
+
}],
|
|
37403
37478
|
"recording.relocateFootage": [{
|
|
37404
37479
|
name: "deviceId",
|
|
37405
37480
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -15781,7 +15781,23 @@ var NcHistoryEntrySchema = object({
|
|
|
15781
15781
|
updatedAt: number(),
|
|
15782
15782
|
/** Failure detail — present on a `dead` row. */
|
|
15783
15783
|
error: string().optional(),
|
|
15784
|
-
subject: NcHistorySubjectSchema
|
|
15784
|
+
subject: NcHistorySubjectSchema,
|
|
15785
|
+
/**
|
|
15786
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
15787
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
15788
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
15789
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
15790
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
15791
|
+
*
|
|
15792
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
15793
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
15794
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
15795
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
15796
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
15797
|
+
* Assistant export) must render as "no image right now", never as a
|
|
15798
|
+
* broken link.
|
|
15799
|
+
*/
|
|
15800
|
+
artifactIds: array(string().min(1)).optional()
|
|
15785
15801
|
});
|
|
15786
15802
|
/**
|
|
15787
15803
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -16008,7 +16024,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
16008
16024
|
}), method(object({}), object({
|
|
16009
16025
|
catalog: array(NcConditionDescriptorSchema),
|
|
16010
16026
|
taxonomy: NcTaxonomySchema.optional()
|
|
16011
|
-
})), 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 }), {
|
|
16027
|
+
})), 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 }), {
|
|
16012
16028
|
kind: "mutation",
|
|
16013
16029
|
caller: "required"
|
|
16014
16030
|
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
@@ -27028,6 +27044,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
27028
27044
|
/** Media ms the returned fragment covers. */
|
|
27029
27045
|
gopDurMs: number()
|
|
27030
27046
|
});
|
|
27047
|
+
/**
|
|
27048
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
27049
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
27050
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
27051
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
27052
|
+
*
|
|
27053
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
27054
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
27055
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
27056
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
27057
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
27058
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
27059
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
27060
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
27061
|
+
* bytes nothing has proven decodable.
|
|
27062
|
+
*/
|
|
27063
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
27064
|
+
kind: literal("ok"),
|
|
27065
|
+
data: _instanceof(Uint8Array),
|
|
27066
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
27067
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
27068
|
+
gopStartMs: number(),
|
|
27069
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
27070
|
+
gopDurMs: number(),
|
|
27071
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
27072
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
27073
|
+
reachesRequestedEnd: boolean()
|
|
27074
|
+
}), object({
|
|
27075
|
+
kind: literal("spans-multiple-segments"),
|
|
27076
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
27077
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
27078
|
+
segmentEndMs: number()
|
|
27079
|
+
})]);
|
|
27031
27080
|
method(object({
|
|
27032
27081
|
deviceId: number(),
|
|
27033
27082
|
fromMs: number(),
|
|
@@ -27078,6 +27127,15 @@ method(object({
|
|
|
27078
27127
|
}), ReadGopBytesResultSchema, {
|
|
27079
27128
|
kind: "query",
|
|
27080
27129
|
auth: "admin"
|
|
27130
|
+
}), method(object({
|
|
27131
|
+
deviceId: number(),
|
|
27132
|
+
profile: string(),
|
|
27133
|
+
startMs: number(),
|
|
27134
|
+
fromMs: number(),
|
|
27135
|
+
toMs: number()
|
|
27136
|
+
}), ReadWindowBytesResultSchema, {
|
|
27137
|
+
kind: "query",
|
|
27138
|
+
auth: "admin"
|
|
27081
27139
|
}), method(object({
|
|
27082
27140
|
deviceId: number(),
|
|
27083
27141
|
config: RecordingConfigSchema
|
|
@@ -33165,6 +33223,12 @@ Object.freeze({
|
|
|
33165
33223
|
addonId: null,
|
|
33166
33224
|
access: "view"
|
|
33167
33225
|
},
|
|
33226
|
+
"notificationRules.resolveArtifactUrl": {
|
|
33227
|
+
capName: "notification-rules",
|
|
33228
|
+
capScope: "system",
|
|
33229
|
+
addonId: null,
|
|
33230
|
+
access: "view"
|
|
33231
|
+
},
|
|
33168
33232
|
"notificationRules.setAlarmConfig": {
|
|
33169
33233
|
capName: "notification-rules",
|
|
33170
33234
|
capScope: "system",
|
|
@@ -34569,6 +34633,12 @@ Object.freeze({
|
|
|
34569
34633
|
addonId: null,
|
|
34570
34634
|
access: "view"
|
|
34571
34635
|
},
|
|
34636
|
+
"recording.readWindowBytes": {
|
|
34637
|
+
capName: "recording",
|
|
34638
|
+
capScope: "system",
|
|
34639
|
+
addonId: null,
|
|
34640
|
+
access: "view"
|
|
34641
|
+
},
|
|
34572
34642
|
"recording.refreshStorageLocationsForMigration": {
|
|
34573
34643
|
capName: "recording",
|
|
34574
34644
|
capScope: "system",
|
|
@@ -37399,6 +37469,11 @@ Object.freeze({
|
|
|
37399
37469
|
form: "single",
|
|
37400
37470
|
optional: false
|
|
37401
37471
|
}],
|
|
37472
|
+
"recording.readWindowBytes": [{
|
|
37473
|
+
name: "deviceId",
|
|
37474
|
+
form: "single",
|
|
37475
|
+
optional: false
|
|
37476
|
+
}],
|
|
37402
37477
|
"recording.relocateFootage": [{
|
|
37403
37478
|
name: "deviceId",
|
|
37404
37479
|
form: "single",
|
package/package.json
CHANGED