@camstack/addon-provider-dreame 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 CHANGED
@@ -69713,6 +69713,34 @@ var KeyEventsForDeviceSchema = object({
69713
69713
  deviceId: number(),
69714
69714
  events: array(KeyEventSchema).readonly()
69715
69715
  });
69716
+ /** One non-empty bucket of the timeline histogram. */
69717
+ var EventDensityBucketSchema = object({
69718
+ bucketStart: number(),
69719
+ motion: number().int(),
69720
+ object: number().int(),
69721
+ audio: number().int()
69722
+ });
69723
+ /**
69724
+ * One camera's row in a `getEventDensityBatch` answer.
69725
+ *
69726
+ * TWO facts, and the timeline draws them differently:
69727
+ *
69728
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
69729
+ * claim: read, and nothing happened in the window.
69730
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
69731
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
69732
+ * not quiet.
69733
+ *
69734
+ * Fanned out per camera the difference was free — one query rejected while the
69735
+ * others resolved — and collapsing to a batch is the exact moment it is lost
69736
+ * silently. Every requested id gets a row: a caller that asked for twelve and
69737
+ * got eleven cannot tell which one is missing, or that any is.
69738
+ */
69739
+ var EventDensityForDeviceSchema = object({
69740
+ deviceId: number(),
69741
+ read: _enum(["read", "unreadable"]),
69742
+ buckets: array(EventDensityBucketSchema).readonly()
69743
+ });
69716
69744
  object({
69717
69745
  trackId: string(),
69718
69746
  className: string(),
@@ -70023,12 +70051,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
70023
70051
  since: number(),
70024
70052
  until: number(),
70025
70053
  bucketMs: number().int().positive()
70026
- }), array(object({
70027
- bucketStart: number(),
70028
- motion: number().int(),
70029
- object: number().int(),
70030
- audio: number().int()
70031
- })).readonly()), method(object({
70054
+ }), array(EventDensityBucketSchema).readonly()), method(object({
70055
+ deviceIds: array(number()).min(1).max(200),
70056
+ since: number(),
70057
+ until: number(),
70058
+ bucketMs: number().int().positive()
70059
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
70032
70060
  deviceId: number(),
70033
70061
  cutoffMs: number()
70034
70062
  }), object({
@@ -79078,6 +79106,39 @@ var RecordingDaysSchema = object({
79078
79106
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
79079
79107
  days: array(number())
79080
79108
  });
79109
+ /**
79110
+ * One camera's row in a `getAvailabilityBatch` answer.
79111
+ *
79112
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
79113
+ * batch collapses the transport, not the work — plus the one thing the singular
79114
+ * method never had to say:
79115
+ *
79116
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
79117
+ * no footage in the window", which is a real claim.
79118
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
79119
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
79120
+ * that emptiness means NOTHING.
79121
+ *
79122
+ * A timeline that renders the second as the first tells an operator there is no
79123
+ * footage when the truth is that nobody looked.
79124
+ */
79125
+ var RecordingAvailabilityForDeviceSchema = object({
79126
+ deviceId: number(),
79127
+ read: _enum(["read", "unreadable"]),
79128
+ ranges: array(RecordingRangeSchema).readonly()
79129
+ });
79130
+ /**
79131
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
79132
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
79133
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
79134
+ * the date-picker's day dots must not spell them the same.
79135
+ */
79136
+ var RecordingDaysForDeviceSchema = object({
79137
+ deviceId: number(),
79138
+ read: _enum(["read", "unreadable"]),
79139
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
79140
+ days: array(number()).readonly()
79141
+ });
79081
79142
  var RecordingManifestSchema = object({
79082
79143
  deviceId: number(),
79083
79144
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -79312,6 +79373,13 @@ method(object({
79312
79373
  }), RecordingAvailabilitySchema, {
79313
79374
  kind: "query",
79314
79375
  auth: "protected"
79376
+ }), method(object({
79377
+ deviceIds: array(number()).min(1).max(200),
79378
+ fromMs: number(),
79379
+ toMs: number()
79380
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
79381
+ kind: "query",
79382
+ auth: "protected"
79315
79383
  }), method(object({
79316
79384
  deviceId: number(),
79317
79385
  fromMs: number(),
@@ -79320,6 +79388,14 @@ method(object({
79320
79388
  }), RecordingDaysSchema, {
79321
79389
  kind: "query",
79322
79390
  auth: "protected"
79391
+ }), method(object({
79392
+ deviceIds: array(number()).min(1).max(200),
79393
+ fromMs: number(),
79394
+ toMs: number(),
79395
+ tzOffsetMinutes: number()
79396
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
79397
+ kind: "query",
79398
+ auth: "protected"
79323
79399
  }), method(object({
79324
79400
  deviceId: number(),
79325
79401
  fromMs: number(),
@@ -86216,6 +86292,12 @@ Object.freeze({
86216
86292
  addonId: null,
86217
86293
  access: "view"
86218
86294
  },
86295
+ "pipelineAnalytics.getEventDensityBatch": {
86296
+ capName: "pipeline-analytics",
86297
+ capScope: "device",
86298
+ addonId: null,
86299
+ access: "view"
86300
+ },
86219
86301
  "pipelineAnalytics.getEventMedia": {
86220
86302
  capName: "pipeline-analytics",
86221
86303
  capScope: "device",
@@ -87338,12 +87420,24 @@ Object.freeze({
87338
87420
  addonId: null,
87339
87421
  access: "view"
87340
87422
  },
87423
+ "recording.getAvailabilityBatch": {
87424
+ capName: "recording",
87425
+ capScope: "system",
87426
+ addonId: null,
87427
+ access: "view"
87428
+ },
87341
87429
  "recording.getDaysWithRecordings": {
87342
87430
  capName: "recording",
87343
87431
  capScope: "system",
87344
87432
  addonId: null,
87345
87433
  access: "view"
87346
87434
  },
87435
+ "recording.getDaysWithRecordingsBatch": {
87436
+ capName: "recording",
87437
+ capScope: "system",
87438
+ addonId: null,
87439
+ access: "view"
87440
+ },
87347
87441
  "recording.getDeviceConfig": {
87348
87442
  capName: "recording",
87349
87443
  capScope: "system",
@@ -89948,6 +90042,11 @@ Object.freeze({
89948
90042
  form: "single",
89949
90043
  optional: false
89950
90044
  }],
90045
+ "pipelineAnalytics.getEventDensityBatch": [{
90046
+ name: "deviceIds",
90047
+ form: "array",
90048
+ optional: false
90049
+ }],
89951
90050
  "pipelineAnalytics.getEventMedia": [{
89952
90051
  name: "deviceId",
89953
90052
  form: "single",
@@ -90363,11 +90462,21 @@ Object.freeze({
90363
90462
  form: "single",
90364
90463
  optional: false
90365
90464
  }],
90465
+ "recording.getAvailabilityBatch": [{
90466
+ name: "deviceIds",
90467
+ form: "array",
90468
+ optional: false
90469
+ }],
90366
90470
  "recording.getDaysWithRecordings": [{
90367
90471
  name: "deviceId",
90368
90472
  form: "single",
90369
90473
  optional: false
90370
90474
  }],
90475
+ "recording.getDaysWithRecordingsBatch": [{
90476
+ name: "deviceIds",
90477
+ form: "array",
90478
+ optional: false
90479
+ }],
90371
90480
  "recording.getDeviceConfig": [{
90372
90481
  name: "deviceId",
90373
90482
  form: "single",
package/dist/addon.mjs CHANGED
@@ -69713,6 +69713,34 @@ var KeyEventsForDeviceSchema = object({
69713
69713
  deviceId: number(),
69714
69714
  events: array(KeyEventSchema).readonly()
69715
69715
  });
69716
+ /** One non-empty bucket of the timeline histogram. */
69717
+ var EventDensityBucketSchema = object({
69718
+ bucketStart: number(),
69719
+ motion: number().int(),
69720
+ object: number().int(),
69721
+ audio: number().int()
69722
+ });
69723
+ /**
69724
+ * One camera's row in a `getEventDensityBatch` answer.
69725
+ *
69726
+ * TWO facts, and the timeline draws them differently:
69727
+ *
69728
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
69729
+ * claim: read, and nothing happened in the window.
69730
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
69731
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
69732
+ * not quiet.
69733
+ *
69734
+ * Fanned out per camera the difference was free — one query rejected while the
69735
+ * others resolved — and collapsing to a batch is the exact moment it is lost
69736
+ * silently. Every requested id gets a row: a caller that asked for twelve and
69737
+ * got eleven cannot tell which one is missing, or that any is.
69738
+ */
69739
+ var EventDensityForDeviceSchema = object({
69740
+ deviceId: number(),
69741
+ read: _enum(["read", "unreadable"]),
69742
+ buckets: array(EventDensityBucketSchema).readonly()
69743
+ });
69716
69744
  object({
69717
69745
  trackId: string(),
69718
69746
  className: string(),
@@ -70023,12 +70051,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
70023
70051
  since: number(),
70024
70052
  until: number(),
70025
70053
  bucketMs: number().int().positive()
70026
- }), array(object({
70027
- bucketStart: number(),
70028
- motion: number().int(),
70029
- object: number().int(),
70030
- audio: number().int()
70031
- })).readonly()), method(object({
70054
+ }), array(EventDensityBucketSchema).readonly()), method(object({
70055
+ deviceIds: array(number()).min(1).max(200),
70056
+ since: number(),
70057
+ until: number(),
70058
+ bucketMs: number().int().positive()
70059
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
70032
70060
  deviceId: number(),
70033
70061
  cutoffMs: number()
70034
70062
  }), object({
@@ -79078,6 +79106,39 @@ var RecordingDaysSchema = object({
79078
79106
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
79079
79107
  days: array(number())
79080
79108
  });
79109
+ /**
79110
+ * One camera's row in a `getAvailabilityBatch` answer.
79111
+ *
79112
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
79113
+ * batch collapses the transport, not the work — plus the one thing the singular
79114
+ * method never had to say:
79115
+ *
79116
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
79117
+ * no footage in the window", which is a real claim.
79118
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
79119
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
79120
+ * that emptiness means NOTHING.
79121
+ *
79122
+ * A timeline that renders the second as the first tells an operator there is no
79123
+ * footage when the truth is that nobody looked.
79124
+ */
79125
+ var RecordingAvailabilityForDeviceSchema = object({
79126
+ deviceId: number(),
79127
+ read: _enum(["read", "unreadable"]),
79128
+ ranges: array(RecordingRangeSchema).readonly()
79129
+ });
79130
+ /**
79131
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
79132
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
79133
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
79134
+ * the date-picker's day dots must not spell them the same.
79135
+ */
79136
+ var RecordingDaysForDeviceSchema = object({
79137
+ deviceId: number(),
79138
+ read: _enum(["read", "unreadable"]),
79139
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
79140
+ days: array(number()).readonly()
79141
+ });
79081
79142
  var RecordingManifestSchema = object({
79082
79143
  deviceId: number(),
79083
79144
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -79312,6 +79373,13 @@ method(object({
79312
79373
  }), RecordingAvailabilitySchema, {
79313
79374
  kind: "query",
79314
79375
  auth: "protected"
79376
+ }), method(object({
79377
+ deviceIds: array(number()).min(1).max(200),
79378
+ fromMs: number(),
79379
+ toMs: number()
79380
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
79381
+ kind: "query",
79382
+ auth: "protected"
79315
79383
  }), method(object({
79316
79384
  deviceId: number(),
79317
79385
  fromMs: number(),
@@ -79320,6 +79388,14 @@ method(object({
79320
79388
  }), RecordingDaysSchema, {
79321
79389
  kind: "query",
79322
79390
  auth: "protected"
79391
+ }), method(object({
79392
+ deviceIds: array(number()).min(1).max(200),
79393
+ fromMs: number(),
79394
+ toMs: number(),
79395
+ tzOffsetMinutes: number()
79396
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
79397
+ kind: "query",
79398
+ auth: "protected"
79323
79399
  }), method(object({
79324
79400
  deviceId: number(),
79325
79401
  fromMs: number(),
@@ -86216,6 +86292,12 @@ Object.freeze({
86216
86292
  addonId: null,
86217
86293
  access: "view"
86218
86294
  },
86295
+ "pipelineAnalytics.getEventDensityBatch": {
86296
+ capName: "pipeline-analytics",
86297
+ capScope: "device",
86298
+ addonId: null,
86299
+ access: "view"
86300
+ },
86219
86301
  "pipelineAnalytics.getEventMedia": {
86220
86302
  capName: "pipeline-analytics",
86221
86303
  capScope: "device",
@@ -87338,12 +87420,24 @@ Object.freeze({
87338
87420
  addonId: null,
87339
87421
  access: "view"
87340
87422
  },
87423
+ "recording.getAvailabilityBatch": {
87424
+ capName: "recording",
87425
+ capScope: "system",
87426
+ addonId: null,
87427
+ access: "view"
87428
+ },
87341
87429
  "recording.getDaysWithRecordings": {
87342
87430
  capName: "recording",
87343
87431
  capScope: "system",
87344
87432
  addonId: null,
87345
87433
  access: "view"
87346
87434
  },
87435
+ "recording.getDaysWithRecordingsBatch": {
87436
+ capName: "recording",
87437
+ capScope: "system",
87438
+ addonId: null,
87439
+ access: "view"
87440
+ },
87347
87441
  "recording.getDeviceConfig": {
87348
87442
  capName: "recording",
87349
87443
  capScope: "system",
@@ -89948,6 +90042,11 @@ Object.freeze({
89948
90042
  form: "single",
89949
90043
  optional: false
89950
90044
  }],
90045
+ "pipelineAnalytics.getEventDensityBatch": [{
90046
+ name: "deviceIds",
90047
+ form: "array",
90048
+ optional: false
90049
+ }],
89951
90050
  "pipelineAnalytics.getEventMedia": [{
89952
90051
  name: "deviceId",
89953
90052
  form: "single",
@@ -90363,11 +90462,21 @@ Object.freeze({
90363
90462
  form: "single",
90364
90463
  optional: false
90365
90464
  }],
90465
+ "recording.getAvailabilityBatch": [{
90466
+ name: "deviceIds",
90467
+ form: "array",
90468
+ optional: false
90469
+ }],
90366
90470
  "recording.getDaysWithRecordings": [{
90367
90471
  name: "deviceId",
90368
90472
  form: "single",
90369
90473
  optional: false
90370
90474
  }],
90475
+ "recording.getDaysWithRecordingsBatch": [{
90476
+ name: "deviceIds",
90477
+ form: "array",
90478
+ optional: false
90479
+ }],
90371
90480
  "recording.getDeviceConfig": [{
90372
90481
  name: "deviceId",
90373
90482
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-dreame",
3
- "version": "0.2.51",
3
+ "version": "0.2.52",
4
4
  "description": "Dreame robot-vacuum / lawn-mower device-provider addon for CamStack — wraps the @apocaliss92/nodedreame Dreamehome cloud client",
5
5
  "keywords": [
6
6
  "camstack",