@camstack/addon-mqtt-broker 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.
@@ -15670,6 +15670,8 @@ var NcSystemEventKindSchema = _enum([
15670
15670
  "device-offline",
15671
15671
  "device-disabled",
15672
15672
  "device-enabled",
15673
+ "device-battery-low",
15674
+ "device-battery-normal",
15673
15675
  "stream-online",
15674
15676
  "stream-offline",
15675
15677
  "node-online",
@@ -18944,6 +18946,34 @@ var KeyEventsForDeviceSchema = object({
18944
18946
  deviceId: number(),
18945
18947
  events: array(KeyEventSchema).readonly()
18946
18948
  });
18949
+ /** One non-empty bucket of the timeline histogram. */
18950
+ var EventDensityBucketSchema = object({
18951
+ bucketStart: number(),
18952
+ motion: number().int(),
18953
+ object: number().int(),
18954
+ audio: number().int()
18955
+ });
18956
+ /**
18957
+ * One camera's row in a `getEventDensityBatch` answer.
18958
+ *
18959
+ * TWO facts, and the timeline draws them differently:
18960
+ *
18961
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
18962
+ * claim: read, and nothing happened in the window.
18963
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
18964
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
18965
+ * not quiet.
18966
+ *
18967
+ * Fanned out per camera the difference was free — one query rejected while the
18968
+ * others resolved — and collapsing to a batch is the exact moment it is lost
18969
+ * silently. Every requested id gets a row: a caller that asked for twelve and
18970
+ * got eleven cannot tell which one is missing, or that any is.
18971
+ */
18972
+ var EventDensityForDeviceSchema = object({
18973
+ deviceId: number(),
18974
+ read: _enum(["read", "unreadable"]),
18975
+ buckets: array(EventDensityBucketSchema).readonly()
18976
+ });
18947
18977
  object({
18948
18978
  trackId: string(),
18949
18979
  className: string(),
@@ -19254,12 +19284,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19254
19284
  since: number(),
19255
19285
  until: number(),
19256
19286
  bucketMs: number().int().positive()
19257
- }), array(object({
19258
- bucketStart: number(),
19259
- motion: number().int(),
19260
- object: number().int(),
19261
- audio: number().int()
19262
- })).readonly()), method(object({
19287
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19288
+ deviceIds: array(number()).min(1).max(200),
19289
+ since: number(),
19290
+ until: number(),
19291
+ bucketMs: number().int().positive()
19292
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19263
19293
  deviceId: number(),
19264
19294
  cutoffMs: number()
19265
19295
  }), object({
@@ -26569,6 +26599,39 @@ var RecordingDaysSchema = object({
26569
26599
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26570
26600
  days: array(number())
26571
26601
  });
26602
+ /**
26603
+ * One camera's row in a `getAvailabilityBatch` answer.
26604
+ *
26605
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
26606
+ * batch collapses the transport, not the work — plus the one thing the singular
26607
+ * method never had to say:
26608
+ *
26609
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
26610
+ * no footage in the window", which is a real claim.
26611
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
26612
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
26613
+ * that emptiness means NOTHING.
26614
+ *
26615
+ * A timeline that renders the second as the first tells an operator there is no
26616
+ * footage when the truth is that nobody looked.
26617
+ */
26618
+ var RecordingAvailabilityForDeviceSchema = object({
26619
+ deviceId: number(),
26620
+ read: _enum(["read", "unreadable"]),
26621
+ ranges: array(RecordingRangeSchema).readonly()
26622
+ });
26623
+ /**
26624
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
26625
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
26626
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
26627
+ * the date-picker's day dots must not spell them the same.
26628
+ */
26629
+ var RecordingDaysForDeviceSchema = object({
26630
+ deviceId: number(),
26631
+ read: _enum(["read", "unreadable"]),
26632
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26633
+ days: array(number()).readonly()
26634
+ });
26572
26635
  var RecordingManifestSchema = object({
26573
26636
  deviceId: number(),
26574
26637
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -26803,6 +26866,13 @@ method(object({
26803
26866
  }), RecordingAvailabilitySchema, {
26804
26867
  kind: "query",
26805
26868
  auth: "protected"
26869
+ }), method(object({
26870
+ deviceIds: array(number()).min(1).max(200),
26871
+ fromMs: number(),
26872
+ toMs: number()
26873
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
26874
+ kind: "query",
26875
+ auth: "protected"
26806
26876
  }), method(object({
26807
26877
  deviceId: number(),
26808
26878
  fromMs: number(),
@@ -26811,6 +26881,14 @@ method(object({
26811
26881
  }), RecordingDaysSchema, {
26812
26882
  kind: "query",
26813
26883
  auth: "protected"
26884
+ }), method(object({
26885
+ deviceIds: array(number()).min(1).max(200),
26886
+ fromMs: number(),
26887
+ toMs: number(),
26888
+ tzOffsetMinutes: number()
26889
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
26890
+ kind: "query",
26891
+ auth: "protected"
26814
26892
  }), method(object({
26815
26893
  deviceId: number(),
26816
26894
  fromMs: number(),
@@ -32008,6 +32086,12 @@ Object.freeze({
32008
32086
  addonId: null,
32009
32087
  access: "view"
32010
32088
  },
32089
+ "pipelineAnalytics.getEventDensityBatch": {
32090
+ capName: "pipeline-analytics",
32091
+ capScope: "device",
32092
+ addonId: null,
32093
+ access: "view"
32094
+ },
32011
32095
  "pipelineAnalytics.getEventMedia": {
32012
32096
  capName: "pipeline-analytics",
32013
32097
  capScope: "device",
@@ -33130,12 +33214,24 @@ Object.freeze({
33130
33214
  addonId: null,
33131
33215
  access: "view"
33132
33216
  },
33217
+ "recording.getAvailabilityBatch": {
33218
+ capName: "recording",
33219
+ capScope: "system",
33220
+ addonId: null,
33221
+ access: "view"
33222
+ },
33133
33223
  "recording.getDaysWithRecordings": {
33134
33224
  capName: "recording",
33135
33225
  capScope: "system",
33136
33226
  addonId: null,
33137
33227
  access: "view"
33138
33228
  },
33229
+ "recording.getDaysWithRecordingsBatch": {
33230
+ capName: "recording",
33231
+ capScope: "system",
33232
+ addonId: null,
33233
+ access: "view"
33234
+ },
33139
33235
  "recording.getDeviceConfig": {
33140
33236
  capName: "recording",
33141
33237
  capScope: "system",
@@ -35740,6 +35836,11 @@ Object.freeze({
35740
35836
  form: "single",
35741
35837
  optional: false
35742
35838
  }],
35839
+ "pipelineAnalytics.getEventDensityBatch": [{
35840
+ name: "deviceIds",
35841
+ form: "array",
35842
+ optional: false
35843
+ }],
35743
35844
  "pipelineAnalytics.getEventMedia": [{
35744
35845
  name: "deviceId",
35745
35846
  form: "single",
@@ -36155,11 +36256,21 @@ Object.freeze({
36155
36256
  form: "single",
36156
36257
  optional: false
36157
36258
  }],
36259
+ "recording.getAvailabilityBatch": [{
36260
+ name: "deviceIds",
36261
+ form: "array",
36262
+ optional: false
36263
+ }],
36158
36264
  "recording.getDaysWithRecordings": [{
36159
36265
  name: "deviceId",
36160
36266
  form: "single",
36161
36267
  optional: false
36162
36268
  }],
36269
+ "recording.getDaysWithRecordingsBatch": [{
36270
+ name: "deviceIds",
36271
+ form: "array",
36272
+ optional: false
36273
+ }],
36163
36274
  "recording.getDeviceConfig": [{
36164
36275
  name: "deviceId",
36165
36276
  form: "single",
@@ -15665,6 +15665,8 @@ var NcSystemEventKindSchema = _enum([
15665
15665
  "device-offline",
15666
15666
  "device-disabled",
15667
15667
  "device-enabled",
15668
+ "device-battery-low",
15669
+ "device-battery-normal",
15668
15670
  "stream-online",
15669
15671
  "stream-offline",
15670
15672
  "node-online",
@@ -18939,6 +18941,34 @@ var KeyEventsForDeviceSchema = object({
18939
18941
  deviceId: number(),
18940
18942
  events: array(KeyEventSchema).readonly()
18941
18943
  });
18944
+ /** One non-empty bucket of the timeline histogram. */
18945
+ var EventDensityBucketSchema = object({
18946
+ bucketStart: number(),
18947
+ motion: number().int(),
18948
+ object: number().int(),
18949
+ audio: number().int()
18950
+ });
18951
+ /**
18952
+ * One camera's row in a `getEventDensityBatch` answer.
18953
+ *
18954
+ * TWO facts, and the timeline draws them differently:
18955
+ *
18956
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
18957
+ * claim: read, and nothing happened in the window.
18958
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
18959
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
18960
+ * not quiet.
18961
+ *
18962
+ * Fanned out per camera the difference was free — one query rejected while the
18963
+ * others resolved — and collapsing to a batch is the exact moment it is lost
18964
+ * silently. Every requested id gets a row: a caller that asked for twelve and
18965
+ * got eleven cannot tell which one is missing, or that any is.
18966
+ */
18967
+ var EventDensityForDeviceSchema = object({
18968
+ deviceId: number(),
18969
+ read: _enum(["read", "unreadable"]),
18970
+ buckets: array(EventDensityBucketSchema).readonly()
18971
+ });
18942
18972
  object({
18943
18973
  trackId: string(),
18944
18974
  className: string(),
@@ -19249,12 +19279,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19249
19279
  since: number(),
19250
19280
  until: number(),
19251
19281
  bucketMs: number().int().positive()
19252
- }), array(object({
19253
- bucketStart: number(),
19254
- motion: number().int(),
19255
- object: number().int(),
19256
- audio: number().int()
19257
- })).readonly()), method(object({
19282
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19283
+ deviceIds: array(number()).min(1).max(200),
19284
+ since: number(),
19285
+ until: number(),
19286
+ bucketMs: number().int().positive()
19287
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19258
19288
  deviceId: number(),
19259
19289
  cutoffMs: number()
19260
19290
  }), object({
@@ -26564,6 +26594,39 @@ var RecordingDaysSchema = object({
26564
26594
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26565
26595
  days: array(number())
26566
26596
  });
26597
+ /**
26598
+ * One camera's row in a `getAvailabilityBatch` answer.
26599
+ *
26600
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
26601
+ * batch collapses the transport, not the work — plus the one thing the singular
26602
+ * method never had to say:
26603
+ *
26604
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
26605
+ * no footage in the window", which is a real claim.
26606
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
26607
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
26608
+ * that emptiness means NOTHING.
26609
+ *
26610
+ * A timeline that renders the second as the first tells an operator there is no
26611
+ * footage when the truth is that nobody looked.
26612
+ */
26613
+ var RecordingAvailabilityForDeviceSchema = object({
26614
+ deviceId: number(),
26615
+ read: _enum(["read", "unreadable"]),
26616
+ ranges: array(RecordingRangeSchema).readonly()
26617
+ });
26618
+ /**
26619
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
26620
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
26621
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
26622
+ * the date-picker's day dots must not spell them the same.
26623
+ */
26624
+ var RecordingDaysForDeviceSchema = object({
26625
+ deviceId: number(),
26626
+ read: _enum(["read", "unreadable"]),
26627
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26628
+ days: array(number()).readonly()
26629
+ });
26567
26630
  var RecordingManifestSchema = object({
26568
26631
  deviceId: number(),
26569
26632
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -26798,6 +26861,13 @@ method(object({
26798
26861
  }), RecordingAvailabilitySchema, {
26799
26862
  kind: "query",
26800
26863
  auth: "protected"
26864
+ }), method(object({
26865
+ deviceIds: array(number()).min(1).max(200),
26866
+ fromMs: number(),
26867
+ toMs: number()
26868
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
26869
+ kind: "query",
26870
+ auth: "protected"
26801
26871
  }), method(object({
26802
26872
  deviceId: number(),
26803
26873
  fromMs: number(),
@@ -26806,6 +26876,14 @@ method(object({
26806
26876
  }), RecordingDaysSchema, {
26807
26877
  kind: "query",
26808
26878
  auth: "protected"
26879
+ }), method(object({
26880
+ deviceIds: array(number()).min(1).max(200),
26881
+ fromMs: number(),
26882
+ toMs: number(),
26883
+ tzOffsetMinutes: number()
26884
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
26885
+ kind: "query",
26886
+ auth: "protected"
26809
26887
  }), method(object({
26810
26888
  deviceId: number(),
26811
26889
  fromMs: number(),
@@ -32003,6 +32081,12 @@ Object.freeze({
32003
32081
  addonId: null,
32004
32082
  access: "view"
32005
32083
  },
32084
+ "pipelineAnalytics.getEventDensityBatch": {
32085
+ capName: "pipeline-analytics",
32086
+ capScope: "device",
32087
+ addonId: null,
32088
+ access: "view"
32089
+ },
32006
32090
  "pipelineAnalytics.getEventMedia": {
32007
32091
  capName: "pipeline-analytics",
32008
32092
  capScope: "device",
@@ -33125,12 +33209,24 @@ Object.freeze({
33125
33209
  addonId: null,
33126
33210
  access: "view"
33127
33211
  },
33212
+ "recording.getAvailabilityBatch": {
33213
+ capName: "recording",
33214
+ capScope: "system",
33215
+ addonId: null,
33216
+ access: "view"
33217
+ },
33128
33218
  "recording.getDaysWithRecordings": {
33129
33219
  capName: "recording",
33130
33220
  capScope: "system",
33131
33221
  addonId: null,
33132
33222
  access: "view"
33133
33223
  },
33224
+ "recording.getDaysWithRecordingsBatch": {
33225
+ capName: "recording",
33226
+ capScope: "system",
33227
+ addonId: null,
33228
+ access: "view"
33229
+ },
33134
33230
  "recording.getDeviceConfig": {
33135
33231
  capName: "recording",
33136
33232
  capScope: "system",
@@ -35735,6 +35831,11 @@ Object.freeze({
35735
35831
  form: "single",
35736
35832
  optional: false
35737
35833
  }],
35834
+ "pipelineAnalytics.getEventDensityBatch": [{
35835
+ name: "deviceIds",
35836
+ form: "array",
35837
+ optional: false
35838
+ }],
35738
35839
  "pipelineAnalytics.getEventMedia": [{
35739
35840
  name: "deviceId",
35740
35841
  form: "single",
@@ -36150,11 +36251,21 @@ Object.freeze({
36150
36251
  form: "single",
36151
36252
  optional: false
36152
36253
  }],
36254
+ "recording.getAvailabilityBatch": [{
36255
+ name: "deviceIds",
36256
+ form: "array",
36257
+ optional: false
36258
+ }],
36153
36259
  "recording.getDaysWithRecordings": [{
36154
36260
  name: "deviceId",
36155
36261
  form: "single",
36156
36262
  optional: false
36157
36263
  }],
36264
+ "recording.getDaysWithRecordingsBatch": [{
36265
+ name: "deviceIds",
36266
+ form: "array",
36267
+ optional: false
36268
+ }],
36158
36269
  "recording.getDeviceConfig": [{
36159
36270
  name: "deviceId",
36160
36271
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-mqtt-broker",
3
- "version": "1.2.50",
3
+ "version": "1.2.52",
4
4
  "description": "MQTT broker registry addon for CamStack — manages external broker entries + an optional embedded aedes broker. Consumers spin up their own `mqtt.js` clients via the `mqtt-broker` cap.",
5
5
  "keywords": [
6
6
  "camstack",