@camstack/addon-provider-rademacher 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
@@ -16860,6 +16860,8 @@ var NcSystemEventKindSchema = _enum([
16860
16860
  "device-offline",
16861
16861
  "device-disabled",
16862
16862
  "device-enabled",
16863
+ "device-battery-low",
16864
+ "device-battery-normal",
16863
16865
  "stream-online",
16864
16866
  "stream-offline",
16865
16867
  "node-online",
@@ -20174,6 +20176,34 @@ var KeyEventsForDeviceSchema = object({
20174
20176
  deviceId: number(),
20175
20177
  events: array(KeyEventSchema).readonly()
20176
20178
  });
20179
+ /** One non-empty bucket of the timeline histogram. */
20180
+ var EventDensityBucketSchema = object({
20181
+ bucketStart: number(),
20182
+ motion: number().int(),
20183
+ object: number().int(),
20184
+ audio: number().int()
20185
+ });
20186
+ /**
20187
+ * One camera's row in a `getEventDensityBatch` answer.
20188
+ *
20189
+ * TWO facts, and the timeline draws them differently:
20190
+ *
20191
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
20192
+ * claim: read, and nothing happened in the window.
20193
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
20194
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
20195
+ * not quiet.
20196
+ *
20197
+ * Fanned out per camera the difference was free — one query rejected while the
20198
+ * others resolved — and collapsing to a batch is the exact moment it is lost
20199
+ * silently. Every requested id gets a row: a caller that asked for twelve and
20200
+ * got eleven cannot tell which one is missing, or that any is.
20201
+ */
20202
+ var EventDensityForDeviceSchema = object({
20203
+ deviceId: number(),
20204
+ read: _enum(["read", "unreadable"]),
20205
+ buckets: array(EventDensityBucketSchema).readonly()
20206
+ });
20177
20207
  object({
20178
20208
  trackId: string(),
20179
20209
  className: string(),
@@ -20484,12 +20514,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
20484
20514
  since: number(),
20485
20515
  until: number(),
20486
20516
  bucketMs: number().int().positive()
20487
- }), array(object({
20488
- bucketStart: number(),
20489
- motion: number().int(),
20490
- object: number().int(),
20491
- audio: number().int()
20492
- })).readonly()), method(object({
20517
+ }), array(EventDensityBucketSchema).readonly()), method(object({
20518
+ deviceIds: array(number()).min(1).max(200),
20519
+ since: number(),
20520
+ until: number(),
20521
+ bucketMs: number().int().positive()
20522
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
20493
20523
  deviceId: number(),
20494
20524
  cutoffMs: number()
20495
20525
  }), object({
@@ -29514,6 +29544,39 @@ var RecordingDaysSchema = object({
29514
29544
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
29515
29545
  days: array(number())
29516
29546
  });
29547
+ /**
29548
+ * One camera's row in a `getAvailabilityBatch` answer.
29549
+ *
29550
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
29551
+ * batch collapses the transport, not the work — plus the one thing the singular
29552
+ * method never had to say:
29553
+ *
29554
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
29555
+ * no footage in the window", which is a real claim.
29556
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
29557
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
29558
+ * that emptiness means NOTHING.
29559
+ *
29560
+ * A timeline that renders the second as the first tells an operator there is no
29561
+ * footage when the truth is that nobody looked.
29562
+ */
29563
+ var RecordingAvailabilityForDeviceSchema = object({
29564
+ deviceId: number(),
29565
+ read: _enum(["read", "unreadable"]),
29566
+ ranges: array(RecordingRangeSchema).readonly()
29567
+ });
29568
+ /**
29569
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
29570
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
29571
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
29572
+ * the date-picker's day dots must not spell them the same.
29573
+ */
29574
+ var RecordingDaysForDeviceSchema = object({
29575
+ deviceId: number(),
29576
+ read: _enum(["read", "unreadable"]),
29577
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
29578
+ days: array(number()).readonly()
29579
+ });
29517
29580
  var RecordingManifestSchema = object({
29518
29581
  deviceId: number(),
29519
29582
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -29748,6 +29811,13 @@ method(object({
29748
29811
  }), RecordingAvailabilitySchema, {
29749
29812
  kind: "query",
29750
29813
  auth: "protected"
29814
+ }), method(object({
29815
+ deviceIds: array(number()).min(1).max(200),
29816
+ fromMs: number(),
29817
+ toMs: number()
29818
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
29819
+ kind: "query",
29820
+ auth: "protected"
29751
29821
  }), method(object({
29752
29822
  deviceId: number(),
29753
29823
  fromMs: number(),
@@ -29756,6 +29826,14 @@ method(object({
29756
29826
  }), RecordingDaysSchema, {
29757
29827
  kind: "query",
29758
29828
  auth: "protected"
29829
+ }), method(object({
29830
+ deviceIds: array(number()).min(1).max(200),
29831
+ fromMs: number(),
29832
+ toMs: number(),
29833
+ tzOffsetMinutes: number()
29834
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
29835
+ kind: "query",
29836
+ auth: "protected"
29759
29837
  }), method(object({
29760
29838
  deviceId: number(),
29761
29839
  fromMs: number(),
@@ -36652,6 +36730,12 @@ Object.freeze({
36652
36730
  addonId: null,
36653
36731
  access: "view"
36654
36732
  },
36733
+ "pipelineAnalytics.getEventDensityBatch": {
36734
+ capName: "pipeline-analytics",
36735
+ capScope: "device",
36736
+ addonId: null,
36737
+ access: "view"
36738
+ },
36655
36739
  "pipelineAnalytics.getEventMedia": {
36656
36740
  capName: "pipeline-analytics",
36657
36741
  capScope: "device",
@@ -37774,12 +37858,24 @@ Object.freeze({
37774
37858
  addonId: null,
37775
37859
  access: "view"
37776
37860
  },
37861
+ "recording.getAvailabilityBatch": {
37862
+ capName: "recording",
37863
+ capScope: "system",
37864
+ addonId: null,
37865
+ access: "view"
37866
+ },
37777
37867
  "recording.getDaysWithRecordings": {
37778
37868
  capName: "recording",
37779
37869
  capScope: "system",
37780
37870
  addonId: null,
37781
37871
  access: "view"
37782
37872
  },
37873
+ "recording.getDaysWithRecordingsBatch": {
37874
+ capName: "recording",
37875
+ capScope: "system",
37876
+ addonId: null,
37877
+ access: "view"
37878
+ },
37783
37879
  "recording.getDeviceConfig": {
37784
37880
  capName: "recording",
37785
37881
  capScope: "system",
@@ -40384,6 +40480,11 @@ Object.freeze({
40384
40480
  form: "single",
40385
40481
  optional: false
40386
40482
  }],
40483
+ "pipelineAnalytics.getEventDensityBatch": [{
40484
+ name: "deviceIds",
40485
+ form: "array",
40486
+ optional: false
40487
+ }],
40387
40488
  "pipelineAnalytics.getEventMedia": [{
40388
40489
  name: "deviceId",
40389
40490
  form: "single",
@@ -40799,11 +40900,21 @@ Object.freeze({
40799
40900
  form: "single",
40800
40901
  optional: false
40801
40902
  }],
40903
+ "recording.getAvailabilityBatch": [{
40904
+ name: "deviceIds",
40905
+ form: "array",
40906
+ optional: false
40907
+ }],
40802
40908
  "recording.getDaysWithRecordings": [{
40803
40909
  name: "deviceId",
40804
40910
  form: "single",
40805
40911
  optional: false
40806
40912
  }],
40913
+ "recording.getDaysWithRecordingsBatch": [{
40914
+ name: "deviceIds",
40915
+ form: "array",
40916
+ optional: false
40917
+ }],
40807
40918
  "recording.getDeviceConfig": [{
40808
40919
  name: "deviceId",
40809
40920
  form: "single",
package/dist/addon.mjs CHANGED
@@ -16859,6 +16859,8 @@ var NcSystemEventKindSchema = _enum([
16859
16859
  "device-offline",
16860
16860
  "device-disabled",
16861
16861
  "device-enabled",
16862
+ "device-battery-low",
16863
+ "device-battery-normal",
16862
16864
  "stream-online",
16863
16865
  "stream-offline",
16864
16866
  "node-online",
@@ -20173,6 +20175,34 @@ var KeyEventsForDeviceSchema = object({
20173
20175
  deviceId: number(),
20174
20176
  events: array(KeyEventSchema).readonly()
20175
20177
  });
20178
+ /** One non-empty bucket of the timeline histogram. */
20179
+ var EventDensityBucketSchema = object({
20180
+ bucketStart: number(),
20181
+ motion: number().int(),
20182
+ object: number().int(),
20183
+ audio: number().int()
20184
+ });
20185
+ /**
20186
+ * One camera's row in a `getEventDensityBatch` answer.
20187
+ *
20188
+ * TWO facts, and the timeline draws them differently:
20189
+ *
20190
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
20191
+ * claim: read, and nothing happened in the window.
20192
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
20193
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
20194
+ * not quiet.
20195
+ *
20196
+ * Fanned out per camera the difference was free — one query rejected while the
20197
+ * others resolved — and collapsing to a batch is the exact moment it is lost
20198
+ * silently. Every requested id gets a row: a caller that asked for twelve and
20199
+ * got eleven cannot tell which one is missing, or that any is.
20200
+ */
20201
+ var EventDensityForDeviceSchema = object({
20202
+ deviceId: number(),
20203
+ read: _enum(["read", "unreadable"]),
20204
+ buckets: array(EventDensityBucketSchema).readonly()
20205
+ });
20176
20206
  object({
20177
20207
  trackId: string(),
20178
20208
  className: string(),
@@ -20483,12 +20513,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
20483
20513
  since: number(),
20484
20514
  until: number(),
20485
20515
  bucketMs: number().int().positive()
20486
- }), array(object({
20487
- bucketStart: number(),
20488
- motion: number().int(),
20489
- object: number().int(),
20490
- audio: number().int()
20491
- })).readonly()), method(object({
20516
+ }), array(EventDensityBucketSchema).readonly()), method(object({
20517
+ deviceIds: array(number()).min(1).max(200),
20518
+ since: number(),
20519
+ until: number(),
20520
+ bucketMs: number().int().positive()
20521
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
20492
20522
  deviceId: number(),
20493
20523
  cutoffMs: number()
20494
20524
  }), object({
@@ -29513,6 +29543,39 @@ var RecordingDaysSchema = object({
29513
29543
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
29514
29544
  days: array(number())
29515
29545
  });
29546
+ /**
29547
+ * One camera's row in a `getAvailabilityBatch` answer.
29548
+ *
29549
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
29550
+ * batch collapses the transport, not the work — plus the one thing the singular
29551
+ * method never had to say:
29552
+ *
29553
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
29554
+ * no footage in the window", which is a real claim.
29555
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
29556
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
29557
+ * that emptiness means NOTHING.
29558
+ *
29559
+ * A timeline that renders the second as the first tells an operator there is no
29560
+ * footage when the truth is that nobody looked.
29561
+ */
29562
+ var RecordingAvailabilityForDeviceSchema = object({
29563
+ deviceId: number(),
29564
+ read: _enum(["read", "unreadable"]),
29565
+ ranges: array(RecordingRangeSchema).readonly()
29566
+ });
29567
+ /**
29568
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
29569
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
29570
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
29571
+ * the date-picker's day dots must not spell them the same.
29572
+ */
29573
+ var RecordingDaysForDeviceSchema = object({
29574
+ deviceId: number(),
29575
+ read: _enum(["read", "unreadable"]),
29576
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
29577
+ days: array(number()).readonly()
29578
+ });
29516
29579
  var RecordingManifestSchema = object({
29517
29580
  deviceId: number(),
29518
29581
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -29747,6 +29810,13 @@ method(object({
29747
29810
  }), RecordingAvailabilitySchema, {
29748
29811
  kind: "query",
29749
29812
  auth: "protected"
29813
+ }), method(object({
29814
+ deviceIds: array(number()).min(1).max(200),
29815
+ fromMs: number(),
29816
+ toMs: number()
29817
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
29818
+ kind: "query",
29819
+ auth: "protected"
29750
29820
  }), method(object({
29751
29821
  deviceId: number(),
29752
29822
  fromMs: number(),
@@ -29755,6 +29825,14 @@ method(object({
29755
29825
  }), RecordingDaysSchema, {
29756
29826
  kind: "query",
29757
29827
  auth: "protected"
29828
+ }), method(object({
29829
+ deviceIds: array(number()).min(1).max(200),
29830
+ fromMs: number(),
29831
+ toMs: number(),
29832
+ tzOffsetMinutes: number()
29833
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
29834
+ kind: "query",
29835
+ auth: "protected"
29758
29836
  }), method(object({
29759
29837
  deviceId: number(),
29760
29838
  fromMs: number(),
@@ -36651,6 +36729,12 @@ Object.freeze({
36651
36729
  addonId: null,
36652
36730
  access: "view"
36653
36731
  },
36732
+ "pipelineAnalytics.getEventDensityBatch": {
36733
+ capName: "pipeline-analytics",
36734
+ capScope: "device",
36735
+ addonId: null,
36736
+ access: "view"
36737
+ },
36654
36738
  "pipelineAnalytics.getEventMedia": {
36655
36739
  capName: "pipeline-analytics",
36656
36740
  capScope: "device",
@@ -37773,12 +37857,24 @@ Object.freeze({
37773
37857
  addonId: null,
37774
37858
  access: "view"
37775
37859
  },
37860
+ "recording.getAvailabilityBatch": {
37861
+ capName: "recording",
37862
+ capScope: "system",
37863
+ addonId: null,
37864
+ access: "view"
37865
+ },
37776
37866
  "recording.getDaysWithRecordings": {
37777
37867
  capName: "recording",
37778
37868
  capScope: "system",
37779
37869
  addonId: null,
37780
37870
  access: "view"
37781
37871
  },
37872
+ "recording.getDaysWithRecordingsBatch": {
37873
+ capName: "recording",
37874
+ capScope: "system",
37875
+ addonId: null,
37876
+ access: "view"
37877
+ },
37782
37878
  "recording.getDeviceConfig": {
37783
37879
  capName: "recording",
37784
37880
  capScope: "system",
@@ -40383,6 +40479,11 @@ Object.freeze({
40383
40479
  form: "single",
40384
40480
  optional: false
40385
40481
  }],
40482
+ "pipelineAnalytics.getEventDensityBatch": [{
40483
+ name: "deviceIds",
40484
+ form: "array",
40485
+ optional: false
40486
+ }],
40386
40487
  "pipelineAnalytics.getEventMedia": [{
40387
40488
  name: "deviceId",
40388
40489
  form: "single",
@@ -40798,11 +40899,21 @@ Object.freeze({
40798
40899
  form: "single",
40799
40900
  optional: false
40800
40901
  }],
40902
+ "recording.getAvailabilityBatch": [{
40903
+ name: "deviceIds",
40904
+ form: "array",
40905
+ optional: false
40906
+ }],
40801
40907
  "recording.getDaysWithRecordings": [{
40802
40908
  name: "deviceId",
40803
40909
  form: "single",
40804
40910
  optional: false
40805
40911
  }],
40912
+ "recording.getDaysWithRecordingsBatch": [{
40913
+ name: "deviceIds",
40914
+ form: "array",
40915
+ optional: false
40916
+ }],
40806
40917
  "recording.getDeviceConfig": [{
40807
40918
  name: "deviceId",
40808
40919
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-rademacher",
3
- "version": "0.2.49",
3
+ "version": "0.2.51",
4
4
  "description": "Rademacher HomePilot device-provider addon for CamStack — wraps the @apocaliss92/noderademacher local-hub client (roller shutters over the cover cap)",
5
5
  "keywords": [
6
6
  "camstack",