@camstack/addon-provider-reolink 1.2.70 → 1.2.71
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
|
@@ -19718,6 +19718,50 @@ var EventStoreFootprintSchema = object({
|
|
|
19718
19718
|
totalBytes: number().int(),
|
|
19719
19719
|
devices: array(EventStoreDeviceFootprintSchema).readonly()
|
|
19720
19720
|
});
|
|
19721
|
+
/** Event-media footprint for one {@link MediaFileKind}. */
|
|
19722
|
+
var EventMediaKindFootprintSchema = object({
|
|
19723
|
+
kind: MediaFileKindEnum,
|
|
19724
|
+
/** Media rows of this kind. */
|
|
19725
|
+
rows: number().int(),
|
|
19726
|
+
/** Bytes on disk held by those rows. */
|
|
19727
|
+
bytes: number().int()
|
|
19728
|
+
});
|
|
19729
|
+
/**
|
|
19730
|
+
* The media footprint broken down by KIND — the axis a deletion decision
|
|
19731
|
+
* actually turns on.
|
|
19732
|
+
*
|
|
19733
|
+
* A byte total says how much there is; it cannot say what is safe to remove.
|
|
19734
|
+
* The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
|
|
19735
|
+
* motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
|
|
19736
|
+
* `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
|
|
19737
|
+
* buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
|
|
19738
|
+
* nothing else, so sizing a deletion means summing per kind.
|
|
19739
|
+
*
|
|
19740
|
+
* ## Why `unaccounted*` exists
|
|
19741
|
+
*
|
|
19742
|
+
* `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
|
|
19743
|
+
* writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
|
|
19744
|
+
* from a SEPARATE unfiltered aggregate over the same rows, never from adding
|
|
19745
|
+
* `kinds` up. A row whose stored `kind` is not in the enum (written by a
|
|
19746
|
+
* retired code path, or by a version that knew a kind this one does not) would
|
|
19747
|
+
* otherwise vanish from the total silently, and an operator would delete
|
|
19748
|
+
* against a denominator smaller than the disk.
|
|
19749
|
+
*
|
|
19750
|
+
* `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
|
|
19751
|
+
* zero; a non-zero value is a real finding and must be shown, not rounded away.
|
|
19752
|
+
*/
|
|
19753
|
+
var EventMediaKindBreakdownSchema = object({
|
|
19754
|
+
/** Every media row in scope, from one unfiltered aggregate. */
|
|
19755
|
+
totalRows: number().int(),
|
|
19756
|
+
/** Every media byte in scope, from that same aggregate. */
|
|
19757
|
+
totalBytes: number().int(),
|
|
19758
|
+
/** Per-kind footprint, ordered by bytes descending. */
|
|
19759
|
+
kinds: array(EventMediaKindFootprintSchema).readonly(),
|
|
19760
|
+
/** `totalRows` minus the summed `kinds` rows — see the schema note. */
|
|
19761
|
+
unaccountedRows: number().int(),
|
|
19762
|
+
/** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
|
|
19763
|
+
unaccountedBytes: number().int()
|
|
19764
|
+
});
|
|
19721
19765
|
/** Per-kind counts returned by the event-prune / device-delete mutations. */
|
|
19722
19766
|
var EventPruneCountsSchema = object({
|
|
19723
19767
|
motion: number().int(),
|
|
@@ -19921,6 +19965,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19921
19965
|
}), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
|
|
19922
19966
|
kind: "query",
|
|
19923
19967
|
auth: "admin"
|
|
19968
|
+
}), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
|
|
19969
|
+
kind: "query",
|
|
19970
|
+
auth: "admin"
|
|
19924
19971
|
}), method(object({
|
|
19925
19972
|
olderThanMs: number(),
|
|
19926
19973
|
reason: OpsLogReasonSchema.optional()
|
|
@@ -21976,6 +22023,20 @@ method(object({
|
|
|
21976
22023
|
error: string().optional()
|
|
21977
22024
|
}), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
|
|
21978
22025
|
providerId: string(),
|
|
22026
|
+
/**
|
|
22027
|
+
* The location this config is an UNSAVED edit of, when there is one.
|
|
22028
|
+
*
|
|
22029
|
+
* `listLocations` replaces every declared secret with the redaction
|
|
22030
|
+
* sentinel, so the edit modal's form state holds the sentinel for any
|
|
22031
|
+
* credential the operator did not retype — and posting that here
|
|
22032
|
+
* without a way to resolve it makes the provider try to authenticate
|
|
22033
|
+
* as `__camstack_redacted__` and report the operator's own working
|
|
22034
|
+
* password as wrong. Given this id, the orchestrator restores each
|
|
22035
|
+
* sentinel from the stored config (same rule as `upsertLocation`)
|
|
22036
|
+
* before dispatching. Omitted by the "Add location" wizard, where
|
|
22037
|
+
* every value was typed just now and nothing is stored yet.
|
|
22038
|
+
*/
|
|
22039
|
+
locationId: string().optional(),
|
|
21979
22040
|
config: record(string(), unknown())
|
|
21980
22041
|
}), object({
|
|
21981
22042
|
ok: boolean(),
|
|
@@ -36466,6 +36527,12 @@ Object.freeze({
|
|
|
36466
36527
|
addonId: null,
|
|
36467
36528
|
access: "view"
|
|
36468
36529
|
},
|
|
36530
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": {
|
|
36531
|
+
capName: "pipeline-analytics",
|
|
36532
|
+
capScope: "device",
|
|
36533
|
+
addonId: null,
|
|
36534
|
+
access: "view"
|
|
36535
|
+
},
|
|
36469
36536
|
"pipelineAnalytics.getEventStoreFootprint": {
|
|
36470
36537
|
capName: "pipeline-analytics",
|
|
36471
36538
|
capScope: "device",
|
|
@@ -40131,6 +40198,11 @@ Object.freeze({
|
|
|
40131
40198
|
form: "single",
|
|
40132
40199
|
optional: false
|
|
40133
40200
|
}],
|
|
40201
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": [{
|
|
40202
|
+
name: "deviceId",
|
|
40203
|
+
form: "single",
|
|
40204
|
+
optional: true
|
|
40205
|
+
}],
|
|
40134
40206
|
"pipelineAnalytics.getGroup": [{
|
|
40135
40207
|
name: "deviceId",
|
|
40136
40208
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -19713,6 +19713,50 @@ var EventStoreFootprintSchema = object({
|
|
|
19713
19713
|
totalBytes: number().int(),
|
|
19714
19714
|
devices: array(EventStoreDeviceFootprintSchema).readonly()
|
|
19715
19715
|
});
|
|
19716
|
+
/** Event-media footprint for one {@link MediaFileKind}. */
|
|
19717
|
+
var EventMediaKindFootprintSchema = object({
|
|
19718
|
+
kind: MediaFileKindEnum,
|
|
19719
|
+
/** Media rows of this kind. */
|
|
19720
|
+
rows: number().int(),
|
|
19721
|
+
/** Bytes on disk held by those rows. */
|
|
19722
|
+
bytes: number().int()
|
|
19723
|
+
});
|
|
19724
|
+
/**
|
|
19725
|
+
* The media footprint broken down by KIND — the axis a deletion decision
|
|
19726
|
+
* actually turns on.
|
|
19727
|
+
*
|
|
19728
|
+
* A byte total says how much there is; it cannot say what is safe to remove.
|
|
19729
|
+
* The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
|
|
19730
|
+
* motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
|
|
19731
|
+
* `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
|
|
19732
|
+
* buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
|
|
19733
|
+
* nothing else, so sizing a deletion means summing per kind.
|
|
19734
|
+
*
|
|
19735
|
+
* ## Why `unaccounted*` exists
|
|
19736
|
+
*
|
|
19737
|
+
* `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
|
|
19738
|
+
* writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
|
|
19739
|
+
* from a SEPARATE unfiltered aggregate over the same rows, never from adding
|
|
19740
|
+
* `kinds` up. A row whose stored `kind` is not in the enum (written by a
|
|
19741
|
+
* retired code path, or by a version that knew a kind this one does not) would
|
|
19742
|
+
* otherwise vanish from the total silently, and an operator would delete
|
|
19743
|
+
* against a denominator smaller than the disk.
|
|
19744
|
+
*
|
|
19745
|
+
* `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
|
|
19746
|
+
* zero; a non-zero value is a real finding and must be shown, not rounded away.
|
|
19747
|
+
*/
|
|
19748
|
+
var EventMediaKindBreakdownSchema = object({
|
|
19749
|
+
/** Every media row in scope, from one unfiltered aggregate. */
|
|
19750
|
+
totalRows: number().int(),
|
|
19751
|
+
/** Every media byte in scope, from that same aggregate. */
|
|
19752
|
+
totalBytes: number().int(),
|
|
19753
|
+
/** Per-kind footprint, ordered by bytes descending. */
|
|
19754
|
+
kinds: array(EventMediaKindFootprintSchema).readonly(),
|
|
19755
|
+
/** `totalRows` minus the summed `kinds` rows — see the schema note. */
|
|
19756
|
+
unaccountedRows: number().int(),
|
|
19757
|
+
/** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
|
|
19758
|
+
unaccountedBytes: number().int()
|
|
19759
|
+
});
|
|
19716
19760
|
/** Per-kind counts returned by the event-prune / device-delete mutations. */
|
|
19717
19761
|
var EventPruneCountsSchema = object({
|
|
19718
19762
|
motion: number().int(),
|
|
@@ -19916,6 +19960,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19916
19960
|
}), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
|
|
19917
19961
|
kind: "query",
|
|
19918
19962
|
auth: "admin"
|
|
19963
|
+
}), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
|
|
19964
|
+
kind: "query",
|
|
19965
|
+
auth: "admin"
|
|
19919
19966
|
}), method(object({
|
|
19920
19967
|
olderThanMs: number(),
|
|
19921
19968
|
reason: OpsLogReasonSchema.optional()
|
|
@@ -21971,6 +22018,20 @@ method(object({
|
|
|
21971
22018
|
error: string().optional()
|
|
21972
22019
|
}), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
|
|
21973
22020
|
providerId: string(),
|
|
22021
|
+
/**
|
|
22022
|
+
* The location this config is an UNSAVED edit of, when there is one.
|
|
22023
|
+
*
|
|
22024
|
+
* `listLocations` replaces every declared secret with the redaction
|
|
22025
|
+
* sentinel, so the edit modal's form state holds the sentinel for any
|
|
22026
|
+
* credential the operator did not retype — and posting that here
|
|
22027
|
+
* without a way to resolve it makes the provider try to authenticate
|
|
22028
|
+
* as `__camstack_redacted__` and report the operator's own working
|
|
22029
|
+
* password as wrong. Given this id, the orchestrator restores each
|
|
22030
|
+
* sentinel from the stored config (same rule as `upsertLocation`)
|
|
22031
|
+
* before dispatching. Omitted by the "Add location" wizard, where
|
|
22032
|
+
* every value was typed just now and nothing is stored yet.
|
|
22033
|
+
*/
|
|
22034
|
+
locationId: string().optional(),
|
|
21974
22035
|
config: record(string(), unknown())
|
|
21975
22036
|
}), object({
|
|
21976
22037
|
ok: boolean(),
|
|
@@ -36461,6 +36522,12 @@ Object.freeze({
|
|
|
36461
36522
|
addonId: null,
|
|
36462
36523
|
access: "view"
|
|
36463
36524
|
},
|
|
36525
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": {
|
|
36526
|
+
capName: "pipeline-analytics",
|
|
36527
|
+
capScope: "device",
|
|
36528
|
+
addonId: null,
|
|
36529
|
+
access: "view"
|
|
36530
|
+
},
|
|
36464
36531
|
"pipelineAnalytics.getEventStoreFootprint": {
|
|
36465
36532
|
capName: "pipeline-analytics",
|
|
36466
36533
|
capScope: "device",
|
|
@@ -40126,6 +40193,11 @@ Object.freeze({
|
|
|
40126
40193
|
form: "single",
|
|
40127
40194
|
optional: false
|
|
40128
40195
|
}],
|
|
40196
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": [{
|
|
40197
|
+
name: "deviceId",
|
|
40198
|
+
form: "single",
|
|
40199
|
+
optional: true
|
|
40200
|
+
}],
|
|
40129
40201
|
"pipelineAnalytics.getGroup": [{
|
|
40130
40202
|
name: "deviceId",
|
|
40131
40203
|
form: "single",
|