@camstack/addon-provider-dreame 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
|
@@ -66304,7 +66304,23 @@ var NcHistoryEntrySchema = object({
|
|
|
66304
66304
|
updatedAt: number(),
|
|
66305
66305
|
/** Failure detail — present on a `dead` row. */
|
|
66306
66306
|
error: string().optional(),
|
|
66307
|
-
subject: NcHistorySubjectSchema
|
|
66307
|
+
subject: NcHistorySubjectSchema,
|
|
66308
|
+
/**
|
|
66309
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
66310
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
66311
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
66312
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
66313
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
66314
|
+
*
|
|
66315
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
66316
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
66317
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
66318
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
66319
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
66320
|
+
* Assistant export) must render as "no image right now", never as a
|
|
66321
|
+
* broken link.
|
|
66322
|
+
*/
|
|
66323
|
+
artifactIds: array(string().min(1)).optional()
|
|
66308
66324
|
});
|
|
66309
66325
|
/**
|
|
66310
66326
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -66531,7 +66547,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
66531
66547
|
}), method(object({}), object({
|
|
66532
66548
|
catalog: array(NcConditionDescriptorSchema),
|
|
66533
66549
|
taxonomy: NcTaxonomySchema.optional()
|
|
66534
|
-
})), 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 }), {
|
|
66550
|
+
})), 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 }), {
|
|
66535
66551
|
kind: "mutation",
|
|
66536
66552
|
caller: "required"
|
|
66537
66553
|
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
@@ -77576,6 +77592,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
77576
77592
|
/** Media ms the returned fragment covers. */
|
|
77577
77593
|
gopDurMs: number()
|
|
77578
77594
|
});
|
|
77595
|
+
/**
|
|
77596
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
77597
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
77598
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
77599
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
77600
|
+
*
|
|
77601
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
77602
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
77603
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
77604
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
77605
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
77606
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
77607
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
77608
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
77609
|
+
* bytes nothing has proven decodable.
|
|
77610
|
+
*/
|
|
77611
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
77612
|
+
kind: literal("ok"),
|
|
77613
|
+
data: _instanceof(Uint8Array),
|
|
77614
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
77615
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
77616
|
+
gopStartMs: number(),
|
|
77617
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
77618
|
+
gopDurMs: number(),
|
|
77619
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
77620
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
77621
|
+
reachesRequestedEnd: boolean()
|
|
77622
|
+
}), object({
|
|
77623
|
+
kind: literal("spans-multiple-segments"),
|
|
77624
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
77625
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
77626
|
+
segmentEndMs: number()
|
|
77627
|
+
})]);
|
|
77579
77628
|
method(object({
|
|
77580
77629
|
deviceId: number(),
|
|
77581
77630
|
fromMs: number(),
|
|
@@ -77626,6 +77675,15 @@ method(object({
|
|
|
77626
77675
|
}), ReadGopBytesResultSchema, {
|
|
77627
77676
|
kind: "query",
|
|
77628
77677
|
auth: "admin"
|
|
77678
|
+
}), method(object({
|
|
77679
|
+
deviceId: number(),
|
|
77680
|
+
profile: string(),
|
|
77681
|
+
startMs: number(),
|
|
77682
|
+
fromMs: number(),
|
|
77683
|
+
toMs: number()
|
|
77684
|
+
}), ReadWindowBytesResultSchema, {
|
|
77685
|
+
kind: "query",
|
|
77686
|
+
auth: "admin"
|
|
77629
77687
|
}), method(object({
|
|
77630
77688
|
deviceId: number(),
|
|
77631
77689
|
config: RecordingConfigSchema
|
|
@@ -83713,6 +83771,12 @@ Object.freeze({
|
|
|
83713
83771
|
addonId: null,
|
|
83714
83772
|
access: "view"
|
|
83715
83773
|
},
|
|
83774
|
+
"notificationRules.resolveArtifactUrl": {
|
|
83775
|
+
capName: "notification-rules",
|
|
83776
|
+
capScope: "system",
|
|
83777
|
+
addonId: null,
|
|
83778
|
+
access: "view"
|
|
83779
|
+
},
|
|
83716
83780
|
"notificationRules.setAlarmConfig": {
|
|
83717
83781
|
capName: "notification-rules",
|
|
83718
83782
|
capScope: "system",
|
|
@@ -85117,6 +85181,12 @@ Object.freeze({
|
|
|
85117
85181
|
addonId: null,
|
|
85118
85182
|
access: "view"
|
|
85119
85183
|
},
|
|
85184
|
+
"recording.readWindowBytes": {
|
|
85185
|
+
capName: "recording",
|
|
85186
|
+
capScope: "system",
|
|
85187
|
+
addonId: null,
|
|
85188
|
+
access: "view"
|
|
85189
|
+
},
|
|
85120
85190
|
"recording.refreshStorageLocationsForMigration": {
|
|
85121
85191
|
capName: "recording",
|
|
85122
85192
|
capScope: "system",
|
|
@@ -87947,6 +88017,11 @@ Object.freeze({
|
|
|
87947
88017
|
form: "single",
|
|
87948
88018
|
optional: false
|
|
87949
88019
|
}],
|
|
88020
|
+
"recording.readWindowBytes": [{
|
|
88021
|
+
name: "deviceId",
|
|
88022
|
+
form: "single",
|
|
88023
|
+
optional: false
|
|
88024
|
+
}],
|
|
87950
88025
|
"recording.relocateFootage": [{
|
|
87951
88026
|
name: "deviceId",
|
|
87952
88027
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -66304,7 +66304,23 @@ var NcHistoryEntrySchema = object({
|
|
|
66304
66304
|
updatedAt: number(),
|
|
66305
66305
|
/** Failure detail — present on a `dead` row. */
|
|
66306
66306
|
error: string().optional(),
|
|
66307
|
-
subject: NcHistorySubjectSchema
|
|
66307
|
+
subject: NcHistorySubjectSchema,
|
|
66308
|
+
/**
|
|
66309
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
66310
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
66311
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
66312
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
66313
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
66314
|
+
*
|
|
66315
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
66316
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
66317
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
66318
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
66319
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
66320
|
+
* Assistant export) must render as "no image right now", never as a
|
|
66321
|
+
* broken link.
|
|
66322
|
+
*/
|
|
66323
|
+
artifactIds: array(string().min(1)).optional()
|
|
66308
66324
|
});
|
|
66309
66325
|
/**
|
|
66310
66326
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -66531,7 +66547,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
66531
66547
|
}), method(object({}), object({
|
|
66532
66548
|
catalog: array(NcConditionDescriptorSchema),
|
|
66533
66549
|
taxonomy: NcTaxonomySchema.optional()
|
|
66534
|
-
})), 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 }), {
|
|
66550
|
+
})), 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 }), {
|
|
66535
66551
|
kind: "mutation",
|
|
66536
66552
|
caller: "required"
|
|
66537
66553
|
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
@@ -77576,6 +77592,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
77576
77592
|
/** Media ms the returned fragment covers. */
|
|
77577
77593
|
gopDurMs: number()
|
|
77578
77594
|
});
|
|
77595
|
+
/**
|
|
77596
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
77597
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
77598
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
77599
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
77600
|
+
*
|
|
77601
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
77602
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
77603
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
77604
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
77605
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
77606
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
77607
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
77608
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
77609
|
+
* bytes nothing has proven decodable.
|
|
77610
|
+
*/
|
|
77611
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
77612
|
+
kind: literal("ok"),
|
|
77613
|
+
data: _instanceof(Uint8Array),
|
|
77614
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
77615
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
77616
|
+
gopStartMs: number(),
|
|
77617
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
77618
|
+
gopDurMs: number(),
|
|
77619
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
77620
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
77621
|
+
reachesRequestedEnd: boolean()
|
|
77622
|
+
}), object({
|
|
77623
|
+
kind: literal("spans-multiple-segments"),
|
|
77624
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
77625
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
77626
|
+
segmentEndMs: number()
|
|
77627
|
+
})]);
|
|
77579
77628
|
method(object({
|
|
77580
77629
|
deviceId: number(),
|
|
77581
77630
|
fromMs: number(),
|
|
@@ -77626,6 +77675,15 @@ method(object({
|
|
|
77626
77675
|
}), ReadGopBytesResultSchema, {
|
|
77627
77676
|
kind: "query",
|
|
77628
77677
|
auth: "admin"
|
|
77678
|
+
}), method(object({
|
|
77679
|
+
deviceId: number(),
|
|
77680
|
+
profile: string(),
|
|
77681
|
+
startMs: number(),
|
|
77682
|
+
fromMs: number(),
|
|
77683
|
+
toMs: number()
|
|
77684
|
+
}), ReadWindowBytesResultSchema, {
|
|
77685
|
+
kind: "query",
|
|
77686
|
+
auth: "admin"
|
|
77629
77687
|
}), method(object({
|
|
77630
77688
|
deviceId: number(),
|
|
77631
77689
|
config: RecordingConfigSchema
|
|
@@ -83713,6 +83771,12 @@ Object.freeze({
|
|
|
83713
83771
|
addonId: null,
|
|
83714
83772
|
access: "view"
|
|
83715
83773
|
},
|
|
83774
|
+
"notificationRules.resolveArtifactUrl": {
|
|
83775
|
+
capName: "notification-rules",
|
|
83776
|
+
capScope: "system",
|
|
83777
|
+
addonId: null,
|
|
83778
|
+
access: "view"
|
|
83779
|
+
},
|
|
83716
83780
|
"notificationRules.setAlarmConfig": {
|
|
83717
83781
|
capName: "notification-rules",
|
|
83718
83782
|
capScope: "system",
|
|
@@ -85117,6 +85181,12 @@ Object.freeze({
|
|
|
85117
85181
|
addonId: null,
|
|
85118
85182
|
access: "view"
|
|
85119
85183
|
},
|
|
85184
|
+
"recording.readWindowBytes": {
|
|
85185
|
+
capName: "recording",
|
|
85186
|
+
capScope: "system",
|
|
85187
|
+
addonId: null,
|
|
85188
|
+
access: "view"
|
|
85189
|
+
},
|
|
85120
85190
|
"recording.refreshStorageLocationsForMigration": {
|
|
85121
85191
|
capName: "recording",
|
|
85122
85192
|
capScope: "system",
|
|
@@ -87947,6 +88017,11 @@ Object.freeze({
|
|
|
87947
88017
|
form: "single",
|
|
87948
88018
|
optional: false
|
|
87949
88019
|
}],
|
|
88020
|
+
"recording.readWindowBytes": [{
|
|
88021
|
+
name: "deviceId",
|
|
88022
|
+
form: "single",
|
|
88023
|
+
optional: false
|
|
88024
|
+
}],
|
|
87950
88025
|
"recording.relocateFootage": [{
|
|
87951
88026
|
name: "deviceId",
|
|
87952
88027
|
form: "single",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-dreame",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.31",
|
|
4
4
|
"description": "Dreame robot-vacuum / lawn-mower device-provider addon for CamStack — wraps the @apocaliss92/nodedreame Dreamehome cloud client",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|