@camstack/addon-export-alexa 1.2.57 → 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.
- package/dist/export-alexa.addon.js +115 -6
- package/dist/export-alexa.addon.mjs +115 -6
- package/package.json +1 -1
|
@@ -19160,6 +19160,34 @@ var KeyEventsForDeviceSchema = object({
|
|
|
19160
19160
|
deviceId: number(),
|
|
19161
19161
|
events: array(KeyEventSchema).readonly()
|
|
19162
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
|
+
});
|
|
19163
19191
|
object({
|
|
19164
19192
|
trackId: string(),
|
|
19165
19193
|
className: string(),
|
|
@@ -19470,12 +19498,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19470
19498
|
since: number(),
|
|
19471
19499
|
until: number(),
|
|
19472
19500
|
bucketMs: number().int().positive()
|
|
19473
|
-
}), array(object({
|
|
19474
|
-
|
|
19475
|
-
|
|
19476
|
-
|
|
19477
|
-
|
|
19478
|
-
})).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({
|
|
19479
19507
|
deviceId: number(),
|
|
19480
19508
|
cutoffMs: number()
|
|
19481
19509
|
}), object({
|
|
@@ -26785,6 +26813,39 @@ var RecordingDaysSchema = object({
|
|
|
26785
26813
|
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
26786
26814
|
days: array(number())
|
|
26787
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
|
+
});
|
|
26788
26849
|
var RecordingManifestSchema = object({
|
|
26789
26850
|
deviceId: number(),
|
|
26790
26851
|
/** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
|
|
@@ -27019,6 +27080,13 @@ method(object({
|
|
|
27019
27080
|
}), RecordingAvailabilitySchema, {
|
|
27020
27081
|
kind: "query",
|
|
27021
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"
|
|
27022
27090
|
}), method(object({
|
|
27023
27091
|
deviceId: number(),
|
|
27024
27092
|
fromMs: number(),
|
|
@@ -27027,6 +27095,14 @@ method(object({
|
|
|
27027
27095
|
}), RecordingDaysSchema, {
|
|
27028
27096
|
kind: "query",
|
|
27029
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"
|
|
27030
27106
|
}), method(object({
|
|
27031
27107
|
deviceId: number(),
|
|
27032
27108
|
fromMs: number(),
|
|
@@ -32224,6 +32300,12 @@ Object.freeze({
|
|
|
32224
32300
|
addonId: null,
|
|
32225
32301
|
access: "view"
|
|
32226
32302
|
},
|
|
32303
|
+
"pipelineAnalytics.getEventDensityBatch": {
|
|
32304
|
+
capName: "pipeline-analytics",
|
|
32305
|
+
capScope: "device",
|
|
32306
|
+
addonId: null,
|
|
32307
|
+
access: "view"
|
|
32308
|
+
},
|
|
32227
32309
|
"pipelineAnalytics.getEventMedia": {
|
|
32228
32310
|
capName: "pipeline-analytics",
|
|
32229
32311
|
capScope: "device",
|
|
@@ -33346,12 +33428,24 @@ Object.freeze({
|
|
|
33346
33428
|
addonId: null,
|
|
33347
33429
|
access: "view"
|
|
33348
33430
|
},
|
|
33431
|
+
"recording.getAvailabilityBatch": {
|
|
33432
|
+
capName: "recording",
|
|
33433
|
+
capScope: "system",
|
|
33434
|
+
addonId: null,
|
|
33435
|
+
access: "view"
|
|
33436
|
+
},
|
|
33349
33437
|
"recording.getDaysWithRecordings": {
|
|
33350
33438
|
capName: "recording",
|
|
33351
33439
|
capScope: "system",
|
|
33352
33440
|
addonId: null,
|
|
33353
33441
|
access: "view"
|
|
33354
33442
|
},
|
|
33443
|
+
"recording.getDaysWithRecordingsBatch": {
|
|
33444
|
+
capName: "recording",
|
|
33445
|
+
capScope: "system",
|
|
33446
|
+
addonId: null,
|
|
33447
|
+
access: "view"
|
|
33448
|
+
},
|
|
33355
33449
|
"recording.getDeviceConfig": {
|
|
33356
33450
|
capName: "recording",
|
|
33357
33451
|
capScope: "system",
|
|
@@ -35956,6 +36050,11 @@ Object.freeze({
|
|
|
35956
36050
|
form: "single",
|
|
35957
36051
|
optional: false
|
|
35958
36052
|
}],
|
|
36053
|
+
"pipelineAnalytics.getEventDensityBatch": [{
|
|
36054
|
+
name: "deviceIds",
|
|
36055
|
+
form: "array",
|
|
36056
|
+
optional: false
|
|
36057
|
+
}],
|
|
35959
36058
|
"pipelineAnalytics.getEventMedia": [{
|
|
35960
36059
|
name: "deviceId",
|
|
35961
36060
|
form: "single",
|
|
@@ -36371,11 +36470,21 @@ Object.freeze({
|
|
|
36371
36470
|
form: "single",
|
|
36372
36471
|
optional: false
|
|
36373
36472
|
}],
|
|
36473
|
+
"recording.getAvailabilityBatch": [{
|
|
36474
|
+
name: "deviceIds",
|
|
36475
|
+
form: "array",
|
|
36476
|
+
optional: false
|
|
36477
|
+
}],
|
|
36374
36478
|
"recording.getDaysWithRecordings": [{
|
|
36375
36479
|
name: "deviceId",
|
|
36376
36480
|
form: "single",
|
|
36377
36481
|
optional: false
|
|
36378
36482
|
}],
|
|
36483
|
+
"recording.getDaysWithRecordingsBatch": [{
|
|
36484
|
+
name: "deviceIds",
|
|
36485
|
+
form: "array",
|
|
36486
|
+
optional: false
|
|
36487
|
+
}],
|
|
36379
36488
|
"recording.getDeviceConfig": [{
|
|
36380
36489
|
name: "deviceId",
|
|
36381
36490
|
form: "single",
|
|
@@ -19133,6 +19133,34 @@ var KeyEventsForDeviceSchema = object({
|
|
|
19133
19133
|
deviceId: number(),
|
|
19134
19134
|
events: array(KeyEventSchema).readonly()
|
|
19135
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
|
+
});
|
|
19136
19164
|
object({
|
|
19137
19165
|
trackId: string(),
|
|
19138
19166
|
className: string(),
|
|
@@ -19443,12 +19471,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19443
19471
|
since: number(),
|
|
19444
19472
|
until: number(),
|
|
19445
19473
|
bucketMs: number().int().positive()
|
|
19446
|
-
}), array(object({
|
|
19447
|
-
|
|
19448
|
-
|
|
19449
|
-
|
|
19450
|
-
|
|
19451
|
-
})).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({
|
|
19452
19480
|
deviceId: number(),
|
|
19453
19481
|
cutoffMs: number()
|
|
19454
19482
|
}), object({
|
|
@@ -26758,6 +26786,39 @@ var RecordingDaysSchema = object({
|
|
|
26758
26786
|
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
26759
26787
|
days: array(number())
|
|
26760
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
|
+
});
|
|
26761
26822
|
var RecordingManifestSchema = object({
|
|
26762
26823
|
deviceId: number(),
|
|
26763
26824
|
/** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
|
|
@@ -26992,6 +27053,13 @@ method(object({
|
|
|
26992
27053
|
}), RecordingAvailabilitySchema, {
|
|
26993
27054
|
kind: "query",
|
|
26994
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"
|
|
26995
27063
|
}), method(object({
|
|
26996
27064
|
deviceId: number(),
|
|
26997
27065
|
fromMs: number(),
|
|
@@ -27000,6 +27068,14 @@ method(object({
|
|
|
27000
27068
|
}), RecordingDaysSchema, {
|
|
27001
27069
|
kind: "query",
|
|
27002
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"
|
|
27003
27079
|
}), method(object({
|
|
27004
27080
|
deviceId: number(),
|
|
27005
27081
|
fromMs: number(),
|
|
@@ -32197,6 +32273,12 @@ Object.freeze({
|
|
|
32197
32273
|
addonId: null,
|
|
32198
32274
|
access: "view"
|
|
32199
32275
|
},
|
|
32276
|
+
"pipelineAnalytics.getEventDensityBatch": {
|
|
32277
|
+
capName: "pipeline-analytics",
|
|
32278
|
+
capScope: "device",
|
|
32279
|
+
addonId: null,
|
|
32280
|
+
access: "view"
|
|
32281
|
+
},
|
|
32200
32282
|
"pipelineAnalytics.getEventMedia": {
|
|
32201
32283
|
capName: "pipeline-analytics",
|
|
32202
32284
|
capScope: "device",
|
|
@@ -33319,12 +33401,24 @@ Object.freeze({
|
|
|
33319
33401
|
addonId: null,
|
|
33320
33402
|
access: "view"
|
|
33321
33403
|
},
|
|
33404
|
+
"recording.getAvailabilityBatch": {
|
|
33405
|
+
capName: "recording",
|
|
33406
|
+
capScope: "system",
|
|
33407
|
+
addonId: null,
|
|
33408
|
+
access: "view"
|
|
33409
|
+
},
|
|
33322
33410
|
"recording.getDaysWithRecordings": {
|
|
33323
33411
|
capName: "recording",
|
|
33324
33412
|
capScope: "system",
|
|
33325
33413
|
addonId: null,
|
|
33326
33414
|
access: "view"
|
|
33327
33415
|
},
|
|
33416
|
+
"recording.getDaysWithRecordingsBatch": {
|
|
33417
|
+
capName: "recording",
|
|
33418
|
+
capScope: "system",
|
|
33419
|
+
addonId: null,
|
|
33420
|
+
access: "view"
|
|
33421
|
+
},
|
|
33328
33422
|
"recording.getDeviceConfig": {
|
|
33329
33423
|
capName: "recording",
|
|
33330
33424
|
capScope: "system",
|
|
@@ -35929,6 +36023,11 @@ Object.freeze({
|
|
|
35929
36023
|
form: "single",
|
|
35930
36024
|
optional: false
|
|
35931
36025
|
}],
|
|
36026
|
+
"pipelineAnalytics.getEventDensityBatch": [{
|
|
36027
|
+
name: "deviceIds",
|
|
36028
|
+
form: "array",
|
|
36029
|
+
optional: false
|
|
36030
|
+
}],
|
|
35932
36031
|
"pipelineAnalytics.getEventMedia": [{
|
|
35933
36032
|
name: "deviceId",
|
|
35934
36033
|
form: "single",
|
|
@@ -36344,11 +36443,21 @@ Object.freeze({
|
|
|
36344
36443
|
form: "single",
|
|
36345
36444
|
optional: false
|
|
36346
36445
|
}],
|
|
36446
|
+
"recording.getAvailabilityBatch": [{
|
|
36447
|
+
name: "deviceIds",
|
|
36448
|
+
form: "array",
|
|
36449
|
+
optional: false
|
|
36450
|
+
}],
|
|
36347
36451
|
"recording.getDaysWithRecordings": [{
|
|
36348
36452
|
name: "deviceId",
|
|
36349
36453
|
form: "single",
|
|
36350
36454
|
optional: false
|
|
36351
36455
|
}],
|
|
36456
|
+
"recording.getDaysWithRecordingsBatch": [{
|
|
36457
|
+
name: "deviceIds",
|
|
36458
|
+
form: "array",
|
|
36459
|
+
optional: false
|
|
36460
|
+
}],
|
|
36352
36461
|
"recording.getDeviceConfig": [{
|
|
36353
36462
|
name: "deviceId",
|
|
36354
36463
|
form: "single",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-export-alexa",
|
|
3
|
-
"version": "1.2.
|
|
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",
|