@camstack/addon-provider-onvif 1.2.50 → 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
@@ -18903,6 +18903,34 @@ var KeyEventsForDeviceSchema = object({
18903
18903
  deviceId: number(),
18904
18904
  events: array(KeyEventSchema).readonly()
18905
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
+ });
18906
18934
  object({
18907
18935
  trackId: string(),
18908
18936
  className: string(),
@@ -19213,12 +19241,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19213
19241
  since: number(),
19214
19242
  until: number(),
19215
19243
  bucketMs: number().int().positive()
19216
- }), array(object({
19217
- bucketStart: number(),
19218
- motion: number().int(),
19219
- object: number().int(),
19220
- audio: number().int()
19221
- })).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({
19222
19250
  deviceId: number(),
19223
19251
  cutoffMs: number()
19224
19252
  }), object({
@@ -26674,6 +26702,39 @@ var RecordingDaysSchema = object({
26674
26702
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26675
26703
  days: array(number())
26676
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
+ });
26677
26738
  var RecordingManifestSchema = object({
26678
26739
  deviceId: number(),
26679
26740
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -26908,6 +26969,13 @@ method(object({
26908
26969
  }), RecordingAvailabilitySchema, {
26909
26970
  kind: "query",
26910
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"
26911
26979
  }), method(object({
26912
26980
  deviceId: number(),
26913
26981
  fromMs: number(),
@@ -26916,6 +26984,14 @@ method(object({
26916
26984
  }), RecordingDaysSchema, {
26917
26985
  kind: "query",
26918
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"
26919
26995
  }), method(object({
26920
26996
  deviceId: number(),
26921
26997
  fromMs: number(),
@@ -32523,6 +32599,12 @@ Object.freeze({
32523
32599
  addonId: null,
32524
32600
  access: "view"
32525
32601
  },
32602
+ "pipelineAnalytics.getEventDensityBatch": {
32603
+ capName: "pipeline-analytics",
32604
+ capScope: "device",
32605
+ addonId: null,
32606
+ access: "view"
32607
+ },
32526
32608
  "pipelineAnalytics.getEventMedia": {
32527
32609
  capName: "pipeline-analytics",
32528
32610
  capScope: "device",
@@ -33645,12 +33727,24 @@ Object.freeze({
33645
33727
  addonId: null,
33646
33728
  access: "view"
33647
33729
  },
33730
+ "recording.getAvailabilityBatch": {
33731
+ capName: "recording",
33732
+ capScope: "system",
33733
+ addonId: null,
33734
+ access: "view"
33735
+ },
33648
33736
  "recording.getDaysWithRecordings": {
33649
33737
  capName: "recording",
33650
33738
  capScope: "system",
33651
33739
  addonId: null,
33652
33740
  access: "view"
33653
33741
  },
33742
+ "recording.getDaysWithRecordingsBatch": {
33743
+ capName: "recording",
33744
+ capScope: "system",
33745
+ addonId: null,
33746
+ access: "view"
33747
+ },
33654
33748
  "recording.getDeviceConfig": {
33655
33749
  capName: "recording",
33656
33750
  capScope: "system",
@@ -36255,6 +36349,11 @@ Object.freeze({
36255
36349
  form: "single",
36256
36350
  optional: false
36257
36351
  }],
36352
+ "pipelineAnalytics.getEventDensityBatch": [{
36353
+ name: "deviceIds",
36354
+ form: "array",
36355
+ optional: false
36356
+ }],
36258
36357
  "pipelineAnalytics.getEventMedia": [{
36259
36358
  name: "deviceId",
36260
36359
  form: "single",
@@ -36670,11 +36769,21 @@ Object.freeze({
36670
36769
  form: "single",
36671
36770
  optional: false
36672
36771
  }],
36772
+ "recording.getAvailabilityBatch": [{
36773
+ name: "deviceIds",
36774
+ form: "array",
36775
+ optional: false
36776
+ }],
36673
36777
  "recording.getDaysWithRecordings": [{
36674
36778
  name: "deviceId",
36675
36779
  form: "single",
36676
36780
  optional: false
36677
36781
  }],
36782
+ "recording.getDaysWithRecordingsBatch": [{
36783
+ name: "deviceIds",
36784
+ form: "array",
36785
+ optional: false
36786
+ }],
36678
36787
  "recording.getDeviceConfig": [{
36679
36788
  name: "deviceId",
36680
36789
  form: "single",
package/dist/addon.mjs CHANGED
@@ -18904,6 +18904,34 @@ var KeyEventsForDeviceSchema = object({
18904
18904
  deviceId: number(),
18905
18905
  events: array(KeyEventSchema).readonly()
18906
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
+ });
18907
18935
  object({
18908
18936
  trackId: string(),
18909
18937
  className: string(),
@@ -19214,12 +19242,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19214
19242
  since: number(),
19215
19243
  until: number(),
19216
19244
  bucketMs: number().int().positive()
19217
- }), array(object({
19218
- bucketStart: number(),
19219
- motion: number().int(),
19220
- object: number().int(),
19221
- audio: number().int()
19222
- })).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({
19223
19251
  deviceId: number(),
19224
19252
  cutoffMs: number()
19225
19253
  }), object({
@@ -26675,6 +26703,39 @@ var RecordingDaysSchema = object({
26675
26703
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26676
26704
  days: array(number())
26677
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
+ });
26678
26739
  var RecordingManifestSchema = object({
26679
26740
  deviceId: number(),
26680
26741
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -26909,6 +26970,13 @@ method(object({
26909
26970
  }), RecordingAvailabilitySchema, {
26910
26971
  kind: "query",
26911
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"
26912
26980
  }), method(object({
26913
26981
  deviceId: number(),
26914
26982
  fromMs: number(),
@@ -26917,6 +26985,14 @@ method(object({
26917
26985
  }), RecordingDaysSchema, {
26918
26986
  kind: "query",
26919
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"
26920
26996
  }), method(object({
26921
26997
  deviceId: number(),
26922
26998
  fromMs: number(),
@@ -32524,6 +32600,12 @@ Object.freeze({
32524
32600
  addonId: null,
32525
32601
  access: "view"
32526
32602
  },
32603
+ "pipelineAnalytics.getEventDensityBatch": {
32604
+ capName: "pipeline-analytics",
32605
+ capScope: "device",
32606
+ addonId: null,
32607
+ access: "view"
32608
+ },
32527
32609
  "pipelineAnalytics.getEventMedia": {
32528
32610
  capName: "pipeline-analytics",
32529
32611
  capScope: "device",
@@ -33646,12 +33728,24 @@ Object.freeze({
33646
33728
  addonId: null,
33647
33729
  access: "view"
33648
33730
  },
33731
+ "recording.getAvailabilityBatch": {
33732
+ capName: "recording",
33733
+ capScope: "system",
33734
+ addonId: null,
33735
+ access: "view"
33736
+ },
33649
33737
  "recording.getDaysWithRecordings": {
33650
33738
  capName: "recording",
33651
33739
  capScope: "system",
33652
33740
  addonId: null,
33653
33741
  access: "view"
33654
33742
  },
33743
+ "recording.getDaysWithRecordingsBatch": {
33744
+ capName: "recording",
33745
+ capScope: "system",
33746
+ addonId: null,
33747
+ access: "view"
33748
+ },
33655
33749
  "recording.getDeviceConfig": {
33656
33750
  capName: "recording",
33657
33751
  capScope: "system",
@@ -36256,6 +36350,11 @@ Object.freeze({
36256
36350
  form: "single",
36257
36351
  optional: false
36258
36352
  }],
36353
+ "pipelineAnalytics.getEventDensityBatch": [{
36354
+ name: "deviceIds",
36355
+ form: "array",
36356
+ optional: false
36357
+ }],
36259
36358
  "pipelineAnalytics.getEventMedia": [{
36260
36359
  name: "deviceId",
36261
36360
  form: "single",
@@ -36671,11 +36770,21 @@ Object.freeze({
36671
36770
  form: "single",
36672
36771
  optional: false
36673
36772
  }],
36773
+ "recording.getAvailabilityBatch": [{
36774
+ name: "deviceIds",
36775
+ form: "array",
36776
+ optional: false
36777
+ }],
36674
36778
  "recording.getDaysWithRecordings": [{
36675
36779
  name: "deviceId",
36676
36780
  form: "single",
36677
36781
  optional: false
36678
36782
  }],
36783
+ "recording.getDaysWithRecordingsBatch": [{
36784
+ name: "deviceIds",
36785
+ form: "array",
36786
+ optional: false
36787
+ }],
36679
36788
  "recording.getDeviceConfig": [{
36680
36789
  name: "deviceId",
36681
36790
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-onvif",
3
- "version": "1.2.50",
3
+ "version": "1.2.51",
4
4
  "description": "ONVIF camera device provider addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",