@camstack/addon-agent-ui 1.2.52 → 1.2.54

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.
Files changed (2) hide show
  1. package/dist/addon.js +118 -7
  2. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -15576,6 +15576,8 @@ var NcSystemEventKindSchema = _enum([
15576
15576
  "device-offline",
15577
15577
  "device-disabled",
15578
15578
  "device-enabled",
15579
+ "device-battery-low",
15580
+ "device-battery-normal",
15579
15581
  "stream-online",
15580
15582
  "stream-offline",
15581
15583
  "node-online",
@@ -18850,6 +18852,34 @@ var KeyEventsForDeviceSchema = object({
18850
18852
  deviceId: number(),
18851
18853
  events: array(KeyEventSchema).readonly()
18852
18854
  });
18855
+ /** One non-empty bucket of the timeline histogram. */
18856
+ var EventDensityBucketSchema = object({
18857
+ bucketStart: number(),
18858
+ motion: number().int(),
18859
+ object: number().int(),
18860
+ audio: number().int()
18861
+ });
18862
+ /**
18863
+ * One camera's row in a `getEventDensityBatch` answer.
18864
+ *
18865
+ * TWO facts, and the timeline draws them differently:
18866
+ *
18867
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
18868
+ * claim: read, and nothing happened in the window.
18869
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
18870
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
18871
+ * not quiet.
18872
+ *
18873
+ * Fanned out per camera the difference was free — one query rejected while the
18874
+ * others resolved — and collapsing to a batch is the exact moment it is lost
18875
+ * silently. Every requested id gets a row: a caller that asked for twelve and
18876
+ * got eleven cannot tell which one is missing, or that any is.
18877
+ */
18878
+ var EventDensityForDeviceSchema = object({
18879
+ deviceId: number(),
18880
+ read: _enum(["read", "unreadable"]),
18881
+ buckets: array(EventDensityBucketSchema).readonly()
18882
+ });
18853
18883
  object({
18854
18884
  trackId: string(),
18855
18885
  className: string(),
@@ -19160,12 +19190,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19160
19190
  since: number(),
19161
19191
  until: number(),
19162
19192
  bucketMs: number().int().positive()
19163
- }), array(object({
19164
- bucketStart: number(),
19165
- motion: number().int(),
19166
- object: number().int(),
19167
- audio: number().int()
19168
- })).readonly()), method(object({
19193
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19194
+ deviceIds: array(number()).min(1).max(200),
19195
+ since: number(),
19196
+ until: number(),
19197
+ bucketMs: number().int().positive()
19198
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19169
19199
  deviceId: number(),
19170
19200
  cutoffMs: number()
19171
19201
  }), object({
@@ -26475,6 +26505,39 @@ var RecordingDaysSchema = object({
26475
26505
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26476
26506
  days: array(number())
26477
26507
  });
26508
+ /**
26509
+ * One camera's row in a `getAvailabilityBatch` answer.
26510
+ *
26511
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
26512
+ * batch collapses the transport, not the work — plus the one thing the singular
26513
+ * method never had to say:
26514
+ *
26515
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
26516
+ * no footage in the window", which is a real claim.
26517
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
26518
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
26519
+ * that emptiness means NOTHING.
26520
+ *
26521
+ * A timeline that renders the second as the first tells an operator there is no
26522
+ * footage when the truth is that nobody looked.
26523
+ */
26524
+ var RecordingAvailabilityForDeviceSchema = object({
26525
+ deviceId: number(),
26526
+ read: _enum(["read", "unreadable"]),
26527
+ ranges: array(RecordingRangeSchema).readonly()
26528
+ });
26529
+ /**
26530
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
26531
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
26532
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
26533
+ * the date-picker's day dots must not spell them the same.
26534
+ */
26535
+ var RecordingDaysForDeviceSchema = object({
26536
+ deviceId: number(),
26537
+ read: _enum(["read", "unreadable"]),
26538
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26539
+ days: array(number()).readonly()
26540
+ });
26478
26541
  var RecordingManifestSchema = object({
26479
26542
  deviceId: number(),
26480
26543
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -26709,6 +26772,13 @@ method(object({
26709
26772
  }), RecordingAvailabilitySchema, {
26710
26773
  kind: "query",
26711
26774
  auth: "protected"
26775
+ }), method(object({
26776
+ deviceIds: array(number()).min(1).max(200),
26777
+ fromMs: number(),
26778
+ toMs: number()
26779
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
26780
+ kind: "query",
26781
+ auth: "protected"
26712
26782
  }), method(object({
26713
26783
  deviceId: number(),
26714
26784
  fromMs: number(),
@@ -26717,6 +26787,14 @@ method(object({
26717
26787
  }), RecordingDaysSchema, {
26718
26788
  kind: "query",
26719
26789
  auth: "protected"
26790
+ }), method(object({
26791
+ deviceIds: array(number()).min(1).max(200),
26792
+ fromMs: number(),
26793
+ toMs: number(),
26794
+ tzOffsetMinutes: number()
26795
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
26796
+ kind: "query",
26797
+ auth: "protected"
26720
26798
  }), method(object({
26721
26799
  deviceId: number(),
26722
26800
  fromMs: number(),
@@ -31914,6 +31992,12 @@ Object.freeze({
31914
31992
  addonId: null,
31915
31993
  access: "view"
31916
31994
  },
31995
+ "pipelineAnalytics.getEventDensityBatch": {
31996
+ capName: "pipeline-analytics",
31997
+ capScope: "device",
31998
+ addonId: null,
31999
+ access: "view"
32000
+ },
31917
32001
  "pipelineAnalytics.getEventMedia": {
31918
32002
  capName: "pipeline-analytics",
31919
32003
  capScope: "device",
@@ -33036,12 +33120,24 @@ Object.freeze({
33036
33120
  addonId: null,
33037
33121
  access: "view"
33038
33122
  },
33123
+ "recording.getAvailabilityBatch": {
33124
+ capName: "recording",
33125
+ capScope: "system",
33126
+ addonId: null,
33127
+ access: "view"
33128
+ },
33039
33129
  "recording.getDaysWithRecordings": {
33040
33130
  capName: "recording",
33041
33131
  capScope: "system",
33042
33132
  addonId: null,
33043
33133
  access: "view"
33044
33134
  },
33135
+ "recording.getDaysWithRecordingsBatch": {
33136
+ capName: "recording",
33137
+ capScope: "system",
33138
+ addonId: null,
33139
+ access: "view"
33140
+ },
33045
33141
  "recording.getDeviceConfig": {
33046
33142
  capName: "recording",
33047
33143
  capScope: "system",
@@ -35646,6 +35742,11 @@ Object.freeze({
35646
35742
  form: "single",
35647
35743
  optional: false
35648
35744
  }],
35745
+ "pipelineAnalytics.getEventDensityBatch": [{
35746
+ name: "deviceIds",
35747
+ form: "array",
35748
+ optional: false
35749
+ }],
35649
35750
  "pipelineAnalytics.getEventMedia": [{
35650
35751
  name: "deviceId",
35651
35752
  form: "single",
@@ -36061,11 +36162,21 @@ Object.freeze({
36061
36162
  form: "single",
36062
36163
  optional: false
36063
36164
  }],
36165
+ "recording.getAvailabilityBatch": [{
36166
+ name: "deviceIds",
36167
+ form: "array",
36168
+ optional: false
36169
+ }],
36064
36170
  "recording.getDaysWithRecordings": [{
36065
36171
  name: "deviceId",
36066
36172
  form: "single",
36067
36173
  optional: false
36068
36174
  }],
36175
+ "recording.getDaysWithRecordingsBatch": [{
36176
+ name: "deviceIds",
36177
+ form: "array",
36178
+ optional: false
36179
+ }],
36069
36180
  "recording.getDeviceConfig": [{
36070
36181
  name: "deviceId",
36071
36182
  form: "single",
@@ -37005,7 +37116,7 @@ var AgentUIAddon = class extends BaseAddon {
37005
37116
  capability: adminUiCapability,
37006
37117
  provider: {
37007
37118
  getStaticDir: async () => ({ staticDir: path.resolve(__dirname) }),
37008
- getVersion: async () => ({ version: "1.2.52" })
37119
+ getVersion: async () => ({ version: "1.2.54" })
37009
37120
  }
37010
37121
  }];
37011
37122
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-agent-ui",
3
- "version": "1.2.52",
3
+ "version": "1.2.54",
4
4
  "description": "Agent UI — lightweight status dashboard served by every agent node",
5
5
  "keywords": [
6
6
  "camstack",