@camstack/addon-matter-broker 0.2.46 → 0.2.47

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
@@ -19175,6 +19175,50 @@ var EventStoreFootprintSchema = object({
19175
19175
  totalBytes: number().int(),
19176
19176
  devices: array(EventStoreDeviceFootprintSchema).readonly()
19177
19177
  });
19178
+ /** Event-media footprint for one {@link MediaFileKind}. */
19179
+ var EventMediaKindFootprintSchema = object({
19180
+ kind: MediaFileKindEnum,
19181
+ /** Media rows of this kind. */
19182
+ rows: number().int(),
19183
+ /** Bytes on disk held by those rows. */
19184
+ bytes: number().int()
19185
+ });
19186
+ /**
19187
+ * The media footprint broken down by KIND — the axis a deletion decision
19188
+ * actually turns on.
19189
+ *
19190
+ * A byte total says how much there is; it cannot say what is safe to remove.
19191
+ * The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
19192
+ * motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
19193
+ * `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
19194
+ * buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
19195
+ * nothing else, so sizing a deletion means summing per kind.
19196
+ *
19197
+ * ## Why `unaccounted*` exists
19198
+ *
19199
+ * `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
19200
+ * writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
19201
+ * from a SEPARATE unfiltered aggregate over the same rows, never from adding
19202
+ * `kinds` up. A row whose stored `kind` is not in the enum (written by a
19203
+ * retired code path, or by a version that knew a kind this one does not) would
19204
+ * otherwise vanish from the total silently, and an operator would delete
19205
+ * against a denominator smaller than the disk.
19206
+ *
19207
+ * `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
19208
+ * zero; a non-zero value is a real finding and must be shown, not rounded away.
19209
+ */
19210
+ var EventMediaKindBreakdownSchema = object({
19211
+ /** Every media row in scope, from one unfiltered aggregate. */
19212
+ totalRows: number().int(),
19213
+ /** Every media byte in scope, from that same aggregate. */
19214
+ totalBytes: number().int(),
19215
+ /** Per-kind footprint, ordered by bytes descending. */
19216
+ kinds: array(EventMediaKindFootprintSchema).readonly(),
19217
+ /** `totalRows` minus the summed `kinds` rows — see the schema note. */
19218
+ unaccountedRows: number().int(),
19219
+ /** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
19220
+ unaccountedBytes: number().int()
19221
+ });
19178
19222
  /** Per-kind counts returned by the event-prune / device-delete mutations. */
19179
19223
  var EventPruneCountsSchema = object({
19180
19224
  motion: number().int(),
@@ -19378,6 +19422,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19378
19422
  }), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
19379
19423
  kind: "query",
19380
19424
  auth: "admin"
19425
+ }), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
19426
+ kind: "query",
19427
+ auth: "admin"
19381
19428
  }), method(object({
19382
19429
  olderThanMs: number(),
19383
19430
  reason: OpsLogReasonSchema.optional()
@@ -21329,6 +21376,20 @@ method(object({
21329
21376
  error: string$2().optional()
21330
21377
  }), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
21331
21378
  providerId: string$2(),
21379
+ /**
21380
+ * The location this config is an UNSAVED edit of, when there is one.
21381
+ *
21382
+ * `listLocations` replaces every declared secret with the redaction
21383
+ * sentinel, so the edit modal's form state holds the sentinel for any
21384
+ * credential the operator did not retype — and posting that here
21385
+ * without a way to resolve it makes the provider try to authenticate
21386
+ * as `__camstack_redacted__` and report the operator's own working
21387
+ * password as wrong. Given this id, the orchestrator restores each
21388
+ * sentinel from the stored config (same rule as `upsertLocation`)
21389
+ * before dispatching. Omitted by the "Add location" wizard, where
21390
+ * every value was typed just now and nothing is stored yet.
21391
+ */
21392
+ locationId: string$2().optional(),
21332
21393
  config: record(string$2(), unknown())
21333
21394
  }), object({
21334
21395
  ok: boolean(),
@@ -35384,6 +35445,12 @@ Object.freeze({
35384
35445
  addonId: null,
35385
35446
  access: "view"
35386
35447
  },
35448
+ "pipelineAnalytics.getEventMediaFootprintByKind": {
35449
+ capName: "pipeline-analytics",
35450
+ capScope: "device",
35451
+ addonId: null,
35452
+ access: "view"
35453
+ },
35387
35454
  "pipelineAnalytics.getEventStoreFootprint": {
35388
35455
  capName: "pipeline-analytics",
35389
35456
  capScope: "device",
@@ -39049,6 +39116,11 @@ Object.freeze({
39049
39116
  form: "single",
39050
39117
  optional: false
39051
39118
  }],
39119
+ "pipelineAnalytics.getEventMediaFootprintByKind": [{
39120
+ name: "deviceId",
39121
+ form: "single",
39122
+ optional: true
39123
+ }],
39052
39124
  "pipelineAnalytics.getGroup": [{
39053
39125
  name: "deviceId",
39054
39126
  form: "single",
package/dist/addon.mjs CHANGED
@@ -19173,6 +19173,50 @@ var EventStoreFootprintSchema = object({
19173
19173
  totalBytes: number().int(),
19174
19174
  devices: array(EventStoreDeviceFootprintSchema).readonly()
19175
19175
  });
19176
+ /** Event-media footprint for one {@link MediaFileKind}. */
19177
+ var EventMediaKindFootprintSchema = object({
19178
+ kind: MediaFileKindEnum,
19179
+ /** Media rows of this kind. */
19180
+ rows: number().int(),
19181
+ /** Bytes on disk held by those rows. */
19182
+ bytes: number().int()
19183
+ });
19184
+ /**
19185
+ * The media footprint broken down by KIND — the axis a deletion decision
19186
+ * actually turns on.
19187
+ *
19188
+ * A byte total says how much there is; it cannot say what is safe to remove.
19189
+ * The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
19190
+ * motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
19191
+ * `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
19192
+ * buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
19193
+ * nothing else, so sizing a deletion means summing per kind.
19194
+ *
19195
+ * ## Why `unaccounted*` exists
19196
+ *
19197
+ * `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
19198
+ * writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
19199
+ * from a SEPARATE unfiltered aggregate over the same rows, never from adding
19200
+ * `kinds` up. A row whose stored `kind` is not in the enum (written by a
19201
+ * retired code path, or by a version that knew a kind this one does not) would
19202
+ * otherwise vanish from the total silently, and an operator would delete
19203
+ * against a denominator smaller than the disk.
19204
+ *
19205
+ * `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
19206
+ * zero; a non-zero value is a real finding and must be shown, not rounded away.
19207
+ */
19208
+ var EventMediaKindBreakdownSchema = object({
19209
+ /** Every media row in scope, from one unfiltered aggregate. */
19210
+ totalRows: number().int(),
19211
+ /** Every media byte in scope, from that same aggregate. */
19212
+ totalBytes: number().int(),
19213
+ /** Per-kind footprint, ordered by bytes descending. */
19214
+ kinds: array(EventMediaKindFootprintSchema).readonly(),
19215
+ /** `totalRows` minus the summed `kinds` rows — see the schema note. */
19216
+ unaccountedRows: number().int(),
19217
+ /** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
19218
+ unaccountedBytes: number().int()
19219
+ });
19176
19220
  /** Per-kind counts returned by the event-prune / device-delete mutations. */
19177
19221
  var EventPruneCountsSchema = object({
19178
19222
  motion: number().int(),
@@ -19376,6 +19420,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19376
19420
  }), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
19377
19421
  kind: "query",
19378
19422
  auth: "admin"
19423
+ }), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
19424
+ kind: "query",
19425
+ auth: "admin"
19379
19426
  }), method(object({
19380
19427
  olderThanMs: number(),
19381
19428
  reason: OpsLogReasonSchema.optional()
@@ -21327,6 +21374,20 @@ method(object({
21327
21374
  error: string$2().optional()
21328
21375
  }), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
21329
21376
  providerId: string$2(),
21377
+ /**
21378
+ * The location this config is an UNSAVED edit of, when there is one.
21379
+ *
21380
+ * `listLocations` replaces every declared secret with the redaction
21381
+ * sentinel, so the edit modal's form state holds the sentinel for any
21382
+ * credential the operator did not retype — and posting that here
21383
+ * without a way to resolve it makes the provider try to authenticate
21384
+ * as `__camstack_redacted__` and report the operator's own working
21385
+ * password as wrong. Given this id, the orchestrator restores each
21386
+ * sentinel from the stored config (same rule as `upsertLocation`)
21387
+ * before dispatching. Omitted by the "Add location" wizard, where
21388
+ * every value was typed just now and nothing is stored yet.
21389
+ */
21390
+ locationId: string$2().optional(),
21330
21391
  config: record(string$2(), unknown())
21331
21392
  }), object({
21332
21393
  ok: boolean(),
@@ -35382,6 +35443,12 @@ Object.freeze({
35382
35443
  addonId: null,
35383
35444
  access: "view"
35384
35445
  },
35446
+ "pipelineAnalytics.getEventMediaFootprintByKind": {
35447
+ capName: "pipeline-analytics",
35448
+ capScope: "device",
35449
+ addonId: null,
35450
+ access: "view"
35451
+ },
35385
35452
  "pipelineAnalytics.getEventStoreFootprint": {
35386
35453
  capName: "pipeline-analytics",
35387
35454
  capScope: "device",
@@ -39047,6 +39114,11 @@ Object.freeze({
39047
39114
  form: "single",
39048
39115
  optional: false
39049
39116
  }],
39117
+ "pipelineAnalytics.getEventMediaFootprintByKind": [{
39118
+ name: "deviceId",
39119
+ form: "single",
39120
+ optional: true
39121
+ }],
39050
39122
  "pipelineAnalytics.getGroup": [{
39051
39123
  name: "deviceId",
39052
39124
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-matter-broker",
3
- "version": "0.2.46",
3
+ "version": "0.2.47",
4
4
  "description": "Matter broker addon for CamStack — owns a Matter fabric (commissioning + the long-lived controller) via the matter.js controller and brokers commissioned Matter nodes into CamStack",
5
5
  "keywords": [
6
6
  "camstack",