@camstack/addon-provider-gree 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
@@ -19098,6 +19098,50 @@ var EventStoreFootprintSchema = object({
19098
19098
  totalBytes: number().int(),
19099
19099
  devices: array(EventStoreDeviceFootprintSchema).readonly()
19100
19100
  });
19101
+ /** Event-media footprint for one {@link MediaFileKind}. */
19102
+ var EventMediaKindFootprintSchema = object({
19103
+ kind: MediaFileKindEnum,
19104
+ /** Media rows of this kind. */
19105
+ rows: number().int(),
19106
+ /** Bytes on disk held by those rows. */
19107
+ bytes: number().int()
19108
+ });
19109
+ /**
19110
+ * The media footprint broken down by KIND — the axis a deletion decision
19111
+ * actually turns on.
19112
+ *
19113
+ * A byte total says how much there is; it cannot say what is safe to remove.
19114
+ * The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
19115
+ * motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
19116
+ * `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
19117
+ * buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
19118
+ * nothing else, so sizing a deletion means summing per kind.
19119
+ *
19120
+ * ## Why `unaccounted*` exists
19121
+ *
19122
+ * `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
19123
+ * writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
19124
+ * from a SEPARATE unfiltered aggregate over the same rows, never from adding
19125
+ * `kinds` up. A row whose stored `kind` is not in the enum (written by a
19126
+ * retired code path, or by a version that knew a kind this one does not) would
19127
+ * otherwise vanish from the total silently, and an operator would delete
19128
+ * against a denominator smaller than the disk.
19129
+ *
19130
+ * `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
19131
+ * zero; a non-zero value is a real finding and must be shown, not rounded away.
19132
+ */
19133
+ var EventMediaKindBreakdownSchema = object({
19134
+ /** Every media row in scope, from one unfiltered aggregate. */
19135
+ totalRows: number().int(),
19136
+ /** Every media byte in scope, from that same aggregate. */
19137
+ totalBytes: number().int(),
19138
+ /** Per-kind footprint, ordered by bytes descending. */
19139
+ kinds: array(EventMediaKindFootprintSchema).readonly(),
19140
+ /** `totalRows` minus the summed `kinds` rows — see the schema note. */
19141
+ unaccountedRows: number().int(),
19142
+ /** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
19143
+ unaccountedBytes: number().int()
19144
+ });
19101
19145
  /** Per-kind counts returned by the event-prune / device-delete mutations. */
19102
19146
  var EventPruneCountsSchema = object({
19103
19147
  motion: number().int(),
@@ -19301,6 +19345,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19301
19345
  }), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
19302
19346
  kind: "query",
19303
19347
  auth: "admin"
19348
+ }), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
19349
+ kind: "query",
19350
+ auth: "admin"
19304
19351
  }), method(object({
19305
19352
  olderThanMs: number(),
19306
19353
  reason: OpsLogReasonSchema.optional()
@@ -21252,6 +21299,20 @@ method(object({
21252
21299
  error: string().optional()
21253
21300
  }), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
21254
21301
  providerId: string(),
21302
+ /**
21303
+ * The location this config is an UNSAVED edit of, when there is one.
21304
+ *
21305
+ * `listLocations` replaces every declared secret with the redaction
21306
+ * sentinel, so the edit modal's form state holds the sentinel for any
21307
+ * credential the operator did not retype — and posting that here
21308
+ * without a way to resolve it makes the provider try to authenticate
21309
+ * as `__camstack_redacted__` and report the operator's own working
21310
+ * password as wrong. Given this id, the orchestrator restores each
21311
+ * sentinel from the stored config (same rule as `upsertLocation`)
21312
+ * before dispatching. Omitted by the "Add location" wizard, where
21313
+ * every value was typed just now and nothing is stored yet.
21314
+ */
21315
+ locationId: string().optional(),
21255
21316
  config: record(string(), unknown())
21256
21317
  }), object({
21257
21318
  ok: boolean(),
@@ -35290,6 +35351,12 @@ Object.freeze({
35290
35351
  addonId: null,
35291
35352
  access: "view"
35292
35353
  },
35354
+ "pipelineAnalytics.getEventMediaFootprintByKind": {
35355
+ capName: "pipeline-analytics",
35356
+ capScope: "device",
35357
+ addonId: null,
35358
+ access: "view"
35359
+ },
35293
35360
  "pipelineAnalytics.getEventStoreFootprint": {
35294
35361
  capName: "pipeline-analytics",
35295
35362
  capScope: "device",
@@ -38955,6 +39022,11 @@ Object.freeze({
38955
39022
  form: "single",
38956
39023
  optional: false
38957
39024
  }],
39025
+ "pipelineAnalytics.getEventMediaFootprintByKind": [{
39026
+ name: "deviceId",
39027
+ form: "single",
39028
+ optional: true
39029
+ }],
38958
39030
  "pipelineAnalytics.getGroup": [{
38959
39031
  name: "deviceId",
38960
39032
  form: "single",
package/dist/addon.mjs CHANGED
@@ -19097,6 +19097,50 @@ var EventStoreFootprintSchema = object({
19097
19097
  totalBytes: number().int(),
19098
19098
  devices: array(EventStoreDeviceFootprintSchema).readonly()
19099
19099
  });
19100
+ /** Event-media footprint for one {@link MediaFileKind}. */
19101
+ var EventMediaKindFootprintSchema = object({
19102
+ kind: MediaFileKindEnum,
19103
+ /** Media rows of this kind. */
19104
+ rows: number().int(),
19105
+ /** Bytes on disk held by those rows. */
19106
+ bytes: number().int()
19107
+ });
19108
+ /**
19109
+ * The media footprint broken down by KIND — the axis a deletion decision
19110
+ * actually turns on.
19111
+ *
19112
+ * A byte total says how much there is; it cannot say what is safe to remove.
19113
+ * The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
19114
+ * motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
19115
+ * `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
19116
+ * buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
19117
+ * nothing else, so sizing a deletion means summing per kind.
19118
+ *
19119
+ * ## Why `unaccounted*` exists
19120
+ *
19121
+ * `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
19122
+ * writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
19123
+ * from a SEPARATE unfiltered aggregate over the same rows, never from adding
19124
+ * `kinds` up. A row whose stored `kind` is not in the enum (written by a
19125
+ * retired code path, or by a version that knew a kind this one does not) would
19126
+ * otherwise vanish from the total silently, and an operator would delete
19127
+ * against a denominator smaller than the disk.
19128
+ *
19129
+ * `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
19130
+ * zero; a non-zero value is a real finding and must be shown, not rounded away.
19131
+ */
19132
+ var EventMediaKindBreakdownSchema = object({
19133
+ /** Every media row in scope, from one unfiltered aggregate. */
19134
+ totalRows: number().int(),
19135
+ /** Every media byte in scope, from that same aggregate. */
19136
+ totalBytes: number().int(),
19137
+ /** Per-kind footprint, ordered by bytes descending. */
19138
+ kinds: array(EventMediaKindFootprintSchema).readonly(),
19139
+ /** `totalRows` minus the summed `kinds` rows — see the schema note. */
19140
+ unaccountedRows: number().int(),
19141
+ /** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
19142
+ unaccountedBytes: number().int()
19143
+ });
19100
19144
  /** Per-kind counts returned by the event-prune / device-delete mutations. */
19101
19145
  var EventPruneCountsSchema = object({
19102
19146
  motion: number().int(),
@@ -19300,6 +19344,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19300
19344
  }), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
19301
19345
  kind: "query",
19302
19346
  auth: "admin"
19347
+ }), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
19348
+ kind: "query",
19349
+ auth: "admin"
19303
19350
  }), method(object({
19304
19351
  olderThanMs: number(),
19305
19352
  reason: OpsLogReasonSchema.optional()
@@ -21251,6 +21298,20 @@ method(object({
21251
21298
  error: string().optional()
21252
21299
  }), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
21253
21300
  providerId: string(),
21301
+ /**
21302
+ * The location this config is an UNSAVED edit of, when there is one.
21303
+ *
21304
+ * `listLocations` replaces every declared secret with the redaction
21305
+ * sentinel, so the edit modal's form state holds the sentinel for any
21306
+ * credential the operator did not retype — and posting that here
21307
+ * without a way to resolve it makes the provider try to authenticate
21308
+ * as `__camstack_redacted__` and report the operator's own working
21309
+ * password as wrong. Given this id, the orchestrator restores each
21310
+ * sentinel from the stored config (same rule as `upsertLocation`)
21311
+ * before dispatching. Omitted by the "Add location" wizard, where
21312
+ * every value was typed just now and nothing is stored yet.
21313
+ */
21314
+ locationId: string().optional(),
21254
21315
  config: record(string(), unknown())
21255
21316
  }), object({
21256
21317
  ok: boolean(),
@@ -35289,6 +35350,12 @@ Object.freeze({
35289
35350
  addonId: null,
35290
35351
  access: "view"
35291
35352
  },
35353
+ "pipelineAnalytics.getEventMediaFootprintByKind": {
35354
+ capName: "pipeline-analytics",
35355
+ capScope: "device",
35356
+ addonId: null,
35357
+ access: "view"
35358
+ },
35292
35359
  "pipelineAnalytics.getEventStoreFootprint": {
35293
35360
  capName: "pipeline-analytics",
35294
35361
  capScope: "device",
@@ -38954,6 +39021,11 @@ Object.freeze({
38954
39021
  form: "single",
38955
39022
  optional: false
38956
39023
  }],
39024
+ "pipelineAnalytics.getEventMediaFootprintByKind": [{
39025
+ name: "deviceId",
39026
+ form: "single",
39027
+ optional: true
39028
+ }],
38957
39029
  "pipelineAnalytics.getGroup": [{
38958
39030
  name: "deviceId",
38959
39031
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-gree",
3
- "version": "0.2.46",
3
+ "version": "0.2.47",
4
4
  "description": "Gree air-conditioner device-provider addon for CamStack — wraps the @apocaliss92/nodegree local-UDP client (LAN discovery + AES control), exposing climate-control and fan-control",
5
5
  "keywords": [
6
6
  "camstack",