@camstack/addon-provider-reolink 1.2.74 → 1.2.75

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
@@ -19814,6 +19814,34 @@ var KeyEventsForDeviceSchema = object({
19814
19814
  deviceId: number(),
19815
19815
  events: array(KeyEventSchema).readonly()
19816
19816
  });
19817
+ /** One non-empty bucket of the timeline histogram. */
19818
+ var EventDensityBucketSchema = object({
19819
+ bucketStart: number(),
19820
+ motion: number().int(),
19821
+ object: number().int(),
19822
+ audio: number().int()
19823
+ });
19824
+ /**
19825
+ * One camera's row in a `getEventDensityBatch` answer.
19826
+ *
19827
+ * TWO facts, and the timeline draws them differently:
19828
+ *
19829
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
19830
+ * claim: read, and nothing happened in the window.
19831
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
19832
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
19833
+ * not quiet.
19834
+ *
19835
+ * Fanned out per camera the difference was free — one query rejected while the
19836
+ * others resolved — and collapsing to a batch is the exact moment it is lost
19837
+ * silently. Every requested id gets a row: a caller that asked for twelve and
19838
+ * got eleven cannot tell which one is missing, or that any is.
19839
+ */
19840
+ var EventDensityForDeviceSchema = object({
19841
+ deviceId: number(),
19842
+ read: _enum(["read", "unreadable"]),
19843
+ buckets: array(EventDensityBucketSchema).readonly()
19844
+ });
19817
19845
  object({
19818
19846
  trackId: string(),
19819
19847
  className: string(),
@@ -20124,12 +20152,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
20124
20152
  since: number(),
20125
20153
  until: number(),
20126
20154
  bucketMs: number().int().positive()
20127
- }), array(object({
20128
- bucketStart: number(),
20129
- motion: number().int(),
20130
- object: number().int(),
20131
- audio: number().int()
20132
- })).readonly()), method(object({
20155
+ }), array(EventDensityBucketSchema).readonly()), method(object({
20156
+ deviceIds: array(number()).min(1).max(200),
20157
+ since: number(),
20158
+ until: number(),
20159
+ bucketMs: number().int().positive()
20160
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
20133
20161
  deviceId: number(),
20134
20162
  cutoffMs: number()
20135
20163
  }), object({
@@ -29345,6 +29373,39 @@ var RecordingDaysSchema = object({
29345
29373
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
29346
29374
  days: array(number())
29347
29375
  });
29376
+ /**
29377
+ * One camera's row in a `getAvailabilityBatch` answer.
29378
+ *
29379
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
29380
+ * batch collapses the transport, not the work — plus the one thing the singular
29381
+ * method never had to say:
29382
+ *
29383
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
29384
+ * no footage in the window", which is a real claim.
29385
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
29386
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
29387
+ * that emptiness means NOTHING.
29388
+ *
29389
+ * A timeline that renders the second as the first tells an operator there is no
29390
+ * footage when the truth is that nobody looked.
29391
+ */
29392
+ var RecordingAvailabilityForDeviceSchema = object({
29393
+ deviceId: number(),
29394
+ read: _enum(["read", "unreadable"]),
29395
+ ranges: array(RecordingRangeSchema).readonly()
29396
+ });
29397
+ /**
29398
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
29399
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
29400
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
29401
+ * the date-picker's day dots must not spell them the same.
29402
+ */
29403
+ var RecordingDaysForDeviceSchema = object({
29404
+ deviceId: number(),
29405
+ read: _enum(["read", "unreadable"]),
29406
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
29407
+ days: array(number()).readonly()
29408
+ });
29348
29409
  var RecordingManifestSchema = object({
29349
29410
  deviceId: number(),
29350
29411
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -29579,6 +29640,13 @@ method(object({
29579
29640
  }), RecordingAvailabilitySchema, {
29580
29641
  kind: "query",
29581
29642
  auth: "protected"
29643
+ }), method(object({
29644
+ deviceIds: array(number()).min(1).max(200),
29645
+ fromMs: number(),
29646
+ toMs: number()
29647
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
29648
+ kind: "query",
29649
+ auth: "protected"
29582
29650
  }), method(object({
29583
29651
  deviceId: number(),
29584
29652
  fromMs: number(),
@@ -29587,6 +29655,14 @@ method(object({
29587
29655
  }), RecordingDaysSchema, {
29588
29656
  kind: "query",
29589
29657
  auth: "protected"
29658
+ }), method(object({
29659
+ deviceIds: array(number()).min(1).max(200),
29660
+ fromMs: number(),
29661
+ toMs: number(),
29662
+ tzOffsetMinutes: number()
29663
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
29664
+ kind: "query",
29665
+ auth: "protected"
29590
29666
  }), method(object({
29591
29667
  deviceId: number(),
29592
29668
  fromMs: number(),
@@ -36848,6 +36924,12 @@ Object.freeze({
36848
36924
  addonId: null,
36849
36925
  access: "view"
36850
36926
  },
36927
+ "pipelineAnalytics.getEventDensityBatch": {
36928
+ capName: "pipeline-analytics",
36929
+ capScope: "device",
36930
+ addonId: null,
36931
+ access: "view"
36932
+ },
36851
36933
  "pipelineAnalytics.getEventMedia": {
36852
36934
  capName: "pipeline-analytics",
36853
36935
  capScope: "device",
@@ -37970,12 +38052,24 @@ Object.freeze({
37970
38052
  addonId: null,
37971
38053
  access: "view"
37972
38054
  },
38055
+ "recording.getAvailabilityBatch": {
38056
+ capName: "recording",
38057
+ capScope: "system",
38058
+ addonId: null,
38059
+ access: "view"
38060
+ },
37973
38061
  "recording.getDaysWithRecordings": {
37974
38062
  capName: "recording",
37975
38063
  capScope: "system",
37976
38064
  addonId: null,
37977
38065
  access: "view"
37978
38066
  },
38067
+ "recording.getDaysWithRecordingsBatch": {
38068
+ capName: "recording",
38069
+ capScope: "system",
38070
+ addonId: null,
38071
+ access: "view"
38072
+ },
37979
38073
  "recording.getDeviceConfig": {
37980
38074
  capName: "recording",
37981
38075
  capScope: "system",
@@ -40580,6 +40674,11 @@ Object.freeze({
40580
40674
  form: "single",
40581
40675
  optional: false
40582
40676
  }],
40677
+ "pipelineAnalytics.getEventDensityBatch": [{
40678
+ name: "deviceIds",
40679
+ form: "array",
40680
+ optional: false
40681
+ }],
40583
40682
  "pipelineAnalytics.getEventMedia": [{
40584
40683
  name: "deviceId",
40585
40684
  form: "single",
@@ -40995,11 +41094,21 @@ Object.freeze({
40995
41094
  form: "single",
40996
41095
  optional: false
40997
41096
  }],
41097
+ "recording.getAvailabilityBatch": [{
41098
+ name: "deviceIds",
41099
+ form: "array",
41100
+ optional: false
41101
+ }],
40998
41102
  "recording.getDaysWithRecordings": [{
40999
41103
  name: "deviceId",
41000
41104
  form: "single",
41001
41105
  optional: false
41002
41106
  }],
41107
+ "recording.getDaysWithRecordingsBatch": [{
41108
+ name: "deviceIds",
41109
+ form: "array",
41110
+ optional: false
41111
+ }],
41003
41112
  "recording.getDeviceConfig": [{
41004
41113
  name: "deviceId",
41005
41114
  form: "single",
package/dist/addon.mjs CHANGED
@@ -19809,6 +19809,34 @@ var KeyEventsForDeviceSchema = object({
19809
19809
  deviceId: number(),
19810
19810
  events: array(KeyEventSchema).readonly()
19811
19811
  });
19812
+ /** One non-empty bucket of the timeline histogram. */
19813
+ var EventDensityBucketSchema = object({
19814
+ bucketStart: number(),
19815
+ motion: number().int(),
19816
+ object: number().int(),
19817
+ audio: number().int()
19818
+ });
19819
+ /**
19820
+ * One camera's row in a `getEventDensityBatch` answer.
19821
+ *
19822
+ * TWO facts, and the timeline draws them differently:
19823
+ *
19824
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
19825
+ * claim: read, and nothing happened in the window.
19826
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
19827
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
19828
+ * not quiet.
19829
+ *
19830
+ * Fanned out per camera the difference was free — one query rejected while the
19831
+ * others resolved — and collapsing to a batch is the exact moment it is lost
19832
+ * silently. Every requested id gets a row: a caller that asked for twelve and
19833
+ * got eleven cannot tell which one is missing, or that any is.
19834
+ */
19835
+ var EventDensityForDeviceSchema = object({
19836
+ deviceId: number(),
19837
+ read: _enum(["read", "unreadable"]),
19838
+ buckets: array(EventDensityBucketSchema).readonly()
19839
+ });
19812
19840
  object({
19813
19841
  trackId: string(),
19814
19842
  className: string(),
@@ -20119,12 +20147,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
20119
20147
  since: number(),
20120
20148
  until: number(),
20121
20149
  bucketMs: number().int().positive()
20122
- }), array(object({
20123
- bucketStart: number(),
20124
- motion: number().int(),
20125
- object: number().int(),
20126
- audio: number().int()
20127
- })).readonly()), method(object({
20150
+ }), array(EventDensityBucketSchema).readonly()), method(object({
20151
+ deviceIds: array(number()).min(1).max(200),
20152
+ since: number(),
20153
+ until: number(),
20154
+ bucketMs: number().int().positive()
20155
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
20128
20156
  deviceId: number(),
20129
20157
  cutoffMs: number()
20130
20158
  }), object({
@@ -29340,6 +29368,39 @@ var RecordingDaysSchema = object({
29340
29368
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
29341
29369
  days: array(number())
29342
29370
  });
29371
+ /**
29372
+ * One camera's row in a `getAvailabilityBatch` answer.
29373
+ *
29374
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
29375
+ * batch collapses the transport, not the work — plus the one thing the singular
29376
+ * method never had to say:
29377
+ *
29378
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
29379
+ * no footage in the window", which is a real claim.
29380
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
29381
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
29382
+ * that emptiness means NOTHING.
29383
+ *
29384
+ * A timeline that renders the second as the first tells an operator there is no
29385
+ * footage when the truth is that nobody looked.
29386
+ */
29387
+ var RecordingAvailabilityForDeviceSchema = object({
29388
+ deviceId: number(),
29389
+ read: _enum(["read", "unreadable"]),
29390
+ ranges: array(RecordingRangeSchema).readonly()
29391
+ });
29392
+ /**
29393
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
29394
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
29395
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
29396
+ * the date-picker's day dots must not spell them the same.
29397
+ */
29398
+ var RecordingDaysForDeviceSchema = object({
29399
+ deviceId: number(),
29400
+ read: _enum(["read", "unreadable"]),
29401
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
29402
+ days: array(number()).readonly()
29403
+ });
29343
29404
  var RecordingManifestSchema = object({
29344
29405
  deviceId: number(),
29345
29406
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -29574,6 +29635,13 @@ method(object({
29574
29635
  }), RecordingAvailabilitySchema, {
29575
29636
  kind: "query",
29576
29637
  auth: "protected"
29638
+ }), method(object({
29639
+ deviceIds: array(number()).min(1).max(200),
29640
+ fromMs: number(),
29641
+ toMs: number()
29642
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
29643
+ kind: "query",
29644
+ auth: "protected"
29577
29645
  }), method(object({
29578
29646
  deviceId: number(),
29579
29647
  fromMs: number(),
@@ -29582,6 +29650,14 @@ method(object({
29582
29650
  }), RecordingDaysSchema, {
29583
29651
  kind: "query",
29584
29652
  auth: "protected"
29653
+ }), method(object({
29654
+ deviceIds: array(number()).min(1).max(200),
29655
+ fromMs: number(),
29656
+ toMs: number(),
29657
+ tzOffsetMinutes: number()
29658
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
29659
+ kind: "query",
29660
+ auth: "protected"
29585
29661
  }), method(object({
29586
29662
  deviceId: number(),
29587
29663
  fromMs: number(),
@@ -36843,6 +36919,12 @@ Object.freeze({
36843
36919
  addonId: null,
36844
36920
  access: "view"
36845
36921
  },
36922
+ "pipelineAnalytics.getEventDensityBatch": {
36923
+ capName: "pipeline-analytics",
36924
+ capScope: "device",
36925
+ addonId: null,
36926
+ access: "view"
36927
+ },
36846
36928
  "pipelineAnalytics.getEventMedia": {
36847
36929
  capName: "pipeline-analytics",
36848
36930
  capScope: "device",
@@ -37965,12 +38047,24 @@ Object.freeze({
37965
38047
  addonId: null,
37966
38048
  access: "view"
37967
38049
  },
38050
+ "recording.getAvailabilityBatch": {
38051
+ capName: "recording",
38052
+ capScope: "system",
38053
+ addonId: null,
38054
+ access: "view"
38055
+ },
37968
38056
  "recording.getDaysWithRecordings": {
37969
38057
  capName: "recording",
37970
38058
  capScope: "system",
37971
38059
  addonId: null,
37972
38060
  access: "view"
37973
38061
  },
38062
+ "recording.getDaysWithRecordingsBatch": {
38063
+ capName: "recording",
38064
+ capScope: "system",
38065
+ addonId: null,
38066
+ access: "view"
38067
+ },
37974
38068
  "recording.getDeviceConfig": {
37975
38069
  capName: "recording",
37976
38070
  capScope: "system",
@@ -40575,6 +40669,11 @@ Object.freeze({
40575
40669
  form: "single",
40576
40670
  optional: false
40577
40671
  }],
40672
+ "pipelineAnalytics.getEventDensityBatch": [{
40673
+ name: "deviceIds",
40674
+ form: "array",
40675
+ optional: false
40676
+ }],
40578
40677
  "pipelineAnalytics.getEventMedia": [{
40579
40678
  name: "deviceId",
40580
40679
  form: "single",
@@ -40990,11 +41089,21 @@ Object.freeze({
40990
41089
  form: "single",
40991
41090
  optional: false
40992
41091
  }],
41092
+ "recording.getAvailabilityBatch": [{
41093
+ name: "deviceIds",
41094
+ form: "array",
41095
+ optional: false
41096
+ }],
40993
41097
  "recording.getDaysWithRecordings": [{
40994
41098
  name: "deviceId",
40995
41099
  form: "single",
40996
41100
  optional: false
40997
41101
  }],
41102
+ "recording.getDaysWithRecordingsBatch": [{
41103
+ name: "deviceIds",
41104
+ form: "array",
41105
+ optional: false
41106
+ }],
40998
41107
  "recording.getDeviceConfig": [{
40999
41108
  name: "deviceId",
41000
41109
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-reolink",
3
- "version": "1.2.74",
3
+ "version": "1.2.75",
4
4
  "description": "Reolink camera device provider addon for CamStack — native Baichuan protocol",
5
5
  "keywords": [
6
6
  "camstack",