@camstack/addon-export-hap 1.2.61 → 1.2.63
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/hap-export.addon.js +117 -6
- package/dist/hap-export.addon.mjs +117 -6
- package/package.json +1 -1
package/dist/hap-export.addon.js
CHANGED
|
@@ -16374,6 +16374,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
16374
16374
|
"device-offline",
|
|
16375
16375
|
"device-disabled",
|
|
16376
16376
|
"device-enabled",
|
|
16377
|
+
"device-battery-low",
|
|
16378
|
+
"device-battery-normal",
|
|
16377
16379
|
"stream-online",
|
|
16378
16380
|
"stream-offline",
|
|
16379
16381
|
"node-online",
|
|
@@ -19648,6 +19650,34 @@ var KeyEventsForDeviceSchema = object({
|
|
|
19648
19650
|
deviceId: number(),
|
|
19649
19651
|
events: array(KeyEventSchema).readonly()
|
|
19650
19652
|
});
|
|
19653
|
+
/** One non-empty bucket of the timeline histogram. */
|
|
19654
|
+
var EventDensityBucketSchema = object({
|
|
19655
|
+
bucketStart: number(),
|
|
19656
|
+
motion: number().int(),
|
|
19657
|
+
object: number().int(),
|
|
19658
|
+
audio: number().int()
|
|
19659
|
+
});
|
|
19660
|
+
/**
|
|
19661
|
+
* One camera's row in a `getEventDensityBatch` answer.
|
|
19662
|
+
*
|
|
19663
|
+
* TWO facts, and the timeline draws them differently:
|
|
19664
|
+
*
|
|
19665
|
+
* - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
|
|
19666
|
+
* claim: read, and nothing happened in the window.
|
|
19667
|
+
* - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
|
|
19668
|
+
* empty and that emptiness means NOTHING; the timeline must render unknown,
|
|
19669
|
+
* not quiet.
|
|
19670
|
+
*
|
|
19671
|
+
* Fanned out per camera the difference was free — one query rejected while the
|
|
19672
|
+
* others resolved — and collapsing to a batch is the exact moment it is lost
|
|
19673
|
+
* silently. Every requested id gets a row: a caller that asked for twelve and
|
|
19674
|
+
* got eleven cannot tell which one is missing, or that any is.
|
|
19675
|
+
*/
|
|
19676
|
+
var EventDensityForDeviceSchema = object({
|
|
19677
|
+
deviceId: number(),
|
|
19678
|
+
read: _enum(["read", "unreadable"]),
|
|
19679
|
+
buckets: array(EventDensityBucketSchema).readonly()
|
|
19680
|
+
});
|
|
19651
19681
|
object({
|
|
19652
19682
|
trackId: string(),
|
|
19653
19683
|
className: string(),
|
|
@@ -19958,12 +19988,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19958
19988
|
since: number(),
|
|
19959
19989
|
until: number(),
|
|
19960
19990
|
bucketMs: number().int().positive()
|
|
19961
|
-
}), array(object({
|
|
19962
|
-
|
|
19963
|
-
|
|
19964
|
-
|
|
19965
|
-
|
|
19966
|
-
})).readonly()), method(object({
|
|
19991
|
+
}), array(EventDensityBucketSchema).readonly()), method(object({
|
|
19992
|
+
deviceIds: array(number()).min(1).max(200),
|
|
19993
|
+
since: number(),
|
|
19994
|
+
until: number(),
|
|
19995
|
+
bucketMs: number().int().positive()
|
|
19996
|
+
}), array(EventDensityForDeviceSchema).readonly()), method(object({
|
|
19967
19997
|
deviceId: number(),
|
|
19968
19998
|
cutoffMs: number()
|
|
19969
19999
|
}), object({
|
|
@@ -27321,6 +27351,39 @@ var RecordingDaysSchema = object({
|
|
|
27321
27351
|
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
27322
27352
|
days: array(number())
|
|
27323
27353
|
});
|
|
27354
|
+
/**
|
|
27355
|
+
* One camera's row in a `getAvailabilityBatch` answer.
|
|
27356
|
+
*
|
|
27357
|
+
* `ranges` is EXACTLY what `getAvailability` returns for that camera — the
|
|
27358
|
+
* batch collapses the transport, not the work — plus the one thing the singular
|
|
27359
|
+
* method never had to say:
|
|
27360
|
+
*
|
|
27361
|
+
* - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
|
|
27362
|
+
* no footage in the window", which is a real claim.
|
|
27363
|
+
* - `read: 'unreadable'` — the recorder could not answer for this camera (its
|
|
27364
|
+
* calendar rung threw, its location is unmounted). `ranges` is empty and
|
|
27365
|
+
* that emptiness means NOTHING.
|
|
27366
|
+
*
|
|
27367
|
+
* A timeline that renders the second as the first tells an operator there is no
|
|
27368
|
+
* footage when the truth is that nobody looked.
|
|
27369
|
+
*/
|
|
27370
|
+
var RecordingAvailabilityForDeviceSchema = object({
|
|
27371
|
+
deviceId: number(),
|
|
27372
|
+
read: _enum(["read", "unreadable"]),
|
|
27373
|
+
ranges: array(RecordingRangeSchema).readonly()
|
|
27374
|
+
});
|
|
27375
|
+
/**
|
|
27376
|
+
* One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
|
|
27377
|
+
* {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
|
|
27378
|
+
* "no footage in this month", `read: 'unreadable'` is "nobody could look", and
|
|
27379
|
+
* the date-picker's day dots must not spell them the same.
|
|
27380
|
+
*/
|
|
27381
|
+
var RecordingDaysForDeviceSchema = object({
|
|
27382
|
+
deviceId: number(),
|
|
27383
|
+
read: _enum(["read", "unreadable"]),
|
|
27384
|
+
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
27385
|
+
days: array(number()).readonly()
|
|
27386
|
+
});
|
|
27324
27387
|
var RecordingManifestSchema = object({
|
|
27325
27388
|
deviceId: number(),
|
|
27326
27389
|
/** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
|
|
@@ -27555,6 +27618,13 @@ method(object({
|
|
|
27555
27618
|
}), RecordingAvailabilitySchema, {
|
|
27556
27619
|
kind: "query",
|
|
27557
27620
|
auth: "protected"
|
|
27621
|
+
}), method(object({
|
|
27622
|
+
deviceIds: array(number()).min(1).max(200),
|
|
27623
|
+
fromMs: number(),
|
|
27624
|
+
toMs: number()
|
|
27625
|
+
}), array(RecordingAvailabilityForDeviceSchema).readonly(), {
|
|
27626
|
+
kind: "query",
|
|
27627
|
+
auth: "protected"
|
|
27558
27628
|
}), method(object({
|
|
27559
27629
|
deviceId: number(),
|
|
27560
27630
|
fromMs: number(),
|
|
@@ -27563,6 +27633,14 @@ method(object({
|
|
|
27563
27633
|
}), RecordingDaysSchema, {
|
|
27564
27634
|
kind: "query",
|
|
27565
27635
|
auth: "protected"
|
|
27636
|
+
}), method(object({
|
|
27637
|
+
deviceIds: array(number()).min(1).max(200),
|
|
27638
|
+
fromMs: number(),
|
|
27639
|
+
toMs: number(),
|
|
27640
|
+
tzOffsetMinutes: number()
|
|
27641
|
+
}), array(RecordingDaysForDeviceSchema).readonly(), {
|
|
27642
|
+
kind: "query",
|
|
27643
|
+
auth: "protected"
|
|
27566
27644
|
}), method(object({
|
|
27567
27645
|
deviceId: number(),
|
|
27568
27646
|
fromMs: number(),
|
|
@@ -32785,6 +32863,12 @@ Object.freeze({
|
|
|
32785
32863
|
addonId: null,
|
|
32786
32864
|
access: "view"
|
|
32787
32865
|
},
|
|
32866
|
+
"pipelineAnalytics.getEventDensityBatch": {
|
|
32867
|
+
capName: "pipeline-analytics",
|
|
32868
|
+
capScope: "device",
|
|
32869
|
+
addonId: null,
|
|
32870
|
+
access: "view"
|
|
32871
|
+
},
|
|
32788
32872
|
"pipelineAnalytics.getEventMedia": {
|
|
32789
32873
|
capName: "pipeline-analytics",
|
|
32790
32874
|
capScope: "device",
|
|
@@ -33907,12 +33991,24 @@ Object.freeze({
|
|
|
33907
33991
|
addonId: null,
|
|
33908
33992
|
access: "view"
|
|
33909
33993
|
},
|
|
33994
|
+
"recording.getAvailabilityBatch": {
|
|
33995
|
+
capName: "recording",
|
|
33996
|
+
capScope: "system",
|
|
33997
|
+
addonId: null,
|
|
33998
|
+
access: "view"
|
|
33999
|
+
},
|
|
33910
34000
|
"recording.getDaysWithRecordings": {
|
|
33911
34001
|
capName: "recording",
|
|
33912
34002
|
capScope: "system",
|
|
33913
34003
|
addonId: null,
|
|
33914
34004
|
access: "view"
|
|
33915
34005
|
},
|
|
34006
|
+
"recording.getDaysWithRecordingsBatch": {
|
|
34007
|
+
capName: "recording",
|
|
34008
|
+
capScope: "system",
|
|
34009
|
+
addonId: null,
|
|
34010
|
+
access: "view"
|
|
34011
|
+
},
|
|
33916
34012
|
"recording.getDeviceConfig": {
|
|
33917
34013
|
capName: "recording",
|
|
33918
34014
|
capScope: "system",
|
|
@@ -36517,6 +36613,11 @@ Object.freeze({
|
|
|
36517
36613
|
form: "single",
|
|
36518
36614
|
optional: false
|
|
36519
36615
|
}],
|
|
36616
|
+
"pipelineAnalytics.getEventDensityBatch": [{
|
|
36617
|
+
name: "deviceIds",
|
|
36618
|
+
form: "array",
|
|
36619
|
+
optional: false
|
|
36620
|
+
}],
|
|
36520
36621
|
"pipelineAnalytics.getEventMedia": [{
|
|
36521
36622
|
name: "deviceId",
|
|
36522
36623
|
form: "single",
|
|
@@ -36932,11 +37033,21 @@ Object.freeze({
|
|
|
36932
37033
|
form: "single",
|
|
36933
37034
|
optional: false
|
|
36934
37035
|
}],
|
|
37036
|
+
"recording.getAvailabilityBatch": [{
|
|
37037
|
+
name: "deviceIds",
|
|
37038
|
+
form: "array",
|
|
37039
|
+
optional: false
|
|
37040
|
+
}],
|
|
36935
37041
|
"recording.getDaysWithRecordings": [{
|
|
36936
37042
|
name: "deviceId",
|
|
36937
37043
|
form: "single",
|
|
36938
37044
|
optional: false
|
|
36939
37045
|
}],
|
|
37046
|
+
"recording.getDaysWithRecordingsBatch": [{
|
|
37047
|
+
name: "deviceIds",
|
|
37048
|
+
form: "array",
|
|
37049
|
+
optional: false
|
|
37050
|
+
}],
|
|
36940
37051
|
"recording.getDeviceConfig": [{
|
|
36941
37052
|
name: "deviceId",
|
|
36942
37053
|
form: "single",
|
|
@@ -16362,6 +16362,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
16362
16362
|
"device-offline",
|
|
16363
16363
|
"device-disabled",
|
|
16364
16364
|
"device-enabled",
|
|
16365
|
+
"device-battery-low",
|
|
16366
|
+
"device-battery-normal",
|
|
16365
16367
|
"stream-online",
|
|
16366
16368
|
"stream-offline",
|
|
16367
16369
|
"node-online",
|
|
@@ -19636,6 +19638,34 @@ var KeyEventsForDeviceSchema = object({
|
|
|
19636
19638
|
deviceId: number(),
|
|
19637
19639
|
events: array(KeyEventSchema).readonly()
|
|
19638
19640
|
});
|
|
19641
|
+
/** One non-empty bucket of the timeline histogram. */
|
|
19642
|
+
var EventDensityBucketSchema = object({
|
|
19643
|
+
bucketStart: number(),
|
|
19644
|
+
motion: number().int(),
|
|
19645
|
+
object: number().int(),
|
|
19646
|
+
audio: number().int()
|
|
19647
|
+
});
|
|
19648
|
+
/**
|
|
19649
|
+
* One camera's row in a `getEventDensityBatch` answer.
|
|
19650
|
+
*
|
|
19651
|
+
* TWO facts, and the timeline draws them differently:
|
|
19652
|
+
*
|
|
19653
|
+
* - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
|
|
19654
|
+
* claim: read, and nothing happened in the window.
|
|
19655
|
+
* - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
|
|
19656
|
+
* empty and that emptiness means NOTHING; the timeline must render unknown,
|
|
19657
|
+
* not quiet.
|
|
19658
|
+
*
|
|
19659
|
+
* Fanned out per camera the difference was free — one query rejected while the
|
|
19660
|
+
* others resolved — and collapsing to a batch is the exact moment it is lost
|
|
19661
|
+
* silently. Every requested id gets a row: a caller that asked for twelve and
|
|
19662
|
+
* got eleven cannot tell which one is missing, or that any is.
|
|
19663
|
+
*/
|
|
19664
|
+
var EventDensityForDeviceSchema = object({
|
|
19665
|
+
deviceId: number(),
|
|
19666
|
+
read: _enum(["read", "unreadable"]),
|
|
19667
|
+
buckets: array(EventDensityBucketSchema).readonly()
|
|
19668
|
+
});
|
|
19639
19669
|
object({
|
|
19640
19670
|
trackId: string(),
|
|
19641
19671
|
className: string(),
|
|
@@ -19946,12 +19976,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19946
19976
|
since: number(),
|
|
19947
19977
|
until: number(),
|
|
19948
19978
|
bucketMs: number().int().positive()
|
|
19949
|
-
}), array(object({
|
|
19950
|
-
|
|
19951
|
-
|
|
19952
|
-
|
|
19953
|
-
|
|
19954
|
-
})).readonly()), method(object({
|
|
19979
|
+
}), array(EventDensityBucketSchema).readonly()), method(object({
|
|
19980
|
+
deviceIds: array(number()).min(1).max(200),
|
|
19981
|
+
since: number(),
|
|
19982
|
+
until: number(),
|
|
19983
|
+
bucketMs: number().int().positive()
|
|
19984
|
+
}), array(EventDensityForDeviceSchema).readonly()), method(object({
|
|
19955
19985
|
deviceId: number(),
|
|
19956
19986
|
cutoffMs: number()
|
|
19957
19987
|
}), object({
|
|
@@ -27309,6 +27339,39 @@ var RecordingDaysSchema = object({
|
|
|
27309
27339
|
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
27310
27340
|
days: array(number())
|
|
27311
27341
|
});
|
|
27342
|
+
/**
|
|
27343
|
+
* One camera's row in a `getAvailabilityBatch` answer.
|
|
27344
|
+
*
|
|
27345
|
+
* `ranges` is EXACTLY what `getAvailability` returns for that camera — the
|
|
27346
|
+
* batch collapses the transport, not the work — plus the one thing the singular
|
|
27347
|
+
* method never had to say:
|
|
27348
|
+
*
|
|
27349
|
+
* - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
|
|
27350
|
+
* no footage in the window", which is a real claim.
|
|
27351
|
+
* - `read: 'unreadable'` — the recorder could not answer for this camera (its
|
|
27352
|
+
* calendar rung threw, its location is unmounted). `ranges` is empty and
|
|
27353
|
+
* that emptiness means NOTHING.
|
|
27354
|
+
*
|
|
27355
|
+
* A timeline that renders the second as the first tells an operator there is no
|
|
27356
|
+
* footage when the truth is that nobody looked.
|
|
27357
|
+
*/
|
|
27358
|
+
var RecordingAvailabilityForDeviceSchema = object({
|
|
27359
|
+
deviceId: number(),
|
|
27360
|
+
read: _enum(["read", "unreadable"]),
|
|
27361
|
+
ranges: array(RecordingRangeSchema).readonly()
|
|
27362
|
+
});
|
|
27363
|
+
/**
|
|
27364
|
+
* One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
|
|
27365
|
+
* {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
|
|
27366
|
+
* "no footage in this month", `read: 'unreadable'` is "nobody could look", and
|
|
27367
|
+
* the date-picker's day dots must not spell them the same.
|
|
27368
|
+
*/
|
|
27369
|
+
var RecordingDaysForDeviceSchema = object({
|
|
27370
|
+
deviceId: number(),
|
|
27371
|
+
read: _enum(["read", "unreadable"]),
|
|
27372
|
+
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
27373
|
+
days: array(number()).readonly()
|
|
27374
|
+
});
|
|
27312
27375
|
var RecordingManifestSchema = object({
|
|
27313
27376
|
deviceId: number(),
|
|
27314
27377
|
/** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
|
|
@@ -27543,6 +27606,13 @@ method(object({
|
|
|
27543
27606
|
}), RecordingAvailabilitySchema, {
|
|
27544
27607
|
kind: "query",
|
|
27545
27608
|
auth: "protected"
|
|
27609
|
+
}), method(object({
|
|
27610
|
+
deviceIds: array(number()).min(1).max(200),
|
|
27611
|
+
fromMs: number(),
|
|
27612
|
+
toMs: number()
|
|
27613
|
+
}), array(RecordingAvailabilityForDeviceSchema).readonly(), {
|
|
27614
|
+
kind: "query",
|
|
27615
|
+
auth: "protected"
|
|
27546
27616
|
}), method(object({
|
|
27547
27617
|
deviceId: number(),
|
|
27548
27618
|
fromMs: number(),
|
|
@@ -27551,6 +27621,14 @@ method(object({
|
|
|
27551
27621
|
}), RecordingDaysSchema, {
|
|
27552
27622
|
kind: "query",
|
|
27553
27623
|
auth: "protected"
|
|
27624
|
+
}), method(object({
|
|
27625
|
+
deviceIds: array(number()).min(1).max(200),
|
|
27626
|
+
fromMs: number(),
|
|
27627
|
+
toMs: number(),
|
|
27628
|
+
tzOffsetMinutes: number()
|
|
27629
|
+
}), array(RecordingDaysForDeviceSchema).readonly(), {
|
|
27630
|
+
kind: "query",
|
|
27631
|
+
auth: "protected"
|
|
27554
27632
|
}), method(object({
|
|
27555
27633
|
deviceId: number(),
|
|
27556
27634
|
fromMs: number(),
|
|
@@ -32773,6 +32851,12 @@ Object.freeze({
|
|
|
32773
32851
|
addonId: null,
|
|
32774
32852
|
access: "view"
|
|
32775
32853
|
},
|
|
32854
|
+
"pipelineAnalytics.getEventDensityBatch": {
|
|
32855
|
+
capName: "pipeline-analytics",
|
|
32856
|
+
capScope: "device",
|
|
32857
|
+
addonId: null,
|
|
32858
|
+
access: "view"
|
|
32859
|
+
},
|
|
32776
32860
|
"pipelineAnalytics.getEventMedia": {
|
|
32777
32861
|
capName: "pipeline-analytics",
|
|
32778
32862
|
capScope: "device",
|
|
@@ -33895,12 +33979,24 @@ Object.freeze({
|
|
|
33895
33979
|
addonId: null,
|
|
33896
33980
|
access: "view"
|
|
33897
33981
|
},
|
|
33982
|
+
"recording.getAvailabilityBatch": {
|
|
33983
|
+
capName: "recording",
|
|
33984
|
+
capScope: "system",
|
|
33985
|
+
addonId: null,
|
|
33986
|
+
access: "view"
|
|
33987
|
+
},
|
|
33898
33988
|
"recording.getDaysWithRecordings": {
|
|
33899
33989
|
capName: "recording",
|
|
33900
33990
|
capScope: "system",
|
|
33901
33991
|
addonId: null,
|
|
33902
33992
|
access: "view"
|
|
33903
33993
|
},
|
|
33994
|
+
"recording.getDaysWithRecordingsBatch": {
|
|
33995
|
+
capName: "recording",
|
|
33996
|
+
capScope: "system",
|
|
33997
|
+
addonId: null,
|
|
33998
|
+
access: "view"
|
|
33999
|
+
},
|
|
33904
34000
|
"recording.getDeviceConfig": {
|
|
33905
34001
|
capName: "recording",
|
|
33906
34002
|
capScope: "system",
|
|
@@ -36505,6 +36601,11 @@ Object.freeze({
|
|
|
36505
36601
|
form: "single",
|
|
36506
36602
|
optional: false
|
|
36507
36603
|
}],
|
|
36604
|
+
"pipelineAnalytics.getEventDensityBatch": [{
|
|
36605
|
+
name: "deviceIds",
|
|
36606
|
+
form: "array",
|
|
36607
|
+
optional: false
|
|
36608
|
+
}],
|
|
36508
36609
|
"pipelineAnalytics.getEventMedia": [{
|
|
36509
36610
|
name: "deviceId",
|
|
36510
36611
|
form: "single",
|
|
@@ -36920,11 +37021,21 @@ Object.freeze({
|
|
|
36920
37021
|
form: "single",
|
|
36921
37022
|
optional: false
|
|
36922
37023
|
}],
|
|
37024
|
+
"recording.getAvailabilityBatch": [{
|
|
37025
|
+
name: "deviceIds",
|
|
37026
|
+
form: "array",
|
|
37027
|
+
optional: false
|
|
37028
|
+
}],
|
|
36923
37029
|
"recording.getDaysWithRecordings": [{
|
|
36924
37030
|
name: "deviceId",
|
|
36925
37031
|
form: "single",
|
|
36926
37032
|
optional: false
|
|
36927
37033
|
}],
|
|
37034
|
+
"recording.getDaysWithRecordingsBatch": [{
|
|
37035
|
+
name: "deviceIds",
|
|
37036
|
+
form: "array",
|
|
37037
|
+
optional: false
|
|
37038
|
+
}],
|
|
36928
37039
|
"recording.getDeviceConfig": [{
|
|
36929
37040
|
name: "deviceId",
|
|
36930
37041
|
form: "single",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-export-hap",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.63",
|
|
4
4
|
"description": "HomeKit (HAP) exporter for CamStack devices. Publishes each exposed device as its own HomeKit accessory: cameras and doorbells with SRTP streaming, HomeKit Secure Video, motion, two-way audio, PTZ and battery; switches, lights, locks and sensors through a capability→service table.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|