@camstack/addon-notifiers 1.2.51 → 1.2.52
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
|
@@ -18941,6 +18941,50 @@ var EventStoreFootprintSchema = object({
|
|
|
18941
18941
|
totalBytes: number().int(),
|
|
18942
18942
|
devices: array(EventStoreDeviceFootprintSchema).readonly()
|
|
18943
18943
|
});
|
|
18944
|
+
/** Event-media footprint for one {@link MediaFileKind}. */
|
|
18945
|
+
var EventMediaKindFootprintSchema = object({
|
|
18946
|
+
kind: MediaFileKindEnum,
|
|
18947
|
+
/** Media rows of this kind. */
|
|
18948
|
+
rows: number().int(),
|
|
18949
|
+
/** Bytes on disk held by those rows. */
|
|
18950
|
+
bytes: number().int()
|
|
18951
|
+
});
|
|
18952
|
+
/**
|
|
18953
|
+
* The media footprint broken down by KIND — the axis a deletion decision
|
|
18954
|
+
* actually turns on.
|
|
18955
|
+
*
|
|
18956
|
+
* A byte total says how much there is; it cannot say what is safe to remove.
|
|
18957
|
+
* The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
|
|
18958
|
+
* motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
|
|
18959
|
+
* `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
|
|
18960
|
+
* buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
|
|
18961
|
+
* nothing else, so sizing a deletion means summing per kind.
|
|
18962
|
+
*
|
|
18963
|
+
* ## Why `unaccounted*` exists
|
|
18964
|
+
*
|
|
18965
|
+
* `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
|
|
18966
|
+
* writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
|
|
18967
|
+
* from a SEPARATE unfiltered aggregate over the same rows, never from adding
|
|
18968
|
+
* `kinds` up. A row whose stored `kind` is not in the enum (written by a
|
|
18969
|
+
* retired code path, or by a version that knew a kind this one does not) would
|
|
18970
|
+
* otherwise vanish from the total silently, and an operator would delete
|
|
18971
|
+
* against a denominator smaller than the disk.
|
|
18972
|
+
*
|
|
18973
|
+
* `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
|
|
18974
|
+
* zero; a non-zero value is a real finding and must be shown, not rounded away.
|
|
18975
|
+
*/
|
|
18976
|
+
var EventMediaKindBreakdownSchema = object({
|
|
18977
|
+
/** Every media row in scope, from one unfiltered aggregate. */
|
|
18978
|
+
totalRows: number().int(),
|
|
18979
|
+
/** Every media byte in scope, from that same aggregate. */
|
|
18980
|
+
totalBytes: number().int(),
|
|
18981
|
+
/** Per-kind footprint, ordered by bytes descending. */
|
|
18982
|
+
kinds: array(EventMediaKindFootprintSchema).readonly(),
|
|
18983
|
+
/** `totalRows` minus the summed `kinds` rows — see the schema note. */
|
|
18984
|
+
unaccountedRows: number().int(),
|
|
18985
|
+
/** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
|
|
18986
|
+
unaccountedBytes: number().int()
|
|
18987
|
+
});
|
|
18944
18988
|
/** Per-kind counts returned by the event-prune / device-delete mutations. */
|
|
18945
18989
|
var EventPruneCountsSchema = object({
|
|
18946
18990
|
motion: number().int(),
|
|
@@ -19144,6 +19188,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19144
19188
|
}), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
|
|
19145
19189
|
kind: "query",
|
|
19146
19190
|
auth: "admin"
|
|
19191
|
+
}), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
|
|
19192
|
+
kind: "query",
|
|
19193
|
+
auth: "admin"
|
|
19147
19194
|
}), method(object({
|
|
19148
19195
|
olderThanMs: number(),
|
|
19149
19196
|
reason: OpsLogReasonSchema.optional()
|
|
@@ -21095,6 +21142,20 @@ method(object({
|
|
|
21095
21142
|
error: string().optional()
|
|
21096
21143
|
}), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
|
|
21097
21144
|
providerId: string(),
|
|
21145
|
+
/**
|
|
21146
|
+
* The location this config is an UNSAVED edit of, when there is one.
|
|
21147
|
+
*
|
|
21148
|
+
* `listLocations` replaces every declared secret with the redaction
|
|
21149
|
+
* sentinel, so the edit modal's form state holds the sentinel for any
|
|
21150
|
+
* credential the operator did not retype — and posting that here
|
|
21151
|
+
* without a way to resolve it makes the provider try to authenticate
|
|
21152
|
+
* as `__camstack_redacted__` and report the operator's own working
|
|
21153
|
+
* password as wrong. Given this id, the orchestrator restores each
|
|
21154
|
+
* sentinel from the stored config (same rule as `upsertLocation`)
|
|
21155
|
+
* before dispatching. Omitted by the "Add location" wizard, where
|
|
21156
|
+
* every value was typed just now and nothing is stored yet.
|
|
21157
|
+
*/
|
|
21158
|
+
locationId: string().optional(),
|
|
21098
21159
|
config: record(string(), unknown())
|
|
21099
21160
|
}), object({
|
|
21100
21161
|
ok: boolean(),
|
|
@@ -31749,6 +31810,12 @@ Object.freeze({
|
|
|
31749
31810
|
addonId: null,
|
|
31750
31811
|
access: "view"
|
|
31751
31812
|
},
|
|
31813
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": {
|
|
31814
|
+
capName: "pipeline-analytics",
|
|
31815
|
+
capScope: "device",
|
|
31816
|
+
addonId: null,
|
|
31817
|
+
access: "view"
|
|
31818
|
+
},
|
|
31752
31819
|
"pipelineAnalytics.getEventStoreFootprint": {
|
|
31753
31820
|
capName: "pipeline-analytics",
|
|
31754
31821
|
capScope: "device",
|
|
@@ -35414,6 +35481,11 @@ Object.freeze({
|
|
|
35414
35481
|
form: "single",
|
|
35415
35482
|
optional: false
|
|
35416
35483
|
}],
|
|
35484
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": [{
|
|
35485
|
+
name: "deviceId",
|
|
35486
|
+
form: "single",
|
|
35487
|
+
optional: true
|
|
35488
|
+
}],
|
|
35417
35489
|
"pipelineAnalytics.getGroup": [{
|
|
35418
35490
|
name: "deviceId",
|
|
35419
35491
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -18914,6 +18914,50 @@ var EventStoreFootprintSchema = object({
|
|
|
18914
18914
|
totalBytes: number().int(),
|
|
18915
18915
|
devices: array(EventStoreDeviceFootprintSchema).readonly()
|
|
18916
18916
|
});
|
|
18917
|
+
/** Event-media footprint for one {@link MediaFileKind}. */
|
|
18918
|
+
var EventMediaKindFootprintSchema = object({
|
|
18919
|
+
kind: MediaFileKindEnum,
|
|
18920
|
+
/** Media rows of this kind. */
|
|
18921
|
+
rows: number().int(),
|
|
18922
|
+
/** Bytes on disk held by those rows. */
|
|
18923
|
+
bytes: number().int()
|
|
18924
|
+
});
|
|
18925
|
+
/**
|
|
18926
|
+
* The media footprint broken down by KIND — the axis a deletion decision
|
|
18927
|
+
* actually turns on.
|
|
18928
|
+
*
|
|
18929
|
+
* A byte total says how much there is; it cannot say what is safe to remove.
|
|
18930
|
+
* The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
|
|
18931
|
+
* motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
|
|
18932
|
+
* `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
|
|
18933
|
+
* buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
|
|
18934
|
+
* nothing else, so sizing a deletion means summing per kind.
|
|
18935
|
+
*
|
|
18936
|
+
* ## Why `unaccounted*` exists
|
|
18937
|
+
*
|
|
18938
|
+
* `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
|
|
18939
|
+
* writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
|
|
18940
|
+
* from a SEPARATE unfiltered aggregate over the same rows, never from adding
|
|
18941
|
+
* `kinds` up. A row whose stored `kind` is not in the enum (written by a
|
|
18942
|
+
* retired code path, or by a version that knew a kind this one does not) would
|
|
18943
|
+
* otherwise vanish from the total silently, and an operator would delete
|
|
18944
|
+
* against a denominator smaller than the disk.
|
|
18945
|
+
*
|
|
18946
|
+
* `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
|
|
18947
|
+
* zero; a non-zero value is a real finding and must be shown, not rounded away.
|
|
18948
|
+
*/
|
|
18949
|
+
var EventMediaKindBreakdownSchema = object({
|
|
18950
|
+
/** Every media row in scope, from one unfiltered aggregate. */
|
|
18951
|
+
totalRows: number().int(),
|
|
18952
|
+
/** Every media byte in scope, from that same aggregate. */
|
|
18953
|
+
totalBytes: number().int(),
|
|
18954
|
+
/** Per-kind footprint, ordered by bytes descending. */
|
|
18955
|
+
kinds: array(EventMediaKindFootprintSchema).readonly(),
|
|
18956
|
+
/** `totalRows` minus the summed `kinds` rows — see the schema note. */
|
|
18957
|
+
unaccountedRows: number().int(),
|
|
18958
|
+
/** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
|
|
18959
|
+
unaccountedBytes: number().int()
|
|
18960
|
+
});
|
|
18917
18961
|
/** Per-kind counts returned by the event-prune / device-delete mutations. */
|
|
18918
18962
|
var EventPruneCountsSchema = object({
|
|
18919
18963
|
motion: number().int(),
|
|
@@ -19117,6 +19161,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19117
19161
|
}), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
|
|
19118
19162
|
kind: "query",
|
|
19119
19163
|
auth: "admin"
|
|
19164
|
+
}), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
|
|
19165
|
+
kind: "query",
|
|
19166
|
+
auth: "admin"
|
|
19120
19167
|
}), method(object({
|
|
19121
19168
|
olderThanMs: number(),
|
|
19122
19169
|
reason: OpsLogReasonSchema.optional()
|
|
@@ -21068,6 +21115,20 @@ method(object({
|
|
|
21068
21115
|
error: string().optional()
|
|
21069
21116
|
}), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
|
|
21070
21117
|
providerId: string(),
|
|
21118
|
+
/**
|
|
21119
|
+
* The location this config is an UNSAVED edit of, when there is one.
|
|
21120
|
+
*
|
|
21121
|
+
* `listLocations` replaces every declared secret with the redaction
|
|
21122
|
+
* sentinel, so the edit modal's form state holds the sentinel for any
|
|
21123
|
+
* credential the operator did not retype — and posting that here
|
|
21124
|
+
* without a way to resolve it makes the provider try to authenticate
|
|
21125
|
+
* as `__camstack_redacted__` and report the operator's own working
|
|
21126
|
+
* password as wrong. Given this id, the orchestrator restores each
|
|
21127
|
+
* sentinel from the stored config (same rule as `upsertLocation`)
|
|
21128
|
+
* before dispatching. Omitted by the "Add location" wizard, where
|
|
21129
|
+
* every value was typed just now and nothing is stored yet.
|
|
21130
|
+
*/
|
|
21131
|
+
locationId: string().optional(),
|
|
21071
21132
|
config: record(string(), unknown())
|
|
21072
21133
|
}), object({
|
|
21073
21134
|
ok: boolean(),
|
|
@@ -31722,6 +31783,12 @@ Object.freeze({
|
|
|
31722
31783
|
addonId: null,
|
|
31723
31784
|
access: "view"
|
|
31724
31785
|
},
|
|
31786
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": {
|
|
31787
|
+
capName: "pipeline-analytics",
|
|
31788
|
+
capScope: "device",
|
|
31789
|
+
addonId: null,
|
|
31790
|
+
access: "view"
|
|
31791
|
+
},
|
|
31725
31792
|
"pipelineAnalytics.getEventStoreFootprint": {
|
|
31726
31793
|
capName: "pipeline-analytics",
|
|
31727
31794
|
capScope: "device",
|
|
@@ -35387,6 +35454,11 @@ Object.freeze({
|
|
|
35387
35454
|
form: "single",
|
|
35388
35455
|
optional: false
|
|
35389
35456
|
}],
|
|
35457
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": [{
|
|
35458
|
+
name: "deviceId",
|
|
35459
|
+
form: "single",
|
|
35460
|
+
optional: true
|
|
35461
|
+
}],
|
|
35390
35462
|
"pipelineAnalytics.getGroup": [{
|
|
35391
35463
|
name: "deviceId",
|
|
35392
35464
|
form: "single",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-notifiers",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.52",
|
|
4
4
|
"description": "System notifiers addon for CamStack — a `notification-output` collection provider hosting per-kind notifier adapters (ntfy, pushover, gotify, telegram, discord, webhook, zentik).",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|