@camstack/addon-decoder-ffmpeg 1.2.47 → 1.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/index.js CHANGED
@@ -18884,6 +18884,50 @@ var EventStoreFootprintSchema = object({
18884
18884
  totalBytes: number().int(),
18885
18885
  devices: array(EventStoreDeviceFootprintSchema).readonly()
18886
18886
  });
18887
+ /** Event-media footprint for one {@link MediaFileKind}. */
18888
+ var EventMediaKindFootprintSchema = object({
18889
+ kind: MediaFileKindEnum,
18890
+ /** Media rows of this kind. */
18891
+ rows: number().int(),
18892
+ /** Bytes on disk held by those rows. */
18893
+ bytes: number().int()
18894
+ });
18895
+ /**
18896
+ * The media footprint broken down by KIND — the axis a deletion decision
18897
+ * actually turns on.
18898
+ *
18899
+ * A byte total says how much there is; it cannot say what is safe to remove.
18900
+ * The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
18901
+ * motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
18902
+ * `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
18903
+ * buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
18904
+ * nothing else, so sizing a deletion means summing per kind.
18905
+ *
18906
+ * ## Why `unaccounted*` exists
18907
+ *
18908
+ * `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
18909
+ * writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
18910
+ * from a SEPARATE unfiltered aggregate over the same rows, never from adding
18911
+ * `kinds` up. A row whose stored `kind` is not in the enum (written by a
18912
+ * retired code path, or by a version that knew a kind this one does not) would
18913
+ * otherwise vanish from the total silently, and an operator would delete
18914
+ * against a denominator smaller than the disk.
18915
+ *
18916
+ * `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
18917
+ * zero; a non-zero value is a real finding and must be shown, not rounded away.
18918
+ */
18919
+ var EventMediaKindBreakdownSchema = object({
18920
+ /** Every media row in scope, from one unfiltered aggregate. */
18921
+ totalRows: number().int(),
18922
+ /** Every media byte in scope, from that same aggregate. */
18923
+ totalBytes: number().int(),
18924
+ /** Per-kind footprint, ordered by bytes descending. */
18925
+ kinds: array(EventMediaKindFootprintSchema).readonly(),
18926
+ /** `totalRows` minus the summed `kinds` rows — see the schema note. */
18927
+ unaccountedRows: number().int(),
18928
+ /** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
18929
+ unaccountedBytes: number().int()
18930
+ });
18887
18931
  /** Per-kind counts returned by the event-prune / device-delete mutations. */
18888
18932
  var EventPruneCountsSchema = object({
18889
18933
  motion: number().int(),
@@ -19087,6 +19131,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19087
19131
  }), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
19088
19132
  kind: "query",
19089
19133
  auth: "admin"
19134
+ }), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
19135
+ kind: "query",
19136
+ auth: "admin"
19090
19137
  }), method(object({
19091
19138
  olderThanMs: number(),
19092
19139
  reason: OpsLogReasonSchema.optional()
@@ -21038,6 +21085,20 @@ method(object({
21038
21085
  error: string().optional()
21039
21086
  }), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
21040
21087
  providerId: string(),
21088
+ /**
21089
+ * The location this config is an UNSAVED edit of, when there is one.
21090
+ *
21091
+ * `listLocations` replaces every declared secret with the redaction
21092
+ * sentinel, so the edit modal's form state holds the sentinel for any
21093
+ * credential the operator did not retype — and posting that here
21094
+ * without a way to resolve it makes the provider try to authenticate
21095
+ * as `__camstack_redacted__` and report the operator's own working
21096
+ * password as wrong. Given this id, the orchestrator restores each
21097
+ * sentinel from the stored config (same rule as `upsertLocation`)
21098
+ * before dispatching. Omitted by the "Add location" wizard, where
21099
+ * every value was typed just now and nothing is stored yet.
21100
+ */
21101
+ locationId: string().optional(),
21041
21102
  config: record(string(), unknown())
21042
21103
  }), object({
21043
21104
  ok: boolean(),
@@ -31692,6 +31753,12 @@ Object.freeze({
31692
31753
  addonId: null,
31693
31754
  access: "view"
31694
31755
  },
31756
+ "pipelineAnalytics.getEventMediaFootprintByKind": {
31757
+ capName: "pipeline-analytics",
31758
+ capScope: "device",
31759
+ addonId: null,
31760
+ access: "view"
31761
+ },
31695
31762
  "pipelineAnalytics.getEventStoreFootprint": {
31696
31763
  capName: "pipeline-analytics",
31697
31764
  capScope: "device",
@@ -35357,6 +35424,11 @@ Object.freeze({
35357
35424
  form: "single",
35358
35425
  optional: false
35359
35426
  }],
35427
+ "pipelineAnalytics.getEventMediaFootprintByKind": [{
35428
+ name: "deviceId",
35429
+ form: "single",
35430
+ optional: true
35431
+ }],
35360
35432
  "pipelineAnalytics.getGroup": [{
35361
35433
  name: "deviceId",
35362
35434
  form: "single",
package/dist/index.mjs CHANGED
@@ -18880,6 +18880,50 @@ var EventStoreFootprintSchema = object({
18880
18880
  totalBytes: number().int(),
18881
18881
  devices: array(EventStoreDeviceFootprintSchema).readonly()
18882
18882
  });
18883
+ /** Event-media footprint for one {@link MediaFileKind}. */
18884
+ var EventMediaKindFootprintSchema = object({
18885
+ kind: MediaFileKindEnum,
18886
+ /** Media rows of this kind. */
18887
+ rows: number().int(),
18888
+ /** Bytes on disk held by those rows. */
18889
+ bytes: number().int()
18890
+ });
18891
+ /**
18892
+ * The media footprint broken down by KIND — the axis a deletion decision
18893
+ * actually turns on.
18894
+ *
18895
+ * A byte total says how much there is; it cannot say what is safe to remove.
18896
+ * The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
18897
+ * motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
18898
+ * `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
18899
+ * buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
18900
+ * nothing else, so sizing a deletion means summing per kind.
18901
+ *
18902
+ * ## Why `unaccounted*` exists
18903
+ *
18904
+ * `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
18905
+ * writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
18906
+ * from a SEPARATE unfiltered aggregate over the same rows, never from adding
18907
+ * `kinds` up. A row whose stored `kind` is not in the enum (written by a
18908
+ * retired code path, or by a version that knew a kind this one does not) would
18909
+ * otherwise vanish from the total silently, and an operator would delete
18910
+ * against a denominator smaller than the disk.
18911
+ *
18912
+ * `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
18913
+ * zero; a non-zero value is a real finding and must be shown, not rounded away.
18914
+ */
18915
+ var EventMediaKindBreakdownSchema = object({
18916
+ /** Every media row in scope, from one unfiltered aggregate. */
18917
+ totalRows: number().int(),
18918
+ /** Every media byte in scope, from that same aggregate. */
18919
+ totalBytes: number().int(),
18920
+ /** Per-kind footprint, ordered by bytes descending. */
18921
+ kinds: array(EventMediaKindFootprintSchema).readonly(),
18922
+ /** `totalRows` minus the summed `kinds` rows — see the schema note. */
18923
+ unaccountedRows: number().int(),
18924
+ /** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
18925
+ unaccountedBytes: number().int()
18926
+ });
18883
18927
  /** Per-kind counts returned by the event-prune / device-delete mutations. */
18884
18928
  var EventPruneCountsSchema = object({
18885
18929
  motion: number().int(),
@@ -19083,6 +19127,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19083
19127
  }), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
19084
19128
  kind: "query",
19085
19129
  auth: "admin"
19130
+ }), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
19131
+ kind: "query",
19132
+ auth: "admin"
19086
19133
  }), method(object({
19087
19134
  olderThanMs: number(),
19088
19135
  reason: OpsLogReasonSchema.optional()
@@ -21034,6 +21081,20 @@ method(object({
21034
21081
  error: string().optional()
21035
21082
  }), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
21036
21083
  providerId: string(),
21084
+ /**
21085
+ * The location this config is an UNSAVED edit of, when there is one.
21086
+ *
21087
+ * `listLocations` replaces every declared secret with the redaction
21088
+ * sentinel, so the edit modal's form state holds the sentinel for any
21089
+ * credential the operator did not retype — and posting that here
21090
+ * without a way to resolve it makes the provider try to authenticate
21091
+ * as `__camstack_redacted__` and report the operator's own working
21092
+ * password as wrong. Given this id, the orchestrator restores each
21093
+ * sentinel from the stored config (same rule as `upsertLocation`)
21094
+ * before dispatching. Omitted by the "Add location" wizard, where
21095
+ * every value was typed just now and nothing is stored yet.
21096
+ */
21097
+ locationId: string().optional(),
21037
21098
  config: record(string(), unknown())
21038
21099
  }), object({
21039
21100
  ok: boolean(),
@@ -31688,6 +31749,12 @@ Object.freeze({
31688
31749
  addonId: null,
31689
31750
  access: "view"
31690
31751
  },
31752
+ "pipelineAnalytics.getEventMediaFootprintByKind": {
31753
+ capName: "pipeline-analytics",
31754
+ capScope: "device",
31755
+ addonId: null,
31756
+ access: "view"
31757
+ },
31691
31758
  "pipelineAnalytics.getEventStoreFootprint": {
31692
31759
  capName: "pipeline-analytics",
31693
31760
  capScope: "device",
@@ -35353,6 +35420,11 @@ Object.freeze({
35353
35420
  form: "single",
35354
35421
  optional: false
35355
35422
  }],
35423
+ "pipelineAnalytics.getEventMediaFootprintByKind": [{
35424
+ name: "deviceId",
35425
+ form: "single",
35426
+ optional: true
35427
+ }],
35356
35428
  "pipelineAnalytics.getGroup": [{
35357
35429
  name: "deviceId",
35358
35430
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-decoder-ffmpeg",
3
- "version": "1.2.47",
3
+ "version": "1.2.48",
4
4
  "description": "Standalone ffmpeg-subprocess decoder fallback addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",