@camstack/addon-provider-gree 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
|
@@ -19098,6 +19098,50 @@ var EventStoreFootprintSchema = object({
|
|
|
19098
19098
|
totalBytes: number().int(),
|
|
19099
19099
|
devices: array(EventStoreDeviceFootprintSchema).readonly()
|
|
19100
19100
|
});
|
|
19101
|
+
/** Event-media footprint for one {@link MediaFileKind}. */
|
|
19102
|
+
var EventMediaKindFootprintSchema = object({
|
|
19103
|
+
kind: MediaFileKindEnum,
|
|
19104
|
+
/** Media rows of this kind. */
|
|
19105
|
+
rows: number().int(),
|
|
19106
|
+
/** Bytes on disk held by those rows. */
|
|
19107
|
+
bytes: number().int()
|
|
19108
|
+
});
|
|
19109
|
+
/**
|
|
19110
|
+
* The media footprint broken down by KIND — the axis a deletion decision
|
|
19111
|
+
* actually turns on.
|
|
19112
|
+
*
|
|
19113
|
+
* A byte total says how much there is; it cannot say what is safe to remove.
|
|
19114
|
+
* The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
|
|
19115
|
+
* motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
|
|
19116
|
+
* `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
|
|
19117
|
+
* buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
|
|
19118
|
+
* nothing else, so sizing a deletion means summing per kind.
|
|
19119
|
+
*
|
|
19120
|
+
* ## Why `unaccounted*` exists
|
|
19121
|
+
*
|
|
19122
|
+
* `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
|
|
19123
|
+
* writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
|
|
19124
|
+
* from a SEPARATE unfiltered aggregate over the same rows, never from adding
|
|
19125
|
+
* `kinds` up. A row whose stored `kind` is not in the enum (written by a
|
|
19126
|
+
* retired code path, or by a version that knew a kind this one does not) would
|
|
19127
|
+
* otherwise vanish from the total silently, and an operator would delete
|
|
19128
|
+
* against a denominator smaller than the disk.
|
|
19129
|
+
*
|
|
19130
|
+
* `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
|
|
19131
|
+
* zero; a non-zero value is a real finding and must be shown, not rounded away.
|
|
19132
|
+
*/
|
|
19133
|
+
var EventMediaKindBreakdownSchema = object({
|
|
19134
|
+
/** Every media row in scope, from one unfiltered aggregate. */
|
|
19135
|
+
totalRows: number().int(),
|
|
19136
|
+
/** Every media byte in scope, from that same aggregate. */
|
|
19137
|
+
totalBytes: number().int(),
|
|
19138
|
+
/** Per-kind footprint, ordered by bytes descending. */
|
|
19139
|
+
kinds: array(EventMediaKindFootprintSchema).readonly(),
|
|
19140
|
+
/** `totalRows` minus the summed `kinds` rows — see the schema note. */
|
|
19141
|
+
unaccountedRows: number().int(),
|
|
19142
|
+
/** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
|
|
19143
|
+
unaccountedBytes: number().int()
|
|
19144
|
+
});
|
|
19101
19145
|
/** Per-kind counts returned by the event-prune / device-delete mutations. */
|
|
19102
19146
|
var EventPruneCountsSchema = object({
|
|
19103
19147
|
motion: number().int(),
|
|
@@ -19301,6 +19345,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19301
19345
|
}), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
|
|
19302
19346
|
kind: "query",
|
|
19303
19347
|
auth: "admin"
|
|
19348
|
+
}), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
|
|
19349
|
+
kind: "query",
|
|
19350
|
+
auth: "admin"
|
|
19304
19351
|
}), method(object({
|
|
19305
19352
|
olderThanMs: number(),
|
|
19306
19353
|
reason: OpsLogReasonSchema.optional()
|
|
@@ -21252,6 +21299,20 @@ method(object({
|
|
|
21252
21299
|
error: string().optional()
|
|
21253
21300
|
}), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
|
|
21254
21301
|
providerId: string(),
|
|
21302
|
+
/**
|
|
21303
|
+
* The location this config is an UNSAVED edit of, when there is one.
|
|
21304
|
+
*
|
|
21305
|
+
* `listLocations` replaces every declared secret with the redaction
|
|
21306
|
+
* sentinel, so the edit modal's form state holds the sentinel for any
|
|
21307
|
+
* credential the operator did not retype — and posting that here
|
|
21308
|
+
* without a way to resolve it makes the provider try to authenticate
|
|
21309
|
+
* as `__camstack_redacted__` and report the operator's own working
|
|
21310
|
+
* password as wrong. Given this id, the orchestrator restores each
|
|
21311
|
+
* sentinel from the stored config (same rule as `upsertLocation`)
|
|
21312
|
+
* before dispatching. Omitted by the "Add location" wizard, where
|
|
21313
|
+
* every value was typed just now and nothing is stored yet.
|
|
21314
|
+
*/
|
|
21315
|
+
locationId: string().optional(),
|
|
21255
21316
|
config: record(string(), unknown())
|
|
21256
21317
|
}), object({
|
|
21257
21318
|
ok: boolean(),
|
|
@@ -35290,6 +35351,12 @@ Object.freeze({
|
|
|
35290
35351
|
addonId: null,
|
|
35291
35352
|
access: "view"
|
|
35292
35353
|
},
|
|
35354
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": {
|
|
35355
|
+
capName: "pipeline-analytics",
|
|
35356
|
+
capScope: "device",
|
|
35357
|
+
addonId: null,
|
|
35358
|
+
access: "view"
|
|
35359
|
+
},
|
|
35293
35360
|
"pipelineAnalytics.getEventStoreFootprint": {
|
|
35294
35361
|
capName: "pipeline-analytics",
|
|
35295
35362
|
capScope: "device",
|
|
@@ -38955,6 +39022,11 @@ Object.freeze({
|
|
|
38955
39022
|
form: "single",
|
|
38956
39023
|
optional: false
|
|
38957
39024
|
}],
|
|
39025
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": [{
|
|
39026
|
+
name: "deviceId",
|
|
39027
|
+
form: "single",
|
|
39028
|
+
optional: true
|
|
39029
|
+
}],
|
|
38958
39030
|
"pipelineAnalytics.getGroup": [{
|
|
38959
39031
|
name: "deviceId",
|
|
38960
39032
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -19097,6 +19097,50 @@ var EventStoreFootprintSchema = object({
|
|
|
19097
19097
|
totalBytes: number().int(),
|
|
19098
19098
|
devices: array(EventStoreDeviceFootprintSchema).readonly()
|
|
19099
19099
|
});
|
|
19100
|
+
/** Event-media footprint for one {@link MediaFileKind}. */
|
|
19101
|
+
var EventMediaKindFootprintSchema = object({
|
|
19102
|
+
kind: MediaFileKindEnum,
|
|
19103
|
+
/** Media rows of this kind. */
|
|
19104
|
+
rows: number().int(),
|
|
19105
|
+
/** Bytes on disk held by those rows. */
|
|
19106
|
+
bytes: number().int()
|
|
19107
|
+
});
|
|
19108
|
+
/**
|
|
19109
|
+
* The media footprint broken down by KIND — the axis a deletion decision
|
|
19110
|
+
* actually turns on.
|
|
19111
|
+
*
|
|
19112
|
+
* A byte total says how much there is; it cannot say what is safe to remove.
|
|
19113
|
+
* The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
|
|
19114
|
+
* motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
|
|
19115
|
+
* `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
|
|
19116
|
+
* buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
|
|
19117
|
+
* nothing else, so sizing a deletion means summing per kind.
|
|
19118
|
+
*
|
|
19119
|
+
* ## Why `unaccounted*` exists
|
|
19120
|
+
*
|
|
19121
|
+
* `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
|
|
19122
|
+
* writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
|
|
19123
|
+
* from a SEPARATE unfiltered aggregate over the same rows, never from adding
|
|
19124
|
+
* `kinds` up. A row whose stored `kind` is not in the enum (written by a
|
|
19125
|
+
* retired code path, or by a version that knew a kind this one does not) would
|
|
19126
|
+
* otherwise vanish from the total silently, and an operator would delete
|
|
19127
|
+
* against a denominator smaller than the disk.
|
|
19128
|
+
*
|
|
19129
|
+
* `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
|
|
19130
|
+
* zero; a non-zero value is a real finding and must be shown, not rounded away.
|
|
19131
|
+
*/
|
|
19132
|
+
var EventMediaKindBreakdownSchema = object({
|
|
19133
|
+
/** Every media row in scope, from one unfiltered aggregate. */
|
|
19134
|
+
totalRows: number().int(),
|
|
19135
|
+
/** Every media byte in scope, from that same aggregate. */
|
|
19136
|
+
totalBytes: number().int(),
|
|
19137
|
+
/** Per-kind footprint, ordered by bytes descending. */
|
|
19138
|
+
kinds: array(EventMediaKindFootprintSchema).readonly(),
|
|
19139
|
+
/** `totalRows` minus the summed `kinds` rows — see the schema note. */
|
|
19140
|
+
unaccountedRows: number().int(),
|
|
19141
|
+
/** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
|
|
19142
|
+
unaccountedBytes: number().int()
|
|
19143
|
+
});
|
|
19100
19144
|
/** Per-kind counts returned by the event-prune / device-delete mutations. */
|
|
19101
19145
|
var EventPruneCountsSchema = object({
|
|
19102
19146
|
motion: number().int(),
|
|
@@ -19300,6 +19344,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19300
19344
|
}), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
|
|
19301
19345
|
kind: "query",
|
|
19302
19346
|
auth: "admin"
|
|
19347
|
+
}), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
|
|
19348
|
+
kind: "query",
|
|
19349
|
+
auth: "admin"
|
|
19303
19350
|
}), method(object({
|
|
19304
19351
|
olderThanMs: number(),
|
|
19305
19352
|
reason: OpsLogReasonSchema.optional()
|
|
@@ -21251,6 +21298,20 @@ method(object({
|
|
|
21251
21298
|
error: string().optional()
|
|
21252
21299
|
}), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
|
|
21253
21300
|
providerId: string(),
|
|
21301
|
+
/**
|
|
21302
|
+
* The location this config is an UNSAVED edit of, when there is one.
|
|
21303
|
+
*
|
|
21304
|
+
* `listLocations` replaces every declared secret with the redaction
|
|
21305
|
+
* sentinel, so the edit modal's form state holds the sentinel for any
|
|
21306
|
+
* credential the operator did not retype — and posting that here
|
|
21307
|
+
* without a way to resolve it makes the provider try to authenticate
|
|
21308
|
+
* as `__camstack_redacted__` and report the operator's own working
|
|
21309
|
+
* password as wrong. Given this id, the orchestrator restores each
|
|
21310
|
+
* sentinel from the stored config (same rule as `upsertLocation`)
|
|
21311
|
+
* before dispatching. Omitted by the "Add location" wizard, where
|
|
21312
|
+
* every value was typed just now and nothing is stored yet.
|
|
21313
|
+
*/
|
|
21314
|
+
locationId: string().optional(),
|
|
21254
21315
|
config: record(string(), unknown())
|
|
21255
21316
|
}), object({
|
|
21256
21317
|
ok: boolean(),
|
|
@@ -35289,6 +35350,12 @@ Object.freeze({
|
|
|
35289
35350
|
addonId: null,
|
|
35290
35351
|
access: "view"
|
|
35291
35352
|
},
|
|
35353
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": {
|
|
35354
|
+
capName: "pipeline-analytics",
|
|
35355
|
+
capScope: "device",
|
|
35356
|
+
addonId: null,
|
|
35357
|
+
access: "view"
|
|
35358
|
+
},
|
|
35292
35359
|
"pipelineAnalytics.getEventStoreFootprint": {
|
|
35293
35360
|
capName: "pipeline-analytics",
|
|
35294
35361
|
capScope: "device",
|
|
@@ -38954,6 +39021,11 @@ Object.freeze({
|
|
|
38954
39021
|
form: "single",
|
|
38955
39022
|
optional: false
|
|
38956
39023
|
}],
|
|
39024
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": [{
|
|
39025
|
+
name: "deviceId",
|
|
39026
|
+
form: "single",
|
|
39027
|
+
optional: true
|
|
39028
|
+
}],
|
|
38957
39029
|
"pipelineAnalytics.getGroup": [{
|
|
38958
39030
|
name: "deviceId",
|
|
38959
39031
|
form: "single",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-gree",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.47",
|
|
4
4
|
"description": "Gree air-conditioner device-provider addon for CamStack — wraps the @apocaliss92/nodegree local-UDP client (LAN discovery + AES control), exposing climate-control and fan-control",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|