@camstack/addon-import-alexa 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
@@ -19338,6 +19338,50 @@ var EventStoreFootprintSchema = object({
19338
19338
  totalBytes: number().int(),
19339
19339
  devices: array(EventStoreDeviceFootprintSchema).readonly()
19340
19340
  });
19341
+ /** Event-media footprint for one {@link MediaFileKind}. */
19342
+ var EventMediaKindFootprintSchema = object({
19343
+ kind: MediaFileKindEnum,
19344
+ /** Media rows of this kind. */
19345
+ rows: number().int(),
19346
+ /** Bytes on disk held by those rows. */
19347
+ bytes: number().int()
19348
+ });
19349
+ /**
19350
+ * The media footprint broken down by KIND — the axis a deletion decision
19351
+ * actually turns on.
19352
+ *
19353
+ * A byte total says how much there is; it cannot say what is safe to remove.
19354
+ * The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
19355
+ * motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
19356
+ * `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
19357
+ * buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
19358
+ * nothing else, so sizing a deletion means summing per kind.
19359
+ *
19360
+ * ## Why `unaccounted*` exists
19361
+ *
19362
+ * `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
19363
+ * writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
19364
+ * from a SEPARATE unfiltered aggregate over the same rows, never from adding
19365
+ * `kinds` up. A row whose stored `kind` is not in the enum (written by a
19366
+ * retired code path, or by a version that knew a kind this one does not) would
19367
+ * otherwise vanish from the total silently, and an operator would delete
19368
+ * against a denominator smaller than the disk.
19369
+ *
19370
+ * `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
19371
+ * zero; a non-zero value is a real finding and must be shown, not rounded away.
19372
+ */
19373
+ var EventMediaKindBreakdownSchema = object({
19374
+ /** Every media row in scope, from one unfiltered aggregate. */
19375
+ totalRows: number().int(),
19376
+ /** Every media byte in scope, from that same aggregate. */
19377
+ totalBytes: number().int(),
19378
+ /** Per-kind footprint, ordered by bytes descending. */
19379
+ kinds: array(EventMediaKindFootprintSchema).readonly(),
19380
+ /** `totalRows` minus the summed `kinds` rows — see the schema note. */
19381
+ unaccountedRows: number().int(),
19382
+ /** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
19383
+ unaccountedBytes: number().int()
19384
+ });
19341
19385
  /** Per-kind counts returned by the event-prune / device-delete mutations. */
19342
19386
  var EventPruneCountsSchema = object({
19343
19387
  motion: number().int(),
@@ -19541,6 +19585,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19541
19585
  }), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
19542
19586
  kind: "query",
19543
19587
  auth: "admin"
19588
+ }), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
19589
+ kind: "query",
19590
+ auth: "admin"
19544
19591
  }), method(object({
19545
19592
  olderThanMs: number(),
19546
19593
  reason: OpsLogReasonSchema.optional()
@@ -21492,6 +21539,20 @@ method(object({
21492
21539
  error: string().optional()
21493
21540
  }), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
21494
21541
  providerId: string(),
21542
+ /**
21543
+ * The location this config is an UNSAVED edit of, when there is one.
21544
+ *
21545
+ * `listLocations` replaces every declared secret with the redaction
21546
+ * sentinel, so the edit modal's form state holds the sentinel for any
21547
+ * credential the operator did not retype — and posting that here
21548
+ * without a way to resolve it makes the provider try to authenticate
21549
+ * as `__camstack_redacted__` and report the operator's own working
21550
+ * password as wrong. Given this id, the orchestrator restores each
21551
+ * sentinel from the stored config (same rule as `upsertLocation`)
21552
+ * before dispatching. Omitted by the "Add location" wizard, where
21553
+ * every value was typed just now and nothing is stored yet.
21554
+ */
21555
+ locationId: string().optional(),
21495
21556
  config: record(string(), unknown())
21496
21557
  }), object({
21497
21558
  ok: boolean(),
@@ -35547,6 +35608,12 @@ Object.freeze({
35547
35608
  addonId: null,
35548
35609
  access: "view"
35549
35610
  },
35611
+ "pipelineAnalytics.getEventMediaFootprintByKind": {
35612
+ capName: "pipeline-analytics",
35613
+ capScope: "device",
35614
+ addonId: null,
35615
+ access: "view"
35616
+ },
35550
35617
  "pipelineAnalytics.getEventStoreFootprint": {
35551
35618
  capName: "pipeline-analytics",
35552
35619
  capScope: "device",
@@ -39212,6 +39279,11 @@ Object.freeze({
39212
39279
  form: "single",
39213
39280
  optional: false
39214
39281
  }],
39282
+ "pipelineAnalytics.getEventMediaFootprintByKind": [{
39283
+ name: "deviceId",
39284
+ form: "single",
39285
+ optional: true
39286
+ }],
39215
39287
  "pipelineAnalytics.getGroup": [{
39216
39288
  name: "deviceId",
39217
39289
  form: "single",
package/dist/addon.mjs CHANGED
@@ -19338,6 +19338,50 @@ var EventStoreFootprintSchema = object({
19338
19338
  totalBytes: number().int(),
19339
19339
  devices: array(EventStoreDeviceFootprintSchema).readonly()
19340
19340
  });
19341
+ /** Event-media footprint for one {@link MediaFileKind}. */
19342
+ var EventMediaKindFootprintSchema = object({
19343
+ kind: MediaFileKindEnum,
19344
+ /** Media rows of this kind. */
19345
+ rows: number().int(),
19346
+ /** Bytes on disk held by those rows. */
19347
+ bytes: number().int()
19348
+ });
19349
+ /**
19350
+ * The media footprint broken down by KIND — the axis a deletion decision
19351
+ * actually turns on.
19352
+ *
19353
+ * A byte total says how much there is; it cannot say what is safe to remove.
19354
+ * The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
19355
+ * motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
19356
+ * `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
19357
+ * buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
19358
+ * nothing else, so sizing a deletion means summing per kind.
19359
+ *
19360
+ * ## Why `unaccounted*` exists
19361
+ *
19362
+ * `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
19363
+ * writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
19364
+ * from a SEPARATE unfiltered aggregate over the same rows, never from adding
19365
+ * `kinds` up. A row whose stored `kind` is not in the enum (written by a
19366
+ * retired code path, or by a version that knew a kind this one does not) would
19367
+ * otherwise vanish from the total silently, and an operator would delete
19368
+ * against a denominator smaller than the disk.
19369
+ *
19370
+ * `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
19371
+ * zero; a non-zero value is a real finding and must be shown, not rounded away.
19372
+ */
19373
+ var EventMediaKindBreakdownSchema = object({
19374
+ /** Every media row in scope, from one unfiltered aggregate. */
19375
+ totalRows: number().int(),
19376
+ /** Every media byte in scope, from that same aggregate. */
19377
+ totalBytes: number().int(),
19378
+ /** Per-kind footprint, ordered by bytes descending. */
19379
+ kinds: array(EventMediaKindFootprintSchema).readonly(),
19380
+ /** `totalRows` minus the summed `kinds` rows — see the schema note. */
19381
+ unaccountedRows: number().int(),
19382
+ /** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
19383
+ unaccountedBytes: number().int()
19384
+ });
19341
19385
  /** Per-kind counts returned by the event-prune / device-delete mutations. */
19342
19386
  var EventPruneCountsSchema = object({
19343
19387
  motion: number().int(),
@@ -19541,6 +19585,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19541
19585
  }), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
19542
19586
  kind: "query",
19543
19587
  auth: "admin"
19588
+ }), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
19589
+ kind: "query",
19590
+ auth: "admin"
19544
19591
  }), method(object({
19545
19592
  olderThanMs: number(),
19546
19593
  reason: OpsLogReasonSchema.optional()
@@ -21492,6 +21539,20 @@ method(object({
21492
21539
  error: string().optional()
21493
21540
  }), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
21494
21541
  providerId: string(),
21542
+ /**
21543
+ * The location this config is an UNSAVED edit of, when there is one.
21544
+ *
21545
+ * `listLocations` replaces every declared secret with the redaction
21546
+ * sentinel, so the edit modal's form state holds the sentinel for any
21547
+ * credential the operator did not retype — and posting that here
21548
+ * without a way to resolve it makes the provider try to authenticate
21549
+ * as `__camstack_redacted__` and report the operator's own working
21550
+ * password as wrong. Given this id, the orchestrator restores each
21551
+ * sentinel from the stored config (same rule as `upsertLocation`)
21552
+ * before dispatching. Omitted by the "Add location" wizard, where
21553
+ * every value was typed just now and nothing is stored yet.
21554
+ */
21555
+ locationId: string().optional(),
21495
21556
  config: record(string(), unknown())
21496
21557
  }), object({
21497
21558
  ok: boolean(),
@@ -35547,6 +35608,12 @@ Object.freeze({
35547
35608
  addonId: null,
35548
35609
  access: "view"
35549
35610
  },
35611
+ "pipelineAnalytics.getEventMediaFootprintByKind": {
35612
+ capName: "pipeline-analytics",
35613
+ capScope: "device",
35614
+ addonId: null,
35615
+ access: "view"
35616
+ },
35550
35617
  "pipelineAnalytics.getEventStoreFootprint": {
35551
35618
  capName: "pipeline-analytics",
35552
35619
  capScope: "device",
@@ -39212,6 +39279,11 @@ Object.freeze({
39212
39279
  form: "single",
39213
39280
  optional: false
39214
39281
  }],
39282
+ "pipelineAnalytics.getEventMediaFootprintByKind": [{
39283
+ name: "deviceId",
39284
+ form: "single",
39285
+ optional: true
39286
+ }],
39215
39287
  "pipelineAnalytics.getGroup": [{
39216
39288
  name: "deviceId",
39217
39289
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-import-alexa",
3
- "version": "0.2.46",
3
+ "version": "0.2.47",
4
4
  "description": "Alexa device-import provider for CamStack — imports the smart-home devices in a user's Alexa account via the unofficial alexa-remote2 cookie/token client (the inverse of the Alexa exporter)",
5
5
  "keywords": [
6
6
  "camstack",