@camstack/addon-mqtt-broker 1.2.47 → 1.2.48
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/mqtt-broker.addon.js +72 -0
- package/dist/mqtt-broker.addon.mjs +72 -0
- package/package.json +1 -1
|
@@ -18850,6 +18850,50 @@ var EventStoreFootprintSchema = object({
|
|
|
18850
18850
|
totalBytes: number().int(),
|
|
18851
18851
|
devices: array(EventStoreDeviceFootprintSchema).readonly()
|
|
18852
18852
|
});
|
|
18853
|
+
/** Event-media footprint for one {@link MediaFileKind}. */
|
|
18854
|
+
var EventMediaKindFootprintSchema = object({
|
|
18855
|
+
kind: MediaFileKindEnum,
|
|
18856
|
+
/** Media rows of this kind. */
|
|
18857
|
+
rows: number().int(),
|
|
18858
|
+
/** Bytes on disk held by those rows. */
|
|
18859
|
+
bytes: number().int()
|
|
18860
|
+
});
|
|
18861
|
+
/**
|
|
18862
|
+
* The media footprint broken down by KIND — the axis a deletion decision
|
|
18863
|
+
* actually turns on.
|
|
18864
|
+
*
|
|
18865
|
+
* A byte total says how much there is; it cannot say what is safe to remove.
|
|
18866
|
+
* The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
|
|
18867
|
+
* motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
|
|
18868
|
+
* `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
|
|
18869
|
+
* buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
|
|
18870
|
+
* nothing else, so sizing a deletion means summing per kind.
|
|
18871
|
+
*
|
|
18872
|
+
* ## Why `unaccounted*` exists
|
|
18873
|
+
*
|
|
18874
|
+
* `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
|
|
18875
|
+
* writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
|
|
18876
|
+
* from a SEPARATE unfiltered aggregate over the same rows, never from adding
|
|
18877
|
+
* `kinds` up. A row whose stored `kind` is not in the enum (written by a
|
|
18878
|
+
* retired code path, or by a version that knew a kind this one does not) would
|
|
18879
|
+
* otherwise vanish from the total silently, and an operator would delete
|
|
18880
|
+
* against a denominator smaller than the disk.
|
|
18881
|
+
*
|
|
18882
|
+
* `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
|
|
18883
|
+
* zero; a non-zero value is a real finding and must be shown, not rounded away.
|
|
18884
|
+
*/
|
|
18885
|
+
var EventMediaKindBreakdownSchema = object({
|
|
18886
|
+
/** Every media row in scope, from one unfiltered aggregate. */
|
|
18887
|
+
totalRows: number().int(),
|
|
18888
|
+
/** Every media byte in scope, from that same aggregate. */
|
|
18889
|
+
totalBytes: number().int(),
|
|
18890
|
+
/** Per-kind footprint, ordered by bytes descending. */
|
|
18891
|
+
kinds: array(EventMediaKindFootprintSchema).readonly(),
|
|
18892
|
+
/** `totalRows` minus the summed `kinds` rows — see the schema note. */
|
|
18893
|
+
unaccountedRows: number().int(),
|
|
18894
|
+
/** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
|
|
18895
|
+
unaccountedBytes: number().int()
|
|
18896
|
+
});
|
|
18853
18897
|
/** Per-kind counts returned by the event-prune / device-delete mutations. */
|
|
18854
18898
|
var EventPruneCountsSchema = object({
|
|
18855
18899
|
motion: number().int(),
|
|
@@ -19053,6 +19097,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19053
19097
|
}), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
|
|
19054
19098
|
kind: "query",
|
|
19055
19099
|
auth: "admin"
|
|
19100
|
+
}), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
|
|
19101
|
+
kind: "query",
|
|
19102
|
+
auth: "admin"
|
|
19056
19103
|
}), method(object({
|
|
19057
19104
|
olderThanMs: number(),
|
|
19058
19105
|
reason: OpsLogReasonSchema.optional()
|
|
@@ -21004,6 +21051,20 @@ method(object({
|
|
|
21004
21051
|
error: string().optional()
|
|
21005
21052
|
}), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
|
|
21006
21053
|
providerId: string(),
|
|
21054
|
+
/**
|
|
21055
|
+
* The location this config is an UNSAVED edit of, when there is one.
|
|
21056
|
+
*
|
|
21057
|
+
* `listLocations` replaces every declared secret with the redaction
|
|
21058
|
+
* sentinel, so the edit modal's form state holds the sentinel for any
|
|
21059
|
+
* credential the operator did not retype — and posting that here
|
|
21060
|
+
* without a way to resolve it makes the provider try to authenticate
|
|
21061
|
+
* as `__camstack_redacted__` and report the operator's own working
|
|
21062
|
+
* password as wrong. Given this id, the orchestrator restores each
|
|
21063
|
+
* sentinel from the stored config (same rule as `upsertLocation`)
|
|
21064
|
+
* before dispatching. Omitted by the "Add location" wizard, where
|
|
21065
|
+
* every value was typed just now and nothing is stored yet.
|
|
21066
|
+
*/
|
|
21067
|
+
locationId: string().optional(),
|
|
21007
21068
|
config: record(string(), unknown())
|
|
21008
21069
|
}), object({
|
|
21009
21070
|
ok: boolean(),
|
|
@@ -31658,6 +31719,12 @@ Object.freeze({
|
|
|
31658
31719
|
addonId: null,
|
|
31659
31720
|
access: "view"
|
|
31660
31721
|
},
|
|
31722
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": {
|
|
31723
|
+
capName: "pipeline-analytics",
|
|
31724
|
+
capScope: "device",
|
|
31725
|
+
addonId: null,
|
|
31726
|
+
access: "view"
|
|
31727
|
+
},
|
|
31661
31728
|
"pipelineAnalytics.getEventStoreFootprint": {
|
|
31662
31729
|
capName: "pipeline-analytics",
|
|
31663
31730
|
capScope: "device",
|
|
@@ -35323,6 +35390,11 @@ Object.freeze({
|
|
|
35323
35390
|
form: "single",
|
|
35324
35391
|
optional: false
|
|
35325
35392
|
}],
|
|
35393
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": [{
|
|
35394
|
+
name: "deviceId",
|
|
35395
|
+
form: "single",
|
|
35396
|
+
optional: true
|
|
35397
|
+
}],
|
|
35326
35398
|
"pipelineAnalytics.getGroup": [{
|
|
35327
35399
|
name: "deviceId",
|
|
35328
35400
|
form: "single",
|
|
@@ -18845,6 +18845,50 @@ var EventStoreFootprintSchema = object({
|
|
|
18845
18845
|
totalBytes: number().int(),
|
|
18846
18846
|
devices: array(EventStoreDeviceFootprintSchema).readonly()
|
|
18847
18847
|
});
|
|
18848
|
+
/** Event-media footprint for one {@link MediaFileKind}. */
|
|
18849
|
+
var EventMediaKindFootprintSchema = object({
|
|
18850
|
+
kind: MediaFileKindEnum,
|
|
18851
|
+
/** Media rows of this kind. */
|
|
18852
|
+
rows: number().int(),
|
|
18853
|
+
/** Bytes on disk held by those rows. */
|
|
18854
|
+
bytes: number().int()
|
|
18855
|
+
});
|
|
18856
|
+
/**
|
|
18857
|
+
* The media footprint broken down by KIND — the axis a deletion decision
|
|
18858
|
+
* actually turns on.
|
|
18859
|
+
*
|
|
18860
|
+
* A byte total says how much there is; it cannot say what is safe to remove.
|
|
18861
|
+
* The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
|
|
18862
|
+
* motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
|
|
18863
|
+
* `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
|
|
18864
|
+
* buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
|
|
18865
|
+
* nothing else, so sizing a deletion means summing per kind.
|
|
18866
|
+
*
|
|
18867
|
+
* ## Why `unaccounted*` exists
|
|
18868
|
+
*
|
|
18869
|
+
* `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
|
|
18870
|
+
* writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
|
|
18871
|
+
* from a SEPARATE unfiltered aggregate over the same rows, never from adding
|
|
18872
|
+
* `kinds` up. A row whose stored `kind` is not in the enum (written by a
|
|
18873
|
+
* retired code path, or by a version that knew a kind this one does not) would
|
|
18874
|
+
* otherwise vanish from the total silently, and an operator would delete
|
|
18875
|
+
* against a denominator smaller than the disk.
|
|
18876
|
+
*
|
|
18877
|
+
* `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
|
|
18878
|
+
* zero; a non-zero value is a real finding and must be shown, not rounded away.
|
|
18879
|
+
*/
|
|
18880
|
+
var EventMediaKindBreakdownSchema = object({
|
|
18881
|
+
/** Every media row in scope, from one unfiltered aggregate. */
|
|
18882
|
+
totalRows: number().int(),
|
|
18883
|
+
/** Every media byte in scope, from that same aggregate. */
|
|
18884
|
+
totalBytes: number().int(),
|
|
18885
|
+
/** Per-kind footprint, ordered by bytes descending. */
|
|
18886
|
+
kinds: array(EventMediaKindFootprintSchema).readonly(),
|
|
18887
|
+
/** `totalRows` minus the summed `kinds` rows — see the schema note. */
|
|
18888
|
+
unaccountedRows: number().int(),
|
|
18889
|
+
/** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
|
|
18890
|
+
unaccountedBytes: number().int()
|
|
18891
|
+
});
|
|
18848
18892
|
/** Per-kind counts returned by the event-prune / device-delete mutations. */
|
|
18849
18893
|
var EventPruneCountsSchema = object({
|
|
18850
18894
|
motion: number().int(),
|
|
@@ -19048,6 +19092,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19048
19092
|
}), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
|
|
19049
19093
|
kind: "query",
|
|
19050
19094
|
auth: "admin"
|
|
19095
|
+
}), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
|
|
19096
|
+
kind: "query",
|
|
19097
|
+
auth: "admin"
|
|
19051
19098
|
}), method(object({
|
|
19052
19099
|
olderThanMs: number(),
|
|
19053
19100
|
reason: OpsLogReasonSchema.optional()
|
|
@@ -20999,6 +21046,20 @@ method(object({
|
|
|
20999
21046
|
error: string().optional()
|
|
21000
21047
|
}), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
|
|
21001
21048
|
providerId: string(),
|
|
21049
|
+
/**
|
|
21050
|
+
* The location this config is an UNSAVED edit of, when there is one.
|
|
21051
|
+
*
|
|
21052
|
+
* `listLocations` replaces every declared secret with the redaction
|
|
21053
|
+
* sentinel, so the edit modal's form state holds the sentinel for any
|
|
21054
|
+
* credential the operator did not retype — and posting that here
|
|
21055
|
+
* without a way to resolve it makes the provider try to authenticate
|
|
21056
|
+
* as `__camstack_redacted__` and report the operator's own working
|
|
21057
|
+
* password as wrong. Given this id, the orchestrator restores each
|
|
21058
|
+
* sentinel from the stored config (same rule as `upsertLocation`)
|
|
21059
|
+
* before dispatching. Omitted by the "Add location" wizard, where
|
|
21060
|
+
* every value was typed just now and nothing is stored yet.
|
|
21061
|
+
*/
|
|
21062
|
+
locationId: string().optional(),
|
|
21002
21063
|
config: record(string(), unknown())
|
|
21003
21064
|
}), object({
|
|
21004
21065
|
ok: boolean(),
|
|
@@ -31653,6 +31714,12 @@ Object.freeze({
|
|
|
31653
31714
|
addonId: null,
|
|
31654
31715
|
access: "view"
|
|
31655
31716
|
},
|
|
31717
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": {
|
|
31718
|
+
capName: "pipeline-analytics",
|
|
31719
|
+
capScope: "device",
|
|
31720
|
+
addonId: null,
|
|
31721
|
+
access: "view"
|
|
31722
|
+
},
|
|
31656
31723
|
"pipelineAnalytics.getEventStoreFootprint": {
|
|
31657
31724
|
capName: "pipeline-analytics",
|
|
31658
31725
|
capScope: "device",
|
|
@@ -35318,6 +35385,11 @@ Object.freeze({
|
|
|
35318
35385
|
form: "single",
|
|
35319
35386
|
optional: false
|
|
35320
35387
|
}],
|
|
35388
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": [{
|
|
35389
|
+
name: "deviceId",
|
|
35390
|
+
form: "single",
|
|
35391
|
+
optional: true
|
|
35392
|
+
}],
|
|
35321
35393
|
"pipelineAnalytics.getGroup": [{
|
|
35322
35394
|
name: "deviceId",
|
|
35323
35395
|
form: "single",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-mqtt-broker",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.48",
|
|
4
4
|
"description": "MQTT broker registry addon for CamStack — manages external broker entries + an optional embedded aedes broker. Consumers spin up their own `mqtt.js` clients via the `mqtt-broker` cap.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|