@camstack/addon-provider-dreo 0.2.50 → 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 +117 -6
- package/dist/addon.mjs +117 -6
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -15928,6 +15928,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
15928
15928
|
"device-offline",
|
|
15929
15929
|
"device-disabled",
|
|
15930
15930
|
"device-enabled",
|
|
15931
|
+
"device-battery-low",
|
|
15932
|
+
"device-battery-normal",
|
|
15931
15933
|
"stream-online",
|
|
15932
15934
|
"stream-offline",
|
|
15933
15935
|
"node-online",
|
|
@@ -19242,6 +19244,34 @@ var KeyEventsForDeviceSchema = object({
|
|
|
19242
19244
|
deviceId: number(),
|
|
19243
19245
|
events: array(KeyEventSchema).readonly()
|
|
19244
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
|
+
});
|
|
19245
19275
|
object({
|
|
19246
19276
|
trackId: string(),
|
|
19247
19277
|
className: string(),
|
|
@@ -19552,12 +19582,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19552
19582
|
since: number(),
|
|
19553
19583
|
until: number(),
|
|
19554
19584
|
bucketMs: number().int().positive()
|
|
19555
|
-
}), array(object({
|
|
19556
|
-
|
|
19557
|
-
|
|
19558
|
-
|
|
19559
|
-
|
|
19560
|
-
})).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({
|
|
19561
19591
|
deviceId: number(),
|
|
19562
19592
|
cutoffMs: number()
|
|
19563
19593
|
}), object({
|
|
@@ -28590,6 +28620,39 @@ var RecordingDaysSchema = object({
|
|
|
28590
28620
|
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
28591
28621
|
days: array(number())
|
|
28592
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
|
+
});
|
|
28593
28656
|
var RecordingManifestSchema = object({
|
|
28594
28657
|
deviceId: number(),
|
|
28595
28658
|
/** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
|
|
@@ -28824,6 +28887,13 @@ method(object({
|
|
|
28824
28887
|
}), RecordingAvailabilitySchema, {
|
|
28825
28888
|
kind: "query",
|
|
28826
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"
|
|
28827
28897
|
}), method(object({
|
|
28828
28898
|
deviceId: number(),
|
|
28829
28899
|
fromMs: number(),
|
|
@@ -28832,6 +28902,14 @@ method(object({
|
|
|
28832
28902
|
}), RecordingDaysSchema, {
|
|
28833
28903
|
kind: "query",
|
|
28834
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"
|
|
28835
28913
|
}), method(object({
|
|
28836
28914
|
deviceId: number(),
|
|
28837
28915
|
fromMs: number(),
|
|
@@ -35728,6 +35806,12 @@ Object.freeze({
|
|
|
35728
35806
|
addonId: null,
|
|
35729
35807
|
access: "view"
|
|
35730
35808
|
},
|
|
35809
|
+
"pipelineAnalytics.getEventDensityBatch": {
|
|
35810
|
+
capName: "pipeline-analytics",
|
|
35811
|
+
capScope: "device",
|
|
35812
|
+
addonId: null,
|
|
35813
|
+
access: "view"
|
|
35814
|
+
},
|
|
35731
35815
|
"pipelineAnalytics.getEventMedia": {
|
|
35732
35816
|
capName: "pipeline-analytics",
|
|
35733
35817
|
capScope: "device",
|
|
@@ -36850,12 +36934,24 @@ Object.freeze({
|
|
|
36850
36934
|
addonId: null,
|
|
36851
36935
|
access: "view"
|
|
36852
36936
|
},
|
|
36937
|
+
"recording.getAvailabilityBatch": {
|
|
36938
|
+
capName: "recording",
|
|
36939
|
+
capScope: "system",
|
|
36940
|
+
addonId: null,
|
|
36941
|
+
access: "view"
|
|
36942
|
+
},
|
|
36853
36943
|
"recording.getDaysWithRecordings": {
|
|
36854
36944
|
capName: "recording",
|
|
36855
36945
|
capScope: "system",
|
|
36856
36946
|
addonId: null,
|
|
36857
36947
|
access: "view"
|
|
36858
36948
|
},
|
|
36949
|
+
"recording.getDaysWithRecordingsBatch": {
|
|
36950
|
+
capName: "recording",
|
|
36951
|
+
capScope: "system",
|
|
36952
|
+
addonId: null,
|
|
36953
|
+
access: "view"
|
|
36954
|
+
},
|
|
36859
36955
|
"recording.getDeviceConfig": {
|
|
36860
36956
|
capName: "recording",
|
|
36861
36957
|
capScope: "system",
|
|
@@ -39460,6 +39556,11 @@ Object.freeze({
|
|
|
39460
39556
|
form: "single",
|
|
39461
39557
|
optional: false
|
|
39462
39558
|
}],
|
|
39559
|
+
"pipelineAnalytics.getEventDensityBatch": [{
|
|
39560
|
+
name: "deviceIds",
|
|
39561
|
+
form: "array",
|
|
39562
|
+
optional: false
|
|
39563
|
+
}],
|
|
39463
39564
|
"pipelineAnalytics.getEventMedia": [{
|
|
39464
39565
|
name: "deviceId",
|
|
39465
39566
|
form: "single",
|
|
@@ -39875,11 +39976,21 @@ Object.freeze({
|
|
|
39875
39976
|
form: "single",
|
|
39876
39977
|
optional: false
|
|
39877
39978
|
}],
|
|
39979
|
+
"recording.getAvailabilityBatch": [{
|
|
39980
|
+
name: "deviceIds",
|
|
39981
|
+
form: "array",
|
|
39982
|
+
optional: false
|
|
39983
|
+
}],
|
|
39878
39984
|
"recording.getDaysWithRecordings": [{
|
|
39879
39985
|
name: "deviceId",
|
|
39880
39986
|
form: "single",
|
|
39881
39987
|
optional: false
|
|
39882
39988
|
}],
|
|
39989
|
+
"recording.getDaysWithRecordingsBatch": [{
|
|
39990
|
+
name: "deviceIds",
|
|
39991
|
+
form: "array",
|
|
39992
|
+
optional: false
|
|
39993
|
+
}],
|
|
39883
39994
|
"recording.getDeviceConfig": [{
|
|
39884
39995
|
name: "deviceId",
|
|
39885
39996
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -15929,6 +15929,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
15929
15929
|
"device-offline",
|
|
15930
15930
|
"device-disabled",
|
|
15931
15931
|
"device-enabled",
|
|
15932
|
+
"device-battery-low",
|
|
15933
|
+
"device-battery-normal",
|
|
15932
15934
|
"stream-online",
|
|
15933
15935
|
"stream-offline",
|
|
15934
15936
|
"node-online",
|
|
@@ -19243,6 +19245,34 @@ var KeyEventsForDeviceSchema = object({
|
|
|
19243
19245
|
deviceId: number(),
|
|
19244
19246
|
events: array(KeyEventSchema).readonly()
|
|
19245
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
|
+
});
|
|
19246
19276
|
object({
|
|
19247
19277
|
trackId: string(),
|
|
19248
19278
|
className: string(),
|
|
@@ -19553,12 +19583,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19553
19583
|
since: number(),
|
|
19554
19584
|
until: number(),
|
|
19555
19585
|
bucketMs: number().int().positive()
|
|
19556
|
-
}), array(object({
|
|
19557
|
-
|
|
19558
|
-
|
|
19559
|
-
|
|
19560
|
-
|
|
19561
|
-
})).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({
|
|
19562
19592
|
deviceId: number(),
|
|
19563
19593
|
cutoffMs: number()
|
|
19564
19594
|
}), object({
|
|
@@ -28591,6 +28621,39 @@ var RecordingDaysSchema = object({
|
|
|
28591
28621
|
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
28592
28622
|
days: array(number())
|
|
28593
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
|
+
});
|
|
28594
28657
|
var RecordingManifestSchema = object({
|
|
28595
28658
|
deviceId: number(),
|
|
28596
28659
|
/** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
|
|
@@ -28825,6 +28888,13 @@ method(object({
|
|
|
28825
28888
|
}), RecordingAvailabilitySchema, {
|
|
28826
28889
|
kind: "query",
|
|
28827
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"
|
|
28828
28898
|
}), method(object({
|
|
28829
28899
|
deviceId: number(),
|
|
28830
28900
|
fromMs: number(),
|
|
@@ -28833,6 +28903,14 @@ method(object({
|
|
|
28833
28903
|
}), RecordingDaysSchema, {
|
|
28834
28904
|
kind: "query",
|
|
28835
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"
|
|
28836
28914
|
}), method(object({
|
|
28837
28915
|
deviceId: number(),
|
|
28838
28916
|
fromMs: number(),
|
|
@@ -35729,6 +35807,12 @@ Object.freeze({
|
|
|
35729
35807
|
addonId: null,
|
|
35730
35808
|
access: "view"
|
|
35731
35809
|
},
|
|
35810
|
+
"pipelineAnalytics.getEventDensityBatch": {
|
|
35811
|
+
capName: "pipeline-analytics",
|
|
35812
|
+
capScope: "device",
|
|
35813
|
+
addonId: null,
|
|
35814
|
+
access: "view"
|
|
35815
|
+
},
|
|
35732
35816
|
"pipelineAnalytics.getEventMedia": {
|
|
35733
35817
|
capName: "pipeline-analytics",
|
|
35734
35818
|
capScope: "device",
|
|
@@ -36851,12 +36935,24 @@ Object.freeze({
|
|
|
36851
36935
|
addonId: null,
|
|
36852
36936
|
access: "view"
|
|
36853
36937
|
},
|
|
36938
|
+
"recording.getAvailabilityBatch": {
|
|
36939
|
+
capName: "recording",
|
|
36940
|
+
capScope: "system",
|
|
36941
|
+
addonId: null,
|
|
36942
|
+
access: "view"
|
|
36943
|
+
},
|
|
36854
36944
|
"recording.getDaysWithRecordings": {
|
|
36855
36945
|
capName: "recording",
|
|
36856
36946
|
capScope: "system",
|
|
36857
36947
|
addonId: null,
|
|
36858
36948
|
access: "view"
|
|
36859
36949
|
},
|
|
36950
|
+
"recording.getDaysWithRecordingsBatch": {
|
|
36951
|
+
capName: "recording",
|
|
36952
|
+
capScope: "system",
|
|
36953
|
+
addonId: null,
|
|
36954
|
+
access: "view"
|
|
36955
|
+
},
|
|
36860
36956
|
"recording.getDeviceConfig": {
|
|
36861
36957
|
capName: "recording",
|
|
36862
36958
|
capScope: "system",
|
|
@@ -39461,6 +39557,11 @@ Object.freeze({
|
|
|
39461
39557
|
form: "single",
|
|
39462
39558
|
optional: false
|
|
39463
39559
|
}],
|
|
39560
|
+
"pipelineAnalytics.getEventDensityBatch": [{
|
|
39561
|
+
name: "deviceIds",
|
|
39562
|
+
form: "array",
|
|
39563
|
+
optional: false
|
|
39564
|
+
}],
|
|
39464
39565
|
"pipelineAnalytics.getEventMedia": [{
|
|
39465
39566
|
name: "deviceId",
|
|
39466
39567
|
form: "single",
|
|
@@ -39876,11 +39977,21 @@ Object.freeze({
|
|
|
39876
39977
|
form: "single",
|
|
39877
39978
|
optional: false
|
|
39878
39979
|
}],
|
|
39980
|
+
"recording.getAvailabilityBatch": [{
|
|
39981
|
+
name: "deviceIds",
|
|
39982
|
+
form: "array",
|
|
39983
|
+
optional: false
|
|
39984
|
+
}],
|
|
39879
39985
|
"recording.getDaysWithRecordings": [{
|
|
39880
39986
|
name: "deviceId",
|
|
39881
39987
|
form: "single",
|
|
39882
39988
|
optional: false
|
|
39883
39989
|
}],
|
|
39990
|
+
"recording.getDaysWithRecordingsBatch": [{
|
|
39991
|
+
name: "deviceIds",
|
|
39992
|
+
form: "array",
|
|
39993
|
+
optional: false
|
|
39994
|
+
}],
|
|
39884
39995
|
"recording.getDeviceConfig": [{
|
|
39885
39996
|
name: "deviceId",
|
|
39886
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",
|