@camstack/addon-provider-reolink 1.2.70 → 1.2.71

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
@@ -19718,6 +19718,50 @@ var EventStoreFootprintSchema = object({
19718
19718
  totalBytes: number().int(),
19719
19719
  devices: array(EventStoreDeviceFootprintSchema).readonly()
19720
19720
  });
19721
+ /** Event-media footprint for one {@link MediaFileKind}. */
19722
+ var EventMediaKindFootprintSchema = object({
19723
+ kind: MediaFileKindEnum,
19724
+ /** Media rows of this kind. */
19725
+ rows: number().int(),
19726
+ /** Bytes on disk held by those rows. */
19727
+ bytes: number().int()
19728
+ });
19729
+ /**
19730
+ * The media footprint broken down by KIND — the axis a deletion decision
19731
+ * actually turns on.
19732
+ *
19733
+ * A byte total says how much there is; it cannot say what is safe to remove.
19734
+ * The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
19735
+ * motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
19736
+ * `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
19737
+ * buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
19738
+ * nothing else, so sizing a deletion means summing per kind.
19739
+ *
19740
+ * ## Why `unaccounted*` exists
19741
+ *
19742
+ * `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
19743
+ * writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
19744
+ * from a SEPARATE unfiltered aggregate over the same rows, never from adding
19745
+ * `kinds` up. A row whose stored `kind` is not in the enum (written by a
19746
+ * retired code path, or by a version that knew a kind this one does not) would
19747
+ * otherwise vanish from the total silently, and an operator would delete
19748
+ * against a denominator smaller than the disk.
19749
+ *
19750
+ * `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
19751
+ * zero; a non-zero value is a real finding and must be shown, not rounded away.
19752
+ */
19753
+ var EventMediaKindBreakdownSchema = object({
19754
+ /** Every media row in scope, from one unfiltered aggregate. */
19755
+ totalRows: number().int(),
19756
+ /** Every media byte in scope, from that same aggregate. */
19757
+ totalBytes: number().int(),
19758
+ /** Per-kind footprint, ordered by bytes descending. */
19759
+ kinds: array(EventMediaKindFootprintSchema).readonly(),
19760
+ /** `totalRows` minus the summed `kinds` rows — see the schema note. */
19761
+ unaccountedRows: number().int(),
19762
+ /** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
19763
+ unaccountedBytes: number().int()
19764
+ });
19721
19765
  /** Per-kind counts returned by the event-prune / device-delete mutations. */
19722
19766
  var EventPruneCountsSchema = object({
19723
19767
  motion: number().int(),
@@ -19921,6 +19965,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19921
19965
  }), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
19922
19966
  kind: "query",
19923
19967
  auth: "admin"
19968
+ }), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
19969
+ kind: "query",
19970
+ auth: "admin"
19924
19971
  }), method(object({
19925
19972
  olderThanMs: number(),
19926
19973
  reason: OpsLogReasonSchema.optional()
@@ -21976,6 +22023,20 @@ method(object({
21976
22023
  error: string().optional()
21977
22024
  }), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
21978
22025
  providerId: string(),
22026
+ /**
22027
+ * The location this config is an UNSAVED edit of, when there is one.
22028
+ *
22029
+ * `listLocations` replaces every declared secret with the redaction
22030
+ * sentinel, so the edit modal's form state holds the sentinel for any
22031
+ * credential the operator did not retype — and posting that here
22032
+ * without a way to resolve it makes the provider try to authenticate
22033
+ * as `__camstack_redacted__` and report the operator's own working
22034
+ * password as wrong. Given this id, the orchestrator restores each
22035
+ * sentinel from the stored config (same rule as `upsertLocation`)
22036
+ * before dispatching. Omitted by the "Add location" wizard, where
22037
+ * every value was typed just now and nothing is stored yet.
22038
+ */
22039
+ locationId: string().optional(),
21979
22040
  config: record(string(), unknown())
21980
22041
  }), object({
21981
22042
  ok: boolean(),
@@ -36466,6 +36527,12 @@ Object.freeze({
36466
36527
  addonId: null,
36467
36528
  access: "view"
36468
36529
  },
36530
+ "pipelineAnalytics.getEventMediaFootprintByKind": {
36531
+ capName: "pipeline-analytics",
36532
+ capScope: "device",
36533
+ addonId: null,
36534
+ access: "view"
36535
+ },
36469
36536
  "pipelineAnalytics.getEventStoreFootprint": {
36470
36537
  capName: "pipeline-analytics",
36471
36538
  capScope: "device",
@@ -40131,6 +40198,11 @@ Object.freeze({
40131
40198
  form: "single",
40132
40199
  optional: false
40133
40200
  }],
40201
+ "pipelineAnalytics.getEventMediaFootprintByKind": [{
40202
+ name: "deviceId",
40203
+ form: "single",
40204
+ optional: true
40205
+ }],
40134
40206
  "pipelineAnalytics.getGroup": [{
40135
40207
  name: "deviceId",
40136
40208
  form: "single",
package/dist/addon.mjs CHANGED
@@ -19713,6 +19713,50 @@ var EventStoreFootprintSchema = object({
19713
19713
  totalBytes: number().int(),
19714
19714
  devices: array(EventStoreDeviceFootprintSchema).readonly()
19715
19715
  });
19716
+ /** Event-media footprint for one {@link MediaFileKind}. */
19717
+ var EventMediaKindFootprintSchema = object({
19718
+ kind: MediaFileKindEnum,
19719
+ /** Media rows of this kind. */
19720
+ rows: number().int(),
19721
+ /** Bytes on disk held by those rows. */
19722
+ bytes: number().int()
19723
+ });
19724
+ /**
19725
+ * The media footprint broken down by KIND — the axis a deletion decision
19726
+ * actually turns on.
19727
+ *
19728
+ * A byte total says how much there is; it cannot say what is safe to remove.
19729
+ * The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
19730
+ * motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
19731
+ * `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
19732
+ * buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
19733
+ * nothing else, so sizing a deletion means summing per kind.
19734
+ *
19735
+ * ## Why `unaccounted*` exists
19736
+ *
19737
+ * `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
19738
+ * writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
19739
+ * from a SEPARATE unfiltered aggregate over the same rows, never from adding
19740
+ * `kinds` up. A row whose stored `kind` is not in the enum (written by a
19741
+ * retired code path, or by a version that knew a kind this one does not) would
19742
+ * otherwise vanish from the total silently, and an operator would delete
19743
+ * against a denominator smaller than the disk.
19744
+ *
19745
+ * `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
19746
+ * zero; a non-zero value is a real finding and must be shown, not rounded away.
19747
+ */
19748
+ var EventMediaKindBreakdownSchema = object({
19749
+ /** Every media row in scope, from one unfiltered aggregate. */
19750
+ totalRows: number().int(),
19751
+ /** Every media byte in scope, from that same aggregate. */
19752
+ totalBytes: number().int(),
19753
+ /** Per-kind footprint, ordered by bytes descending. */
19754
+ kinds: array(EventMediaKindFootprintSchema).readonly(),
19755
+ /** `totalRows` minus the summed `kinds` rows — see the schema note. */
19756
+ unaccountedRows: number().int(),
19757
+ /** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
19758
+ unaccountedBytes: number().int()
19759
+ });
19716
19760
  /** Per-kind counts returned by the event-prune / device-delete mutations. */
19717
19761
  var EventPruneCountsSchema = object({
19718
19762
  motion: number().int(),
@@ -19916,6 +19960,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19916
19960
  }), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
19917
19961
  kind: "query",
19918
19962
  auth: "admin"
19963
+ }), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
19964
+ kind: "query",
19965
+ auth: "admin"
19919
19966
  }), method(object({
19920
19967
  olderThanMs: number(),
19921
19968
  reason: OpsLogReasonSchema.optional()
@@ -21971,6 +22018,20 @@ method(object({
21971
22018
  error: string().optional()
21972
22019
  }), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
21973
22020
  providerId: string(),
22021
+ /**
22022
+ * The location this config is an UNSAVED edit of, when there is one.
22023
+ *
22024
+ * `listLocations` replaces every declared secret with the redaction
22025
+ * sentinel, so the edit modal's form state holds the sentinel for any
22026
+ * credential the operator did not retype — and posting that here
22027
+ * without a way to resolve it makes the provider try to authenticate
22028
+ * as `__camstack_redacted__` and report the operator's own working
22029
+ * password as wrong. Given this id, the orchestrator restores each
22030
+ * sentinel from the stored config (same rule as `upsertLocation`)
22031
+ * before dispatching. Omitted by the "Add location" wizard, where
22032
+ * every value was typed just now and nothing is stored yet.
22033
+ */
22034
+ locationId: string().optional(),
21974
22035
  config: record(string(), unknown())
21975
22036
  }), object({
21976
22037
  ok: boolean(),
@@ -36461,6 +36522,12 @@ Object.freeze({
36461
36522
  addonId: null,
36462
36523
  access: "view"
36463
36524
  },
36525
+ "pipelineAnalytics.getEventMediaFootprintByKind": {
36526
+ capName: "pipeline-analytics",
36527
+ capScope: "device",
36528
+ addonId: null,
36529
+ access: "view"
36530
+ },
36464
36531
  "pipelineAnalytics.getEventStoreFootprint": {
36465
36532
  capName: "pipeline-analytics",
36466
36533
  capScope: "device",
@@ -40126,6 +40193,11 @@ Object.freeze({
40126
40193
  form: "single",
40127
40194
  optional: false
40128
40195
  }],
40196
+ "pipelineAnalytics.getEventMediaFootprintByKind": [{
40197
+ name: "deviceId",
40198
+ form: "single",
40199
+ optional: true
40200
+ }],
40129
40201
  "pipelineAnalytics.getGroup": [{
40130
40202
  name: "deviceId",
40131
40203
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-reolink",
3
- "version": "1.2.70",
3
+ "version": "1.2.71",
4
4
  "description": "Reolink camera device provider addon for CamStack — native Baichuan protocol",
5
5
  "keywords": [
6
6
  "camstack",