@camstack/addon-export-alexa 1.2.56 → 1.2.58

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.
@@ -15868,6 +15868,8 @@ var NcSystemEventKindSchema = _enum([
15868
15868
  "device-offline",
15869
15869
  "device-disabled",
15870
15870
  "device-enabled",
15871
+ "device-battery-low",
15872
+ "device-battery-normal",
15871
15873
  "stream-online",
15872
15874
  "stream-offline",
15873
15875
  "node-online",
@@ -19158,6 +19160,34 @@ var KeyEventsForDeviceSchema = object({
19158
19160
  deviceId: number(),
19159
19161
  events: array(KeyEventSchema).readonly()
19160
19162
  });
19163
+ /** One non-empty bucket of the timeline histogram. */
19164
+ var EventDensityBucketSchema = object({
19165
+ bucketStart: number(),
19166
+ motion: number().int(),
19167
+ object: number().int(),
19168
+ audio: number().int()
19169
+ });
19170
+ /**
19171
+ * One camera's row in a `getEventDensityBatch` answer.
19172
+ *
19173
+ * TWO facts, and the timeline draws them differently:
19174
+ *
19175
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
19176
+ * claim: read, and nothing happened in the window.
19177
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
19178
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
19179
+ * not quiet.
19180
+ *
19181
+ * Fanned out per camera the difference was free — one query rejected while the
19182
+ * others resolved — and collapsing to a batch is the exact moment it is lost
19183
+ * silently. Every requested id gets a row: a caller that asked for twelve and
19184
+ * got eleven cannot tell which one is missing, or that any is.
19185
+ */
19186
+ var EventDensityForDeviceSchema = object({
19187
+ deviceId: number(),
19188
+ read: _enum(["read", "unreadable"]),
19189
+ buckets: array(EventDensityBucketSchema).readonly()
19190
+ });
19161
19191
  object({
19162
19192
  trackId: string(),
19163
19193
  className: string(),
@@ -19468,12 +19498,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19468
19498
  since: number(),
19469
19499
  until: number(),
19470
19500
  bucketMs: number().int().positive()
19471
- }), array(object({
19472
- bucketStart: number(),
19473
- motion: number().int(),
19474
- object: number().int(),
19475
- audio: number().int()
19476
- })).readonly()), method(object({
19501
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19502
+ deviceIds: array(number()).min(1).max(200),
19503
+ since: number(),
19504
+ until: number(),
19505
+ bucketMs: number().int().positive()
19506
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19477
19507
  deviceId: number(),
19478
19508
  cutoffMs: number()
19479
19509
  }), object({
@@ -26783,6 +26813,39 @@ var RecordingDaysSchema = object({
26783
26813
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26784
26814
  days: array(number())
26785
26815
  });
26816
+ /**
26817
+ * One camera's row in a `getAvailabilityBatch` answer.
26818
+ *
26819
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
26820
+ * batch collapses the transport, not the work — plus the one thing the singular
26821
+ * method never had to say:
26822
+ *
26823
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
26824
+ * no footage in the window", which is a real claim.
26825
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
26826
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
26827
+ * that emptiness means NOTHING.
26828
+ *
26829
+ * A timeline that renders the second as the first tells an operator there is no
26830
+ * footage when the truth is that nobody looked.
26831
+ */
26832
+ var RecordingAvailabilityForDeviceSchema = object({
26833
+ deviceId: number(),
26834
+ read: _enum(["read", "unreadable"]),
26835
+ ranges: array(RecordingRangeSchema).readonly()
26836
+ });
26837
+ /**
26838
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
26839
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
26840
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
26841
+ * the date-picker's day dots must not spell them the same.
26842
+ */
26843
+ var RecordingDaysForDeviceSchema = object({
26844
+ deviceId: number(),
26845
+ read: _enum(["read", "unreadable"]),
26846
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26847
+ days: array(number()).readonly()
26848
+ });
26786
26849
  var RecordingManifestSchema = object({
26787
26850
  deviceId: number(),
26788
26851
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -27017,6 +27080,13 @@ method(object({
27017
27080
  }), RecordingAvailabilitySchema, {
27018
27081
  kind: "query",
27019
27082
  auth: "protected"
27083
+ }), method(object({
27084
+ deviceIds: array(number()).min(1).max(200),
27085
+ fromMs: number(),
27086
+ toMs: number()
27087
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
27088
+ kind: "query",
27089
+ auth: "protected"
27020
27090
  }), method(object({
27021
27091
  deviceId: number(),
27022
27092
  fromMs: number(),
@@ -27025,6 +27095,14 @@ method(object({
27025
27095
  }), RecordingDaysSchema, {
27026
27096
  kind: "query",
27027
27097
  auth: "protected"
27098
+ }), method(object({
27099
+ deviceIds: array(number()).min(1).max(200),
27100
+ fromMs: number(),
27101
+ toMs: number(),
27102
+ tzOffsetMinutes: number()
27103
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
27104
+ kind: "query",
27105
+ auth: "protected"
27028
27106
  }), method(object({
27029
27107
  deviceId: number(),
27030
27108
  fromMs: number(),
@@ -32222,6 +32300,12 @@ Object.freeze({
32222
32300
  addonId: null,
32223
32301
  access: "view"
32224
32302
  },
32303
+ "pipelineAnalytics.getEventDensityBatch": {
32304
+ capName: "pipeline-analytics",
32305
+ capScope: "device",
32306
+ addonId: null,
32307
+ access: "view"
32308
+ },
32225
32309
  "pipelineAnalytics.getEventMedia": {
32226
32310
  capName: "pipeline-analytics",
32227
32311
  capScope: "device",
@@ -33344,12 +33428,24 @@ Object.freeze({
33344
33428
  addonId: null,
33345
33429
  access: "view"
33346
33430
  },
33431
+ "recording.getAvailabilityBatch": {
33432
+ capName: "recording",
33433
+ capScope: "system",
33434
+ addonId: null,
33435
+ access: "view"
33436
+ },
33347
33437
  "recording.getDaysWithRecordings": {
33348
33438
  capName: "recording",
33349
33439
  capScope: "system",
33350
33440
  addonId: null,
33351
33441
  access: "view"
33352
33442
  },
33443
+ "recording.getDaysWithRecordingsBatch": {
33444
+ capName: "recording",
33445
+ capScope: "system",
33446
+ addonId: null,
33447
+ access: "view"
33448
+ },
33353
33449
  "recording.getDeviceConfig": {
33354
33450
  capName: "recording",
33355
33451
  capScope: "system",
@@ -35954,6 +36050,11 @@ Object.freeze({
35954
36050
  form: "single",
35955
36051
  optional: false
35956
36052
  }],
36053
+ "pipelineAnalytics.getEventDensityBatch": [{
36054
+ name: "deviceIds",
36055
+ form: "array",
36056
+ optional: false
36057
+ }],
35957
36058
  "pipelineAnalytics.getEventMedia": [{
35958
36059
  name: "deviceId",
35959
36060
  form: "single",
@@ -36369,11 +36470,21 @@ Object.freeze({
36369
36470
  form: "single",
36370
36471
  optional: false
36371
36472
  }],
36473
+ "recording.getAvailabilityBatch": [{
36474
+ name: "deviceIds",
36475
+ form: "array",
36476
+ optional: false
36477
+ }],
36372
36478
  "recording.getDaysWithRecordings": [{
36373
36479
  name: "deviceId",
36374
36480
  form: "single",
36375
36481
  optional: false
36376
36482
  }],
36483
+ "recording.getDaysWithRecordingsBatch": [{
36484
+ name: "deviceIds",
36485
+ form: "array",
36486
+ optional: false
36487
+ }],
36377
36488
  "recording.getDeviceConfig": [{
36378
36489
  name: "deviceId",
36379
36490
  form: "single",
@@ -15841,6 +15841,8 @@ var NcSystemEventKindSchema = _enum([
15841
15841
  "device-offline",
15842
15842
  "device-disabled",
15843
15843
  "device-enabled",
15844
+ "device-battery-low",
15845
+ "device-battery-normal",
15844
15846
  "stream-online",
15845
15847
  "stream-offline",
15846
15848
  "node-online",
@@ -19131,6 +19133,34 @@ var KeyEventsForDeviceSchema = object({
19131
19133
  deviceId: number(),
19132
19134
  events: array(KeyEventSchema).readonly()
19133
19135
  });
19136
+ /** One non-empty bucket of the timeline histogram. */
19137
+ var EventDensityBucketSchema = object({
19138
+ bucketStart: number(),
19139
+ motion: number().int(),
19140
+ object: number().int(),
19141
+ audio: number().int()
19142
+ });
19143
+ /**
19144
+ * One camera's row in a `getEventDensityBatch` answer.
19145
+ *
19146
+ * TWO facts, and the timeline draws them differently:
19147
+ *
19148
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
19149
+ * claim: read, and nothing happened in the window.
19150
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
19151
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
19152
+ * not quiet.
19153
+ *
19154
+ * Fanned out per camera the difference was free — one query rejected while the
19155
+ * others resolved — and collapsing to a batch is the exact moment it is lost
19156
+ * silently. Every requested id gets a row: a caller that asked for twelve and
19157
+ * got eleven cannot tell which one is missing, or that any is.
19158
+ */
19159
+ var EventDensityForDeviceSchema = object({
19160
+ deviceId: number(),
19161
+ read: _enum(["read", "unreadable"]),
19162
+ buckets: array(EventDensityBucketSchema).readonly()
19163
+ });
19134
19164
  object({
19135
19165
  trackId: string(),
19136
19166
  className: string(),
@@ -19441,12 +19471,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
19441
19471
  since: number(),
19442
19472
  until: number(),
19443
19473
  bucketMs: number().int().positive()
19444
- }), array(object({
19445
- bucketStart: number(),
19446
- motion: number().int(),
19447
- object: number().int(),
19448
- audio: number().int()
19449
- })).readonly()), method(object({
19474
+ }), array(EventDensityBucketSchema).readonly()), method(object({
19475
+ deviceIds: array(number()).min(1).max(200),
19476
+ since: number(),
19477
+ until: number(),
19478
+ bucketMs: number().int().positive()
19479
+ }), array(EventDensityForDeviceSchema).readonly()), method(object({
19450
19480
  deviceId: number(),
19451
19481
  cutoffMs: number()
19452
19482
  }), object({
@@ -26756,6 +26786,39 @@ var RecordingDaysSchema = object({
26756
26786
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26757
26787
  days: array(number())
26758
26788
  });
26789
+ /**
26790
+ * One camera's row in a `getAvailabilityBatch` answer.
26791
+ *
26792
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
26793
+ * batch collapses the transport, not the work — plus the one thing the singular
26794
+ * method never had to say:
26795
+ *
26796
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
26797
+ * no footage in the window", which is a real claim.
26798
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
26799
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
26800
+ * that emptiness means NOTHING.
26801
+ *
26802
+ * A timeline that renders the second as the first tells an operator there is no
26803
+ * footage when the truth is that nobody looked.
26804
+ */
26805
+ var RecordingAvailabilityForDeviceSchema = object({
26806
+ deviceId: number(),
26807
+ read: _enum(["read", "unreadable"]),
26808
+ ranges: array(RecordingRangeSchema).readonly()
26809
+ });
26810
+ /**
26811
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
26812
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
26813
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
26814
+ * the date-picker's day dots must not spell them the same.
26815
+ */
26816
+ var RecordingDaysForDeviceSchema = object({
26817
+ deviceId: number(),
26818
+ read: _enum(["read", "unreadable"]),
26819
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
26820
+ days: array(number()).readonly()
26821
+ });
26759
26822
  var RecordingManifestSchema = object({
26760
26823
  deviceId: number(),
26761
26824
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -26990,6 +27053,13 @@ method(object({
26990
27053
  }), RecordingAvailabilitySchema, {
26991
27054
  kind: "query",
26992
27055
  auth: "protected"
27056
+ }), method(object({
27057
+ deviceIds: array(number()).min(1).max(200),
27058
+ fromMs: number(),
27059
+ toMs: number()
27060
+ }), array(RecordingAvailabilityForDeviceSchema).readonly(), {
27061
+ kind: "query",
27062
+ auth: "protected"
26993
27063
  }), method(object({
26994
27064
  deviceId: number(),
26995
27065
  fromMs: number(),
@@ -26998,6 +27068,14 @@ method(object({
26998
27068
  }), RecordingDaysSchema, {
26999
27069
  kind: "query",
27000
27070
  auth: "protected"
27071
+ }), method(object({
27072
+ deviceIds: array(number()).min(1).max(200),
27073
+ fromMs: number(),
27074
+ toMs: number(),
27075
+ tzOffsetMinutes: number()
27076
+ }), array(RecordingDaysForDeviceSchema).readonly(), {
27077
+ kind: "query",
27078
+ auth: "protected"
27001
27079
  }), method(object({
27002
27080
  deviceId: number(),
27003
27081
  fromMs: number(),
@@ -32195,6 +32273,12 @@ Object.freeze({
32195
32273
  addonId: null,
32196
32274
  access: "view"
32197
32275
  },
32276
+ "pipelineAnalytics.getEventDensityBatch": {
32277
+ capName: "pipeline-analytics",
32278
+ capScope: "device",
32279
+ addonId: null,
32280
+ access: "view"
32281
+ },
32198
32282
  "pipelineAnalytics.getEventMedia": {
32199
32283
  capName: "pipeline-analytics",
32200
32284
  capScope: "device",
@@ -33317,12 +33401,24 @@ Object.freeze({
33317
33401
  addonId: null,
33318
33402
  access: "view"
33319
33403
  },
33404
+ "recording.getAvailabilityBatch": {
33405
+ capName: "recording",
33406
+ capScope: "system",
33407
+ addonId: null,
33408
+ access: "view"
33409
+ },
33320
33410
  "recording.getDaysWithRecordings": {
33321
33411
  capName: "recording",
33322
33412
  capScope: "system",
33323
33413
  addonId: null,
33324
33414
  access: "view"
33325
33415
  },
33416
+ "recording.getDaysWithRecordingsBatch": {
33417
+ capName: "recording",
33418
+ capScope: "system",
33419
+ addonId: null,
33420
+ access: "view"
33421
+ },
33326
33422
  "recording.getDeviceConfig": {
33327
33423
  capName: "recording",
33328
33424
  capScope: "system",
@@ -35927,6 +36023,11 @@ Object.freeze({
35927
36023
  form: "single",
35928
36024
  optional: false
35929
36025
  }],
36026
+ "pipelineAnalytics.getEventDensityBatch": [{
36027
+ name: "deviceIds",
36028
+ form: "array",
36029
+ optional: false
36030
+ }],
35930
36031
  "pipelineAnalytics.getEventMedia": [{
35931
36032
  name: "deviceId",
35932
36033
  form: "single",
@@ -36342,11 +36443,21 @@ Object.freeze({
36342
36443
  form: "single",
36343
36444
  optional: false
36344
36445
  }],
36446
+ "recording.getAvailabilityBatch": [{
36447
+ name: "deviceIds",
36448
+ form: "array",
36449
+ optional: false
36450
+ }],
36345
36451
  "recording.getDaysWithRecordings": [{
36346
36452
  name: "deviceId",
36347
36453
  form: "single",
36348
36454
  optional: false
36349
36455
  }],
36456
+ "recording.getDaysWithRecordingsBatch": [{
36457
+ name: "deviceIds",
36458
+ form: "array",
36459
+ optional: false
36460
+ }],
36350
36461
  "recording.getDeviceConfig": [{
36351
36462
  name: "deviceId",
36352
36463
  form: "single",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-export-alexa",
3
- "version": "1.2.56",
3
+ "version": "1.2.58",
4
4
  "description": "Alexa Smart Home Skill export — hub-side OAuth provider + directive handler. The companion AWS Lambda forwards Alexa directives to this addon's /addon/export-alexa/directive endpoint.",
5
5
  "keywords": [
6
6
  "camstack",