@camstack/addon-provider-wyze 0.2.54 → 0.2.56

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
@@ -15924,6 +15924,8 @@ var NcSystemEventKindSchema = _enum([
15924
15924
  "device-offline",
15925
15925
  "device-disabled",
15926
15926
  "device-enabled",
15927
+ "device-battery-low",
15928
+ "device-battery-normal",
15927
15929
  "stream-online",
15928
15930
  "stream-offline",
15929
15931
  "node-online",
@@ -19238,6 +19240,34 @@ var KeyEventsForDeviceSchema = object({
19238
19240
  deviceId: number(),
19239
19241
  events: array(KeyEventSchema).readonly()
19240
19242
  });
19243
+ /** One non-empty bucket of the timeline histogram. */
19244
+ var EventDensityBucketSchema = object({
19245
+ bucketStart: number(),
19246
+ motion: number().int(),
19247
+ object: number().int(),
19248
+ audio: number().int()
19249
+ });
19250
+ /**
19251
+ * One camera's row in a `getEventDensityBatch` answer.
19252
+ *
19253
+ * TWO facts, and the timeline draws them differently:
19254
+ *
19255
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
19256
+ * claim: read, and nothing happened in the window.
19257
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
19258
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
19259
+ * not quiet.
19260
+ *
19261
+ * Fanned out per camera the difference was free — one query rejected while the
19262
+ * others resolved — and collapsing to a batch is the exact moment it is lost
19263
+ * silently. Every requested id gets a row: a caller that asked for twelve and
19264
+ * got eleven cannot tell which one is missing, or that any is.
19265
+ */
19266
+ var EventDensityForDeviceSchema = object({
19267
+ deviceId: number(),
19268
+ read: _enum(["read", "unreadable"]),
19269
+ buckets: array(EventDensityBucketSchema).readonly()
19270
+ });
19241
19271
  object({
19242
19272
  trackId: string(),
19243
19273
  className: string(),
@@ -19548,12 +19578,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19548
19578
  since: number(),
19549
19579
  until: number(),
19550
19580
  bucketMs: number().int().positive()
19551
- }), array(object({
19552
- bucketStart: number(),
19553
- motion: number().int(),
19554
- object: number().int(),
19555
- audio: number().int()
19556
- })).readonly()), method(object({
19581
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19582
+ deviceIds: array(number()).min(1).max(200),
19583
+ since: number(),
19584
+ until: number(),
19585
+ bucketMs: number().int().positive()
19586
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19557
19587
  deviceId: number(),
19558
19588
  cutoffMs: number()
19559
19589
  }), object({
@@ -28690,6 +28720,39 @@ var RecordingDaysSchema = object({
28690
28720
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28691
28721
  days: array(number())
28692
28722
  });
28723
+ /**
28724
+ * One camera's row in a `getAvailabilityBatch` answer.
28725
+ *
28726
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
28727
+ * batch collapses the transport, not the work — plus the one thing the singular
28728
+ * method never had to say:
28729
+ *
28730
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
28731
+ * no footage in the window", which is a real claim.
28732
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
28733
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
28734
+ * that emptiness means NOTHING.
28735
+ *
28736
+ * A timeline that renders the second as the first tells an operator there is no
28737
+ * footage when the truth is that nobody looked.
28738
+ */
28739
+ var RecordingAvailabilityForDeviceSchema = object({
28740
+ deviceId: number(),
28741
+ read: _enum(["read", "unreadable"]),
28742
+ ranges: array(RecordingRangeSchema).readonly()
28743
+ });
28744
+ /**
28745
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
28746
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
28747
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
28748
+ * the date-picker's day dots must not spell them the same.
28749
+ */
28750
+ var RecordingDaysForDeviceSchema = object({
28751
+ deviceId: number(),
28752
+ read: _enum(["read", "unreadable"]),
28753
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28754
+ days: array(number()).readonly()
28755
+ });
28693
28756
  var RecordingManifestSchema = object({
28694
28757
  deviceId: number(),
28695
28758
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -28924,6 +28987,13 @@ method(object({
28924
28987
  }), RecordingAvailabilitySchema, {
28925
28988
  kind: "query",
28926
28989
  auth: "protected"
28990
+ }), method(object({
28991
+ deviceIds: array(number()).min(1).max(200),
28992
+ fromMs: number(),
28993
+ toMs: number()
28994
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
28995
+ kind: "query",
28996
+ auth: "protected"
28927
28997
  }), method(object({
28928
28998
  deviceId: number(),
28929
28999
  fromMs: number(),
@@ -28932,6 +29002,14 @@ method(object({
28932
29002
  }), RecordingDaysSchema, {
28933
29003
  kind: "query",
28934
29004
  auth: "protected"
29005
+ }), method(object({
29006
+ deviceIds: array(number()).min(1).max(200),
29007
+ fromMs: number(),
29008
+ toMs: number(),
29009
+ tzOffsetMinutes: number()
29010
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
29011
+ kind: "query",
29012
+ auth: "protected"
28935
29013
  }), method(object({
28936
29014
  deviceId: number(),
28937
29015
  fromMs: number(),
@@ -35828,6 +35906,12 @@ Object.freeze({
35828
35906
  addonId: null,
35829
35907
  access: "view"
35830
35908
  },
35909
+ "pipelineAnalytics.getEventDensityBatch": {
35910
+ capName: "pipeline-analytics",
35911
+ capScope: "device",
35912
+ addonId: null,
35913
+ access: "view"
35914
+ },
35831
35915
  "pipelineAnalytics.getEventMedia": {
35832
35916
  capName: "pipeline-analytics",
35833
35917
  capScope: "device",
@@ -36950,12 +37034,24 @@ Object.freeze({
36950
37034
  addonId: null,
36951
37035
  access: "view"
36952
37036
  },
37037
+ "recording.getAvailabilityBatch": {
37038
+ capName: "recording",
37039
+ capScope: "system",
37040
+ addonId: null,
37041
+ access: "view"
37042
+ },
36953
37043
  "recording.getDaysWithRecordings": {
36954
37044
  capName: "recording",
36955
37045
  capScope: "system",
36956
37046
  addonId: null,
36957
37047
  access: "view"
36958
37048
  },
37049
+ "recording.getDaysWithRecordingsBatch": {
37050
+ capName: "recording",
37051
+ capScope: "system",
37052
+ addonId: null,
37053
+ access: "view"
37054
+ },
36959
37055
  "recording.getDeviceConfig": {
36960
37056
  capName: "recording",
36961
37057
  capScope: "system",
@@ -39560,6 +39656,11 @@ Object.freeze({
39560
39656
  form: "single",
39561
39657
  optional: false
39562
39658
  }],
39659
+ "pipelineAnalytics.getEventDensityBatch": [{
39660
+ name: "deviceIds",
39661
+ form: "array",
39662
+ optional: false
39663
+ }],
39563
39664
  "pipelineAnalytics.getEventMedia": [{
39564
39665
  name: "deviceId",
39565
39666
  form: "single",
@@ -39975,11 +40076,21 @@ Object.freeze({
39975
40076
  form: "single",
39976
40077
  optional: false
39977
40078
  }],
40079
+ "recording.getAvailabilityBatch": [{
40080
+ name: "deviceIds",
40081
+ form: "array",
40082
+ optional: false
40083
+ }],
39978
40084
  "recording.getDaysWithRecordings": [{
39979
40085
  name: "deviceId",
39980
40086
  form: "single",
39981
40087
  optional: false
39982
40088
  }],
40089
+ "recording.getDaysWithRecordingsBatch": [{
40090
+ name: "deviceIds",
40091
+ form: "array",
40092
+ optional: false
40093
+ }],
39983
40094
  "recording.getDeviceConfig": [{
39984
40095
  name: "deviceId",
39985
40096
  form: "single",
package/dist/addon.mjs CHANGED
@@ -15903,6 +15903,8 @@ var NcSystemEventKindSchema = _enum([
15903
15903
  "device-offline",
15904
15904
  "device-disabled",
15905
15905
  "device-enabled",
15906
+ "device-battery-low",
15907
+ "device-battery-normal",
15906
15908
  "stream-online",
15907
15909
  "stream-offline",
15908
15910
  "node-online",
@@ -19217,6 +19219,34 @@ var KeyEventsForDeviceSchema = object({
19217
19219
  deviceId: number(),
19218
19220
  events: array(KeyEventSchema).readonly()
19219
19221
  });
19222
+ /** One non-empty bucket of the timeline histogram. */
19223
+ var EventDensityBucketSchema = object({
19224
+ bucketStart: number(),
19225
+ motion: number().int(),
19226
+ object: number().int(),
19227
+ audio: number().int()
19228
+ });
19229
+ /**
19230
+ * One camera's row in a `getEventDensityBatch` answer.
19231
+ *
19232
+ * TWO facts, and the timeline draws them differently:
19233
+ *
19234
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
19235
+ * claim: read, and nothing happened in the window.
19236
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
19237
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
19238
+ * not quiet.
19239
+ *
19240
+ * Fanned out per camera the difference was free — one query rejected while the
19241
+ * others resolved — and collapsing to a batch is the exact moment it is lost
19242
+ * silently. Every requested id gets a row: a caller that asked for twelve and
19243
+ * got eleven cannot tell which one is missing, or that any is.
19244
+ */
19245
+ var EventDensityForDeviceSchema = object({
19246
+ deviceId: number(),
19247
+ read: _enum(["read", "unreadable"]),
19248
+ buckets: array(EventDensityBucketSchema).readonly()
19249
+ });
19220
19250
  object({
19221
19251
  trackId: string(),
19222
19252
  className: string(),
@@ -19527,12 +19557,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19527
19557
  since: number(),
19528
19558
  until: number(),
19529
19559
  bucketMs: number().int().positive()
19530
- }), array(object({
19531
- bucketStart: number(),
19532
- motion: number().int(),
19533
- object: number().int(),
19534
- audio: number().int()
19535
- })).readonly()), method(object({
19560
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19561
+ deviceIds: array(number()).min(1).max(200),
19562
+ since: number(),
19563
+ until: number(),
19564
+ bucketMs: number().int().positive()
19565
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19536
19566
  deviceId: number(),
19537
19567
  cutoffMs: number()
19538
19568
  }), object({
@@ -28669,6 +28699,39 @@ var RecordingDaysSchema = object({
28669
28699
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28670
28700
  days: array(number())
28671
28701
  });
28702
+ /**
28703
+ * One camera's row in a `getAvailabilityBatch` answer.
28704
+ *
28705
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
28706
+ * batch collapses the transport, not the work — plus the one thing the singular
28707
+ * method never had to say:
28708
+ *
28709
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
28710
+ * no footage in the window", which is a real claim.
28711
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
28712
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
28713
+ * that emptiness means NOTHING.
28714
+ *
28715
+ * A timeline that renders the second as the first tells an operator there is no
28716
+ * footage when the truth is that nobody looked.
28717
+ */
28718
+ var RecordingAvailabilityForDeviceSchema = object({
28719
+ deviceId: number(),
28720
+ read: _enum(["read", "unreadable"]),
28721
+ ranges: array(RecordingRangeSchema).readonly()
28722
+ });
28723
+ /**
28724
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
28725
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
28726
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
28727
+ * the date-picker's day dots must not spell them the same.
28728
+ */
28729
+ var RecordingDaysForDeviceSchema = object({
28730
+ deviceId: number(),
28731
+ read: _enum(["read", "unreadable"]),
28732
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28733
+ days: array(number()).readonly()
28734
+ });
28672
28735
  var RecordingManifestSchema = object({
28673
28736
  deviceId: number(),
28674
28737
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -28903,6 +28966,13 @@ method(object({
28903
28966
  }), RecordingAvailabilitySchema, {
28904
28967
  kind: "query",
28905
28968
  auth: "protected"
28969
+ }), method(object({
28970
+ deviceIds: array(number()).min(1).max(200),
28971
+ fromMs: number(),
28972
+ toMs: number()
28973
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
28974
+ kind: "query",
28975
+ auth: "protected"
28906
28976
  }), method(object({
28907
28977
  deviceId: number(),
28908
28978
  fromMs: number(),
@@ -28911,6 +28981,14 @@ method(object({
28911
28981
  }), RecordingDaysSchema, {
28912
28982
  kind: "query",
28913
28983
  auth: "protected"
28984
+ }), method(object({
28985
+ deviceIds: array(number()).min(1).max(200),
28986
+ fromMs: number(),
28987
+ toMs: number(),
28988
+ tzOffsetMinutes: number()
28989
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
28990
+ kind: "query",
28991
+ auth: "protected"
28914
28992
  }), method(object({
28915
28993
  deviceId: number(),
28916
28994
  fromMs: number(),
@@ -35807,6 +35885,12 @@ Object.freeze({
35807
35885
  addonId: null,
35808
35886
  access: "view"
35809
35887
  },
35888
+ "pipelineAnalytics.getEventDensityBatch": {
35889
+ capName: "pipeline-analytics",
35890
+ capScope: "device",
35891
+ addonId: null,
35892
+ access: "view"
35893
+ },
35810
35894
  "pipelineAnalytics.getEventMedia": {
35811
35895
  capName: "pipeline-analytics",
35812
35896
  capScope: "device",
@@ -36929,12 +37013,24 @@ Object.freeze({
36929
37013
  addonId: null,
36930
37014
  access: "view"
36931
37015
  },
37016
+ "recording.getAvailabilityBatch": {
37017
+ capName: "recording",
37018
+ capScope: "system",
37019
+ addonId: null,
37020
+ access: "view"
37021
+ },
36932
37022
  "recording.getDaysWithRecordings": {
36933
37023
  capName: "recording",
36934
37024
  capScope: "system",
36935
37025
  addonId: null,
36936
37026
  access: "view"
36937
37027
  },
37028
+ "recording.getDaysWithRecordingsBatch": {
37029
+ capName: "recording",
37030
+ capScope: "system",
37031
+ addonId: null,
37032
+ access: "view"
37033
+ },
36938
37034
  "recording.getDeviceConfig": {
36939
37035
  capName: "recording",
36940
37036
  capScope: "system",
@@ -39539,6 +39635,11 @@ Object.freeze({
39539
39635
  form: "single",
39540
39636
  optional: false
39541
39637
  }],
39638
+ "pipelineAnalytics.getEventDensityBatch": [{
39639
+ name: "deviceIds",
39640
+ form: "array",
39641
+ optional: false
39642
+ }],
39542
39643
  "pipelineAnalytics.getEventMedia": [{
39543
39644
  name: "deviceId",
39544
39645
  form: "single",
@@ -39954,11 +40055,21 @@ Object.freeze({
39954
40055
  form: "single",
39955
40056
  optional: false
39956
40057
  }],
40058
+ "recording.getAvailabilityBatch": [{
40059
+ name: "deviceIds",
40060
+ form: "array",
40061
+ optional: false
40062
+ }],
39957
40063
  "recording.getDaysWithRecordings": [{
39958
40064
  name: "deviceId",
39959
40065
  form: "single",
39960
40066
  optional: false
39961
40067
  }],
40068
+ "recording.getDaysWithRecordingsBatch": [{
40069
+ name: "deviceIds",
40070
+ form: "array",
40071
+ optional: false
40072
+ }],
39962
40073
  "recording.getDeviceConfig": [{
39963
40074
  name: "deviceId",
39964
40075
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-wyze",
3
- "version": "0.2.54",
3
+ "version": "0.2.56",
4
4
  "description": "Wyze camera device-provider addon for CamStack — wraps the @apocaliss92/wyze-bridge-js P2P/DTLS client, feeding the stream-broker via the pull-rfc4571 lazy-publish path (a structural twin of addon-provider-reolink)",
5
5
  "keywords": [
6
6
  "camstack",