@camstack/addon-export-alexa 1.2.53 → 1.2.54
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.
|
@@ -19064,6 +19064,50 @@ var EventStoreFootprintSchema = object({
|
|
|
19064
19064
|
totalBytes: number().int(),
|
|
19065
19065
|
devices: array(EventStoreDeviceFootprintSchema).readonly()
|
|
19066
19066
|
});
|
|
19067
|
+
/** Event-media footprint for one {@link MediaFileKind}. */
|
|
19068
|
+
var EventMediaKindFootprintSchema = object({
|
|
19069
|
+
kind: MediaFileKindEnum,
|
|
19070
|
+
/** Media rows of this kind. */
|
|
19071
|
+
rows: number().int(),
|
|
19072
|
+
/** Bytes on disk held by those rows. */
|
|
19073
|
+
bytes: number().int()
|
|
19074
|
+
});
|
|
19075
|
+
/**
|
|
19076
|
+
* The media footprint broken down by KIND — the axis a deletion decision
|
|
19077
|
+
* actually turns on.
|
|
19078
|
+
*
|
|
19079
|
+
* A byte total says how much there is; it cannot say what is safe to remove.
|
|
19080
|
+
* The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
|
|
19081
|
+
* motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
|
|
19082
|
+
* `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
|
|
19083
|
+
* buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
|
|
19084
|
+
* nothing else, so sizing a deletion means summing per kind.
|
|
19085
|
+
*
|
|
19086
|
+
* ## Why `unaccounted*` exists
|
|
19087
|
+
*
|
|
19088
|
+
* `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
|
|
19089
|
+
* writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
|
|
19090
|
+
* from a SEPARATE unfiltered aggregate over the same rows, never from adding
|
|
19091
|
+
* `kinds` up. A row whose stored `kind` is not in the enum (written by a
|
|
19092
|
+
* retired code path, or by a version that knew a kind this one does not) would
|
|
19093
|
+
* otherwise vanish from the total silently, and an operator would delete
|
|
19094
|
+
* against a denominator smaller than the disk.
|
|
19095
|
+
*
|
|
19096
|
+
* `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
|
|
19097
|
+
* zero; a non-zero value is a real finding and must be shown, not rounded away.
|
|
19098
|
+
*/
|
|
19099
|
+
var EventMediaKindBreakdownSchema = object({
|
|
19100
|
+
/** Every media row in scope, from one unfiltered aggregate. */
|
|
19101
|
+
totalRows: number().int(),
|
|
19102
|
+
/** Every media byte in scope, from that same aggregate. */
|
|
19103
|
+
totalBytes: number().int(),
|
|
19104
|
+
/** Per-kind footprint, ordered by bytes descending. */
|
|
19105
|
+
kinds: array(EventMediaKindFootprintSchema).readonly(),
|
|
19106
|
+
/** `totalRows` minus the summed `kinds` rows — see the schema note. */
|
|
19107
|
+
unaccountedRows: number().int(),
|
|
19108
|
+
/** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
|
|
19109
|
+
unaccountedBytes: number().int()
|
|
19110
|
+
});
|
|
19067
19111
|
/** Per-kind counts returned by the event-prune / device-delete mutations. */
|
|
19068
19112
|
var EventPruneCountsSchema = object({
|
|
19069
19113
|
motion: number().int(),
|
|
@@ -19267,6 +19311,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19267
19311
|
}), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
|
|
19268
19312
|
kind: "query",
|
|
19269
19313
|
auth: "admin"
|
|
19314
|
+
}), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
|
|
19315
|
+
kind: "query",
|
|
19316
|
+
auth: "admin"
|
|
19270
19317
|
}), method(object({
|
|
19271
19318
|
olderThanMs: number(),
|
|
19272
19319
|
reason: OpsLogReasonSchema.optional()
|
|
@@ -21218,6 +21265,20 @@ method(object({
|
|
|
21218
21265
|
error: string().optional()
|
|
21219
21266
|
}), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
|
|
21220
21267
|
providerId: string(),
|
|
21268
|
+
/**
|
|
21269
|
+
* The location this config is an UNSAVED edit of, when there is one.
|
|
21270
|
+
*
|
|
21271
|
+
* `listLocations` replaces every declared secret with the redaction
|
|
21272
|
+
* sentinel, so the edit modal's form state holds the sentinel for any
|
|
21273
|
+
* credential the operator did not retype — and posting that here
|
|
21274
|
+
* without a way to resolve it makes the provider try to authenticate
|
|
21275
|
+
* as `__camstack_redacted__` and report the operator's own working
|
|
21276
|
+
* password as wrong. Given this id, the orchestrator restores each
|
|
21277
|
+
* sentinel from the stored config (same rule as `upsertLocation`)
|
|
21278
|
+
* before dispatching. Omitted by the "Add location" wizard, where
|
|
21279
|
+
* every value was typed just now and nothing is stored yet.
|
|
21280
|
+
*/
|
|
21281
|
+
locationId: string().optional(),
|
|
21221
21282
|
config: record(string(), unknown())
|
|
21222
21283
|
}), object({
|
|
21223
21284
|
ok: boolean(),
|
|
@@ -31872,6 +31933,12 @@ Object.freeze({
|
|
|
31872
31933
|
addonId: null,
|
|
31873
31934
|
access: "view"
|
|
31874
31935
|
},
|
|
31936
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": {
|
|
31937
|
+
capName: "pipeline-analytics",
|
|
31938
|
+
capScope: "device",
|
|
31939
|
+
addonId: null,
|
|
31940
|
+
access: "view"
|
|
31941
|
+
},
|
|
31875
31942
|
"pipelineAnalytics.getEventStoreFootprint": {
|
|
31876
31943
|
capName: "pipeline-analytics",
|
|
31877
31944
|
capScope: "device",
|
|
@@ -35537,6 +35604,11 @@ Object.freeze({
|
|
|
35537
35604
|
form: "single",
|
|
35538
35605
|
optional: false
|
|
35539
35606
|
}],
|
|
35607
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": [{
|
|
35608
|
+
name: "deviceId",
|
|
35609
|
+
form: "single",
|
|
35610
|
+
optional: true
|
|
35611
|
+
}],
|
|
35540
35612
|
"pipelineAnalytics.getGroup": [{
|
|
35541
35613
|
name: "deviceId",
|
|
35542
35614
|
form: "single",
|
|
@@ -19037,6 +19037,50 @@ var EventStoreFootprintSchema = object({
|
|
|
19037
19037
|
totalBytes: number().int(),
|
|
19038
19038
|
devices: array(EventStoreDeviceFootprintSchema).readonly()
|
|
19039
19039
|
});
|
|
19040
|
+
/** Event-media footprint for one {@link MediaFileKind}. */
|
|
19041
|
+
var EventMediaKindFootprintSchema = object({
|
|
19042
|
+
kind: MediaFileKindEnum,
|
|
19043
|
+
/** Media rows of this kind. */
|
|
19044
|
+
rows: number().int(),
|
|
19045
|
+
/** Bytes on disk held by those rows. */
|
|
19046
|
+
bytes: number().int()
|
|
19047
|
+
});
|
|
19048
|
+
/**
|
|
19049
|
+
* The media footprint broken down by KIND — the axis a deletion decision
|
|
19050
|
+
* actually turns on.
|
|
19051
|
+
*
|
|
19052
|
+
* A byte total says how much there is; it cannot say what is safe to remove.
|
|
19053
|
+
* The deletable set (the periodic `snapshot` filmstrip, the surplus per-edge
|
|
19054
|
+
* motion stills) and the keep set (`firstFrame`, rolling `lastFrame`,
|
|
19055
|
+
* `thumbnail`/`thumbnailSmall`, `keyFrame`/`keyFrameSmall`, the face/plate
|
|
19056
|
+
* buffers, gallery media, the CLIP `crop`) are distinguished by `kind` and by
|
|
19057
|
+
* nothing else, so sizing a deletion means summing per kind.
|
|
19058
|
+
*
|
|
19059
|
+
* ## Why `unaccounted*` exists
|
|
19060
|
+
*
|
|
19061
|
+
* `kinds` is enumerated from {@link MediaFileKindEnum} — the closed set the
|
|
19062
|
+
* writers use — and summed one kind at a time. `totalRows` / `totalBytes` come
|
|
19063
|
+
* from a SEPARATE unfiltered aggregate over the same rows, never from adding
|
|
19064
|
+
* `kinds` up. A row whose stored `kind` is not in the enum (written by a
|
|
19065
|
+
* retired code path, or by a version that knew a kind this one does not) would
|
|
19066
|
+
* otherwise vanish from the total silently, and an operator would delete
|
|
19067
|
+
* against a denominator smaller than the disk.
|
|
19068
|
+
*
|
|
19069
|
+
* `unaccountedRows` / `unaccountedBytes` are the difference. They are normally
|
|
19070
|
+
* zero; a non-zero value is a real finding and must be shown, not rounded away.
|
|
19071
|
+
*/
|
|
19072
|
+
var EventMediaKindBreakdownSchema = object({
|
|
19073
|
+
/** Every media row in scope, from one unfiltered aggregate. */
|
|
19074
|
+
totalRows: number().int(),
|
|
19075
|
+
/** Every media byte in scope, from that same aggregate. */
|
|
19076
|
+
totalBytes: number().int(),
|
|
19077
|
+
/** Per-kind footprint, ordered by bytes descending. */
|
|
19078
|
+
kinds: array(EventMediaKindFootprintSchema).readonly(),
|
|
19079
|
+
/** `totalRows` minus the summed `kinds` rows — see the schema note. */
|
|
19080
|
+
unaccountedRows: number().int(),
|
|
19081
|
+
/** `totalBytes` minus the summed `kinds` bytes — see the schema note. */
|
|
19082
|
+
unaccountedBytes: number().int()
|
|
19083
|
+
});
|
|
19040
19084
|
/** Per-kind counts returned by the event-prune / device-delete mutations. */
|
|
19041
19085
|
var EventPruneCountsSchema = object({
|
|
19042
19086
|
motion: number().int(),
|
|
@@ -19240,6 +19284,9 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19240
19284
|
}), TrackFlagsSchema, { kind: "mutation" }), method(object({}), EventStoreFootprintSchema, {
|
|
19241
19285
|
kind: "query",
|
|
19242
19286
|
auth: "admin"
|
|
19287
|
+
}), method(object({ deviceId: number().int().optional() }), EventMediaKindBreakdownSchema, {
|
|
19288
|
+
kind: "query",
|
|
19289
|
+
auth: "admin"
|
|
19243
19290
|
}), method(object({
|
|
19244
19291
|
olderThanMs: number(),
|
|
19245
19292
|
reason: OpsLogReasonSchema.optional()
|
|
@@ -21191,6 +21238,20 @@ method(object({
|
|
|
21191
21238
|
error: string().optional()
|
|
21192
21239
|
}), { auth: "admin" }), method(_void(), array(ProviderListEntrySchema).readonly()), method(object({
|
|
21193
21240
|
providerId: string(),
|
|
21241
|
+
/**
|
|
21242
|
+
* The location this config is an UNSAVED edit of, when there is one.
|
|
21243
|
+
*
|
|
21244
|
+
* `listLocations` replaces every declared secret with the redaction
|
|
21245
|
+
* sentinel, so the edit modal's form state holds the sentinel for any
|
|
21246
|
+
* credential the operator did not retype — and posting that here
|
|
21247
|
+
* without a way to resolve it makes the provider try to authenticate
|
|
21248
|
+
* as `__camstack_redacted__` and report the operator's own working
|
|
21249
|
+
* password as wrong. Given this id, the orchestrator restores each
|
|
21250
|
+
* sentinel from the stored config (same rule as `upsertLocation`)
|
|
21251
|
+
* before dispatching. Omitted by the "Add location" wizard, where
|
|
21252
|
+
* every value was typed just now and nothing is stored yet.
|
|
21253
|
+
*/
|
|
21254
|
+
locationId: string().optional(),
|
|
21194
21255
|
config: record(string(), unknown())
|
|
21195
21256
|
}), object({
|
|
21196
21257
|
ok: boolean(),
|
|
@@ -31845,6 +31906,12 @@ Object.freeze({
|
|
|
31845
31906
|
addonId: null,
|
|
31846
31907
|
access: "view"
|
|
31847
31908
|
},
|
|
31909
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": {
|
|
31910
|
+
capName: "pipeline-analytics",
|
|
31911
|
+
capScope: "device",
|
|
31912
|
+
addonId: null,
|
|
31913
|
+
access: "view"
|
|
31914
|
+
},
|
|
31848
31915
|
"pipelineAnalytics.getEventStoreFootprint": {
|
|
31849
31916
|
capName: "pipeline-analytics",
|
|
31850
31917
|
capScope: "device",
|
|
@@ -35510,6 +35577,11 @@ Object.freeze({
|
|
|
35510
35577
|
form: "single",
|
|
35511
35578
|
optional: false
|
|
35512
35579
|
}],
|
|
35580
|
+
"pipelineAnalytics.getEventMediaFootprintByKind": [{
|
|
35581
|
+
name: "deviceId",
|
|
35582
|
+
form: "single",
|
|
35583
|
+
optional: true
|
|
35584
|
+
}],
|
|
35513
35585
|
"pipelineAnalytics.getGroup": [{
|
|
35514
35586
|
name: "deviceId",
|
|
35515
35587
|
form: "single",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-export-alexa",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.54",
|
|
4
4
|
"description": "Alexa Smart Home Skill export — hub-side OAuth provider + directive handler. The companion AWS Lambda forwards Alexa directives to this addon's /addon/export-alexa/directive endpoint.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|