@camstack/addon-provider-rademacher 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 +72 -0
- package/dist/addon.mjs +72 -0
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -20080,6 +20080,50 @@ var EventStoreFootprintSchema = object({
|
|
|
20080
20080
|
totalBytes: number().int(),
|
|
20081
20081
|
devices: array(EventStoreDeviceFootprintSchema).readonly()
|
|
20082
20082
|
});
|
|
20083
|
+
/** Event-media footprint for one {@link MediaFileKind}. */
|
|
20084
|
+
var EventMediaKindFootprintSchema = object({
|
|
20085
|
+
kind: MediaFileKindEnum,
|
|
20086
|
+
/** Media rows of this kind. */
|
|
20087
|
+
rows: number().int(),
|
|
20088
|
+
/** Bytes on disk held by those rows. */
|
|
20089
|
+
bytes: number().int()
|
|
20090
|
+
});
|
|
20091
|
+
/**
|
|
20092
|
+
* The media footprint broken down by KIND — the axis a deletion decision
|
|
20093
|
+
* actually turns on.
|
|
20094
|
+
*
|
|
20095
|
+
* A byte total says how much there is; it cannot say what is safe to remove.
|
|
20096
|
+
* The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
|
|
20097
|
+
* motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
|
|
20098
|
+
* `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
|
|
20099
|
+
* buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
|
|
20100
|
+
* nothing else, so sizing a deletion means summing per kind.
|
|
20101
|
+
*
|
|
20102
|
+
* ## Why `unaccounted*` exists
|
|
20103
|
+
*
|
|
20104
|
+
* `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
|
|
20105
|
+
* writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
|
|
20106
|
+
* from a SEPARATE unfiltered aggregate over the same rows, never from adding
|
|
20107
|
+
* `kinds` up. A row whose stored `kind` is not in the enum (written by a
|
|
20108
|
+
* retired code path, or by a version that knew a kind this one does not) would
|
|
20109
|
+
* otherwise vanish from the total silently, and an operator would delete
|
|
20110
|
+
* against a denominator smaller than the disk.
|
|
20111
|
+
*
|
|
20112
|
+
* `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
|
|
20113
|
+
* zero; a non-zero value is a real finding and must be shown, not rounded away.
|
|
20114
|
+
*/
|
|
20115
|
+
var EventMediaKindBreakdownSchema = object({
|
|
20116
|
+
/** Every media row in scope, from one unfiltered aggregate. */
|
|
20117
|
+
totalRows: number().int(),
|
|
20118
|
+
/** Every media byte in scope, from that same aggregate. */
|
|
20119
|
+
totalBytes: number().int(),
|
|
20120
|
+
/** Per-kind footprint, ordered by bytes descending. */
|
|
20121
|
+
kinds: array(EventMediaKindFootprintSchema).readonly(),
|
|
20122
|
+
/** `totalRows` minus the summed `kinds` rows — see the schema note. */
|
|
20123
|
+
unaccountedRows: number().int(),
|
|
20124
|
+
/** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
|
|
20125
|
+
unaccountedBytes: number().int()
|
|
20126
|
+
});
|
|
20083
20127
|
/** Per-kind counts returned by the event-prune / device-delete mutations. */
|
|
20084
20128
|
var EventPruneCountsSchema = object({
|
|
20085
20129
|
motion: number().int(),
|
|
@@ -20283,6 +20327,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20283
20327
|
}), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
|
|
20284
20328
|
kind: "query",
|
|
20285
20329
|
auth: "admin"
|
|
20330
|
+
}), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
|
|
20331
|
+
kind: "query",
|
|
20332
|
+
auth: "admin"
|
|
20286
20333
|
}), method(object({
|
|
20287
20334
|
olderThanMs: number(),
|
|
20288
20335
|
reason: OpsLogReasonSchema.optional()
|
|
@@ -22234,6 +22281,20 @@ method(object({
|
|
|
22234
22281
|
error: string().optional()
|
|
22235
22282
|
}), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
|
|
22236
22283
|
providerId: string(),
|
|
22284
|
+
/**
|
|
22285
|
+
* The location this config is an UNSAVED edit of, when there is one.
|
|
22286
|
+
*
|
|
22287
|
+
* `listLocations` replaces every declared secret with the redaction
|
|
22288
|
+
* sentinel, so the edit modal's form state holds the sentinel for any
|
|
22289
|
+
* credential the operator did not retype — and posting that here
|
|
22290
|
+
* without a way to resolve it makes the provider try to authenticate
|
|
22291
|
+
* as `__camstack_redacted__` and report the operator's own working
|
|
22292
|
+
* password as wrong. Given this id, the orchestrator restores each
|
|
22293
|
+
* sentinel from the stored config (same rule as `upsertLocation`)
|
|
22294
|
+
* before dispatching. Omitted by the "Add location" wizard, where
|
|
22295
|
+
* every value was typed just now and nothing is stored yet.
|
|
22296
|
+
*/
|
|
22297
|
+
locationId: string().optional(),
|
|
22237
22298
|
config: record(string(), unknown())
|
|
22238
22299
|
}), object({
|
|
22239
22300
|
ok: boolean(),
|
|
@@ -36272,6 +36333,12 @@ Object.freeze({
|
|
|
36272
36333
|
addonId: null,
|
|
36273
36334
|
access: "view"
|
|
36274
36335
|
},
|
|
36336
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": {
|
|
36337
|
+
capName: "pipeline-analytics",
|
|
36338
|
+
capScope: "device",
|
|
36339
|
+
addonId: null,
|
|
36340
|
+
access: "view"
|
|
36341
|
+
},
|
|
36275
36342
|
"pipelineAnalytics.getEventStoreFootprint": {
|
|
36276
36343
|
capName: "pipeline-analytics",
|
|
36277
36344
|
capScope: "device",
|
|
@@ -39937,6 +40004,11 @@ Object.freeze({
|
|
|
39937
40004
|
form: "single",
|
|
39938
40005
|
optional: false
|
|
39939
40006
|
}],
|
|
40007
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": [{
|
|
40008
|
+
name: "deviceId",
|
|
40009
|
+
form: "single",
|
|
40010
|
+
optional: true
|
|
40011
|
+
}],
|
|
39940
40012
|
"pipelineAnalytics.getGroup": [{
|
|
39941
40013
|
name: "deviceId",
|
|
39942
40014
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -20079,6 +20079,50 @@ var EventStoreFootprintSchema = object({
|
|
|
20079
20079
|
totalBytes: number().int(),
|
|
20080
20080
|
devices: array(EventStoreDeviceFootprintSchema).readonly()
|
|
20081
20081
|
});
|
|
20082
|
+
/** Event-media footprint for one {@link MediaFileKind}. */
|
|
20083
|
+
var EventMediaKindFootprintSchema = object({
|
|
20084
|
+
kind: MediaFileKindEnum,
|
|
20085
|
+
/** Media rows of this kind. */
|
|
20086
|
+
rows: number().int(),
|
|
20087
|
+
/** Bytes on disk held by those rows. */
|
|
20088
|
+
bytes: number().int()
|
|
20089
|
+
});
|
|
20090
|
+
/**
|
|
20091
|
+
* The media footprint broken down by KIND — the axis a deletion decision
|
|
20092
|
+
* actually turns on.
|
|
20093
|
+
*
|
|
20094
|
+
* A byte total says how much there is; it cannot say what is safe to remove.
|
|
20095
|
+
* The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
|
|
20096
|
+
* motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
|
|
20097
|
+
* `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
|
|
20098
|
+
* buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
|
|
20099
|
+
* nothing else, so sizing a deletion means summing per kind.
|
|
20100
|
+
*
|
|
20101
|
+
* ## Why `unaccounted*` exists
|
|
20102
|
+
*
|
|
20103
|
+
* `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
|
|
20104
|
+
* writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
|
|
20105
|
+
* from a SEPARATE unfiltered aggregate over the same rows, never from adding
|
|
20106
|
+
* `kinds` up. A row whose stored `kind` is not in the enum (written by a
|
|
20107
|
+
* retired code path, or by a version that knew a kind this one does not) would
|
|
20108
|
+
* otherwise vanish from the total silently, and an operator would delete
|
|
20109
|
+
* against a denominator smaller than the disk.
|
|
20110
|
+
*
|
|
20111
|
+
* `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
|
|
20112
|
+
* zero; a non-zero value is a real finding and must be shown, not rounded away.
|
|
20113
|
+
*/
|
|
20114
|
+
var EventMediaKindBreakdownSchema = object({
|
|
20115
|
+
/** Every media row in scope, from one unfiltered aggregate. */
|
|
20116
|
+
totalRows: number().int(),
|
|
20117
|
+
/** Every media byte in scope, from that same aggregate. */
|
|
20118
|
+
totalBytes: number().int(),
|
|
20119
|
+
/** Per-kind footprint, ordered by bytes descending. */
|
|
20120
|
+
kinds: array(EventMediaKindFootprintSchema).readonly(),
|
|
20121
|
+
/** `totalRows` minus the summed `kinds` rows — see the schema note. */
|
|
20122
|
+
unaccountedRows: number().int(),
|
|
20123
|
+
/** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
|
|
20124
|
+
unaccountedBytes: number().int()
|
|
20125
|
+
});
|
|
20082
20126
|
/** Per-kind counts returned by the event-prune / device-delete mutations. */
|
|
20083
20127
|
var EventPruneCountsSchema = object({
|
|
20084
20128
|
motion: number().int(),
|
|
@@ -20282,6 +20326,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
20282
20326
|
}), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
|
|
20283
20327
|
kind: "query",
|
|
20284
20328
|
auth: "admin"
|
|
20329
|
+
}), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
|
|
20330
|
+
kind: "query",
|
|
20331
|
+
auth: "admin"
|
|
20285
20332
|
}), method(object({
|
|
20286
20333
|
olderThanMs: number(),
|
|
20287
20334
|
reason: OpsLogReasonSchema.optional()
|
|
@@ -22233,6 +22280,20 @@ method(object({
|
|
|
22233
22280
|
error: string().optional()
|
|
22234
22281
|
}), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
|
|
22235
22282
|
providerId: string(),
|
|
22283
|
+
/**
|
|
22284
|
+
* The location this config is an UNSAVED edit of, when there is one.
|
|
22285
|
+
*
|
|
22286
|
+
* `listLocations` replaces every declared secret with the redaction
|
|
22287
|
+
* sentinel, so the edit modal's form state holds the sentinel for any
|
|
22288
|
+
* credential the operator did not retype — and posting that here
|
|
22289
|
+
* without a way to resolve it makes the provider try to authenticate
|
|
22290
|
+
* as `__camstack_redacted__` and report the operator's own working
|
|
22291
|
+
* password as wrong. Given this id, the orchestrator restores each
|
|
22292
|
+
* sentinel from the stored config (same rule as `upsertLocation`)
|
|
22293
|
+
* before dispatching. Omitted by the "Add location" wizard, where
|
|
22294
|
+
* every value was typed just now and nothing is stored yet.
|
|
22295
|
+
*/
|
|
22296
|
+
locationId: string().optional(),
|
|
22236
22297
|
config: record(string(), unknown())
|
|
22237
22298
|
}), object({
|
|
22238
22299
|
ok: boolean(),
|
|
@@ -36271,6 +36332,12 @@ Object.freeze({
|
|
|
36271
36332
|
addonId: null,
|
|
36272
36333
|
access: "view"
|
|
36273
36334
|
},
|
|
36335
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": {
|
|
36336
|
+
capName: "pipeline-analytics",
|
|
36337
|
+
capScope: "device",
|
|
36338
|
+
addonId: null,
|
|
36339
|
+
access: "view"
|
|
36340
|
+
},
|
|
36274
36341
|
"pipelineAnalytics.getEventStoreFootprint": {
|
|
36275
36342
|
capName: "pipeline-analytics",
|
|
36276
36343
|
capScope: "device",
|
|
@@ -39936,6 +40003,11 @@ Object.freeze({
|
|
|
39936
40003
|
form: "single",
|
|
39937
40004
|
optional: false
|
|
39938
40005
|
}],
|
|
40006
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": [{
|
|
40007
|
+
name: "deviceId",
|
|
40008
|
+
form: "single",
|
|
40009
|
+
optional: true
|
|
40010
|
+
}],
|
|
39939
40011
|
"pipelineAnalytics.getGroup": [{
|
|
39940
40012
|
name: "deviceId",
|
|
39941
40013
|
form: "single",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-rademacher",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.47",
|
|
4
4
|
"description": "Rademacher HomePilot device-provider addon for CamStack — wraps the @apocaliss92/noderademacher local-hub client (roller shutters over the cover cap)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|