@camstack/addon-provider-dreo 0.2.51 → 0.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 +115 -6
- package/dist/addon.mjs +115 -6
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -19244,6 +19244,34 @@ var KeyEventsForDeviceSchema = object({
|
|
|
19244
19244
|
deviceId: number(),
|
|
19245
19245
|
events: array(KeyEventSchema).readonly()
|
|
19246
19246
|
});
|
|
19247
|
+
/** One non-empty bucket of the timeline histogram. */
|
|
19248
|
+
var EventDensityBucketSchema = object({
|
|
19249
|
+
bucketStart: number(),
|
|
19250
|
+
motion: number().int(),
|
|
19251
|
+
object: number().int(),
|
|
19252
|
+
audio: number().int()
|
|
19253
|
+
});
|
|
19254
|
+
/**
|
|
19255
|
+
* One camera's row in a `getEventDensityBatch` answer.
|
|
19256
|
+
*
|
|
19257
|
+
* TWO facts, and the timeline draws them differently:
|
|
19258
|
+
*
|
|
19259
|
+
* - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
|
|
19260
|
+
* claim: read, and nothing happened in the window.
|
|
19261
|
+
* - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
|
|
19262
|
+
* empty and that emptiness means NOTHING; the timeline must render unknown,
|
|
19263
|
+
* not quiet.
|
|
19264
|
+
*
|
|
19265
|
+
* Fanned out per camera the difference was free — one query rejected while the
|
|
19266
|
+
* others resolved — and collapsing to a batch is the exact moment it is lost
|
|
19267
|
+
* silently. Every requested id gets a row: a caller that asked for twelve and
|
|
19268
|
+
* got eleven cannot tell which one is missing, or that any is.
|
|
19269
|
+
*/
|
|
19270
|
+
var EventDensityForDeviceSchema = object({
|
|
19271
|
+
deviceId: number(),
|
|
19272
|
+
read: _enum(["read", "unreadable"]),
|
|
19273
|
+
buckets: array(EventDensityBucketSchema).readonly()
|
|
19274
|
+
});
|
|
19247
19275
|
object({
|
|
19248
19276
|
trackId: string(),
|
|
19249
19277
|
className: string(),
|
|
@@ -19554,12 +19582,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19554
19582
|
since: number(),
|
|
19555
19583
|
until: number(),
|
|
19556
19584
|
bucketMs: number().int().positive()
|
|
19557
|
-
}), array(object({
|
|
19558
|
-
|
|
19559
|
-
|
|
19560
|
-
|
|
19561
|
-
|
|
19562
|
-
})).readonly()), method(object({
|
|
19585
|
+
}), array(EventDensityBucketSchema).readonly()), method(object({
|
|
19586
|
+
deviceIds: array(number()).min(1).max(200),
|
|
19587
|
+
since: number(),
|
|
19588
|
+
until: number(),
|
|
19589
|
+
bucketMs: number().int().positive()
|
|
19590
|
+
}), array(EventDensityForDeviceSchema).readonly()), method(object({
|
|
19563
19591
|
deviceId: number(),
|
|
19564
19592
|
cutoffMs: number()
|
|
19565
19593
|
}), object({
|
|
@@ -28592,6 +28620,39 @@ var RecordingDaysSchema = object({
|
|
|
28592
28620
|
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
28593
28621
|
days: array(number())
|
|
28594
28622
|
});
|
|
28623
|
+
/**
|
|
28624
|
+
* One camera's row in a `getAvailabilityBatch` answer.
|
|
28625
|
+
*
|
|
28626
|
+
* `ranges` is EXACTLY what `getAvailability` returns for that camera — the
|
|
28627
|
+
* batch collapses the transport, not the work — plus the one thing the singular
|
|
28628
|
+
* method never had to say:
|
|
28629
|
+
*
|
|
28630
|
+
* - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
|
|
28631
|
+
* no footage in the window", which is a real claim.
|
|
28632
|
+
* - `read: 'unreadable'` — the recorder could not answer for this camera (its
|
|
28633
|
+
* calendar rung threw, its location is unmounted). `ranges` is empty and
|
|
28634
|
+
* that emptiness means NOTHING.
|
|
28635
|
+
*
|
|
28636
|
+
* A timeline that renders the second as the first tells an operator there is no
|
|
28637
|
+
* footage when the truth is that nobody looked.
|
|
28638
|
+
*/
|
|
28639
|
+
var RecordingAvailabilityForDeviceSchema = object({
|
|
28640
|
+
deviceId: number(),
|
|
28641
|
+
read: _enum(["read", "unreadable"]),
|
|
28642
|
+
ranges: array(RecordingRangeSchema).readonly()
|
|
28643
|
+
});
|
|
28644
|
+
/**
|
|
28645
|
+
* One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
|
|
28646
|
+
* {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
|
|
28647
|
+
* "no footage in this month", `read: 'unreadable'` is "nobody could look", and
|
|
28648
|
+
* the date-picker's day dots must not spell them the same.
|
|
28649
|
+
*/
|
|
28650
|
+
var RecordingDaysForDeviceSchema = object({
|
|
28651
|
+
deviceId: number(),
|
|
28652
|
+
read: _enum(["read", "unreadable"]),
|
|
28653
|
+
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
28654
|
+
days: array(number()).readonly()
|
|
28655
|
+
});
|
|
28595
28656
|
var RecordingManifestSchema = object({
|
|
28596
28657
|
deviceId: number(),
|
|
28597
28658
|
/** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
|
|
@@ -28826,6 +28887,13 @@ method(object({
|
|
|
28826
28887
|
}), RecordingAvailabilitySchema, {
|
|
28827
28888
|
kind: "query",
|
|
28828
28889
|
auth: "protected"
|
|
28890
|
+
}), method(object({
|
|
28891
|
+
deviceIds: array(number()).min(1).max(200),
|
|
28892
|
+
fromMs: number(),
|
|
28893
|
+
toMs: number()
|
|
28894
|
+
}), array(RecordingAvailabilityForDeviceSchema).readonly(), {
|
|
28895
|
+
kind: "query",
|
|
28896
|
+
auth: "protected"
|
|
28829
28897
|
}), method(object({
|
|
28830
28898
|
deviceId: number(),
|
|
28831
28899
|
fromMs: number(),
|
|
@@ -28834,6 +28902,14 @@ method(object({
|
|
|
28834
28902
|
}), RecordingDaysSchema, {
|
|
28835
28903
|
kind: "query",
|
|
28836
28904
|
auth: "protected"
|
|
28905
|
+
}), method(object({
|
|
28906
|
+
deviceIds: array(number()).min(1).max(200),
|
|
28907
|
+
fromMs: number(),
|
|
28908
|
+
toMs: number(),
|
|
28909
|
+
tzOffsetMinutes: number()
|
|
28910
|
+
}), array(RecordingDaysForDeviceSchema).readonly(), {
|
|
28911
|
+
kind: "query",
|
|
28912
|
+
auth: "protected"
|
|
28837
28913
|
}), method(object({
|
|
28838
28914
|
deviceId: number(),
|
|
28839
28915
|
fromMs: number(),
|
|
@@ -35730,6 +35806,12 @@ Object.freeze({
|
|
|
35730
35806
|
addonId: null,
|
|
35731
35807
|
access: "view"
|
|
35732
35808
|
},
|
|
35809
|
+
"pipelineAnalytics.getEventDensityBatch": {
|
|
35810
|
+
capName: "pipeline-analytics",
|
|
35811
|
+
capScope: "device",
|
|
35812
|
+
addonId: null,
|
|
35813
|
+
access: "view"
|
|
35814
|
+
},
|
|
35733
35815
|
"pipelineAnalytics.getEventMedia": {
|
|
35734
35816
|
capName: "pipeline-analytics",
|
|
35735
35817
|
capScope: "device",
|
|
@@ -36852,12 +36934,24 @@ Object.freeze({
|
|
|
36852
36934
|
addonId: null,
|
|
36853
36935
|
access: "view"
|
|
36854
36936
|
},
|
|
36937
|
+
"recording.getAvailabilityBatch": {
|
|
36938
|
+
capName: "recording",
|
|
36939
|
+
capScope: "system",
|
|
36940
|
+
addonId: null,
|
|
36941
|
+
access: "view"
|
|
36942
|
+
},
|
|
36855
36943
|
"recording.getDaysWithRecordings": {
|
|
36856
36944
|
capName: "recording",
|
|
36857
36945
|
capScope: "system",
|
|
36858
36946
|
addonId: null,
|
|
36859
36947
|
access: "view"
|
|
36860
36948
|
},
|
|
36949
|
+
"recording.getDaysWithRecordingsBatch": {
|
|
36950
|
+
capName: "recording",
|
|
36951
|
+
capScope: "system",
|
|
36952
|
+
addonId: null,
|
|
36953
|
+
access: "view"
|
|
36954
|
+
},
|
|
36861
36955
|
"recording.getDeviceConfig": {
|
|
36862
36956
|
capName: "recording",
|
|
36863
36957
|
capScope: "system",
|
|
@@ -39462,6 +39556,11 @@ Object.freeze({
|
|
|
39462
39556
|
form: "single",
|
|
39463
39557
|
optional: false
|
|
39464
39558
|
}],
|
|
39559
|
+
"pipelineAnalytics.getEventDensityBatch": [{
|
|
39560
|
+
name: "deviceIds",
|
|
39561
|
+
form: "array",
|
|
39562
|
+
optional: false
|
|
39563
|
+
}],
|
|
39465
39564
|
"pipelineAnalytics.getEventMedia": [{
|
|
39466
39565
|
name: "deviceId",
|
|
39467
39566
|
form: "single",
|
|
@@ -39877,11 +39976,21 @@ Object.freeze({
|
|
|
39877
39976
|
form: "single",
|
|
39878
39977
|
optional: false
|
|
39879
39978
|
}],
|
|
39979
|
+
"recording.getAvailabilityBatch": [{
|
|
39980
|
+
name: "deviceIds",
|
|
39981
|
+
form: "array",
|
|
39982
|
+
optional: false
|
|
39983
|
+
}],
|
|
39880
39984
|
"recording.getDaysWithRecordings": [{
|
|
39881
39985
|
name: "deviceId",
|
|
39882
39986
|
form: "single",
|
|
39883
39987
|
optional: false
|
|
39884
39988
|
}],
|
|
39989
|
+
"recording.getDaysWithRecordingsBatch": [{
|
|
39990
|
+
name: "deviceIds",
|
|
39991
|
+
form: "array",
|
|
39992
|
+
optional: false
|
|
39993
|
+
}],
|
|
39885
39994
|
"recording.getDeviceConfig": [{
|
|
39886
39995
|
name: "deviceId",
|
|
39887
39996
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -19245,6 +19245,34 @@ var KeyEventsForDeviceSchema = object({
|
|
|
19245
19245
|
deviceId: number(),
|
|
19246
19246
|
events: array(KeyEventSchema).readonly()
|
|
19247
19247
|
});
|
|
19248
|
+
/** One non-empty bucket of the timeline histogram. */
|
|
19249
|
+
var EventDensityBucketSchema = object({
|
|
19250
|
+
bucketStart: number(),
|
|
19251
|
+
motion: number().int(),
|
|
19252
|
+
object: number().int(),
|
|
19253
|
+
audio: number().int()
|
|
19254
|
+
});
|
|
19255
|
+
/**
|
|
19256
|
+
* One camera's row in a `getEventDensityBatch` answer.
|
|
19257
|
+
*
|
|
19258
|
+
* TWO facts, and the timeline draws them differently:
|
|
19259
|
+
*
|
|
19260
|
+
* - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
|
|
19261
|
+
* claim: read, and nothing happened in the window.
|
|
19262
|
+
* - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
|
|
19263
|
+
* empty and that emptiness means NOTHING; the timeline must render unknown,
|
|
19264
|
+
* not quiet.
|
|
19265
|
+
*
|
|
19266
|
+
* Fanned out per camera the difference was free — one query rejected while the
|
|
19267
|
+
* others resolved — and collapsing to a batch is the exact moment it is lost
|
|
19268
|
+
* silently. Every requested id gets a row: a caller that asked for twelve and
|
|
19269
|
+
* got eleven cannot tell which one is missing, or that any is.
|
|
19270
|
+
*/
|
|
19271
|
+
var EventDensityForDeviceSchema = object({
|
|
19272
|
+
deviceId: number(),
|
|
19273
|
+
read: _enum(["read", "unreadable"]),
|
|
19274
|
+
buckets: array(EventDensityBucketSchema).readonly()
|
|
19275
|
+
});
|
|
19248
19276
|
object({
|
|
19249
19277
|
trackId: string(),
|
|
19250
19278
|
className: string(),
|
|
@@ -19555,12 +19583,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19555
19583
|
since: number(),
|
|
19556
19584
|
until: number(),
|
|
19557
19585
|
bucketMs: number().int().positive()
|
|
19558
|
-
}), array(object({
|
|
19559
|
-
|
|
19560
|
-
|
|
19561
|
-
|
|
19562
|
-
|
|
19563
|
-
})).readonly()), method(object({
|
|
19586
|
+
}), array(EventDensityBucketSchema).readonly()), method(object({
|
|
19587
|
+
deviceIds: array(number()).min(1).max(200),
|
|
19588
|
+
since: number(),
|
|
19589
|
+
until: number(),
|
|
19590
|
+
bucketMs: number().int().positive()
|
|
19591
|
+
}), array(EventDensityForDeviceSchema).readonly()), method(object({
|
|
19564
19592
|
deviceId: number(),
|
|
19565
19593
|
cutoffMs: number()
|
|
19566
19594
|
}), object({
|
|
@@ -28593,6 +28621,39 @@ var RecordingDaysSchema = object({
|
|
|
28593
28621
|
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
28594
28622
|
days: array(number())
|
|
28595
28623
|
});
|
|
28624
|
+
/**
|
|
28625
|
+
* One camera's row in a `getAvailabilityBatch` answer.
|
|
28626
|
+
*
|
|
28627
|
+
* `ranges` is EXACTLY what `getAvailability` returns for that camera — the
|
|
28628
|
+
* batch collapses the transport, not the work — plus the one thing the singular
|
|
28629
|
+
* method never had to say:
|
|
28630
|
+
*
|
|
28631
|
+
* - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
|
|
28632
|
+
* no footage in the window", which is a real claim.
|
|
28633
|
+
* - `read: 'unreadable'` — the recorder could not answer for this camera (its
|
|
28634
|
+
* calendar rung threw, its location is unmounted). `ranges` is empty and
|
|
28635
|
+
* that emptiness means NOTHING.
|
|
28636
|
+
*
|
|
28637
|
+
* A timeline that renders the second as the first tells an operator there is no
|
|
28638
|
+
* footage when the truth is that nobody looked.
|
|
28639
|
+
*/
|
|
28640
|
+
var RecordingAvailabilityForDeviceSchema = object({
|
|
28641
|
+
deviceId: number(),
|
|
28642
|
+
read: _enum(["read", "unreadable"]),
|
|
28643
|
+
ranges: array(RecordingRangeSchema).readonly()
|
|
28644
|
+
});
|
|
28645
|
+
/**
|
|
28646
|
+
* One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
|
|
28647
|
+
* {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
|
|
28648
|
+
* "no footage in this month", `read: 'unreadable'` is "nobody could look", and
|
|
28649
|
+
* the date-picker's day dots must not spell them the same.
|
|
28650
|
+
*/
|
|
28651
|
+
var RecordingDaysForDeviceSchema = object({
|
|
28652
|
+
deviceId: number(),
|
|
28653
|
+
read: _enum(["read", "unreadable"]),
|
|
28654
|
+
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
28655
|
+
days: array(number()).readonly()
|
|
28656
|
+
});
|
|
28596
28657
|
var RecordingManifestSchema = object({
|
|
28597
28658
|
deviceId: number(),
|
|
28598
28659
|
/** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
|
|
@@ -28827,6 +28888,13 @@ method(object({
|
|
|
28827
28888
|
}), RecordingAvailabilitySchema, {
|
|
28828
28889
|
kind: "query",
|
|
28829
28890
|
auth: "protected"
|
|
28891
|
+
}), method(object({
|
|
28892
|
+
deviceIds: array(number()).min(1).max(200),
|
|
28893
|
+
fromMs: number(),
|
|
28894
|
+
toMs: number()
|
|
28895
|
+
}), array(RecordingAvailabilityForDeviceSchema).readonly(), {
|
|
28896
|
+
kind: "query",
|
|
28897
|
+
auth: "protected"
|
|
28830
28898
|
}), method(object({
|
|
28831
28899
|
deviceId: number(),
|
|
28832
28900
|
fromMs: number(),
|
|
@@ -28835,6 +28903,14 @@ method(object({
|
|
|
28835
28903
|
}), RecordingDaysSchema, {
|
|
28836
28904
|
kind: "query",
|
|
28837
28905
|
auth: "protected"
|
|
28906
|
+
}), method(object({
|
|
28907
|
+
deviceIds: array(number()).min(1).max(200),
|
|
28908
|
+
fromMs: number(),
|
|
28909
|
+
toMs: number(),
|
|
28910
|
+
tzOffsetMinutes: number()
|
|
28911
|
+
}), array(RecordingDaysForDeviceSchema).readonly(), {
|
|
28912
|
+
kind: "query",
|
|
28913
|
+
auth: "protected"
|
|
28838
28914
|
}), method(object({
|
|
28839
28915
|
deviceId: number(),
|
|
28840
28916
|
fromMs: number(),
|
|
@@ -35731,6 +35807,12 @@ Object.freeze({
|
|
|
35731
35807
|
addonId: null,
|
|
35732
35808
|
access: "view"
|
|
35733
35809
|
},
|
|
35810
|
+
"pipelineAnalytics.getEventDensityBatch": {
|
|
35811
|
+
capName: "pipeline-analytics",
|
|
35812
|
+
capScope: "device",
|
|
35813
|
+
addonId: null,
|
|
35814
|
+
access: "view"
|
|
35815
|
+
},
|
|
35734
35816
|
"pipelineAnalytics.getEventMedia": {
|
|
35735
35817
|
capName: "pipeline-analytics",
|
|
35736
35818
|
capScope: "device",
|
|
@@ -36853,12 +36935,24 @@ Object.freeze({
|
|
|
36853
36935
|
addonId: null,
|
|
36854
36936
|
access: "view"
|
|
36855
36937
|
},
|
|
36938
|
+
"recording.getAvailabilityBatch": {
|
|
36939
|
+
capName: "recording",
|
|
36940
|
+
capScope: "system",
|
|
36941
|
+
addonId: null,
|
|
36942
|
+
access: "view"
|
|
36943
|
+
},
|
|
36856
36944
|
"recording.getDaysWithRecordings": {
|
|
36857
36945
|
capName: "recording",
|
|
36858
36946
|
capScope: "system",
|
|
36859
36947
|
addonId: null,
|
|
36860
36948
|
access: "view"
|
|
36861
36949
|
},
|
|
36950
|
+
"recording.getDaysWithRecordingsBatch": {
|
|
36951
|
+
capName: "recording",
|
|
36952
|
+
capScope: "system",
|
|
36953
|
+
addonId: null,
|
|
36954
|
+
access: "view"
|
|
36955
|
+
},
|
|
36862
36956
|
"recording.getDeviceConfig": {
|
|
36863
36957
|
capName: "recording",
|
|
36864
36958
|
capScope: "system",
|
|
@@ -39463,6 +39557,11 @@ Object.freeze({
|
|
|
39463
39557
|
form: "single",
|
|
39464
39558
|
optional: false
|
|
39465
39559
|
}],
|
|
39560
|
+
"pipelineAnalytics.getEventDensityBatch": [{
|
|
39561
|
+
name: "deviceIds",
|
|
39562
|
+
form: "array",
|
|
39563
|
+
optional: false
|
|
39564
|
+
}],
|
|
39466
39565
|
"pipelineAnalytics.getEventMedia": [{
|
|
39467
39566
|
name: "deviceId",
|
|
39468
39567
|
form: "single",
|
|
@@ -39878,11 +39977,21 @@ Object.freeze({
|
|
|
39878
39977
|
form: "single",
|
|
39879
39978
|
optional: false
|
|
39880
39979
|
}],
|
|
39980
|
+
"recording.getAvailabilityBatch": [{
|
|
39981
|
+
name: "deviceIds",
|
|
39982
|
+
form: "array",
|
|
39983
|
+
optional: false
|
|
39984
|
+
}],
|
|
39881
39985
|
"recording.getDaysWithRecordings": [{
|
|
39882
39986
|
name: "deviceId",
|
|
39883
39987
|
form: "single",
|
|
39884
39988
|
optional: false
|
|
39885
39989
|
}],
|
|
39990
|
+
"recording.getDaysWithRecordingsBatch": [{
|
|
39991
|
+
name: "deviceIds",
|
|
39992
|
+
form: "array",
|
|
39993
|
+
optional: false
|
|
39994
|
+
}],
|
|
39886
39995
|
"recording.getDeviceConfig": [{
|
|
39887
39996
|
name: "deviceId",
|
|
39888
39997
|
form: "single",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-dreo",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.52",
|
|
4
4
|
"description": "Dreo smart-device (fan / air-circulator / purifier / heater / humidifier) device-provider addon for CamStack — wraps the @apocaliss92/nodedreo Dreo cloud client (REST + WebSocket)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|