@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 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
- bucketStart: number(),
19557
- motion: number().int(),
19558
- object: number().int(),
19559
- audio: number().int()
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
- bucketStart: number(),
19558
- motion: number().int(),
19559
- object: number().int(),
19560
- audio: number().int()
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.50",
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",