@camstack/addon-import-alexa 0.2.50 → 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
@@ -19434,6 +19434,34 @@ var KeyEventsForDeviceSchema = object({
19434
19434
  deviceId: number(),
19435
19435
  events: array(KeyEventSchema).readonly()
19436
19436
  });
19437
+ /** One non-empty bucket of the timeline histogram. */
19438
+ var EventDensityBucketSchema = object({
19439
+ bucketStart: number(),
19440
+ motion: number().int(),
19441
+ object: number().int(),
19442
+ audio: number().int()
19443
+ });
19444
+ /**
19445
+ * One camera's row in a `getEventDensityBatch` answer.
19446
+ *
19447
+ * TWO facts, and the timeline draws them differently:
19448
+ *
19449
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
19450
+ * claim: read, and nothing happened in the window.
19451
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
19452
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
19453
+ * not quiet.
19454
+ *
19455
+ * Fanned out per camera the difference was free — one query rejected while the
19456
+ * others resolved — and collapsing to a batch is the exact moment it is lost
19457
+ * silently. Every requested id gets a row: a caller that asked for twelve and
19458
+ * got eleven cannot tell which one is missing, or that any is.
19459
+ */
19460
+ var EventDensityForDeviceSchema = object({
19461
+ deviceId: number(),
19462
+ read: _enum(["read", "unreadable"]),
19463
+ buckets: array(EventDensityBucketSchema).readonly()
19464
+ });
19437
19465
  object({
19438
19466
  trackId: string(),
19439
19467
  className: string(),
@@ -19744,12 +19772,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19744
19772
  since: number(),
19745
19773
  until: number(),
19746
19774
  bucketMs: number().int().positive()
19747
- }), array(object({
19748
- bucketStart: number(),
19749
- motion: number().int(),
19750
- object: number().int(),
19751
- audio: number().int()
19752
- })).readonly()), method(object({
19775
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19776
+ deviceIds: array(number()).min(1).max(200),
19777
+ since: number(),
19778
+ until: number(),
19779
+ bucketMs: number().int().positive()
19780
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19753
19781
  deviceId: number(),
19754
19782
  cutoffMs: number()
19755
19783
  }), object({
@@ -28791,6 +28819,39 @@ var RecordingDaysSchema = object({
28791
28819
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28792
28820
  days: array(number())
28793
28821
  });
28822
+ /**
28823
+ * One camera's row in a `getAvailabilityBatch` answer.
28824
+ *
28825
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
28826
+ * batch collapses the transport, not the work — plus the one thing the singular
28827
+ * method never had to say:
28828
+ *
28829
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
28830
+ * no footage in the window", which is a real claim.
28831
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
28832
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
28833
+ * that emptiness means NOTHING.
28834
+ *
28835
+ * A timeline that renders the second as the first tells an operator there is no
28836
+ * footage when the truth is that nobody looked.
28837
+ */
28838
+ var RecordingAvailabilityForDeviceSchema = object({
28839
+ deviceId: number(),
28840
+ read: _enum(["read", "unreadable"]),
28841
+ ranges: array(RecordingRangeSchema).readonly()
28842
+ });
28843
+ /**
28844
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
28845
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
28846
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
28847
+ * the date-picker's day dots must not spell them the same.
28848
+ */
28849
+ var RecordingDaysForDeviceSchema = object({
28850
+ deviceId: number(),
28851
+ read: _enum(["read", "unreadable"]),
28852
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28853
+ days: array(number()).readonly()
28854
+ });
28794
28855
  var RecordingManifestSchema = object({
28795
28856
  deviceId: number(),
28796
28857
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -29025,6 +29086,13 @@ method(object({
29025
29086
  }), RecordingAvailabilitySchema, {
29026
29087
  kind: "query",
29027
29088
  auth: "protected"
29089
+ }), method(object({
29090
+ deviceIds: array(number()).min(1).max(200),
29091
+ fromMs: number(),
29092
+ toMs: number()
29093
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
29094
+ kind: "query",
29095
+ auth: "protected"
29028
29096
  }), method(object({
29029
29097
  deviceId: number(),
29030
29098
  fromMs: number(),
@@ -29033,6 +29101,14 @@ method(object({
29033
29101
  }), RecordingDaysSchema, {
29034
29102
  kind: "query",
29035
29103
  auth: "protected"
29104
+ }), method(object({
29105
+ deviceIds: array(number()).min(1).max(200),
29106
+ fromMs: number(),
29107
+ toMs: number(),
29108
+ tzOffsetMinutes: number()
29109
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
29110
+ kind: "query",
29111
+ auth: "protected"
29036
29112
  }), method(object({
29037
29113
  deviceId: number(),
29038
29114
  fromMs: number(),
@@ -35929,6 +36005,12 @@ Object.freeze({
35929
36005
  addonId: null,
35930
36006
  access: "view"
35931
36007
  },
36008
+ "pipelineAnalytics.getEventDensityBatch": {
36009
+ capName: "pipeline-analytics",
36010
+ capScope: "device",
36011
+ addonId: null,
36012
+ access: "view"
36013
+ },
35932
36014
  "pipelineAnalytics.getEventMedia": {
35933
36015
  capName: "pipeline-analytics",
35934
36016
  capScope: "device",
@@ -37051,12 +37133,24 @@ Object.freeze({
37051
37133
  addonId: null,
37052
37134
  access: "view"
37053
37135
  },
37136
+ "recording.getAvailabilityBatch": {
37137
+ capName: "recording",
37138
+ capScope: "system",
37139
+ addonId: null,
37140
+ access: "view"
37141
+ },
37054
37142
  "recording.getDaysWithRecordings": {
37055
37143
  capName: "recording",
37056
37144
  capScope: "system",
37057
37145
  addonId: null,
37058
37146
  access: "view"
37059
37147
  },
37148
+ "recording.getDaysWithRecordingsBatch": {
37149
+ capName: "recording",
37150
+ capScope: "system",
37151
+ addonId: null,
37152
+ access: "view"
37153
+ },
37060
37154
  "recording.getDeviceConfig": {
37061
37155
  capName: "recording",
37062
37156
  capScope: "system",
@@ -39661,6 +39755,11 @@ Object.freeze({
39661
39755
  form: "single",
39662
39756
  optional: false
39663
39757
  }],
39758
+ "pipelineAnalytics.getEventDensityBatch": [{
39759
+ name: "deviceIds",
39760
+ form: "array",
39761
+ optional: false
39762
+ }],
39664
39763
  "pipelineAnalytics.getEventMedia": [{
39665
39764
  name: "deviceId",
39666
39765
  form: "single",
@@ -40076,11 +40175,21 @@ Object.freeze({
40076
40175
  form: "single",
40077
40176
  optional: false
40078
40177
  }],
40178
+ "recording.getAvailabilityBatch": [{
40179
+ name: "deviceIds",
40180
+ form: "array",
40181
+ optional: false
40182
+ }],
40079
40183
  "recording.getDaysWithRecordings": [{
40080
40184
  name: "deviceId",
40081
40185
  form: "single",
40082
40186
  optional: false
40083
40187
  }],
40188
+ "recording.getDaysWithRecordingsBatch": [{
40189
+ name: "deviceIds",
40190
+ form: "array",
40191
+ optional: false
40192
+ }],
40084
40193
  "recording.getDeviceConfig": [{
40085
40194
  name: "deviceId",
40086
40195
  form: "single",
package/dist/addon.mjs CHANGED
@@ -19434,6 +19434,34 @@ var KeyEventsForDeviceSchema = object({
19434
19434
  deviceId: number(),
19435
19435
  events: array(KeyEventSchema).readonly()
19436
19436
  });
19437
+ /** One non-empty bucket of the timeline histogram. */
19438
+ var EventDensityBucketSchema = object({
19439
+ bucketStart: number(),
19440
+ motion: number().int(),
19441
+ object: number().int(),
19442
+ audio: number().int()
19443
+ });
19444
+ /**
19445
+ * One camera's row in a `getEventDensityBatch` answer.
19446
+ *
19447
+ * TWO facts, and the timeline draws them differently:
19448
+ *
19449
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
19450
+ * claim: read, and nothing happened in the window.
19451
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
19452
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
19453
+ * not quiet.
19454
+ *
19455
+ * Fanned out per camera the difference was free — one query rejected while the
19456
+ * others resolved — and collapsing to a batch is the exact moment it is lost
19457
+ * silently. Every requested id gets a row: a caller that asked for twelve and
19458
+ * got eleven cannot tell which one is missing, or that any is.
19459
+ */
19460
+ var EventDensityForDeviceSchema = object({
19461
+ deviceId: number(),
19462
+ read: _enum(["read", "unreadable"]),
19463
+ buckets: array(EventDensityBucketSchema).readonly()
19464
+ });
19437
19465
  object({
19438
19466
  trackId: string(),
19439
19467
  className: string(),
@@ -19744,12 +19772,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19744
19772
  since: number(),
19745
19773
  until: number(),
19746
19774
  bucketMs: number().int().positive()
19747
- }), array(object({
19748
- bucketStart: number(),
19749
- motion: number().int(),
19750
- object: number().int(),
19751
- audio: number().int()
19752
- })).readonly()), method(object({
19775
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19776
+ deviceIds: array(number()).min(1).max(200),
19777
+ since: number(),
19778
+ until: number(),
19779
+ bucketMs: number().int().positive()
19780
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19753
19781
  deviceId: number(),
19754
19782
  cutoffMs: number()
19755
19783
  }), object({
@@ -28791,6 +28819,39 @@ var RecordingDaysSchema = object({
28791
28819
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28792
28820
  days: array(number())
28793
28821
  });
28822
+ /**
28823
+ * One camera's row in a `getAvailabilityBatch` answer.
28824
+ *
28825
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
28826
+ * batch collapses the transport, not the work — plus the one thing the singular
28827
+ * method never had to say:
28828
+ *
28829
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
28830
+ * no footage in the window", which is a real claim.
28831
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
28832
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
28833
+ * that emptiness means NOTHING.
28834
+ *
28835
+ * A timeline that renders the second as the first tells an operator there is no
28836
+ * footage when the truth is that nobody looked.
28837
+ */
28838
+ var RecordingAvailabilityForDeviceSchema = object({
28839
+ deviceId: number(),
28840
+ read: _enum(["read", "unreadable"]),
28841
+ ranges: array(RecordingRangeSchema).readonly()
28842
+ });
28843
+ /**
28844
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
28845
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
28846
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
28847
+ * the date-picker's day dots must not spell them the same.
28848
+ */
28849
+ var RecordingDaysForDeviceSchema = object({
28850
+ deviceId: number(),
28851
+ read: _enum(["read", "unreadable"]),
28852
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28853
+ days: array(number()).readonly()
28854
+ });
28794
28855
  var RecordingManifestSchema = object({
28795
28856
  deviceId: number(),
28796
28857
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -29025,6 +29086,13 @@ method(object({
29025
29086
  }), RecordingAvailabilitySchema, {
29026
29087
  kind: "query",
29027
29088
  auth: "protected"
29089
+ }), method(object({
29090
+ deviceIds: array(number()).min(1).max(200),
29091
+ fromMs: number(),
29092
+ toMs: number()
29093
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
29094
+ kind: "query",
29095
+ auth: "protected"
29028
29096
  }), method(object({
29029
29097
  deviceId: number(),
29030
29098
  fromMs: number(),
@@ -29033,6 +29101,14 @@ method(object({
29033
29101
  }), RecordingDaysSchema, {
29034
29102
  kind: "query",
29035
29103
  auth: "protected"
29104
+ }), method(object({
29105
+ deviceIds: array(number()).min(1).max(200),
29106
+ fromMs: number(),
29107
+ toMs: number(),
29108
+ tzOffsetMinutes: number()
29109
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
29110
+ kind: "query",
29111
+ auth: "protected"
29036
29112
  }), method(object({
29037
29113
  deviceId: number(),
29038
29114
  fromMs: number(),
@@ -35929,6 +36005,12 @@ Object.freeze({
35929
36005
  addonId: null,
35930
36006
  access: "view"
35931
36007
  },
36008
+ "pipelineAnalytics.getEventDensityBatch": {
36009
+ capName: "pipeline-analytics",
36010
+ capScope: "device",
36011
+ addonId: null,
36012
+ access: "view"
36013
+ },
35932
36014
  "pipelineAnalytics.getEventMedia": {
35933
36015
  capName: "pipeline-analytics",
35934
36016
  capScope: "device",
@@ -37051,12 +37133,24 @@ Object.freeze({
37051
37133
  addonId: null,
37052
37134
  access: "view"
37053
37135
  },
37136
+ "recording.getAvailabilityBatch": {
37137
+ capName: "recording",
37138
+ capScope: "system",
37139
+ addonId: null,
37140
+ access: "view"
37141
+ },
37054
37142
  "recording.getDaysWithRecordings": {
37055
37143
  capName: "recording",
37056
37144
  capScope: "system",
37057
37145
  addonId: null,
37058
37146
  access: "view"
37059
37147
  },
37148
+ "recording.getDaysWithRecordingsBatch": {
37149
+ capName: "recording",
37150
+ capScope: "system",
37151
+ addonId: null,
37152
+ access: "view"
37153
+ },
37060
37154
  "recording.getDeviceConfig": {
37061
37155
  capName: "recording",
37062
37156
  capScope: "system",
@@ -39661,6 +39755,11 @@ Object.freeze({
39661
39755
  form: "single",
39662
39756
  optional: false
39663
39757
  }],
39758
+ "pipelineAnalytics.getEventDensityBatch": [{
39759
+ name: "deviceIds",
39760
+ form: "array",
39761
+ optional: false
39762
+ }],
39664
39763
  "pipelineAnalytics.getEventMedia": [{
39665
39764
  name: "deviceId",
39666
39765
  form: "single",
@@ -40076,11 +40175,21 @@ Object.freeze({
40076
40175
  form: "single",
40077
40176
  optional: false
40078
40177
  }],
40178
+ "recording.getAvailabilityBatch": [{
40179
+ name: "deviceIds",
40180
+ form: "array",
40181
+ optional: false
40182
+ }],
40079
40183
  "recording.getDaysWithRecordings": [{
40080
40184
  name: "deviceId",
40081
40185
  form: "single",
40082
40186
  optional: false
40083
40187
  }],
40188
+ "recording.getDaysWithRecordingsBatch": [{
40189
+ name: "deviceIds",
40190
+ form: "array",
40191
+ optional: false
40192
+ }],
40084
40193
  "recording.getDeviceConfig": [{
40085
40194
  name: "deviceId",
40086
40195
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-import-alexa",
3
- "version": "0.2.50",
3
+ "version": "0.2.51",
4
4
  "description": "Alexa device-import provider for CamStack — imports the smart-home devices in a user's Alexa account via the unofficial alexa-remote2 cookie/token client (the inverse of the Alexa exporter)",
5
5
  "keywords": [
6
6
  "camstack",