@camstack/addon-provider-rtsp 1.2.50 → 1.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
@@ -15931,6 +15931,8 @@ var NcSystemEventKindSchema = _enum([
15931
15931
  "device-offline",
15932
15932
  "device-disabled",
15933
15933
  "device-enabled",
15934
+ "device-battery-low",
15935
+ "device-battery-normal",
15934
15936
  "stream-online",
15935
15937
  "stream-offline",
15936
15938
  "node-online",
@@ -19245,6 +19247,34 @@ var KeyEventsForDeviceSchema = object({
19245
19247
  deviceId: number(),
19246
19248
  events: array(KeyEventSchema).readonly()
19247
19249
  });
19250
+ /** One non-empty bucket of the timeline histogram. */
19251
+ var EventDensityBucketSchema = object({
19252
+ bucketStart: number(),
19253
+ motion: number().int(),
19254
+ object: number().int(),
19255
+ audio: number().int()
19256
+ });
19257
+ /**
19258
+ * One camera's row in a `getEventDensityBatch` answer.
19259
+ *
19260
+ * TWO facts, and the timeline draws them differently:
19261
+ *
19262
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
19263
+ * claim: read, and nothing happened in the window.
19264
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
19265
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
19266
+ * not quiet.
19267
+ *
19268
+ * Fanned out per camera the difference was free — one query rejected while the
19269
+ * others resolved — and collapsing to a batch is the exact moment it is lost
19270
+ * silently. Every requested id gets a row: a caller that asked for twelve and
19271
+ * got eleven cannot tell which one is missing, or that any is.
19272
+ */
19273
+ var EventDensityForDeviceSchema = object({
19274
+ deviceId: number(),
19275
+ read: _enum(["read", "unreadable"]),
19276
+ buckets: array(EventDensityBucketSchema).readonly()
19277
+ });
19248
19278
  object({
19249
19279
  trackId: string(),
19250
19280
  className: string(),
@@ -19555,12 +19585,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19555
19585
  since: number(),
19556
19586
  until: number(),
19557
19587
  bucketMs: number().int().positive()
19558
- }), array(object({
19559
- bucketStart: number(),
19560
- motion: number().int(),
19561
- object: number().int(),
19562
- audio: number().int()
19563
- })).readonly()), method(object({
19588
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19589
+ deviceIds: array(number()).min(1).max(200),
19590
+ since: number(),
19591
+ until: number(),
19592
+ bucketMs: number().int().positive()
19593
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19564
19594
  deviceId: number(),
19565
19595
  cutoffMs: number()
19566
19596
  }), object({
@@ -28697,6 +28727,39 @@ var RecordingDaysSchema = object({
28697
28727
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28698
28728
  days: array(number())
28699
28729
  });
28730
+ /**
28731
+ * One camera's row in a `getAvailabilityBatch` answer.
28732
+ *
28733
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
28734
+ * batch collapses the transport, not the work — plus the one thing the singular
28735
+ * method never had to say:
28736
+ *
28737
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
28738
+ * no footage in the window", which is a real claim.
28739
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
28740
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
28741
+ * that emptiness means NOTHING.
28742
+ *
28743
+ * A timeline that renders the second as the first tells an operator there is no
28744
+ * footage when the truth is that nobody looked.
28745
+ */
28746
+ var RecordingAvailabilityForDeviceSchema = object({
28747
+ deviceId: number(),
28748
+ read: _enum(["read", "unreadable"]),
28749
+ ranges: array(RecordingRangeSchema).readonly()
28750
+ });
28751
+ /**
28752
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
28753
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
28754
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
28755
+ * the date-picker's day dots must not spell them the same.
28756
+ */
28757
+ var RecordingDaysForDeviceSchema = object({
28758
+ deviceId: number(),
28759
+ read: _enum(["read", "unreadable"]),
28760
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28761
+ days: array(number()).readonly()
28762
+ });
28700
28763
  var RecordingManifestSchema = object({
28701
28764
  deviceId: number(),
28702
28765
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -28931,6 +28994,13 @@ method(object({
28931
28994
  }), RecordingAvailabilitySchema, {
28932
28995
  kind: "query",
28933
28996
  auth: "protected"
28997
+ }), method(object({
28998
+ deviceIds: array(number()).min(1).max(200),
28999
+ fromMs: number(),
29000
+ toMs: number()
29001
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
29002
+ kind: "query",
29003
+ auth: "protected"
28934
29004
  }), method(object({
28935
29005
  deviceId: number(),
28936
29006
  fromMs: number(),
@@ -28939,6 +29009,14 @@ method(object({
28939
29009
  }), RecordingDaysSchema, {
28940
29010
  kind: "query",
28941
29011
  auth: "protected"
29012
+ }), method(object({
29013
+ deviceIds: array(number()).min(1).max(200),
29014
+ fromMs: number(),
29015
+ toMs: number(),
29016
+ tzOffsetMinutes: number()
29017
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
29018
+ kind: "query",
29019
+ auth: "protected"
28942
29020
  }), method(object({
28943
29021
  deviceId: number(),
28944
29022
  fromMs: number(),
@@ -35901,6 +35979,12 @@ Object.freeze({
35901
35979
  addonId: null,
35902
35980
  access: "view"
35903
35981
  },
35982
+ "pipelineAnalytics.getEventDensityBatch": {
35983
+ capName: "pipeline-analytics",
35984
+ capScope: "device",
35985
+ addonId: null,
35986
+ access: "view"
35987
+ },
35904
35988
  "pipelineAnalytics.getEventMedia": {
35905
35989
  capName: "pipeline-analytics",
35906
35990
  capScope: "device",
@@ -37023,12 +37107,24 @@ Object.freeze({
37023
37107
  addonId: null,
37024
37108
  access: "view"
37025
37109
  },
37110
+ "recording.getAvailabilityBatch": {
37111
+ capName: "recording",
37112
+ capScope: "system",
37113
+ addonId: null,
37114
+ access: "view"
37115
+ },
37026
37116
  "recording.getDaysWithRecordings": {
37027
37117
  capName: "recording",
37028
37118
  capScope: "system",
37029
37119
  addonId: null,
37030
37120
  access: "view"
37031
37121
  },
37122
+ "recording.getDaysWithRecordingsBatch": {
37123
+ capName: "recording",
37124
+ capScope: "system",
37125
+ addonId: null,
37126
+ access: "view"
37127
+ },
37032
37128
  "recording.getDeviceConfig": {
37033
37129
  capName: "recording",
37034
37130
  capScope: "system",
@@ -39633,6 +39729,11 @@ Object.freeze({
39633
39729
  form: "single",
39634
39730
  optional: false
39635
39731
  }],
39732
+ "pipelineAnalytics.getEventDensityBatch": [{
39733
+ name: "deviceIds",
39734
+ form: "array",
39735
+ optional: false
39736
+ }],
39636
39737
  "pipelineAnalytics.getEventMedia": [{
39637
39738
  name: "deviceId",
39638
39739
  form: "single",
@@ -40048,11 +40149,21 @@ Object.freeze({
40048
40149
  form: "single",
40049
40150
  optional: false
40050
40151
  }],
40152
+ "recording.getAvailabilityBatch": [{
40153
+ name: "deviceIds",
40154
+ form: "array",
40155
+ optional: false
40156
+ }],
40051
40157
  "recording.getDaysWithRecordings": [{
40052
40158
  name: "deviceId",
40053
40159
  form: "single",
40054
40160
  optional: false
40055
40161
  }],
40162
+ "recording.getDaysWithRecordingsBatch": [{
40163
+ name: "deviceIds",
40164
+ form: "array",
40165
+ optional: false
40166
+ }],
40056
40167
  "recording.getDeviceConfig": [{
40057
40168
  name: "deviceId",
40058
40169
  form: "single",
package/dist/addon.mjs CHANGED
@@ -15907,6 +15907,8 @@ var NcSystemEventKindSchema = _enum([
15907
15907
  "device-offline",
15908
15908
  "device-disabled",
15909
15909
  "device-enabled",
15910
+ "device-battery-low",
15911
+ "device-battery-normal",
15910
15912
  "stream-online",
15911
15913
  "stream-offline",
15912
15914
  "node-online",
@@ -19221,6 +19223,34 @@ var KeyEventsForDeviceSchema = object({
19221
19223
  deviceId: number(),
19222
19224
  events: array(KeyEventSchema).readonly()
19223
19225
  });
19226
+ /** One non-empty bucket of the timeline histogram. */
19227
+ var EventDensityBucketSchema = object({
19228
+ bucketStart: number(),
19229
+ motion: number().int(),
19230
+ object: number().int(),
19231
+ audio: number().int()
19232
+ });
19233
+ /**
19234
+ * One camera's row in a `getEventDensityBatch` answer.
19235
+ *
19236
+ * TWO facts, and the timeline draws them differently:
19237
+ *
19238
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
19239
+ * claim: read, and nothing happened in the window.
19240
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
19241
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
19242
+ * not quiet.
19243
+ *
19244
+ * Fanned out per camera the difference was free — one query rejected while the
19245
+ * others resolved — and collapsing to a batch is the exact moment it is lost
19246
+ * silently. Every requested id gets a row: a caller that asked for twelve and
19247
+ * got eleven cannot tell which one is missing, or that any is.
19248
+ */
19249
+ var EventDensityForDeviceSchema = object({
19250
+ deviceId: number(),
19251
+ read: _enum(["read", "unreadable"]),
19252
+ buckets: array(EventDensityBucketSchema).readonly()
19253
+ });
19224
19254
  object({
19225
19255
  trackId: string(),
19226
19256
  className: string(),
@@ -19531,12 +19561,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19531
19561
  since: number(),
19532
19562
  until: number(),
19533
19563
  bucketMs: number().int().positive()
19534
- }), array(object({
19535
- bucketStart: number(),
19536
- motion: number().int(),
19537
- object: number().int(),
19538
- audio: number().int()
19539
- })).readonly()), method(object({
19564
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19565
+ deviceIds: array(number()).min(1).max(200),
19566
+ since: number(),
19567
+ until: number(),
19568
+ bucketMs: number().int().positive()
19569
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19540
19570
  deviceId: number(),
19541
19571
  cutoffMs: number()
19542
19572
  }), object({
@@ -28673,6 +28703,39 @@ var RecordingDaysSchema = object({
28673
28703
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28674
28704
  days: array(number())
28675
28705
  });
28706
+ /**
28707
+ * One camera's row in a `getAvailabilityBatch` answer.
28708
+ *
28709
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
28710
+ * batch collapses the transport, not the work — plus the one thing the singular
28711
+ * method never had to say:
28712
+ *
28713
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
28714
+ * no footage in the window", which is a real claim.
28715
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
28716
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
28717
+ * that emptiness means NOTHING.
28718
+ *
28719
+ * A timeline that renders the second as the first tells an operator there is no
28720
+ * footage when the truth is that nobody looked.
28721
+ */
28722
+ var RecordingAvailabilityForDeviceSchema = object({
28723
+ deviceId: number(),
28724
+ read: _enum(["read", "unreadable"]),
28725
+ ranges: array(RecordingRangeSchema).readonly()
28726
+ });
28727
+ /**
28728
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
28729
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
28730
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
28731
+ * the date-picker's day dots must not spell them the same.
28732
+ */
28733
+ var RecordingDaysForDeviceSchema = object({
28734
+ deviceId: number(),
28735
+ read: _enum(["read", "unreadable"]),
28736
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28737
+ days: array(number()).readonly()
28738
+ });
28676
28739
  var RecordingManifestSchema = object({
28677
28740
  deviceId: number(),
28678
28741
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -28907,6 +28970,13 @@ method(object({
28907
28970
  }), RecordingAvailabilitySchema, {
28908
28971
  kind: "query",
28909
28972
  auth: "protected"
28973
+ }), method(object({
28974
+ deviceIds: array(number()).min(1).max(200),
28975
+ fromMs: number(),
28976
+ toMs: number()
28977
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
28978
+ kind: "query",
28979
+ auth: "protected"
28910
28980
  }), method(object({
28911
28981
  deviceId: number(),
28912
28982
  fromMs: number(),
@@ -28915,6 +28985,14 @@ method(object({
28915
28985
  }), RecordingDaysSchema, {
28916
28986
  kind: "query",
28917
28987
  auth: "protected"
28988
+ }), method(object({
28989
+ deviceIds: array(number()).min(1).max(200),
28990
+ fromMs: number(),
28991
+ toMs: number(),
28992
+ tzOffsetMinutes: number()
28993
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
28994
+ kind: "query",
28995
+ auth: "protected"
28918
28996
  }), method(object({
28919
28997
  deviceId: number(),
28920
28998
  fromMs: number(),
@@ -35877,6 +35955,12 @@ Object.freeze({
35877
35955
  addonId: null,
35878
35956
  access: "view"
35879
35957
  },
35958
+ "pipelineAnalytics.getEventDensityBatch": {
35959
+ capName: "pipeline-analytics",
35960
+ capScope: "device",
35961
+ addonId: null,
35962
+ access: "view"
35963
+ },
35880
35964
  "pipelineAnalytics.getEventMedia": {
35881
35965
  capName: "pipeline-analytics",
35882
35966
  capScope: "device",
@@ -36999,12 +37083,24 @@ Object.freeze({
36999
37083
  addonId: null,
37000
37084
  access: "view"
37001
37085
  },
37086
+ "recording.getAvailabilityBatch": {
37087
+ capName: "recording",
37088
+ capScope: "system",
37089
+ addonId: null,
37090
+ access: "view"
37091
+ },
37002
37092
  "recording.getDaysWithRecordings": {
37003
37093
  capName: "recording",
37004
37094
  capScope: "system",
37005
37095
  addonId: null,
37006
37096
  access: "view"
37007
37097
  },
37098
+ "recording.getDaysWithRecordingsBatch": {
37099
+ capName: "recording",
37100
+ capScope: "system",
37101
+ addonId: null,
37102
+ access: "view"
37103
+ },
37008
37104
  "recording.getDeviceConfig": {
37009
37105
  capName: "recording",
37010
37106
  capScope: "system",
@@ -39609,6 +39705,11 @@ Object.freeze({
39609
39705
  form: "single",
39610
39706
  optional: false
39611
39707
  }],
39708
+ "pipelineAnalytics.getEventDensityBatch": [{
39709
+ name: "deviceIds",
39710
+ form: "array",
39711
+ optional: false
39712
+ }],
39612
39713
  "pipelineAnalytics.getEventMedia": [{
39613
39714
  name: "deviceId",
39614
39715
  form: "single",
@@ -40024,11 +40125,21 @@ Object.freeze({
40024
40125
  form: "single",
40025
40126
  optional: false
40026
40127
  }],
40128
+ "recording.getAvailabilityBatch": [{
40129
+ name: "deviceIds",
40130
+ form: "array",
40131
+ optional: false
40132
+ }],
40027
40133
  "recording.getDaysWithRecordings": [{
40028
40134
  name: "deviceId",
40029
40135
  form: "single",
40030
40136
  optional: false
40031
40137
  }],
40138
+ "recording.getDaysWithRecordingsBatch": [{
40139
+ name: "deviceIds",
40140
+ form: "array",
40141
+ optional: false
40142
+ }],
40032
40143
  "recording.getDeviceConfig": [{
40033
40144
  name: "deviceId",
40034
40145
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-rtsp",
3
- "version": "1.2.50",
3
+ "version": "1.2.52",
4
4
  "description": "Generic RTSP camera device provider addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",