@camstack/addon-provider-dreame 0.2.47 → 0.2.48

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
@@ -69617,6 +69617,50 @@ var EventStoreFootprintSchema = object({
69617
69617
  totalBytes: number().int(),
69618
69618
  devices: array(EventStoreDeviceFootprintSchema).readonly()
69619
69619
  });
69620
+ /** Event-media footprint for one {@link MediaFileKind}. */
69621
+ var EventMediaKindFootprintSchema = object({
69622
+ kind: MediaFileKindEnum,
69623
+ /** Media rows of this kind. */
69624
+ rows: number().int(),
69625
+ /** Bytes on disk held by those rows. */
69626
+ bytes: number().int()
69627
+ });
69628
+ /**
69629
+ * The media footprint broken down by KIND — the axis a deletion decision
69630
+ * actually turns on.
69631
+ *
69632
+ * A byte total says how much there is; it cannot say what is safe to remove.
69633
+ * The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
69634
+ * motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
69635
+ * `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
69636
+ * buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
69637
+ * nothing else, so sizing a deletion means summing per kind.
69638
+ *
69639
+ * ## Why `unaccounted*` exists
69640
+ *
69641
+ * `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
69642
+ * writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
69643
+ * from a SEPARATE unfiltered aggregate over the same rows, never from adding
69644
+ * `kinds` up. A row whose stored `kind` is not in the enum (written by a
69645
+ * retired code path, or by a version that knew a kind this one does not) would
69646
+ * otherwise vanish from the total silently, and an operator would delete
69647
+ * against a denominator smaller than the disk.
69648
+ *
69649
+ * `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
69650
+ * zero; a non-zero value is a real finding and must be shown, not rounded away.
69651
+ */
69652
+ var EventMediaKindBreakdownSchema = object({
69653
+ /** Every media row in scope, from one unfiltered aggregate. */
69654
+ totalRows: number().int(),
69655
+ /** Every media byte in scope, from that same aggregate. */
69656
+ totalBytes: number().int(),
69657
+ /** Per-kind footprint, ordered by bytes descending. */
69658
+ kinds: array(EventMediaKindFootprintSchema).readonly(),
69659
+ /** `totalRows` minus the summed `kinds` rows — see the schema note. */
69660
+ unaccountedRows: number().int(),
69661
+ /** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
69662
+ unaccountedBytes: number().int()
69663
+ });
69620
69664
  /** Per-kind counts returned by the event-prune / device-delete mutations. */
69621
69665
  var EventPruneCountsSchema = object({
69622
69666
  motion: number().int(),
@@ -69820,6 +69864,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
69820
69864
  }), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
69821
69865
  kind: "query",
69822
69866
  auth: "admin"
69867
+ }), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
69868
+ kind: "query",
69869
+ auth: "admin"
69823
69870
  }), method(object({
69824
69871
  olderThanMs: number(),
69825
69872
  reason: OpsLogReasonSchema.optional()
@@ -71771,6 +71818,20 @@ method(object({
71771
71818
  error: string().optional()
71772
71819
  }), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
71773
71820
  providerId: string(),
71821
+ /**
71822
+ * The location this config is an UNSAVED edit of, when there is one.
71823
+ *
71824
+ * `listLocations` replaces every declared secret with the redaction
71825
+ * sentinel, so the edit modal's form state holds the sentinel for any
71826
+ * credential the operator did not retype — and posting that here
71827
+ * without a way to resolve it makes the provider try to authenticate
71828
+ * as `__camstack_redacted__` and report the operator's own working
71829
+ * password as wrong. Given this id, the orchestrator restores each
71830
+ * sentinel from the stored config (same rule as `upsertLocation`)
71831
+ * before dispatching. Omitted by the "Add location" wizard, where
71832
+ * every value was typed just now and nothing is stored yet.
71833
+ */
71834
+ locationId: string().optional(),
71774
71835
  config: record(string(), unknown())
71775
71836
  }), object({
71776
71837
  ok: boolean(),
@@ -85834,6 +85895,12 @@ Object.freeze({
85834
85895
  addonId: null,
85835
85896
  access: "view"
85836
85897
  },
85898
+ "pipelineAnalytics.getEventMediaFootprintByKind": {
85899
+ capName: "pipeline-analytics",
85900
+ capScope: "device",
85901
+ addonId: null,
85902
+ access: "view"
85903
+ },
85837
85904
  "pipelineAnalytics.getEventStoreFootprint": {
85838
85905
  capName: "pipeline-analytics",
85839
85906
  capScope: "device",
@@ -89499,6 +89566,11 @@ Object.freeze({
89499
89566
  form: "single",
89500
89567
  optional: false
89501
89568
  }],
89569
+ "pipelineAnalytics.getEventMediaFootprintByKind": [{
89570
+ name: "deviceId",
89571
+ form: "single",
89572
+ optional: true
89573
+ }],
89502
89574
  "pipelineAnalytics.getGroup": [{
89503
89575
  name: "deviceId",
89504
89576
  form: "single",
package/dist/addon.mjs CHANGED
@@ -69617,6 +69617,50 @@ var EventStoreFootprintSchema = object({
69617
69617
  totalBytes: number().int(),
69618
69618
  devices: array(EventStoreDeviceFootprintSchema).readonly()
69619
69619
  });
69620
+ /** Event-media footprint for one {@link MediaFileKind}. */
69621
+ var EventMediaKindFootprintSchema = object({
69622
+ kind: MediaFileKindEnum,
69623
+ /** Media rows of this kind. */
69624
+ rows: number().int(),
69625
+ /** Bytes on disk held by those rows. */
69626
+ bytes: number().int()
69627
+ });
69628
+ /**
69629
+ * The media footprint broken down by KIND — the axis a deletion decision
69630
+ * actually turns on.
69631
+ *
69632
+ * A byte total says how much there is; it cannot say what is safe to remove.
69633
+ * The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
69634
+ * motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
69635
+ * `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
69636
+ * buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
69637
+ * nothing else, so sizing a deletion means summing per kind.
69638
+ *
69639
+ * ## Why `unaccounted*` exists
69640
+ *
69641
+ * `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
69642
+ * writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
69643
+ * from a SEPARATE unfiltered aggregate over the same rows, never from adding
69644
+ * `kinds` up. A row whose stored `kind` is not in the enum (written by a
69645
+ * retired code path, or by a version that knew a kind this one does not) would
69646
+ * otherwise vanish from the total silently, and an operator would delete
69647
+ * against a denominator smaller than the disk.
69648
+ *
69649
+ * `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
69650
+ * zero; a non-zero value is a real finding and must be shown, not rounded away.
69651
+ */
69652
+ var EventMediaKindBreakdownSchema = object({
69653
+ /** Every media row in scope, from one unfiltered aggregate. */
69654
+ totalRows: number().int(),
69655
+ /** Every media byte in scope, from that same aggregate. */
69656
+ totalBytes: number().int(),
69657
+ /** Per-kind footprint, ordered by bytes descending. */
69658
+ kinds: array(EventMediaKindFootprintSchema).readonly(),
69659
+ /** `totalRows` minus the summed `kinds` rows — see the schema note. */
69660
+ unaccountedRows: number().int(),
69661
+ /** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
69662
+ unaccountedBytes: number().int()
69663
+ });
69620
69664
  /** Per-kind counts returned by the event-prune / device-delete mutations. */
69621
69665
  var EventPruneCountsSchema = object({
69622
69666
  motion: number().int(),
@@ -69820,6 +69864,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
69820
69864
  }), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
69821
69865
  kind: "query",
69822
69866
  auth: "admin"
69867
+ }), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
69868
+ kind: "query",
69869
+ auth: "admin"
69823
69870
  }), method(object({
69824
69871
  olderThanMs: number(),
69825
69872
  reason: OpsLogReasonSchema.optional()
@@ -71771,6 +71818,20 @@ method(object({
71771
71818
  error: string().optional()
71772
71819
  }), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
71773
71820
  providerId: string(),
71821
+ /**
71822
+ * The location this config is an UNSAVED edit of, when there is one.
71823
+ *
71824
+ * `listLocations` replaces every declared secret with the redaction
71825
+ * sentinel, so the edit modal's form state holds the sentinel for any
71826
+ * credential the operator did not retype — and posting that here
71827
+ * without a way to resolve it makes the provider try to authenticate
71828
+ * as `__camstack_redacted__` and report the operator's own working
71829
+ * password as wrong. Given this id, the orchestrator restores each
71830
+ * sentinel from the stored config (same rule as `upsertLocation`)
71831
+ * before dispatching. Omitted by the "Add location" wizard, where
71832
+ * every value was typed just now and nothing is stored yet.
71833
+ */
71834
+ locationId: string().optional(),
71774
71835
  config: record(string(), unknown())
71775
71836
  }), object({
71776
71837
  ok: boolean(),
@@ -85834,6 +85895,12 @@ Object.freeze({
85834
85895
  addonId: null,
85835
85896
  access: "view"
85836
85897
  },
85898
+ "pipelineAnalytics.getEventMediaFootprintByKind": {
85899
+ capName: "pipeline-analytics",
85900
+ capScope: "device",
85901
+ addonId: null,
85902
+ access: "view"
85903
+ },
85837
85904
  "pipelineAnalytics.getEventStoreFootprint": {
85838
85905
  capName: "pipeline-analytics",
85839
85906
  capScope: "device",
@@ -89499,6 +89566,11 @@ Object.freeze({
89499
89566
  form: "single",
89500
89567
  optional: false
89501
89568
  }],
89569
+ "pipelineAnalytics.getEventMediaFootprintByKind": [{
89570
+ name: "deviceId",
89571
+ form: "single",
89572
+ optional: true
89573
+ }],
89502
89574
  "pipelineAnalytics.getGroup": [{
89503
89575
  name: "deviceId",
89504
89576
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-dreame",
3
- "version": "0.2.47",
3
+ "version": "0.2.48",
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",