@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 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.30",
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",