@camstack/addon-provider-homematic 1.2.48 → 1.2.49
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 +72 -0
- package/dist/addon.mjs +72 -0
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -19170,6 +19170,50 @@ var EventStoreFootprintSchema = object({
|
|
|
19170
19170
|
totalBytes: number().int(),
|
|
19171
19171
|
devices: array(EventStoreDeviceFootprintSchema).readonly()
|
|
19172
19172
|
});
|
|
19173
|
+
/** Event-media footprint for one {@link MediaFileKind}. */
|
|
19174
|
+
var EventMediaKindFootprintSchema = object({
|
|
19175
|
+
kind: MediaFileKindEnum,
|
|
19176
|
+
/** Media rows of this kind. */
|
|
19177
|
+
rows: number().int(),
|
|
19178
|
+
/** Bytes on disk held by those rows. */
|
|
19179
|
+
bytes: number().int()
|
|
19180
|
+
});
|
|
19181
|
+
/**
|
|
19182
|
+
* The media footprint broken down by KIND — the axis a deletion decision
|
|
19183
|
+
* actually turns on.
|
|
19184
|
+
*
|
|
19185
|
+
* A byte total says how much there is; it cannot say what is safe to remove.
|
|
19186
|
+
* The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
|
|
19187
|
+
* motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
|
|
19188
|
+
* `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
|
|
19189
|
+
* buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
|
|
19190
|
+
* nothing else, so sizing a deletion means summing per kind.
|
|
19191
|
+
*
|
|
19192
|
+
* ## Why `unaccounted*` exists
|
|
19193
|
+
*
|
|
19194
|
+
* `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
|
|
19195
|
+
* writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
|
|
19196
|
+
* from a SEPARATE unfiltered aggregate over the same rows, never from adding
|
|
19197
|
+
* `kinds` up. A row whose stored `kind` is not in the enum (written by a
|
|
19198
|
+
* retired code path, or by a version that knew a kind this one does not) would
|
|
19199
|
+
* otherwise vanish from the total silently, and an operator would delete
|
|
19200
|
+
* against a denominator smaller than the disk.
|
|
19201
|
+
*
|
|
19202
|
+
* `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
|
|
19203
|
+
* zero; a non-zero value is a real finding and must be shown, not rounded away.
|
|
19204
|
+
*/
|
|
19205
|
+
var EventMediaKindBreakdownSchema = object({
|
|
19206
|
+
/** Every media row in scope, from one unfiltered aggregate. */
|
|
19207
|
+
totalRows: number().int(),
|
|
19208
|
+
/** Every media byte in scope, from that same aggregate. */
|
|
19209
|
+
totalBytes: number().int(),
|
|
19210
|
+
/** Per-kind footprint, ordered by bytes descending. */
|
|
19211
|
+
kinds: array(EventMediaKindFootprintSchema).readonly(),
|
|
19212
|
+
/** `totalRows` minus the summed `kinds` rows — see the schema note. */
|
|
19213
|
+
unaccountedRows: number().int(),
|
|
19214
|
+
/** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
|
|
19215
|
+
unaccountedBytes: number().int()
|
|
19216
|
+
});
|
|
19173
19217
|
/** Per-kind counts returned by the event-prune / device-delete mutations. */
|
|
19174
19218
|
var EventPruneCountsSchema = object({
|
|
19175
19219
|
motion: number().int(),
|
|
@@ -19373,6 +19417,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19373
19417
|
}), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
|
|
19374
19418
|
kind: "query",
|
|
19375
19419
|
auth: "admin"
|
|
19420
|
+
}), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
|
|
19421
|
+
kind: "query",
|
|
19422
|
+
auth: "admin"
|
|
19376
19423
|
}), method(object({
|
|
19377
19424
|
olderThanMs: number(),
|
|
19378
19425
|
reason: OpsLogReasonSchema.optional()
|
|
@@ -21324,6 +21371,20 @@ method(object({
|
|
|
21324
21371
|
error: string().optional()
|
|
21325
21372
|
}), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
|
|
21326
21373
|
providerId: string(),
|
|
21374
|
+
/**
|
|
21375
|
+
* The location this config is an UNSAVED edit of, when there is one.
|
|
21376
|
+
*
|
|
21377
|
+
* `listLocations` replaces every declared secret with the redaction
|
|
21378
|
+
* sentinel, so the edit modal's form state holds the sentinel for any
|
|
21379
|
+
* credential the operator did not retype — and posting that here
|
|
21380
|
+
* without a way to resolve it makes the provider try to authenticate
|
|
21381
|
+
* as `__camstack_redacted__` and report the operator's own working
|
|
21382
|
+
* password as wrong. Given this id, the orchestrator restores each
|
|
21383
|
+
* sentinel from the stored config (same rule as `upsertLocation`)
|
|
21384
|
+
* before dispatching. Omitted by the "Add location" wizard, where
|
|
21385
|
+
* every value was typed just now and nothing is stored yet.
|
|
21386
|
+
*/
|
|
21387
|
+
locationId: string().optional(),
|
|
21327
21388
|
config: record(string(), unknown())
|
|
21328
21389
|
}), object({
|
|
21329
21390
|
ok: boolean(),
|
|
@@ -35362,6 +35423,12 @@ Object.freeze({
|
|
|
35362
35423
|
addonId: null,
|
|
35363
35424
|
access: "view"
|
|
35364
35425
|
},
|
|
35426
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": {
|
|
35427
|
+
capName: "pipeline-analytics",
|
|
35428
|
+
capScope: "device",
|
|
35429
|
+
addonId: null,
|
|
35430
|
+
access: "view"
|
|
35431
|
+
},
|
|
35365
35432
|
"pipelineAnalytics.getEventStoreFootprint": {
|
|
35366
35433
|
capName: "pipeline-analytics",
|
|
35367
35434
|
capScope: "device",
|
|
@@ -39027,6 +39094,11 @@ Object.freeze({
|
|
|
39027
39094
|
form: "single",
|
|
39028
39095
|
optional: false
|
|
39029
39096
|
}],
|
|
39097
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": [{
|
|
39098
|
+
name: "deviceId",
|
|
39099
|
+
form: "single",
|
|
39100
|
+
optional: true
|
|
39101
|
+
}],
|
|
39030
39102
|
"pipelineAnalytics.getGroup": [{
|
|
39031
39103
|
name: "deviceId",
|
|
39032
39104
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -19171,6 +19171,50 @@ var EventStoreFootprintSchema = object({
|
|
|
19171
19171
|
totalBytes: number().int(),
|
|
19172
19172
|
devices: array(EventStoreDeviceFootprintSchema).readonly()
|
|
19173
19173
|
});
|
|
19174
|
+
/** Event-media footprint for one {@link MediaFileKind}. */
|
|
19175
|
+
var EventMediaKindFootprintSchema = object({
|
|
19176
|
+
kind: MediaFileKindEnum,
|
|
19177
|
+
/** Media rows of this kind. */
|
|
19178
|
+
rows: number().int(),
|
|
19179
|
+
/** Bytes on disk held by those rows. */
|
|
19180
|
+
bytes: number().int()
|
|
19181
|
+
});
|
|
19182
|
+
/**
|
|
19183
|
+
* The media footprint broken down by KIND — the axis a deletion decision
|
|
19184
|
+
* actually turns on.
|
|
19185
|
+
*
|
|
19186
|
+
* A byte total says how much there is; it cannot say what is safe to remove.
|
|
19187
|
+
* The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
|
|
19188
|
+
* motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
|
|
19189
|
+
* `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
|
|
19190
|
+
* buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
|
|
19191
|
+
* nothing else, so sizing a deletion means summing per kind.
|
|
19192
|
+
*
|
|
19193
|
+
* ## Why `unaccounted*` exists
|
|
19194
|
+
*
|
|
19195
|
+
* `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
|
|
19196
|
+
* writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
|
|
19197
|
+
* from a SEPARATE unfiltered aggregate over the same rows, never from adding
|
|
19198
|
+
* `kinds` up. A row whose stored `kind` is not in the enum (written by a
|
|
19199
|
+
* retired code path, or by a version that knew a kind this one does not) would
|
|
19200
|
+
* otherwise vanish from the total silently, and an operator would delete
|
|
19201
|
+
* against a denominator smaller than the disk.
|
|
19202
|
+
*
|
|
19203
|
+
* `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
|
|
19204
|
+
* zero; a non-zero value is a real finding and must be shown, not rounded away.
|
|
19205
|
+
*/
|
|
19206
|
+
var EventMediaKindBreakdownSchema = object({
|
|
19207
|
+
/** Every media row in scope, from one unfiltered aggregate. */
|
|
19208
|
+
totalRows: number().int(),
|
|
19209
|
+
/** Every media byte in scope, from that same aggregate. */
|
|
19210
|
+
totalBytes: number().int(),
|
|
19211
|
+
/** Per-kind footprint, ordered by bytes descending. */
|
|
19212
|
+
kinds: array(EventMediaKindFootprintSchema).readonly(),
|
|
19213
|
+
/** `totalRows` minus the summed `kinds` rows — see the schema note. */
|
|
19214
|
+
unaccountedRows: number().int(),
|
|
19215
|
+
/** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
|
|
19216
|
+
unaccountedBytes: number().int()
|
|
19217
|
+
});
|
|
19174
19218
|
/** Per-kind counts returned by the event-prune / device-delete mutations. */
|
|
19175
19219
|
var EventPruneCountsSchema = object({
|
|
19176
19220
|
motion: number().int(),
|
|
@@ -19374,6 +19418,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19374
19418
|
}), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
|
|
19375
19419
|
kind: "query",
|
|
19376
19420
|
auth: "admin"
|
|
19421
|
+
}), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
|
|
19422
|
+
kind: "query",
|
|
19423
|
+
auth: "admin"
|
|
19377
19424
|
}), method(object({
|
|
19378
19425
|
olderThanMs: number(),
|
|
19379
19426
|
reason: OpsLogReasonSchema.optional()
|
|
@@ -21325,6 +21372,20 @@ method(object({
|
|
|
21325
21372
|
error: string().optional()
|
|
21326
21373
|
}), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
|
|
21327
21374
|
providerId: string(),
|
|
21375
|
+
/**
|
|
21376
|
+
* The location this config is an UNSAVED edit of, when there is one.
|
|
21377
|
+
*
|
|
21378
|
+
* `listLocations` replaces every declared secret with the redaction
|
|
21379
|
+
* sentinel, so the edit modal's form state holds the sentinel for any
|
|
21380
|
+
* credential the operator did not retype — and posting that here
|
|
21381
|
+
* without a way to resolve it makes the provider try to authenticate
|
|
21382
|
+
* as `__camstack_redacted__` and report the operator's own working
|
|
21383
|
+
* password as wrong. Given this id, the orchestrator restores each
|
|
21384
|
+
* sentinel from the stored config (same rule as `upsertLocation`)
|
|
21385
|
+
* before dispatching. Omitted by the "Add location" wizard, where
|
|
21386
|
+
* every value was typed just now and nothing is stored yet.
|
|
21387
|
+
*/
|
|
21388
|
+
locationId: string().optional(),
|
|
21328
21389
|
config: record(string(), unknown())
|
|
21329
21390
|
}), object({
|
|
21330
21391
|
ok: boolean(),
|
|
@@ -35363,6 +35424,12 @@ Object.freeze({
|
|
|
35363
35424
|
addonId: null,
|
|
35364
35425
|
access: "view"
|
|
35365
35426
|
},
|
|
35427
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": {
|
|
35428
|
+
capName: "pipeline-analytics",
|
|
35429
|
+
capScope: "device",
|
|
35430
|
+
addonId: null,
|
|
35431
|
+
access: "view"
|
|
35432
|
+
},
|
|
35366
35433
|
"pipelineAnalytics.getEventStoreFootprint": {
|
|
35367
35434
|
capName: "pipeline-analytics",
|
|
35368
35435
|
capScope: "device",
|
|
@@ -39028,6 +39095,11 @@ Object.freeze({
|
|
|
39028
39095
|
form: "single",
|
|
39029
39096
|
optional: false
|
|
39030
39097
|
}],
|
|
39098
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": [{
|
|
39099
|
+
name: "deviceId",
|
|
39100
|
+
form: "single",
|
|
39101
|
+
optional: true
|
|
39102
|
+
}],
|
|
39031
39103
|
"pipelineAnalytics.getGroup": [{
|
|
39032
39104
|
name: "deviceId",
|
|
39033
39105
|
form: "single",
|
package/package.json
CHANGED