@camstack/addon-import-alexa 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
@@ -16118,6 +16118,8 @@ var NcSystemEventKindSchema = _enum([
16118
16118
  "device-offline",
16119
16119
  "device-disabled",
16120
16120
  "device-enabled",
16121
+ "device-battery-low",
16122
+ "device-battery-normal",
16121
16123
  "stream-online",
16122
16124
  "stream-offline",
16123
16125
  "node-online",
@@ -19432,6 +19434,34 @@ var KeyEventsForDeviceSchema = object({
19432
19434
  deviceId: number(),
19433
19435
  events: array(KeyEventSchema).readonly()
19434
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
+ });
19435
19465
  object({
19436
19466
  trackId: string(),
19437
19467
  className: string(),
@@ -19742,12 +19772,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19742
19772
  since: number(),
19743
19773
  until: number(),
19744
19774
  bucketMs: number().int().positive()
19745
- }), array(object({
19746
- bucketStart: number(),
19747
- motion: number().int(),
19748
- object: number().int(),
19749
- audio: number().int()
19750
- })).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({
19751
19781
  deviceId: number(),
19752
19782
  cutoffMs: number()
19753
19783
  }), object({
@@ -28789,6 +28819,39 @@ var RecordingDaysSchema = object({
28789
28819
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28790
28820
  days: array(number())
28791
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
+ });
28792
28855
  var RecordingManifestSchema = object({
28793
28856
  deviceId: number(),
28794
28857
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -29023,6 +29086,13 @@ method(object({
29023
29086
  }), RecordingAvailabilitySchema, {
29024
29087
  kind: "query",
29025
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"
29026
29096
  }), method(object({
29027
29097
  deviceId: number(),
29028
29098
  fromMs: number(),
@@ -29031,6 +29101,14 @@ method(object({
29031
29101
  }), RecordingDaysSchema, {
29032
29102
  kind: "query",
29033
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"
29034
29112
  }), method(object({
29035
29113
  deviceId: number(),
29036
29114
  fromMs: number(),
@@ -35927,6 +36005,12 @@ Object.freeze({
35927
36005
  addonId: null,
35928
36006
  access: "view"
35929
36007
  },
36008
+ "pipelineAnalytics.getEventDensityBatch": {
36009
+ capName: "pipeline-analytics",
36010
+ capScope: "device",
36011
+ addonId: null,
36012
+ access: "view"
36013
+ },
35930
36014
  "pipelineAnalytics.getEventMedia": {
35931
36015
  capName: "pipeline-analytics",
35932
36016
  capScope: "device",
@@ -37049,12 +37133,24 @@ Object.freeze({
37049
37133
  addonId: null,
37050
37134
  access: "view"
37051
37135
  },
37136
+ "recording.getAvailabilityBatch": {
37137
+ capName: "recording",
37138
+ capScope: "system",
37139
+ addonId: null,
37140
+ access: "view"
37141
+ },
37052
37142
  "recording.getDaysWithRecordings": {
37053
37143
  capName: "recording",
37054
37144
  capScope: "system",
37055
37145
  addonId: null,
37056
37146
  access: "view"
37057
37147
  },
37148
+ "recording.getDaysWithRecordingsBatch": {
37149
+ capName: "recording",
37150
+ capScope: "system",
37151
+ addonId: null,
37152
+ access: "view"
37153
+ },
37058
37154
  "recording.getDeviceConfig": {
37059
37155
  capName: "recording",
37060
37156
  capScope: "system",
@@ -39659,6 +39755,11 @@ Object.freeze({
39659
39755
  form: "single",
39660
39756
  optional: false
39661
39757
  }],
39758
+ "pipelineAnalytics.getEventDensityBatch": [{
39759
+ name: "deviceIds",
39760
+ form: "array",
39761
+ optional: false
39762
+ }],
39662
39763
  "pipelineAnalytics.getEventMedia": [{
39663
39764
  name: "deviceId",
39664
39765
  form: "single",
@@ -40074,11 +40175,21 @@ Object.freeze({
40074
40175
  form: "single",
40075
40176
  optional: false
40076
40177
  }],
40178
+ "recording.getAvailabilityBatch": [{
40179
+ name: "deviceIds",
40180
+ form: "array",
40181
+ optional: false
40182
+ }],
40077
40183
  "recording.getDaysWithRecordings": [{
40078
40184
  name: "deviceId",
40079
40185
  form: "single",
40080
40186
  optional: false
40081
40187
  }],
40188
+ "recording.getDaysWithRecordingsBatch": [{
40189
+ name: "deviceIds",
40190
+ form: "array",
40191
+ optional: false
40192
+ }],
40082
40193
  "recording.getDeviceConfig": [{
40083
40194
  name: "deviceId",
40084
40195
  form: "single",
package/dist/addon.mjs CHANGED
@@ -16118,6 +16118,8 @@ var NcSystemEventKindSchema = _enum([
16118
16118
  "device-offline",
16119
16119
  "device-disabled",
16120
16120
  "device-enabled",
16121
+ "device-battery-low",
16122
+ "device-battery-normal",
16121
16123
  "stream-online",
16122
16124
  "stream-offline",
16123
16125
  "node-online",
@@ -19432,6 +19434,34 @@ var KeyEventsForDeviceSchema = object({
19432
19434
  deviceId: number(),
19433
19435
  events: array(KeyEventSchema).readonly()
19434
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
+ });
19435
19465
  object({
19436
19466
  trackId: string(),
19437
19467
  className: string(),
@@ -19742,12 +19772,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19742
19772
  since: number(),
19743
19773
  until: number(),
19744
19774
  bucketMs: number().int().positive()
19745
- }), array(object({
19746
- bucketStart: number(),
19747
- motion: number().int(),
19748
- object: number().int(),
19749
- audio: number().int()
19750
- })).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({
19751
19781
  deviceId: number(),
19752
19782
  cutoffMs: number()
19753
19783
  }), object({
@@ -28789,6 +28819,39 @@ var RecordingDaysSchema = object({
28789
28819
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
28790
28820
  days: array(number())
28791
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
+ });
28792
28855
  var RecordingManifestSchema = object({
28793
28856
  deviceId: number(),
28794
28857
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -29023,6 +29086,13 @@ method(object({
29023
29086
  }), RecordingAvailabilitySchema, {
29024
29087
  kind: "query",
29025
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"
29026
29096
  }), method(object({
29027
29097
  deviceId: number(),
29028
29098
  fromMs: number(),
@@ -29031,6 +29101,14 @@ method(object({
29031
29101
  }), RecordingDaysSchema, {
29032
29102
  kind: "query",
29033
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"
29034
29112
  }), method(object({
29035
29113
  deviceId: number(),
29036
29114
  fromMs: number(),
@@ -35927,6 +36005,12 @@ Object.freeze({
35927
36005
  addonId: null,
35928
36006
  access: "view"
35929
36007
  },
36008
+ "pipelineAnalytics.getEventDensityBatch": {
36009
+ capName: "pipeline-analytics",
36010
+ capScope: "device",
36011
+ addonId: null,
36012
+ access: "view"
36013
+ },
35930
36014
  "pipelineAnalytics.getEventMedia": {
35931
36015
  capName: "pipeline-analytics",
35932
36016
  capScope: "device",
@@ -37049,12 +37133,24 @@ Object.freeze({
37049
37133
  addonId: null,
37050
37134
  access: "view"
37051
37135
  },
37136
+ "recording.getAvailabilityBatch": {
37137
+ capName: "recording",
37138
+ capScope: "system",
37139
+ addonId: null,
37140
+ access: "view"
37141
+ },
37052
37142
  "recording.getDaysWithRecordings": {
37053
37143
  capName: "recording",
37054
37144
  capScope: "system",
37055
37145
  addonId: null,
37056
37146
  access: "view"
37057
37147
  },
37148
+ "recording.getDaysWithRecordingsBatch": {
37149
+ capName: "recording",
37150
+ capScope: "system",
37151
+ addonId: null,
37152
+ access: "view"
37153
+ },
37058
37154
  "recording.getDeviceConfig": {
37059
37155
  capName: "recording",
37060
37156
  capScope: "system",
@@ -39659,6 +39755,11 @@ Object.freeze({
39659
39755
  form: "single",
39660
39756
  optional: false
39661
39757
  }],
39758
+ "pipelineAnalytics.getEventDensityBatch": [{
39759
+ name: "deviceIds",
39760
+ form: "array",
39761
+ optional: false
39762
+ }],
39662
39763
  "pipelineAnalytics.getEventMedia": [{
39663
39764
  name: "deviceId",
39664
39765
  form: "single",
@@ -40074,11 +40175,21 @@ Object.freeze({
40074
40175
  form: "single",
40075
40176
  optional: false
40076
40177
  }],
40178
+ "recording.getAvailabilityBatch": [{
40179
+ name: "deviceIds",
40180
+ form: "array",
40181
+ optional: false
40182
+ }],
40077
40183
  "recording.getDaysWithRecordings": [{
40078
40184
  name: "deviceId",
40079
40185
  form: "single",
40080
40186
  optional: false
40081
40187
  }],
40188
+ "recording.getDaysWithRecordingsBatch": [{
40189
+ name: "deviceIds",
40190
+ form: "array",
40191
+ optional: false
40192
+ }],
40082
40193
  "recording.getDeviceConfig": [{
40083
40194
  name: "deviceId",
40084
40195
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-import-alexa",
3
- "version": "0.2.49",
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",