@camstack/addon-decoder-nodeav 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.
package/dist/index.js CHANGED
@@ -15703,6 +15703,8 @@ var NcSystemEventKindSchema = _enum([
15703
15703
  "device-offline",
15704
15704
  "device-disabled",
15705
15705
  "device-enabled",
15706
+ "device-battery-low",
15707
+ "device-battery-normal",
15706
15708
  "stream-online",
15707
15709
  "stream-offline",
15708
15710
  "node-online",
@@ -18977,6 +18979,34 @@ var KeyEventsForDeviceSchema = object({
18977
18979
  deviceId: number(),
18978
18980
  events: array(KeyEventSchema).readonly()
18979
18981
  });
18982
+ /** One non-empty bucket of the timeline histogram. */
18983
+ var EventDensityBucketSchema = object({
18984
+ bucketStart: number(),
18985
+ motion: number().int(),
18986
+ object: number().int(),
18987
+ audio: number().int()
18988
+ });
18989
+ /**
18990
+ * One camera's row in a `getEventDensityBatch` answer.
18991
+ *
18992
+ * TWO facts, and the timeline draws them differently:
18993
+ *
18994
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
18995
+ * claim: read, and nothing happened in the window.
18996
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
18997
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
18998
+ * not quiet.
18999
+ *
19000
+ * Fanned out per camera the difference was free — one query rejected while the
19001
+ * others resolved — and collapsing to a batch is the exact moment it is lost
19002
+ * silently. Every requested id gets a row: a caller that asked for twelve and
19003
+ * got eleven cannot tell which one is missing, or that any is.
19004
+ */
19005
+ var EventDensityForDeviceSchema = object({
19006
+ deviceId: number(),
19007
+ read: _enum(["read", "unreadable"]),
19008
+ buckets: array(EventDensityBucketSchema).readonly()
19009
+ });
18980
19010
  object({
18981
19011
  trackId: string(),
18982
19012
  className: string(),
@@ -19287,12 +19317,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19287
19317
  since: number(),
19288
19318
  until: number(),
19289
19319
  bucketMs: number().int().positive()
19290
- }), array(object({
19291
- bucketStart: number(),
19292
- motion: number().int(),
19293
- object: number().int(),
19294
- audio: number().int()
19295
- })).readonly()), method(object({
19320
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19321
+ deviceIds: array(number()).min(1).max(200),
19322
+ since: number(),
19323
+ until: number(),
19324
+ bucketMs: number().int().positive()
19325
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19296
19326
  deviceId: number(),
19297
19327
  cutoffMs: number()
19298
19328
  }), object({
@@ -26602,6 +26632,39 @@ var RecordingDaysSchema = object({
26602
26632
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26603
26633
  days: array(number())
26604
26634
  });
26635
+ /**
26636
+ * One camera's row in a `getAvailabilityBatch` answer.
26637
+ *
26638
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
26639
+ * batch collapses the transport, not the work — plus the one thing the singular
26640
+ * method never had to say:
26641
+ *
26642
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
26643
+ * no footage in the window", which is a real claim.
26644
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
26645
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
26646
+ * that emptiness means NOTHING.
26647
+ *
26648
+ * A timeline that renders the second as the first tells an operator there is no
26649
+ * footage when the truth is that nobody looked.
26650
+ */
26651
+ var RecordingAvailabilityForDeviceSchema = object({
26652
+ deviceId: number(),
26653
+ read: _enum(["read", "unreadable"]),
26654
+ ranges: array(RecordingRangeSchema).readonly()
26655
+ });
26656
+ /**
26657
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
26658
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
26659
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
26660
+ * the date-picker's day dots must not spell them the same.
26661
+ */
26662
+ var RecordingDaysForDeviceSchema = object({
26663
+ deviceId: number(),
26664
+ read: _enum(["read", "unreadable"]),
26665
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26666
+ days: array(number()).readonly()
26667
+ });
26605
26668
  var RecordingManifestSchema = object({
26606
26669
  deviceId: number(),
26607
26670
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -26836,6 +26899,13 @@ method(object({
26836
26899
  }), RecordingAvailabilitySchema, {
26837
26900
  kind: "query",
26838
26901
  auth: "protected"
26902
+ }), method(object({
26903
+ deviceIds: array(number()).min(1).max(200),
26904
+ fromMs: number(),
26905
+ toMs: number()
26906
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
26907
+ kind: "query",
26908
+ auth: "protected"
26839
26909
  }), method(object({
26840
26910
  deviceId: number(),
26841
26911
  fromMs: number(),
@@ -26844,6 +26914,14 @@ method(object({
26844
26914
  }), RecordingDaysSchema, {
26845
26915
  kind: "query",
26846
26916
  auth: "protected"
26917
+ }), method(object({
26918
+ deviceIds: array(number()).min(1).max(200),
26919
+ fromMs: number(),
26920
+ toMs: number(),
26921
+ tzOffsetMinutes: number()
26922
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
26923
+ kind: "query",
26924
+ auth: "protected"
26847
26925
  }), method(object({
26848
26926
  deviceId: number(),
26849
26927
  fromMs: number(),
@@ -32041,6 +32119,12 @@ Object.freeze({
32041
32119
  addonId: null,
32042
32120
  access: "view"
32043
32121
  },
32122
+ "pipelineAnalytics.getEventDensityBatch": {
32123
+ capName: "pipeline-analytics",
32124
+ capScope: "device",
32125
+ addonId: null,
32126
+ access: "view"
32127
+ },
32044
32128
  "pipelineAnalytics.getEventMedia": {
32045
32129
  capName: "pipeline-analytics",
32046
32130
  capScope: "device",
@@ -33163,12 +33247,24 @@ Object.freeze({
33163
33247
  addonId: null,
33164
33248
  access: "view"
33165
33249
  },
33250
+ "recording.getAvailabilityBatch": {
33251
+ capName: "recording",
33252
+ capScope: "system",
33253
+ addonId: null,
33254
+ access: "view"
33255
+ },
33166
33256
  "recording.getDaysWithRecordings": {
33167
33257
  capName: "recording",
33168
33258
  capScope: "system",
33169
33259
  addonId: null,
33170
33260
  access: "view"
33171
33261
  },
33262
+ "recording.getDaysWithRecordingsBatch": {
33263
+ capName: "recording",
33264
+ capScope: "system",
33265
+ addonId: null,
33266
+ access: "view"
33267
+ },
33172
33268
  "recording.getDeviceConfig": {
33173
33269
  capName: "recording",
33174
33270
  capScope: "system",
@@ -35773,6 +35869,11 @@ Object.freeze({
35773
35869
  form: "single",
35774
35870
  optional: false
35775
35871
  }],
35872
+ "pipelineAnalytics.getEventDensityBatch": [{
35873
+ name: "deviceIds",
35874
+ form: "array",
35875
+ optional: false
35876
+ }],
35776
35877
  "pipelineAnalytics.getEventMedia": [{
35777
35878
  name: "deviceId",
35778
35879
  form: "single",
@@ -36188,11 +36289,21 @@ Object.freeze({
36188
36289
  form: "single",
36189
36290
  optional: false
36190
36291
  }],
36292
+ "recording.getAvailabilityBatch": [{
36293
+ name: "deviceIds",
36294
+ form: "array",
36295
+ optional: false
36296
+ }],
36191
36297
  "recording.getDaysWithRecordings": [{
36192
36298
  name: "deviceId",
36193
36299
  form: "single",
36194
36300
  optional: false
36195
36301
  }],
36302
+ "recording.getDaysWithRecordingsBatch": [{
36303
+ name: "deviceIds",
36304
+ form: "array",
36305
+ optional: false
36306
+ }],
36196
36307
  "recording.getDeviceConfig": [{
36197
36308
  name: "deviceId",
36198
36309
  form: "single",
package/dist/index.mjs CHANGED
@@ -15699,6 +15699,8 @@ var NcSystemEventKindSchema = _enum([
15699
15699
  "device-offline",
15700
15700
  "device-disabled",
15701
15701
  "device-enabled",
15702
+ "device-battery-low",
15703
+ "device-battery-normal",
15702
15704
  "stream-online",
15703
15705
  "stream-offline",
15704
15706
  "node-online",
@@ -18973,6 +18975,34 @@ var KeyEventsForDeviceSchema = object({
18973
18975
  deviceId: number(),
18974
18976
  events: array(KeyEventSchema).readonly()
18975
18977
  });
18978
+ /** One non-empty bucket of the timeline histogram. */
18979
+ var EventDensityBucketSchema = object({
18980
+ bucketStart: number(),
18981
+ motion: number().int(),
18982
+ object: number().int(),
18983
+ audio: number().int()
18984
+ });
18985
+ /**
18986
+ * One camera's row in a `getEventDensityBatch` answer.
18987
+ *
18988
+ * TWO facts, and the timeline draws them differently:
18989
+ *
18990
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
18991
+ * claim: read, and nothing happened in the window.
18992
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
18993
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
18994
+ * not quiet.
18995
+ *
18996
+ * Fanned out per camera the difference was free — one query rejected while the
18997
+ * others resolved — and collapsing to a batch is the exact moment it is lost
18998
+ * silently. Every requested id gets a row: a caller that asked for twelve and
18999
+ * got eleven cannot tell which one is missing, or that any is.
19000
+ */
19001
+ var EventDensityForDeviceSchema = object({
19002
+ deviceId: number(),
19003
+ read: _enum(["read", "unreadable"]),
19004
+ buckets: array(EventDensityBucketSchema).readonly()
19005
+ });
18976
19006
  object({
18977
19007
  trackId: string(),
18978
19008
  className: string(),
@@ -19283,12 +19313,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19283
19313
  since: number(),
19284
19314
  until: number(),
19285
19315
  bucketMs: number().int().positive()
19286
- }), array(object({
19287
- bucketStart: number(),
19288
- motion: number().int(),
19289
- object: number().int(),
19290
- audio: number().int()
19291
- })).readonly()), method(object({
19316
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19317
+ deviceIds: array(number()).min(1).max(200),
19318
+ since: number(),
19319
+ until: number(),
19320
+ bucketMs: number().int().positive()
19321
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19292
19322
  deviceId: number(),
19293
19323
  cutoffMs: number()
19294
19324
  }), object({
@@ -26598,6 +26628,39 @@ var RecordingDaysSchema = object({
26598
26628
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26599
26629
  days: array(number())
26600
26630
  });
26631
+ /**
26632
+ * One camera's row in a `getAvailabilityBatch` answer.
26633
+ *
26634
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
26635
+ * batch collapses the transport, not the work — plus the one thing the singular
26636
+ * method never had to say:
26637
+ *
26638
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
26639
+ * no footage in the window", which is a real claim.
26640
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
26641
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
26642
+ * that emptiness means NOTHING.
26643
+ *
26644
+ * A timeline that renders the second as the first tells an operator there is no
26645
+ * footage when the truth is that nobody looked.
26646
+ */
26647
+ var RecordingAvailabilityForDeviceSchema = object({
26648
+ deviceId: number(),
26649
+ read: _enum(["read", "unreadable"]),
26650
+ ranges: array(RecordingRangeSchema).readonly()
26651
+ });
26652
+ /**
26653
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
26654
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
26655
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
26656
+ * the date-picker's day dots must not spell them the same.
26657
+ */
26658
+ var RecordingDaysForDeviceSchema = object({
26659
+ deviceId: number(),
26660
+ read: _enum(["read", "unreadable"]),
26661
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26662
+ days: array(number()).readonly()
26663
+ });
26601
26664
  var RecordingManifestSchema = object({
26602
26665
  deviceId: number(),
26603
26666
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -26832,6 +26895,13 @@ method(object({
26832
26895
  }), RecordingAvailabilitySchema, {
26833
26896
  kind: "query",
26834
26897
  auth: "protected"
26898
+ }), method(object({
26899
+ deviceIds: array(number()).min(1).max(200),
26900
+ fromMs: number(),
26901
+ toMs: number()
26902
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
26903
+ kind: "query",
26904
+ auth: "protected"
26835
26905
  }), method(object({
26836
26906
  deviceId: number(),
26837
26907
  fromMs: number(),
@@ -26840,6 +26910,14 @@ method(object({
26840
26910
  }), RecordingDaysSchema, {
26841
26911
  kind: "query",
26842
26912
  auth: "protected"
26913
+ }), method(object({
26914
+ deviceIds: array(number()).min(1).max(200),
26915
+ fromMs: number(),
26916
+ toMs: number(),
26917
+ tzOffsetMinutes: number()
26918
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
26919
+ kind: "query",
26920
+ auth: "protected"
26843
26921
  }), method(object({
26844
26922
  deviceId: number(),
26845
26923
  fromMs: number(),
@@ -32037,6 +32115,12 @@ Object.freeze({
32037
32115
  addonId: null,
32038
32116
  access: "view"
32039
32117
  },
32118
+ "pipelineAnalytics.getEventDensityBatch": {
32119
+ capName: "pipeline-analytics",
32120
+ capScope: "device",
32121
+ addonId: null,
32122
+ access: "view"
32123
+ },
32040
32124
  "pipelineAnalytics.getEventMedia": {
32041
32125
  capName: "pipeline-analytics",
32042
32126
  capScope: "device",
@@ -33159,12 +33243,24 @@ Object.freeze({
33159
33243
  addonId: null,
33160
33244
  access: "view"
33161
33245
  },
33246
+ "recording.getAvailabilityBatch": {
33247
+ capName: "recording",
33248
+ capScope: "system",
33249
+ addonId: null,
33250
+ access: "view"
33251
+ },
33162
33252
  "recording.getDaysWithRecordings": {
33163
33253
  capName: "recording",
33164
33254
  capScope: "system",
33165
33255
  addonId: null,
33166
33256
  access: "view"
33167
33257
  },
33258
+ "recording.getDaysWithRecordingsBatch": {
33259
+ capName: "recording",
33260
+ capScope: "system",
33261
+ addonId: null,
33262
+ access: "view"
33263
+ },
33168
33264
  "recording.getDeviceConfig": {
33169
33265
  capName: "recording",
33170
33266
  capScope: "system",
@@ -35769,6 +35865,11 @@ Object.freeze({
35769
35865
  form: "single",
35770
35866
  optional: false
35771
35867
  }],
35868
+ "pipelineAnalytics.getEventDensityBatch": [{
35869
+ name: "deviceIds",
35870
+ form: "array",
35871
+ optional: false
35872
+ }],
35772
35873
  "pipelineAnalytics.getEventMedia": [{
35773
35874
  name: "deviceId",
35774
35875
  form: "single",
@@ -36184,11 +36285,21 @@ Object.freeze({
36184
36285
  form: "single",
36185
36286
  optional: false
36186
36287
  }],
36288
+ "recording.getAvailabilityBatch": [{
36289
+ name: "deviceIds",
36290
+ form: "array",
36291
+ optional: false
36292
+ }],
36187
36293
  "recording.getDaysWithRecordings": [{
36188
36294
  name: "deviceId",
36189
36295
  form: "single",
36190
36296
  optional: false
36191
36297
  }],
36298
+ "recording.getDaysWithRecordingsBatch": [{
36299
+ name: "deviceIds",
36300
+ form: "array",
36301
+ optional: false
36302
+ }],
36192
36303
  "recording.getDeviceConfig": [{
36193
36304
  name: "deviceId",
36194
36305
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-decoder-nodeav",
3
- "version": "1.2.50",
3
+ "version": "1.2.52",
4
4
  "description": "Standalone in-process node-av decoder addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",