@camstack/addon-provider-onvif 1.2.49 → 1.2.51

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
@@ -15627,6 +15627,8 @@ var NcSystemEventKindSchema = _enum([
15627
15627
  "device-offline",
15628
15628
  "device-disabled",
15629
15629
  "device-enabled",
15630
+ "device-battery-low",
15631
+ "device-battery-normal",
15630
15632
  "stream-online",
15631
15633
  "stream-offline",
15632
15634
  "node-online",
@@ -18901,6 +18903,34 @@ var KeyEventsForDeviceSchema = object({
18901
18903
  deviceId: number(),
18902
18904
  events: array(KeyEventSchema).readonly()
18903
18905
  });
18906
+ /** One non-empty bucket of the timeline histogram. */
18907
+ var EventDensityBucketSchema = object({
18908
+ bucketStart: number(),
18909
+ motion: number().int(),
18910
+ object: number().int(),
18911
+ audio: number().int()
18912
+ });
18913
+ /**
18914
+ * One camera's row in a `getEventDensityBatch` answer.
18915
+ *
18916
+ * TWO facts, and the timeline draws them differently:
18917
+ *
18918
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
18919
+ * claim: read, and nothing happened in the window.
18920
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
18921
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
18922
+ * not quiet.
18923
+ *
18924
+ * Fanned out per camera the difference was free — one query rejected while the
18925
+ * others resolved — and collapsing to a batch is the exact moment it is lost
18926
+ * silently. Every requested id gets a row: a caller that asked for twelve and
18927
+ * got eleven cannot tell which one is missing, or that any is.
18928
+ */
18929
+ var EventDensityForDeviceSchema = object({
18930
+ deviceId: number(),
18931
+ read: _enum(["read", "unreadable"]),
18932
+ buckets: array(EventDensityBucketSchema).readonly()
18933
+ });
18904
18934
  object({
18905
18935
  trackId: string(),
18906
18936
  className: string(),
@@ -19211,12 +19241,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19211
19241
  since: number(),
19212
19242
  until: number(),
19213
19243
  bucketMs: number().int().positive()
19214
- }), array(object({
19215
- bucketStart: number(),
19216
- motion: number().int(),
19217
- object: number().int(),
19218
- audio: number().int()
19219
- })).readonly()), method(object({
19244
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19245
+ deviceIds: array(number()).min(1).max(200),
19246
+ since: number(),
19247
+ until: number(),
19248
+ bucketMs: number().int().positive()
19249
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19220
19250
  deviceId: number(),
19221
19251
  cutoffMs: number()
19222
19252
  }), object({
@@ -26672,6 +26702,39 @@ var RecordingDaysSchema = object({
26672
26702
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26673
26703
  days: array(number())
26674
26704
  });
26705
+ /**
26706
+ * One camera's row in a `getAvailabilityBatch` answer.
26707
+ *
26708
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
26709
+ * batch collapses the transport, not the work — plus the one thing the singular
26710
+ * method never had to say:
26711
+ *
26712
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
26713
+ * no footage in the window", which is a real claim.
26714
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
26715
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
26716
+ * that emptiness means NOTHING.
26717
+ *
26718
+ * A timeline that renders the second as the first tells an operator there is no
26719
+ * footage when the truth is that nobody looked.
26720
+ */
26721
+ var RecordingAvailabilityForDeviceSchema = object({
26722
+ deviceId: number(),
26723
+ read: _enum(["read", "unreadable"]),
26724
+ ranges: array(RecordingRangeSchema).readonly()
26725
+ });
26726
+ /**
26727
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
26728
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
26729
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
26730
+ * the date-picker's day dots must not spell them the same.
26731
+ */
26732
+ var RecordingDaysForDeviceSchema = object({
26733
+ deviceId: number(),
26734
+ read: _enum(["read", "unreadable"]),
26735
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26736
+ days: array(number()).readonly()
26737
+ });
26675
26738
  var RecordingManifestSchema = object({
26676
26739
  deviceId: number(),
26677
26740
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -26906,6 +26969,13 @@ method(object({
26906
26969
  }), RecordingAvailabilitySchema, {
26907
26970
  kind: "query",
26908
26971
  auth: "protected"
26972
+ }), method(object({
26973
+ deviceIds: array(number()).min(1).max(200),
26974
+ fromMs: number(),
26975
+ toMs: number()
26976
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
26977
+ kind: "query",
26978
+ auth: "protected"
26909
26979
  }), method(object({
26910
26980
  deviceId: number(),
26911
26981
  fromMs: number(),
@@ -26914,6 +26984,14 @@ method(object({
26914
26984
  }), RecordingDaysSchema, {
26915
26985
  kind: "query",
26916
26986
  auth: "protected"
26987
+ }), method(object({
26988
+ deviceIds: array(number()).min(1).max(200),
26989
+ fromMs: number(),
26990
+ toMs: number(),
26991
+ tzOffsetMinutes: number()
26992
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
26993
+ kind: "query",
26994
+ auth: "protected"
26917
26995
  }), method(object({
26918
26996
  deviceId: number(),
26919
26997
  fromMs: number(),
@@ -32521,6 +32599,12 @@ Object.freeze({
32521
32599
  addonId: null,
32522
32600
  access: "view"
32523
32601
  },
32602
+ "pipelineAnalytics.getEventDensityBatch": {
32603
+ capName: "pipeline-analytics",
32604
+ capScope: "device",
32605
+ addonId: null,
32606
+ access: "view"
32607
+ },
32524
32608
  "pipelineAnalytics.getEventMedia": {
32525
32609
  capName: "pipeline-analytics",
32526
32610
  capScope: "device",
@@ -33643,12 +33727,24 @@ Object.freeze({
33643
33727
  addonId: null,
33644
33728
  access: "view"
33645
33729
  },
33730
+ "recording.getAvailabilityBatch": {
33731
+ capName: "recording",
33732
+ capScope: "system",
33733
+ addonId: null,
33734
+ access: "view"
33735
+ },
33646
33736
  "recording.getDaysWithRecordings": {
33647
33737
  capName: "recording",
33648
33738
  capScope: "system",
33649
33739
  addonId: null,
33650
33740
  access: "view"
33651
33741
  },
33742
+ "recording.getDaysWithRecordingsBatch": {
33743
+ capName: "recording",
33744
+ capScope: "system",
33745
+ addonId: null,
33746
+ access: "view"
33747
+ },
33652
33748
  "recording.getDeviceConfig": {
33653
33749
  capName: "recording",
33654
33750
  capScope: "system",
@@ -36253,6 +36349,11 @@ Object.freeze({
36253
36349
  form: "single",
36254
36350
  optional: false
36255
36351
  }],
36352
+ "pipelineAnalytics.getEventDensityBatch": [{
36353
+ name: "deviceIds",
36354
+ form: "array",
36355
+ optional: false
36356
+ }],
36256
36357
  "pipelineAnalytics.getEventMedia": [{
36257
36358
  name: "deviceId",
36258
36359
  form: "single",
@@ -36668,11 +36769,21 @@ Object.freeze({
36668
36769
  form: "single",
36669
36770
  optional: false
36670
36771
  }],
36772
+ "recording.getAvailabilityBatch": [{
36773
+ name: "deviceIds",
36774
+ form: "array",
36775
+ optional: false
36776
+ }],
36671
36777
  "recording.getDaysWithRecordings": [{
36672
36778
  name: "deviceId",
36673
36779
  form: "single",
36674
36780
  optional: false
36675
36781
  }],
36782
+ "recording.getDaysWithRecordingsBatch": [{
36783
+ name: "deviceIds",
36784
+ form: "array",
36785
+ optional: false
36786
+ }],
36676
36787
  "recording.getDeviceConfig": [{
36677
36788
  name: "deviceId",
36678
36789
  form: "single",
package/dist/addon.mjs CHANGED
@@ -15628,6 +15628,8 @@ var NcSystemEventKindSchema = _enum([
15628
15628
  "device-offline",
15629
15629
  "device-disabled",
15630
15630
  "device-enabled",
15631
+ "device-battery-low",
15632
+ "device-battery-normal",
15631
15633
  "stream-online",
15632
15634
  "stream-offline",
15633
15635
  "node-online",
@@ -18902,6 +18904,34 @@ var KeyEventsForDeviceSchema = object({
18902
18904
  deviceId: number(),
18903
18905
  events: array(KeyEventSchema).readonly()
18904
18906
  });
18907
+ /** One non-empty bucket of the timeline histogram. */
18908
+ var EventDensityBucketSchema = object({
18909
+ bucketStart: number(),
18910
+ motion: number().int(),
18911
+ object: number().int(),
18912
+ audio: number().int()
18913
+ });
18914
+ /**
18915
+ * One camera's row in a `getEventDensityBatch` answer.
18916
+ *
18917
+ * TWO facts, and the timeline draws them differently:
18918
+ *
18919
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
18920
+ * claim: read, and nothing happened in the window.
18921
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
18922
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
18923
+ * not quiet.
18924
+ *
18925
+ * Fanned out per camera the difference was free — one query rejected while the
18926
+ * others resolved — and collapsing to a batch is the exact moment it is lost
18927
+ * silently. Every requested id gets a row: a caller that asked for twelve and
18928
+ * got eleven cannot tell which one is missing, or that any is.
18929
+ */
18930
+ var EventDensityForDeviceSchema = object({
18931
+ deviceId: number(),
18932
+ read: _enum(["read", "unreadable"]),
18933
+ buckets: array(EventDensityBucketSchema).readonly()
18934
+ });
18905
18935
  object({
18906
18936
  trackId: string(),
18907
18937
  className: string(),
@@ -19212,12 +19242,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19212
19242
  since: number(),
19213
19243
  until: number(),
19214
19244
  bucketMs: number().int().positive()
19215
- }), array(object({
19216
- bucketStart: number(),
19217
- motion: number().int(),
19218
- object: number().int(),
19219
- audio: number().int()
19220
- })).readonly()), method(object({
19245
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19246
+ deviceIds: array(number()).min(1).max(200),
19247
+ since: number(),
19248
+ until: number(),
19249
+ bucketMs: number().int().positive()
19250
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19221
19251
  deviceId: number(),
19222
19252
  cutoffMs: number()
19223
19253
  }), object({
@@ -26673,6 +26703,39 @@ var RecordingDaysSchema = object({
26673
26703
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26674
26704
  days: array(number())
26675
26705
  });
26706
+ /**
26707
+ * One camera's row in a `getAvailabilityBatch` answer.
26708
+ *
26709
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
26710
+ * batch collapses the transport, not the work — plus the one thing the singular
26711
+ * method never had to say:
26712
+ *
26713
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
26714
+ * no footage in the window", which is a real claim.
26715
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
26716
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
26717
+ * that emptiness means NOTHING.
26718
+ *
26719
+ * A timeline that renders the second as the first tells an operator there is no
26720
+ * footage when the truth is that nobody looked.
26721
+ */
26722
+ var RecordingAvailabilityForDeviceSchema = object({
26723
+ deviceId: number(),
26724
+ read: _enum(["read", "unreadable"]),
26725
+ ranges: array(RecordingRangeSchema).readonly()
26726
+ });
26727
+ /**
26728
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
26729
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
26730
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
26731
+ * the date-picker's day dots must not spell them the same.
26732
+ */
26733
+ var RecordingDaysForDeviceSchema = object({
26734
+ deviceId: number(),
26735
+ read: _enum(["read", "unreadable"]),
26736
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26737
+ days: array(number()).readonly()
26738
+ });
26676
26739
  var RecordingManifestSchema = object({
26677
26740
  deviceId: number(),
26678
26741
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -26907,6 +26970,13 @@ method(object({
26907
26970
  }), RecordingAvailabilitySchema, {
26908
26971
  kind: "query",
26909
26972
  auth: "protected"
26973
+ }), method(object({
26974
+ deviceIds: array(number()).min(1).max(200),
26975
+ fromMs: number(),
26976
+ toMs: number()
26977
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
26978
+ kind: "query",
26979
+ auth: "protected"
26910
26980
  }), method(object({
26911
26981
  deviceId: number(),
26912
26982
  fromMs: number(),
@@ -26915,6 +26985,14 @@ method(object({
26915
26985
  }), RecordingDaysSchema, {
26916
26986
  kind: "query",
26917
26987
  auth: "protected"
26988
+ }), method(object({
26989
+ deviceIds: array(number()).min(1).max(200),
26990
+ fromMs: number(),
26991
+ toMs: number(),
26992
+ tzOffsetMinutes: number()
26993
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
26994
+ kind: "query",
26995
+ auth: "protected"
26918
26996
  }), method(object({
26919
26997
  deviceId: number(),
26920
26998
  fromMs: number(),
@@ -32522,6 +32600,12 @@ Object.freeze({
32522
32600
  addonId: null,
32523
32601
  access: "view"
32524
32602
  },
32603
+ "pipelineAnalytics.getEventDensityBatch": {
32604
+ capName: "pipeline-analytics",
32605
+ capScope: "device",
32606
+ addonId: null,
32607
+ access: "view"
32608
+ },
32525
32609
  "pipelineAnalytics.getEventMedia": {
32526
32610
  capName: "pipeline-analytics",
32527
32611
  capScope: "device",
@@ -33644,12 +33728,24 @@ Object.freeze({
33644
33728
  addonId: null,
33645
33729
  access: "view"
33646
33730
  },
33731
+ "recording.getAvailabilityBatch": {
33732
+ capName: "recording",
33733
+ capScope: "system",
33734
+ addonId: null,
33735
+ access: "view"
33736
+ },
33647
33737
  "recording.getDaysWithRecordings": {
33648
33738
  capName: "recording",
33649
33739
  capScope: "system",
33650
33740
  addonId: null,
33651
33741
  access: "view"
33652
33742
  },
33743
+ "recording.getDaysWithRecordingsBatch": {
33744
+ capName: "recording",
33745
+ capScope: "system",
33746
+ addonId: null,
33747
+ access: "view"
33748
+ },
33653
33749
  "recording.getDeviceConfig": {
33654
33750
  capName: "recording",
33655
33751
  capScope: "system",
@@ -36254,6 +36350,11 @@ Object.freeze({
36254
36350
  form: "single",
36255
36351
  optional: false
36256
36352
  }],
36353
+ "pipelineAnalytics.getEventDensityBatch": [{
36354
+ name: "deviceIds",
36355
+ form: "array",
36356
+ optional: false
36357
+ }],
36257
36358
  "pipelineAnalytics.getEventMedia": [{
36258
36359
  name: "deviceId",
36259
36360
  form: "single",
@@ -36669,11 +36770,21 @@ Object.freeze({
36669
36770
  form: "single",
36670
36771
  optional: false
36671
36772
  }],
36773
+ "recording.getAvailabilityBatch": [{
36774
+ name: "deviceIds",
36775
+ form: "array",
36776
+ optional: false
36777
+ }],
36672
36778
  "recording.getDaysWithRecordings": [{
36673
36779
  name: "deviceId",
36674
36780
  form: "single",
36675
36781
  optional: false
36676
36782
  }],
36783
+ "recording.getDaysWithRecordingsBatch": [{
36784
+ name: "deviceIds",
36785
+ form: "array",
36786
+ optional: false
36787
+ }],
36677
36788
  "recording.getDeviceConfig": [{
36678
36789
  name: "deviceId",
36679
36790
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-onvif",
3
- "version": "1.2.49",
3
+ "version": "1.2.51",
4
4
  "description": "ONVIF camera device provider addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",