@camstack/addon-matter-broker 0.2.49 → 0.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
@@ -15955,6 +15955,8 @@ var NcSystemEventKindSchema = _enum([
15955
15955
  "device-offline",
15956
15956
  "device-disabled",
15957
15957
  "device-enabled",
15958
+ "device-battery-low",
15959
+ "device-battery-normal",
15958
15960
  "stream-online",
15959
15961
  "stream-offline",
15960
15962
  "node-online",
@@ -19269,6 +19271,34 @@ var KeyEventsForDeviceSchema = object({
19269
19271
  deviceId: number(),
19270
19272
  events: array(KeyEventSchema).readonly()
19271
19273
  });
19274
+ /** One non-empty bucket of the timeline histogram. */
19275
+ var EventDensityBucketSchema = object({
19276
+ bucketStart: number(),
19277
+ motion: number().int(),
19278
+ object: number().int(),
19279
+ audio: number().int()
19280
+ });
19281
+ /**
19282
+ * One camera's row in a `getEventDensityBatch` answer.
19283
+ *
19284
+ * TWO facts, and the timeline draws them differently:
19285
+ *
19286
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
19287
+ * claim: read, and nothing happened in the window.
19288
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
19289
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
19290
+ * not quiet.
19291
+ *
19292
+ * Fanned out per camera the difference was free — one query rejected while the
19293
+ * others resolved — and collapsing to a batch is the exact moment it is lost
19294
+ * silently. Every requested id gets a row: a caller that asked for twelve and
19295
+ * got eleven cannot tell which one is missing, or that any is.
19296
+ */
19297
+ var EventDensityForDeviceSchema = object({
19298
+ deviceId: number(),
19299
+ read: _enum(["read", "unreadable"]),
19300
+ buckets: array(EventDensityBucketSchema).readonly()
19301
+ });
19272
19302
  object({
19273
19303
  trackId: string$2(),
19274
19304
  className: string$2(),
@@ -19579,12 +19609,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19579
19609
  since: number(),
19580
19610
  until: number(),
19581
19611
  bucketMs: number().int().positive()
19582
- }), array(object({
19583
- bucketStart: number(),
19584
- motion: number().int(),
19585
- object: number().int(),
19586
- audio: number().int()
19587
- })).readonly()), method(object({
19612
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19613
+ deviceIds: array(number()).min(1).max(200),
19614
+ since: number(),
19615
+ until: number(),
19616
+ bucketMs: number().int().positive()
19617
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19588
19618
  deviceId: number(),
19589
19619
  cutoffMs: number()
19590
19620
  }), object({
@@ -28626,6 +28656,39 @@ var RecordingDaysSchema = object({
28626
28656
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28627
28657
  days: array(number())
28628
28658
  });
28659
+ /**
28660
+ * One camera's row in a `getAvailabilityBatch` answer.
28661
+ *
28662
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
28663
+ * batch collapses the transport, not the work — plus the one thing the singular
28664
+ * method never had to say:
28665
+ *
28666
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
28667
+ * no footage in the window", which is a real claim.
28668
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
28669
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
28670
+ * that emptiness means NOTHING.
28671
+ *
28672
+ * A timeline that renders the second as the first tells an operator there is no
28673
+ * footage when the truth is that nobody looked.
28674
+ */
28675
+ var RecordingAvailabilityForDeviceSchema = object({
28676
+ deviceId: number(),
28677
+ read: _enum(["read", "unreadable"]),
28678
+ ranges: array(RecordingRangeSchema).readonly()
28679
+ });
28680
+ /**
28681
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
28682
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
28683
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
28684
+ * the date-picker's day dots must not spell them the same.
28685
+ */
28686
+ var RecordingDaysForDeviceSchema = object({
28687
+ deviceId: number(),
28688
+ read: _enum(["read", "unreadable"]),
28689
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28690
+ days: array(number()).readonly()
28691
+ });
28629
28692
  var RecordingManifestSchema = object({
28630
28693
  deviceId: number(),
28631
28694
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -28860,6 +28923,13 @@ method(object({
28860
28923
  }), RecordingAvailabilitySchema, {
28861
28924
  kind: "query",
28862
28925
  auth: "protected"
28926
+ }), method(object({
28927
+ deviceIds: array(number()).min(1).max(200),
28928
+ fromMs: number(),
28929
+ toMs: number()
28930
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
28931
+ kind: "query",
28932
+ auth: "protected"
28863
28933
  }), method(object({
28864
28934
  deviceId: number(),
28865
28935
  fromMs: number(),
@@ -28868,6 +28938,14 @@ method(object({
28868
28938
  }), RecordingDaysSchema, {
28869
28939
  kind: "query",
28870
28940
  auth: "protected"
28941
+ }), method(object({
28942
+ deviceIds: array(number()).min(1).max(200),
28943
+ fromMs: number(),
28944
+ toMs: number(),
28945
+ tzOffsetMinutes: number()
28946
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
28947
+ kind: "query",
28948
+ auth: "protected"
28871
28949
  }), method(object({
28872
28950
  deviceId: number(),
28873
28951
  fromMs: number(),
@@ -35764,6 +35842,12 @@ Object.freeze({
35764
35842
  addonId: null,
35765
35843
  access: "view"
35766
35844
  },
35845
+ "pipelineAnalytics.getEventDensityBatch": {
35846
+ capName: "pipeline-analytics",
35847
+ capScope: "device",
35848
+ addonId: null,
35849
+ access: "view"
35850
+ },
35767
35851
  "pipelineAnalytics.getEventMedia": {
35768
35852
  capName: "pipeline-analytics",
35769
35853
  capScope: "device",
@@ -36886,12 +36970,24 @@ Object.freeze({
36886
36970
  addonId: null,
36887
36971
  access: "view"
36888
36972
  },
36973
+ "recording.getAvailabilityBatch": {
36974
+ capName: "recording",
36975
+ capScope: "system",
36976
+ addonId: null,
36977
+ access: "view"
36978
+ },
36889
36979
  "recording.getDaysWithRecordings": {
36890
36980
  capName: "recording",
36891
36981
  capScope: "system",
36892
36982
  addonId: null,
36893
36983
  access: "view"
36894
36984
  },
36985
+ "recording.getDaysWithRecordingsBatch": {
36986
+ capName: "recording",
36987
+ capScope: "system",
36988
+ addonId: null,
36989
+ access: "view"
36990
+ },
36895
36991
  "recording.getDeviceConfig": {
36896
36992
  capName: "recording",
36897
36993
  capScope: "system",
@@ -39496,6 +39592,11 @@ Object.freeze({
39496
39592
  form: "single",
39497
39593
  optional: false
39498
39594
  }],
39595
+ "pipelineAnalytics.getEventDensityBatch": [{
39596
+ name: "deviceIds",
39597
+ form: "array",
39598
+ optional: false
39599
+ }],
39499
39600
  "pipelineAnalytics.getEventMedia": [{
39500
39601
  name: "deviceId",
39501
39602
  form: "single",
@@ -39911,11 +40012,21 @@ Object.freeze({
39911
40012
  form: "single",
39912
40013
  optional: false
39913
40014
  }],
40015
+ "recording.getAvailabilityBatch": [{
40016
+ name: "deviceIds",
40017
+ form: "array",
40018
+ optional: false
40019
+ }],
39914
40020
  "recording.getDaysWithRecordings": [{
39915
40021
  name: "deviceId",
39916
40022
  form: "single",
39917
40023
  optional: false
39918
40024
  }],
40025
+ "recording.getDaysWithRecordingsBatch": [{
40026
+ name: "deviceIds",
40027
+ form: "array",
40028
+ optional: false
40029
+ }],
39919
40030
  "recording.getDeviceConfig": [{
39920
40031
  name: "deviceId",
39921
40032
  form: "single",
package/dist/addon.mjs CHANGED
@@ -15953,6 +15953,8 @@ var NcSystemEventKindSchema = _enum([
15953
15953
  "device-offline",
15954
15954
  "device-disabled",
15955
15955
  "device-enabled",
15956
+ "device-battery-low",
15957
+ "device-battery-normal",
15956
15958
  "stream-online",
15957
15959
  "stream-offline",
15958
15960
  "node-online",
@@ -19267,6 +19269,34 @@ var KeyEventsForDeviceSchema = object({
19267
19269
  deviceId: number(),
19268
19270
  events: array(KeyEventSchema).readonly()
19269
19271
  });
19272
+ /** One non-empty bucket of the timeline histogram. */
19273
+ var EventDensityBucketSchema = object({
19274
+ bucketStart: number(),
19275
+ motion: number().int(),
19276
+ object: number().int(),
19277
+ audio: number().int()
19278
+ });
19279
+ /**
19280
+ * One camera's row in a `getEventDensityBatch` answer.
19281
+ *
19282
+ * TWO facts, and the timeline draws them differently:
19283
+ *
19284
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
19285
+ * claim: read, and nothing happened in the window.
19286
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
19287
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
19288
+ * not quiet.
19289
+ *
19290
+ * Fanned out per camera the difference was free — one query rejected while the
19291
+ * others resolved — and collapsing to a batch is the exact moment it is lost
19292
+ * silently. Every requested id gets a row: a caller that asked for twelve and
19293
+ * got eleven cannot tell which one is missing, or that any is.
19294
+ */
19295
+ var EventDensityForDeviceSchema = object({
19296
+ deviceId: number(),
19297
+ read: _enum(["read", "unreadable"]),
19298
+ buckets: array(EventDensityBucketSchema).readonly()
19299
+ });
19270
19300
  object({
19271
19301
  trackId: string$2(),
19272
19302
  className: string$2(),
@@ -19577,12 +19607,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19577
19607
  since: number(),
19578
19608
  until: number(),
19579
19609
  bucketMs: number().int().positive()
19580
- }), array(object({
19581
- bucketStart: number(),
19582
- motion: number().int(),
19583
- object: number().int(),
19584
- audio: number().int()
19585
- })).readonly()), method(object({
19610
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19611
+ deviceIds: array(number()).min(1).max(200),
19612
+ since: number(),
19613
+ until: number(),
19614
+ bucketMs: number().int().positive()
19615
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19586
19616
  deviceId: number(),
19587
19617
  cutoffMs: number()
19588
19618
  }), object({
@@ -28624,6 +28654,39 @@ var RecordingDaysSchema = object({
28624
28654
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28625
28655
  days: array(number())
28626
28656
  });
28657
+ /**
28658
+ * One camera's row in a `getAvailabilityBatch` answer.
28659
+ *
28660
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
28661
+ * batch collapses the transport, not the work — plus the one thing the singular
28662
+ * method never had to say:
28663
+ *
28664
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
28665
+ * no footage in the window", which is a real claim.
28666
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
28667
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
28668
+ * that emptiness means NOTHING.
28669
+ *
28670
+ * A timeline that renders the second as the first tells an operator there is no
28671
+ * footage when the truth is that nobody looked.
28672
+ */
28673
+ var RecordingAvailabilityForDeviceSchema = object({
28674
+ deviceId: number(),
28675
+ read: _enum(["read", "unreadable"]),
28676
+ ranges: array(RecordingRangeSchema).readonly()
28677
+ });
28678
+ /**
28679
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
28680
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
28681
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
28682
+ * the date-picker's day dots must not spell them the same.
28683
+ */
28684
+ var RecordingDaysForDeviceSchema = object({
28685
+ deviceId: number(),
28686
+ read: _enum(["read", "unreadable"]),
28687
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28688
+ days: array(number()).readonly()
28689
+ });
28627
28690
  var RecordingManifestSchema = object({
28628
28691
  deviceId: number(),
28629
28692
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -28858,6 +28921,13 @@ method(object({
28858
28921
  }), RecordingAvailabilitySchema, {
28859
28922
  kind: "query",
28860
28923
  auth: "protected"
28924
+ }), method(object({
28925
+ deviceIds: array(number()).min(1).max(200),
28926
+ fromMs: number(),
28927
+ toMs: number()
28928
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
28929
+ kind: "query",
28930
+ auth: "protected"
28861
28931
  }), method(object({
28862
28932
  deviceId: number(),
28863
28933
  fromMs: number(),
@@ -28866,6 +28936,14 @@ method(object({
28866
28936
  }), RecordingDaysSchema, {
28867
28937
  kind: "query",
28868
28938
  auth: "protected"
28939
+ }), method(object({
28940
+ deviceIds: array(number()).min(1).max(200),
28941
+ fromMs: number(),
28942
+ toMs: number(),
28943
+ tzOffsetMinutes: number()
28944
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
28945
+ kind: "query",
28946
+ auth: "protected"
28869
28947
  }), method(object({
28870
28948
  deviceId: number(),
28871
28949
  fromMs: number(),
@@ -35762,6 +35840,12 @@ Object.freeze({
35762
35840
  addonId: null,
35763
35841
  access: "view"
35764
35842
  },
35843
+ "pipelineAnalytics.getEventDensityBatch": {
35844
+ capName: "pipeline-analytics",
35845
+ capScope: "device",
35846
+ addonId: null,
35847
+ access: "view"
35848
+ },
35765
35849
  "pipelineAnalytics.getEventMedia": {
35766
35850
  capName: "pipeline-analytics",
35767
35851
  capScope: "device",
@@ -36884,12 +36968,24 @@ Object.freeze({
36884
36968
  addonId: null,
36885
36969
  access: "view"
36886
36970
  },
36971
+ "recording.getAvailabilityBatch": {
36972
+ capName: "recording",
36973
+ capScope: "system",
36974
+ addonId: null,
36975
+ access: "view"
36976
+ },
36887
36977
  "recording.getDaysWithRecordings": {
36888
36978
  capName: "recording",
36889
36979
  capScope: "system",
36890
36980
  addonId: null,
36891
36981
  access: "view"
36892
36982
  },
36983
+ "recording.getDaysWithRecordingsBatch": {
36984
+ capName: "recording",
36985
+ capScope: "system",
36986
+ addonId: null,
36987
+ access: "view"
36988
+ },
36893
36989
  "recording.getDeviceConfig": {
36894
36990
  capName: "recording",
36895
36991
  capScope: "system",
@@ -39494,6 +39590,11 @@ Object.freeze({
39494
39590
  form: "single",
39495
39591
  optional: false
39496
39592
  }],
39593
+ "pipelineAnalytics.getEventDensityBatch": [{
39594
+ name: "deviceIds",
39595
+ form: "array",
39596
+ optional: false
39597
+ }],
39497
39598
  "pipelineAnalytics.getEventMedia": [{
39498
39599
  name: "deviceId",
39499
39600
  form: "single",
@@ -39909,11 +40010,21 @@ Object.freeze({
39909
40010
  form: "single",
39910
40011
  optional: false
39911
40012
  }],
40013
+ "recording.getAvailabilityBatch": [{
40014
+ name: "deviceIds",
40015
+ form: "array",
40016
+ optional: false
40017
+ }],
39912
40018
  "recording.getDaysWithRecordings": [{
39913
40019
  name: "deviceId",
39914
40020
  form: "single",
39915
40021
  optional: false
39916
40022
  }],
40023
+ "recording.getDaysWithRecordingsBatch": [{
40024
+ name: "deviceIds",
40025
+ form: "array",
40026
+ optional: false
40027
+ }],
39917
40028
  "recording.getDeviceConfig": [{
39918
40029
  name: "deviceId",
39919
40030
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-matter-broker",
3
- "version": "0.2.49",
3
+ "version": "0.2.51",
4
4
  "description": "Matter broker addon for CamStack — owns a Matter fabric (commissioning + the long-lived controller) via the matter.js controller and brokers commissioned Matter nodes into CamStack",
5
5
  "keywords": [
6
6
  "camstack",