@camstack/addon-terminal 0.1.56 → 0.1.57

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
@@ -19235,6 +19235,34 @@ var KeyEventsForDeviceSchema = object({
19235
19235
  deviceId: number(),
19236
19236
  events: array(KeyEventSchema).readonly()
19237
19237
  });
19238
+ /** One non-empty bucket of the timeline histogram. */
19239
+ var EventDensityBucketSchema = object({
19240
+ bucketStart: number(),
19241
+ motion: number().int(),
19242
+ object: number().int(),
19243
+ audio: number().int()
19244
+ });
19245
+ /**
19246
+ * One camera's row in a `getEventDensityBatch` answer.
19247
+ *
19248
+ * TWO facts, and the timeline draws them differently:
19249
+ *
19250
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
19251
+ * claim: read, and nothing happened in the window.
19252
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
19253
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
19254
+ * not quiet.
19255
+ *
19256
+ * Fanned out per camera the difference was free — one query rejected while the
19257
+ * others resolved — and collapsing to a batch is the exact moment it is lost
19258
+ * silently. Every requested id gets a row: a caller that asked for twelve and
19259
+ * got eleven cannot tell which one is missing, or that any is.
19260
+ */
19261
+ var EventDensityForDeviceSchema = object({
19262
+ deviceId: number(),
19263
+ read: _enum(["read", "unreadable"]),
19264
+ buckets: array(EventDensityBucketSchema).readonly()
19265
+ });
19238
19266
  object({
19239
19267
  trackId: string(),
19240
19268
  className: string(),
@@ -19545,12 +19573,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19545
19573
  since: number(),
19546
19574
  until: number(),
19547
19575
  bucketMs: number().int().positive()
19548
- }), array(object({
19549
- bucketStart: number(),
19550
- motion: number().int(),
19551
- object: number().int(),
19552
- audio: number().int()
19553
- })).readonly()), method(object({
19576
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19577
+ deviceIds: array(number()).min(1).max(200),
19578
+ since: number(),
19579
+ until: number(),
19580
+ bucketMs: number().int().positive()
19581
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19554
19582
  deviceId: number(),
19555
19583
  cutoffMs: number()
19556
19584
  }), object({
@@ -28723,6 +28751,39 @@ var RecordingDaysSchema = object({
28723
28751
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28724
28752
  days: array(number())
28725
28753
  });
28754
+ /**
28755
+ * One camera's row in a `getAvailabilityBatch` answer.
28756
+ *
28757
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
28758
+ * batch collapses the transport, not the work — plus the one thing the singular
28759
+ * method never had to say:
28760
+ *
28761
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
28762
+ * no footage in the window", which is a real claim.
28763
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
28764
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
28765
+ * that emptiness means NOTHING.
28766
+ *
28767
+ * A timeline that renders the second as the first tells an operator there is no
28768
+ * footage when the truth is that nobody looked.
28769
+ */
28770
+ var RecordingAvailabilityForDeviceSchema = object({
28771
+ deviceId: number(),
28772
+ read: _enum(["read", "unreadable"]),
28773
+ ranges: array(RecordingRangeSchema).readonly()
28774
+ });
28775
+ /**
28776
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
28777
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
28778
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
28779
+ * the date-picker's day dots must not spell them the same.
28780
+ */
28781
+ var RecordingDaysForDeviceSchema = object({
28782
+ deviceId: number(),
28783
+ read: _enum(["read", "unreadable"]),
28784
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28785
+ days: array(number()).readonly()
28786
+ });
28726
28787
  var RecordingManifestSchema = object({
28727
28788
  deviceId: number(),
28728
28789
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -28957,6 +29018,13 @@ method(object({
28957
29018
  }), RecordingAvailabilitySchema, {
28958
29019
  kind: "query",
28959
29020
  auth: "protected"
29021
+ }), method(object({
29022
+ deviceIds: array(number()).min(1).max(200),
29023
+ fromMs: number(),
29024
+ toMs: number()
29025
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
29026
+ kind: "query",
29027
+ auth: "protected"
28960
29028
  }), method(object({
28961
29029
  deviceId: number(),
28962
29030
  fromMs: number(),
@@ -28965,6 +29033,14 @@ method(object({
28965
29033
  }), RecordingDaysSchema, {
28966
29034
  kind: "query",
28967
29035
  auth: "protected"
29036
+ }), method(object({
29037
+ deviceIds: array(number()).min(1).max(200),
29038
+ fromMs: number(),
29039
+ toMs: number(),
29040
+ tzOffsetMinutes: number()
29041
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
29042
+ kind: "query",
29043
+ auth: "protected"
28968
29044
  }), method(object({
28969
29045
  deviceId: number(),
28970
29046
  fromMs: number(),
@@ -35859,6 +35935,12 @@ Object.freeze({
35859
35935
  addonId: null,
35860
35936
  access: "view"
35861
35937
  },
35938
+ "pipelineAnalytics.getEventDensityBatch": {
35939
+ capName: "pipeline-analytics",
35940
+ capScope: "device",
35941
+ addonId: null,
35942
+ access: "view"
35943
+ },
35862
35944
  "pipelineAnalytics.getEventMedia": {
35863
35945
  capName: "pipeline-analytics",
35864
35946
  capScope: "device",
@@ -36981,12 +37063,24 @@ Object.freeze({
36981
37063
  addonId: null,
36982
37064
  access: "view"
36983
37065
  },
37066
+ "recording.getAvailabilityBatch": {
37067
+ capName: "recording",
37068
+ capScope: "system",
37069
+ addonId: null,
37070
+ access: "view"
37071
+ },
36984
37072
  "recording.getDaysWithRecordings": {
36985
37073
  capName: "recording",
36986
37074
  capScope: "system",
36987
37075
  addonId: null,
36988
37076
  access: "view"
36989
37077
  },
37078
+ "recording.getDaysWithRecordingsBatch": {
37079
+ capName: "recording",
37080
+ capScope: "system",
37081
+ addonId: null,
37082
+ access: "view"
37083
+ },
36990
37084
  "recording.getDeviceConfig": {
36991
37085
  capName: "recording",
36992
37086
  capScope: "system",
@@ -39591,6 +39685,11 @@ Object.freeze({
39591
39685
  form: "single",
39592
39686
  optional: false
39593
39687
  }],
39688
+ "pipelineAnalytics.getEventDensityBatch": [{
39689
+ name: "deviceIds",
39690
+ form: "array",
39691
+ optional: false
39692
+ }],
39594
39693
  "pipelineAnalytics.getEventMedia": [{
39595
39694
  name: "deviceId",
39596
39695
  form: "single",
@@ -40006,11 +40105,21 @@ Object.freeze({
40006
40105
  form: "single",
40007
40106
  optional: false
40008
40107
  }],
40108
+ "recording.getAvailabilityBatch": [{
40109
+ name: "deviceIds",
40110
+ form: "array",
40111
+ optional: false
40112
+ }],
40009
40113
  "recording.getDaysWithRecordings": [{
40010
40114
  name: "deviceId",
40011
40115
  form: "single",
40012
40116
  optional: false
40013
40117
  }],
40118
+ "recording.getDaysWithRecordingsBatch": [{
40119
+ name: "deviceIds",
40120
+ form: "array",
40121
+ optional: false
40122
+ }],
40014
40123
  "recording.getDeviceConfig": [{
40015
40124
  name: "deviceId",
40016
40125
  form: "single",
package/dist/addon.mjs CHANGED
@@ -19212,6 +19212,34 @@ var KeyEventsForDeviceSchema = object({
19212
19212
  deviceId: number(),
19213
19213
  events: array(KeyEventSchema).readonly()
19214
19214
  });
19215
+ /** One non-empty bucket of the timeline histogram. */
19216
+ var EventDensityBucketSchema = object({
19217
+ bucketStart: number(),
19218
+ motion: number().int(),
19219
+ object: number().int(),
19220
+ audio: number().int()
19221
+ });
19222
+ /**
19223
+ * One camera's row in a `getEventDensityBatch` answer.
19224
+ *
19225
+ * TWO facts, and the timeline draws them differently:
19226
+ *
19227
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
19228
+ * claim: read, and nothing happened in the window.
19229
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
19230
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
19231
+ * not quiet.
19232
+ *
19233
+ * Fanned out per camera the difference was free — one query rejected while the
19234
+ * others resolved — and collapsing to a batch is the exact moment it is lost
19235
+ * silently. Every requested id gets a row: a caller that asked for twelve and
19236
+ * got eleven cannot tell which one is missing, or that any is.
19237
+ */
19238
+ var EventDensityForDeviceSchema = object({
19239
+ deviceId: number(),
19240
+ read: _enum(["read", "unreadable"]),
19241
+ buckets: array(EventDensityBucketSchema).readonly()
19242
+ });
19215
19243
  object({
19216
19244
  trackId: string(),
19217
19245
  className: string(),
@@ -19522,12 +19550,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19522
19550
  since: number(),
19523
19551
  until: number(),
19524
19552
  bucketMs: number().int().positive()
19525
- }), array(object({
19526
- bucketStart: number(),
19527
- motion: number().int(),
19528
- object: number().int(),
19529
- audio: number().int()
19530
- })).readonly()), method(object({
19553
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19554
+ deviceIds: array(number()).min(1).max(200),
19555
+ since: number(),
19556
+ until: number(),
19557
+ bucketMs: number().int().positive()
19558
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19531
19559
  deviceId: number(),
19532
19560
  cutoffMs: number()
19533
19561
  }), object({
@@ -28700,6 +28728,39 @@ var RecordingDaysSchema = object({
28700
28728
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28701
28729
  days: array(number())
28702
28730
  });
28731
+ /**
28732
+ * One camera's row in a `getAvailabilityBatch` answer.
28733
+ *
28734
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
28735
+ * batch collapses the transport, not the work — plus the one thing the singular
28736
+ * method never had to say:
28737
+ *
28738
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
28739
+ * no footage in the window", which is a real claim.
28740
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
28741
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
28742
+ * that emptiness means NOTHING.
28743
+ *
28744
+ * A timeline that renders the second as the first tells an operator there is no
28745
+ * footage when the truth is that nobody looked.
28746
+ */
28747
+ var RecordingAvailabilityForDeviceSchema = object({
28748
+ deviceId: number(),
28749
+ read: _enum(["read", "unreadable"]),
28750
+ ranges: array(RecordingRangeSchema).readonly()
28751
+ });
28752
+ /**
28753
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
28754
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
28755
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
28756
+ * the date-picker's day dots must not spell them the same.
28757
+ */
28758
+ var RecordingDaysForDeviceSchema = object({
28759
+ deviceId: number(),
28760
+ read: _enum(["read", "unreadable"]),
28761
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28762
+ days: array(number()).readonly()
28763
+ });
28703
28764
  var RecordingManifestSchema = object({
28704
28765
  deviceId: number(),
28705
28766
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -28934,6 +28995,13 @@ method(object({
28934
28995
  }), RecordingAvailabilitySchema, {
28935
28996
  kind: "query",
28936
28997
  auth: "protected"
28998
+ }), method(object({
28999
+ deviceIds: array(number()).min(1).max(200),
29000
+ fromMs: number(),
29001
+ toMs: number()
29002
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
29003
+ kind: "query",
29004
+ auth: "protected"
28937
29005
  }), method(object({
28938
29006
  deviceId: number(),
28939
29007
  fromMs: number(),
@@ -28942,6 +29010,14 @@ method(object({
28942
29010
  }), RecordingDaysSchema, {
28943
29011
  kind: "query",
28944
29012
  auth: "protected"
29013
+ }), method(object({
29014
+ deviceIds: array(number()).min(1).max(200),
29015
+ fromMs: number(),
29016
+ toMs: number(),
29017
+ tzOffsetMinutes: number()
29018
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
29019
+ kind: "query",
29020
+ auth: "protected"
28945
29021
  }), method(object({
28946
29022
  deviceId: number(),
28947
29023
  fromMs: number(),
@@ -35836,6 +35912,12 @@ Object.freeze({
35836
35912
  addonId: null,
35837
35913
  access: "view"
35838
35914
  },
35915
+ "pipelineAnalytics.getEventDensityBatch": {
35916
+ capName: "pipeline-analytics",
35917
+ capScope: "device",
35918
+ addonId: null,
35919
+ access: "view"
35920
+ },
35839
35921
  "pipelineAnalytics.getEventMedia": {
35840
35922
  capName: "pipeline-analytics",
35841
35923
  capScope: "device",
@@ -36958,12 +37040,24 @@ Object.freeze({
36958
37040
  addonId: null,
36959
37041
  access: "view"
36960
37042
  },
37043
+ "recording.getAvailabilityBatch": {
37044
+ capName: "recording",
37045
+ capScope: "system",
37046
+ addonId: null,
37047
+ access: "view"
37048
+ },
36961
37049
  "recording.getDaysWithRecordings": {
36962
37050
  capName: "recording",
36963
37051
  capScope: "system",
36964
37052
  addonId: null,
36965
37053
  access: "view"
36966
37054
  },
37055
+ "recording.getDaysWithRecordingsBatch": {
37056
+ capName: "recording",
37057
+ capScope: "system",
37058
+ addonId: null,
37059
+ access: "view"
37060
+ },
36967
37061
  "recording.getDeviceConfig": {
36968
37062
  capName: "recording",
36969
37063
  capScope: "system",
@@ -39568,6 +39662,11 @@ Object.freeze({
39568
39662
  form: "single",
39569
39663
  optional: false
39570
39664
  }],
39665
+ "pipelineAnalytics.getEventDensityBatch": [{
39666
+ name: "deviceIds",
39667
+ form: "array",
39668
+ optional: false
39669
+ }],
39571
39670
  "pipelineAnalytics.getEventMedia": [{
39572
39671
  name: "deviceId",
39573
39672
  form: "single",
@@ -39983,11 +40082,21 @@ Object.freeze({
39983
40082
  form: "single",
39984
40083
  optional: false
39985
40084
  }],
40085
+ "recording.getAvailabilityBatch": [{
40086
+ name: "deviceIds",
40087
+ form: "array",
40088
+ optional: false
40089
+ }],
39986
40090
  "recording.getDaysWithRecordings": [{
39987
40091
  name: "deviceId",
39988
40092
  form: "single",
39989
40093
  optional: false
39990
40094
  }],
40095
+ "recording.getDaysWithRecordingsBatch": [{
40096
+ name: "deviceIds",
40097
+ form: "array",
40098
+ optional: false
40099
+ }],
39991
40100
  "recording.getDeviceConfig": [{
39992
40101
  name: "deviceId",
39993
40102
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-terminal",
3
- "version": "0.1.56",
3
+ "version": "0.1.57",
4
4
  "description": "Interactive terminal sessions (pty + xterm) as a CamStack addon",
5
5
  "keywords": [
6
6
  "camstack",