@camstack/addon-provider-amcrest 0.2.51 → 0.2.53

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
@@ -15868,6 +15868,8 @@ var NcSystemEventKindSchema = _enum([
15868
15868
  "device-offline",
15869
15869
  "device-disabled",
15870
15870
  "device-enabled",
15871
+ "device-battery-low",
15872
+ "device-battery-normal",
15871
15873
  "stream-online",
15872
15874
  "stream-offline",
15873
15875
  "node-online",
@@ -19182,6 +19184,34 @@ var KeyEventsForDeviceSchema = object({
19182
19184
  deviceId: number(),
19183
19185
  events: array(KeyEventSchema).readonly()
19184
19186
  });
19187
+ /** One non-empty bucket of the timeline histogram. */
19188
+ var EventDensityBucketSchema = object({
19189
+ bucketStart: number(),
19190
+ motion: number().int(),
19191
+ object: number().int(),
19192
+ audio: number().int()
19193
+ });
19194
+ /**
19195
+ * One camera's row in a `getEventDensityBatch` answer.
19196
+ *
19197
+ * TWO facts, and the timeline draws them differently:
19198
+ *
19199
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
19200
+ * claim: read, and nothing happened in the window.
19201
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
19202
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
19203
+ * not quiet.
19204
+ *
19205
+ * Fanned out per camera the difference was free — one query rejected while the
19206
+ * others resolved — and collapsing to a batch is the exact moment it is lost
19207
+ * silently. Every requested id gets a row: a caller that asked for twelve and
19208
+ * got eleven cannot tell which one is missing, or that any is.
19209
+ */
19210
+ var EventDensityForDeviceSchema = object({
19211
+ deviceId: number(),
19212
+ read: _enum(["read", "unreadable"]),
19213
+ buckets: array(EventDensityBucketSchema).readonly()
19214
+ });
19185
19215
  object({
19186
19216
  trackId: string(),
19187
19217
  className: string(),
@@ -19492,12 +19522,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19492
19522
  since: number(),
19493
19523
  until: number(),
19494
19524
  bucketMs: number().int().positive()
19495
- }), array(object({
19496
- bucketStart: number(),
19497
- motion: number().int(),
19498
- object: number().int(),
19499
- audio: number().int()
19500
- })).readonly()), method(object({
19525
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19526
+ deviceIds: array(number()).min(1).max(200),
19527
+ since: number(),
19528
+ until: number(),
19529
+ bucketMs: number().int().positive()
19530
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19501
19531
  deviceId: number(),
19502
19532
  cutoffMs: number()
19503
19533
  }), object({
@@ -28714,6 +28744,39 @@ var RecordingDaysSchema = object({
28714
28744
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28715
28745
  days: array(number())
28716
28746
  });
28747
+ /**
28748
+ * One camera's row in a `getAvailabilityBatch` answer.
28749
+ *
28750
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
28751
+ * batch collapses the transport, not the work — plus the one thing the singular
28752
+ * method never had to say:
28753
+ *
28754
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
28755
+ * no footage in the window", which is a real claim.
28756
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
28757
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
28758
+ * that emptiness means NOTHING.
28759
+ *
28760
+ * A timeline that renders the second as the first tells an operator there is no
28761
+ * footage when the truth is that nobody looked.
28762
+ */
28763
+ var RecordingAvailabilityForDeviceSchema = object({
28764
+ deviceId: number(),
28765
+ read: _enum(["read", "unreadable"]),
28766
+ ranges: array(RecordingRangeSchema).readonly()
28767
+ });
28768
+ /**
28769
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
28770
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
28771
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
28772
+ * the date-picker's day dots must not spell them the same.
28773
+ */
28774
+ var RecordingDaysForDeviceSchema = object({
28775
+ deviceId: number(),
28776
+ read: _enum(["read", "unreadable"]),
28777
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28778
+ days: array(number()).readonly()
28779
+ });
28717
28780
  var RecordingManifestSchema = object({
28718
28781
  deviceId: number(),
28719
28782
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -28948,6 +29011,13 @@ method(object({
28948
29011
  }), RecordingAvailabilitySchema, {
28949
29012
  kind: "query",
28950
29013
  auth: "protected"
29014
+ }), method(object({
29015
+ deviceIds: array(number()).min(1).max(200),
29016
+ fromMs: number(),
29017
+ toMs: number()
29018
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
29019
+ kind: "query",
29020
+ auth: "protected"
28951
29021
  }), method(object({
28952
29022
  deviceId: number(),
28953
29023
  fromMs: number(),
@@ -28956,6 +29026,14 @@ method(object({
28956
29026
  }), RecordingDaysSchema, {
28957
29027
  kind: "query",
28958
29028
  auth: "protected"
29029
+ }), method(object({
29030
+ deviceIds: array(number()).min(1).max(200),
29031
+ fromMs: number(),
29032
+ toMs: number(),
29033
+ tzOffsetMinutes: number()
29034
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
29035
+ kind: "query",
29036
+ auth: "protected"
28959
29037
  }), method(object({
28960
29038
  deviceId: number(),
28961
29039
  fromMs: number(),
@@ -36256,6 +36334,12 @@ Object.freeze({
36256
36334
  addonId: null,
36257
36335
  access: "view"
36258
36336
  },
36337
+ "pipelineAnalytics.getEventDensityBatch": {
36338
+ capName: "pipeline-analytics",
36339
+ capScope: "device",
36340
+ addonId: null,
36341
+ access: "view"
36342
+ },
36259
36343
  "pipelineAnalytics.getEventMedia": {
36260
36344
  capName: "pipeline-analytics",
36261
36345
  capScope: "device",
@@ -37378,12 +37462,24 @@ Object.freeze({
37378
37462
  addonId: null,
37379
37463
  access: "view"
37380
37464
  },
37465
+ "recording.getAvailabilityBatch": {
37466
+ capName: "recording",
37467
+ capScope: "system",
37468
+ addonId: null,
37469
+ access: "view"
37470
+ },
37381
37471
  "recording.getDaysWithRecordings": {
37382
37472
  capName: "recording",
37383
37473
  capScope: "system",
37384
37474
  addonId: null,
37385
37475
  access: "view"
37386
37476
  },
37477
+ "recording.getDaysWithRecordingsBatch": {
37478
+ capName: "recording",
37479
+ capScope: "system",
37480
+ addonId: null,
37481
+ access: "view"
37482
+ },
37387
37483
  "recording.getDeviceConfig": {
37388
37484
  capName: "recording",
37389
37485
  capScope: "system",
@@ -39988,6 +40084,11 @@ Object.freeze({
39988
40084
  form: "single",
39989
40085
  optional: false
39990
40086
  }],
40087
+ "pipelineAnalytics.getEventDensityBatch": [{
40088
+ name: "deviceIds",
40089
+ form: "array",
40090
+ optional: false
40091
+ }],
39991
40092
  "pipelineAnalytics.getEventMedia": [{
39992
40093
  name: "deviceId",
39993
40094
  form: "single",
@@ -40403,11 +40504,21 @@ Object.freeze({
40403
40504
  form: "single",
40404
40505
  optional: false
40405
40506
  }],
40507
+ "recording.getAvailabilityBatch": [{
40508
+ name: "deviceIds",
40509
+ form: "array",
40510
+ optional: false
40511
+ }],
40406
40512
  "recording.getDaysWithRecordings": [{
40407
40513
  name: "deviceId",
40408
40514
  form: "single",
40409
40515
  optional: false
40410
40516
  }],
40517
+ "recording.getDaysWithRecordingsBatch": [{
40518
+ name: "deviceIds",
40519
+ form: "array",
40520
+ optional: false
40521
+ }],
40411
40522
  "recording.getDeviceConfig": [{
40412
40523
  name: "deviceId",
40413
40524
  form: "single",
package/dist/addon.mjs CHANGED
@@ -15869,6 +15869,8 @@ var NcSystemEventKindSchema = _enum([
15869
15869
  "device-offline",
15870
15870
  "device-disabled",
15871
15871
  "device-enabled",
15872
+ "device-battery-low",
15873
+ "device-battery-normal",
15872
15874
  "stream-online",
15873
15875
  "stream-offline",
15874
15876
  "node-online",
@@ -19183,6 +19185,34 @@ var KeyEventsForDeviceSchema = object({
19183
19185
  deviceId: number(),
19184
19186
  events: array(KeyEventSchema).readonly()
19185
19187
  });
19188
+ /** One non-empty bucket of the timeline histogram. */
19189
+ var EventDensityBucketSchema = object({
19190
+ bucketStart: number(),
19191
+ motion: number().int(),
19192
+ object: number().int(),
19193
+ audio: number().int()
19194
+ });
19195
+ /**
19196
+ * One camera's row in a `getEventDensityBatch` answer.
19197
+ *
19198
+ * TWO facts, and the timeline draws them differently:
19199
+ *
19200
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
19201
+ * claim: read, and nothing happened in the window.
19202
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
19203
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
19204
+ * not quiet.
19205
+ *
19206
+ * Fanned out per camera the difference was free — one query rejected while the
19207
+ * others resolved — and collapsing to a batch is the exact moment it is lost
19208
+ * silently. Every requested id gets a row: a caller that asked for twelve and
19209
+ * got eleven cannot tell which one is missing, or that any is.
19210
+ */
19211
+ var EventDensityForDeviceSchema = object({
19212
+ deviceId: number(),
19213
+ read: _enum(["read", "unreadable"]),
19214
+ buckets: array(EventDensityBucketSchema).readonly()
19215
+ });
19186
19216
  object({
19187
19217
  trackId: string(),
19188
19218
  className: string(),
@@ -19493,12 +19523,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19493
19523
  since: number(),
19494
19524
  until: number(),
19495
19525
  bucketMs: number().int().positive()
19496
- }), array(object({
19497
- bucketStart: number(),
19498
- motion: number().int(),
19499
- object: number().int(),
19500
- audio: number().int()
19501
- })).readonly()), method(object({
19526
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19527
+ deviceIds: array(number()).min(1).max(200),
19528
+ since: number(),
19529
+ until: number(),
19530
+ bucketMs: number().int().positive()
19531
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19502
19532
  deviceId: number(),
19503
19533
  cutoffMs: number()
19504
19534
  }), object({
@@ -28715,6 +28745,39 @@ var RecordingDaysSchema = object({
28715
28745
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28716
28746
  days: array(number())
28717
28747
  });
28748
+ /**
28749
+ * One camera's row in a `getAvailabilityBatch` answer.
28750
+ *
28751
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
28752
+ * batch collapses the transport, not the work — plus the one thing the singular
28753
+ * method never had to say:
28754
+ *
28755
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
28756
+ * no footage in the window", which is a real claim.
28757
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
28758
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
28759
+ * that emptiness means NOTHING.
28760
+ *
28761
+ * A timeline that renders the second as the first tells an operator there is no
28762
+ * footage when the truth is that nobody looked.
28763
+ */
28764
+ var RecordingAvailabilityForDeviceSchema = object({
28765
+ deviceId: number(),
28766
+ read: _enum(["read", "unreadable"]),
28767
+ ranges: array(RecordingRangeSchema).readonly()
28768
+ });
28769
+ /**
28770
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
28771
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
28772
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
28773
+ * the date-picker's day dots must not spell them the same.
28774
+ */
28775
+ var RecordingDaysForDeviceSchema = object({
28776
+ deviceId: number(),
28777
+ read: _enum(["read", "unreadable"]),
28778
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28779
+ days: array(number()).readonly()
28780
+ });
28718
28781
  var RecordingManifestSchema = object({
28719
28782
  deviceId: number(),
28720
28783
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -28949,6 +29012,13 @@ method(object({
28949
29012
  }), RecordingAvailabilitySchema, {
28950
29013
  kind: "query",
28951
29014
  auth: "protected"
29015
+ }), method(object({
29016
+ deviceIds: array(number()).min(1).max(200),
29017
+ fromMs: number(),
29018
+ toMs: number()
29019
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
29020
+ kind: "query",
29021
+ auth: "protected"
28952
29022
  }), method(object({
28953
29023
  deviceId: number(),
28954
29024
  fromMs: number(),
@@ -28957,6 +29027,14 @@ method(object({
28957
29027
  }), RecordingDaysSchema, {
28958
29028
  kind: "query",
28959
29029
  auth: "protected"
29030
+ }), method(object({
29031
+ deviceIds: array(number()).min(1).max(200),
29032
+ fromMs: number(),
29033
+ toMs: number(),
29034
+ tzOffsetMinutes: number()
29035
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
29036
+ kind: "query",
29037
+ auth: "protected"
28960
29038
  }), method(object({
28961
29039
  deviceId: number(),
28962
29040
  fromMs: number(),
@@ -36257,6 +36335,12 @@ Object.freeze({
36257
36335
  addonId: null,
36258
36336
  access: "view"
36259
36337
  },
36338
+ "pipelineAnalytics.getEventDensityBatch": {
36339
+ capName: "pipeline-analytics",
36340
+ capScope: "device",
36341
+ addonId: null,
36342
+ access: "view"
36343
+ },
36260
36344
  "pipelineAnalytics.getEventMedia": {
36261
36345
  capName: "pipeline-analytics",
36262
36346
  capScope: "device",
@@ -37379,12 +37463,24 @@ Object.freeze({
37379
37463
  addonId: null,
37380
37464
  access: "view"
37381
37465
  },
37466
+ "recording.getAvailabilityBatch": {
37467
+ capName: "recording",
37468
+ capScope: "system",
37469
+ addonId: null,
37470
+ access: "view"
37471
+ },
37382
37472
  "recording.getDaysWithRecordings": {
37383
37473
  capName: "recording",
37384
37474
  capScope: "system",
37385
37475
  addonId: null,
37386
37476
  access: "view"
37387
37477
  },
37478
+ "recording.getDaysWithRecordingsBatch": {
37479
+ capName: "recording",
37480
+ capScope: "system",
37481
+ addonId: null,
37482
+ access: "view"
37483
+ },
37388
37484
  "recording.getDeviceConfig": {
37389
37485
  capName: "recording",
37390
37486
  capScope: "system",
@@ -39989,6 +40085,11 @@ Object.freeze({
39989
40085
  form: "single",
39990
40086
  optional: false
39991
40087
  }],
40088
+ "pipelineAnalytics.getEventDensityBatch": [{
40089
+ name: "deviceIds",
40090
+ form: "array",
40091
+ optional: false
40092
+ }],
39992
40093
  "pipelineAnalytics.getEventMedia": [{
39993
40094
  name: "deviceId",
39994
40095
  form: "single",
@@ -40404,11 +40505,21 @@ Object.freeze({
40404
40505
  form: "single",
40405
40506
  optional: false
40406
40507
  }],
40508
+ "recording.getAvailabilityBatch": [{
40509
+ name: "deviceIds",
40510
+ form: "array",
40511
+ optional: false
40512
+ }],
40407
40513
  "recording.getDaysWithRecordings": [{
40408
40514
  name: "deviceId",
40409
40515
  form: "single",
40410
40516
  optional: false
40411
40517
  }],
40518
+ "recording.getDaysWithRecordingsBatch": [{
40519
+ name: "deviceIds",
40520
+ form: "array",
40521
+ optional: false
40522
+ }],
40412
40523
  "recording.getDeviceConfig": [{
40413
40524
  name: "deviceId",
40414
40525
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-amcrest",
3
- "version": "0.2.51",
3
+ "version": "0.2.53",
4
4
  "description": "Amcrest/Dahua camera device provider addon for CamStack — Dahua CGI over HTTP(S) with digest auth (snapshot, RTSP catalog, PTZ, image/day-night config)",
5
5
  "keywords": [
6
6
  "camstack",