@camstack/addon-provider-amcrest 0.2.52 → 0.2.53
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 +115 -6
- package/dist/addon.mjs +115 -6
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -19184,6 +19184,34 @@ var KeyEventsForDeviceSchema = object({
|
|
|
19184
19184
|
deviceId: number(),
|
|
19185
19185
|
events: array(KeyEventSchema).readonly()
|
|
19186
19186
|
});
|
|
19187
|
+
/** One non-empty bucket of the timeline histogram. */
|
|
19188
|
+
var EventDensityBucketSchema = object({
|
|
19189
|
+
bucketStart: number(),
|
|
19190
|
+
motion: number().int(),
|
|
19191
|
+
object: number().int(),
|
|
19192
|
+
audio: number().int()
|
|
19193
|
+
});
|
|
19194
|
+
/**
|
|
19195
|
+
* One camera's row in a `getEventDensityBatch` answer.
|
|
19196
|
+
*
|
|
19197
|
+
* TWO facts, and the timeline draws them differently:
|
|
19198
|
+
*
|
|
19199
|
+
* - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
|
|
19200
|
+
* claim: read, and nothing happened in the window.
|
|
19201
|
+
* - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
|
|
19202
|
+
* empty and that emptiness means NOTHING; the timeline must render unknown,
|
|
19203
|
+
* not quiet.
|
|
19204
|
+
*
|
|
19205
|
+
* Fanned out per camera the difference was free — one query rejected while the
|
|
19206
|
+
* others resolved — and collapsing to a batch is the exact moment it is lost
|
|
19207
|
+
* silently. Every requested id gets a row: a caller that asked for twelve and
|
|
19208
|
+
* got eleven cannot tell which one is missing, or that any is.
|
|
19209
|
+
*/
|
|
19210
|
+
var EventDensityForDeviceSchema = object({
|
|
19211
|
+
deviceId: number(),
|
|
19212
|
+
read: _enum(["read", "unreadable"]),
|
|
19213
|
+
buckets: array(EventDensityBucketSchema).readonly()
|
|
19214
|
+
});
|
|
19187
19215
|
object({
|
|
19188
19216
|
trackId: string(),
|
|
19189
19217
|
className: string(),
|
|
@@ -19494,12 +19522,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19494
19522
|
since: number(),
|
|
19495
19523
|
until: number(),
|
|
19496
19524
|
bucketMs: number().int().positive()
|
|
19497
|
-
}), array(object({
|
|
19498
|
-
|
|
19499
|
-
|
|
19500
|
-
|
|
19501
|
-
|
|
19502
|
-
})).readonly()), method(object({
|
|
19525
|
+
}), array(EventDensityBucketSchema).readonly()), method(object({
|
|
19526
|
+
deviceIds: array(number()).min(1).max(200),
|
|
19527
|
+
since: number(),
|
|
19528
|
+
until: number(),
|
|
19529
|
+
bucketMs: number().int().positive()
|
|
19530
|
+
}), array(EventDensityForDeviceSchema).readonly()), method(object({
|
|
19503
19531
|
deviceId: number(),
|
|
19504
19532
|
cutoffMs: number()
|
|
19505
19533
|
}), object({
|
|
@@ -28716,6 +28744,39 @@ var RecordingDaysSchema = object({
|
|
|
28716
28744
|
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
28717
28745
|
days: array(number())
|
|
28718
28746
|
});
|
|
28747
|
+
/**
|
|
28748
|
+
* One camera's row in a `getAvailabilityBatch` answer.
|
|
28749
|
+
*
|
|
28750
|
+
* `ranges` is EXACTLY what `getAvailability` returns for that camera — the
|
|
28751
|
+
* batch collapses the transport, not the work — plus the one thing the singular
|
|
28752
|
+
* method never had to say:
|
|
28753
|
+
*
|
|
28754
|
+
* - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
|
|
28755
|
+
* no footage in the window", which is a real claim.
|
|
28756
|
+
* - `read: 'unreadable'` — the recorder could not answer for this camera (its
|
|
28757
|
+
* calendar rung threw, its location is unmounted). `ranges` is empty and
|
|
28758
|
+
* that emptiness means NOTHING.
|
|
28759
|
+
*
|
|
28760
|
+
* A timeline that renders the second as the first tells an operator there is no
|
|
28761
|
+
* footage when the truth is that nobody looked.
|
|
28762
|
+
*/
|
|
28763
|
+
var RecordingAvailabilityForDeviceSchema = object({
|
|
28764
|
+
deviceId: number(),
|
|
28765
|
+
read: _enum(["read", "unreadable"]),
|
|
28766
|
+
ranges: array(RecordingRangeSchema).readonly()
|
|
28767
|
+
});
|
|
28768
|
+
/**
|
|
28769
|
+
* One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
|
|
28770
|
+
* {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
|
|
28771
|
+
* "no footage in this month", `read: 'unreadable'` is "nobody could look", and
|
|
28772
|
+
* the date-picker's day dots must not spell them the same.
|
|
28773
|
+
*/
|
|
28774
|
+
var RecordingDaysForDeviceSchema = object({
|
|
28775
|
+
deviceId: number(),
|
|
28776
|
+
read: _enum(["read", "unreadable"]),
|
|
28777
|
+
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
28778
|
+
days: array(number()).readonly()
|
|
28779
|
+
});
|
|
28719
28780
|
var RecordingManifestSchema = object({
|
|
28720
28781
|
deviceId: number(),
|
|
28721
28782
|
/** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
|
|
@@ -28950,6 +29011,13 @@ method(object({
|
|
|
28950
29011
|
}), RecordingAvailabilitySchema, {
|
|
28951
29012
|
kind: "query",
|
|
28952
29013
|
auth: "protected"
|
|
29014
|
+
}), method(object({
|
|
29015
|
+
deviceIds: array(number()).min(1).max(200),
|
|
29016
|
+
fromMs: number(),
|
|
29017
|
+
toMs: number()
|
|
29018
|
+
}), array(RecordingAvailabilityForDeviceSchema).readonly(), {
|
|
29019
|
+
kind: "query",
|
|
29020
|
+
auth: "protected"
|
|
28953
29021
|
}), method(object({
|
|
28954
29022
|
deviceId: number(),
|
|
28955
29023
|
fromMs: number(),
|
|
@@ -28958,6 +29026,14 @@ method(object({
|
|
|
28958
29026
|
}), RecordingDaysSchema, {
|
|
28959
29027
|
kind: "query",
|
|
28960
29028
|
auth: "protected"
|
|
29029
|
+
}), method(object({
|
|
29030
|
+
deviceIds: array(number()).min(1).max(200),
|
|
29031
|
+
fromMs: number(),
|
|
29032
|
+
toMs: number(),
|
|
29033
|
+
tzOffsetMinutes: number()
|
|
29034
|
+
}), array(RecordingDaysForDeviceSchema).readonly(), {
|
|
29035
|
+
kind: "query",
|
|
29036
|
+
auth: "protected"
|
|
28961
29037
|
}), method(object({
|
|
28962
29038
|
deviceId: number(),
|
|
28963
29039
|
fromMs: number(),
|
|
@@ -36258,6 +36334,12 @@ Object.freeze({
|
|
|
36258
36334
|
addonId: null,
|
|
36259
36335
|
access: "view"
|
|
36260
36336
|
},
|
|
36337
|
+
"pipelineAnalytics.getEventDensityBatch": {
|
|
36338
|
+
capName: "pipeline-analytics",
|
|
36339
|
+
capScope: "device",
|
|
36340
|
+
addonId: null,
|
|
36341
|
+
access: "view"
|
|
36342
|
+
},
|
|
36261
36343
|
"pipelineAnalytics.getEventMedia": {
|
|
36262
36344
|
capName: "pipeline-analytics",
|
|
36263
36345
|
capScope: "device",
|
|
@@ -37380,12 +37462,24 @@ Object.freeze({
|
|
|
37380
37462
|
addonId: null,
|
|
37381
37463
|
access: "view"
|
|
37382
37464
|
},
|
|
37465
|
+
"recording.getAvailabilityBatch": {
|
|
37466
|
+
capName: "recording",
|
|
37467
|
+
capScope: "system",
|
|
37468
|
+
addonId: null,
|
|
37469
|
+
access: "view"
|
|
37470
|
+
},
|
|
37383
37471
|
"recording.getDaysWithRecordings": {
|
|
37384
37472
|
capName: "recording",
|
|
37385
37473
|
capScope: "system",
|
|
37386
37474
|
addonId: null,
|
|
37387
37475
|
access: "view"
|
|
37388
37476
|
},
|
|
37477
|
+
"recording.getDaysWithRecordingsBatch": {
|
|
37478
|
+
capName: "recording",
|
|
37479
|
+
capScope: "system",
|
|
37480
|
+
addonId: null,
|
|
37481
|
+
access: "view"
|
|
37482
|
+
},
|
|
37389
37483
|
"recording.getDeviceConfig": {
|
|
37390
37484
|
capName: "recording",
|
|
37391
37485
|
capScope: "system",
|
|
@@ -39990,6 +40084,11 @@ Object.freeze({
|
|
|
39990
40084
|
form: "single",
|
|
39991
40085
|
optional: false
|
|
39992
40086
|
}],
|
|
40087
|
+
"pipelineAnalytics.getEventDensityBatch": [{
|
|
40088
|
+
name: "deviceIds",
|
|
40089
|
+
form: "array",
|
|
40090
|
+
optional: false
|
|
40091
|
+
}],
|
|
39993
40092
|
"pipelineAnalytics.getEventMedia": [{
|
|
39994
40093
|
name: "deviceId",
|
|
39995
40094
|
form: "single",
|
|
@@ -40405,11 +40504,21 @@ Object.freeze({
|
|
|
40405
40504
|
form: "single",
|
|
40406
40505
|
optional: false
|
|
40407
40506
|
}],
|
|
40507
|
+
"recording.getAvailabilityBatch": [{
|
|
40508
|
+
name: "deviceIds",
|
|
40509
|
+
form: "array",
|
|
40510
|
+
optional: false
|
|
40511
|
+
}],
|
|
40408
40512
|
"recording.getDaysWithRecordings": [{
|
|
40409
40513
|
name: "deviceId",
|
|
40410
40514
|
form: "single",
|
|
40411
40515
|
optional: false
|
|
40412
40516
|
}],
|
|
40517
|
+
"recording.getDaysWithRecordingsBatch": [{
|
|
40518
|
+
name: "deviceIds",
|
|
40519
|
+
form: "array",
|
|
40520
|
+
optional: false
|
|
40521
|
+
}],
|
|
40413
40522
|
"recording.getDeviceConfig": [{
|
|
40414
40523
|
name: "deviceId",
|
|
40415
40524
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -19185,6 +19185,34 @@ var KeyEventsForDeviceSchema = object({
|
|
|
19185
19185
|
deviceId: number(),
|
|
19186
19186
|
events: array(KeyEventSchema).readonly()
|
|
19187
19187
|
});
|
|
19188
|
+
/** One non-empty bucket of the timeline histogram. */
|
|
19189
|
+
var EventDensityBucketSchema = object({
|
|
19190
|
+
bucketStart: number(),
|
|
19191
|
+
motion: number().int(),
|
|
19192
|
+
object: number().int(),
|
|
19193
|
+
audio: number().int()
|
|
19194
|
+
});
|
|
19195
|
+
/**
|
|
19196
|
+
* One camera's row in a `getEventDensityBatch` answer.
|
|
19197
|
+
*
|
|
19198
|
+
* TWO facts, and the timeline draws them differently:
|
|
19199
|
+
*
|
|
19200
|
+
* - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
|
|
19201
|
+
* claim: read, and nothing happened in the window.
|
|
19202
|
+
* - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
|
|
19203
|
+
* empty and that emptiness means NOTHING; the timeline must render unknown,
|
|
19204
|
+
* not quiet.
|
|
19205
|
+
*
|
|
19206
|
+
* Fanned out per camera the difference was free — one query rejected while the
|
|
19207
|
+
* others resolved — and collapsing to a batch is the exact moment it is lost
|
|
19208
|
+
* silently. Every requested id gets a row: a caller that asked for twelve and
|
|
19209
|
+
* got eleven cannot tell which one is missing, or that any is.
|
|
19210
|
+
*/
|
|
19211
|
+
var EventDensityForDeviceSchema = object({
|
|
19212
|
+
deviceId: number(),
|
|
19213
|
+
read: _enum(["read", "unreadable"]),
|
|
19214
|
+
buckets: array(EventDensityBucketSchema).readonly()
|
|
19215
|
+
});
|
|
19188
19216
|
object({
|
|
19189
19217
|
trackId: string(),
|
|
19190
19218
|
className: string(),
|
|
@@ -19495,12 +19523,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19495
19523
|
since: number(),
|
|
19496
19524
|
until: number(),
|
|
19497
19525
|
bucketMs: number().int().positive()
|
|
19498
|
-
}), array(object({
|
|
19499
|
-
|
|
19500
|
-
|
|
19501
|
-
|
|
19502
|
-
|
|
19503
|
-
})).readonly()), method(object({
|
|
19526
|
+
}), array(EventDensityBucketSchema).readonly()), method(object({
|
|
19527
|
+
deviceIds: array(number()).min(1).max(200),
|
|
19528
|
+
since: number(),
|
|
19529
|
+
until: number(),
|
|
19530
|
+
bucketMs: number().int().positive()
|
|
19531
|
+
}), array(EventDensityForDeviceSchema).readonly()), method(object({
|
|
19504
19532
|
deviceId: number(),
|
|
19505
19533
|
cutoffMs: number()
|
|
19506
19534
|
}), object({
|
|
@@ -28717,6 +28745,39 @@ var RecordingDaysSchema = object({
|
|
|
28717
28745
|
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
28718
28746
|
days: array(number())
|
|
28719
28747
|
});
|
|
28748
|
+
/**
|
|
28749
|
+
* One camera's row in a `getAvailabilityBatch` answer.
|
|
28750
|
+
*
|
|
28751
|
+
* `ranges` is EXACTLY what `getAvailability` returns for that camera — the
|
|
28752
|
+
* batch collapses the transport, not the work — plus the one thing the singular
|
|
28753
|
+
* method never had to say:
|
|
28754
|
+
*
|
|
28755
|
+
* - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
|
|
28756
|
+
* no footage in the window", which is a real claim.
|
|
28757
|
+
* - `read: 'unreadable'` — the recorder could not answer for this camera (its
|
|
28758
|
+
* calendar rung threw, its location is unmounted). `ranges` is empty and
|
|
28759
|
+
* that emptiness means NOTHING.
|
|
28760
|
+
*
|
|
28761
|
+
* A timeline that renders the second as the first tells an operator there is no
|
|
28762
|
+
* footage when the truth is that nobody looked.
|
|
28763
|
+
*/
|
|
28764
|
+
var RecordingAvailabilityForDeviceSchema = object({
|
|
28765
|
+
deviceId: number(),
|
|
28766
|
+
read: _enum(["read", "unreadable"]),
|
|
28767
|
+
ranges: array(RecordingRangeSchema).readonly()
|
|
28768
|
+
});
|
|
28769
|
+
/**
|
|
28770
|
+
* One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
|
|
28771
|
+
* {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
|
|
28772
|
+
* "no footage in this month", `read: 'unreadable'` is "nobody could look", and
|
|
28773
|
+
* the date-picker's day dots must not spell them the same.
|
|
28774
|
+
*/
|
|
28775
|
+
var RecordingDaysForDeviceSchema = object({
|
|
28776
|
+
deviceId: number(),
|
|
28777
|
+
read: _enum(["read", "unreadable"]),
|
|
28778
|
+
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
28779
|
+
days: array(number()).readonly()
|
|
28780
|
+
});
|
|
28720
28781
|
var RecordingManifestSchema = object({
|
|
28721
28782
|
deviceId: number(),
|
|
28722
28783
|
/** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
|
|
@@ -28951,6 +29012,13 @@ method(object({
|
|
|
28951
29012
|
}), RecordingAvailabilitySchema, {
|
|
28952
29013
|
kind: "query",
|
|
28953
29014
|
auth: "protected"
|
|
29015
|
+
}), method(object({
|
|
29016
|
+
deviceIds: array(number()).min(1).max(200),
|
|
29017
|
+
fromMs: number(),
|
|
29018
|
+
toMs: number()
|
|
29019
|
+
}), array(RecordingAvailabilityForDeviceSchema).readonly(), {
|
|
29020
|
+
kind: "query",
|
|
29021
|
+
auth: "protected"
|
|
28954
29022
|
}), method(object({
|
|
28955
29023
|
deviceId: number(),
|
|
28956
29024
|
fromMs: number(),
|
|
@@ -28959,6 +29027,14 @@ method(object({
|
|
|
28959
29027
|
}), RecordingDaysSchema, {
|
|
28960
29028
|
kind: "query",
|
|
28961
29029
|
auth: "protected"
|
|
29030
|
+
}), method(object({
|
|
29031
|
+
deviceIds: array(number()).min(1).max(200),
|
|
29032
|
+
fromMs: number(),
|
|
29033
|
+
toMs: number(),
|
|
29034
|
+
tzOffsetMinutes: number()
|
|
29035
|
+
}), array(RecordingDaysForDeviceSchema).readonly(), {
|
|
29036
|
+
kind: "query",
|
|
29037
|
+
auth: "protected"
|
|
28962
29038
|
}), method(object({
|
|
28963
29039
|
deviceId: number(),
|
|
28964
29040
|
fromMs: number(),
|
|
@@ -36259,6 +36335,12 @@ Object.freeze({
|
|
|
36259
36335
|
addonId: null,
|
|
36260
36336
|
access: "view"
|
|
36261
36337
|
},
|
|
36338
|
+
"pipelineAnalytics.getEventDensityBatch": {
|
|
36339
|
+
capName: "pipeline-analytics",
|
|
36340
|
+
capScope: "device",
|
|
36341
|
+
addonId: null,
|
|
36342
|
+
access: "view"
|
|
36343
|
+
},
|
|
36262
36344
|
"pipelineAnalytics.getEventMedia": {
|
|
36263
36345
|
capName: "pipeline-analytics",
|
|
36264
36346
|
capScope: "device",
|
|
@@ -37381,12 +37463,24 @@ Object.freeze({
|
|
|
37381
37463
|
addonId: null,
|
|
37382
37464
|
access: "view"
|
|
37383
37465
|
},
|
|
37466
|
+
"recording.getAvailabilityBatch": {
|
|
37467
|
+
capName: "recording",
|
|
37468
|
+
capScope: "system",
|
|
37469
|
+
addonId: null,
|
|
37470
|
+
access: "view"
|
|
37471
|
+
},
|
|
37384
37472
|
"recording.getDaysWithRecordings": {
|
|
37385
37473
|
capName: "recording",
|
|
37386
37474
|
capScope: "system",
|
|
37387
37475
|
addonId: null,
|
|
37388
37476
|
access: "view"
|
|
37389
37477
|
},
|
|
37478
|
+
"recording.getDaysWithRecordingsBatch": {
|
|
37479
|
+
capName: "recording",
|
|
37480
|
+
capScope: "system",
|
|
37481
|
+
addonId: null,
|
|
37482
|
+
access: "view"
|
|
37483
|
+
},
|
|
37390
37484
|
"recording.getDeviceConfig": {
|
|
37391
37485
|
capName: "recording",
|
|
37392
37486
|
capScope: "system",
|
|
@@ -39991,6 +40085,11 @@ Object.freeze({
|
|
|
39991
40085
|
form: "single",
|
|
39992
40086
|
optional: false
|
|
39993
40087
|
}],
|
|
40088
|
+
"pipelineAnalytics.getEventDensityBatch": [{
|
|
40089
|
+
name: "deviceIds",
|
|
40090
|
+
form: "array",
|
|
40091
|
+
optional: false
|
|
40092
|
+
}],
|
|
39994
40093
|
"pipelineAnalytics.getEventMedia": [{
|
|
39995
40094
|
name: "deviceId",
|
|
39996
40095
|
form: "single",
|
|
@@ -40406,11 +40505,21 @@ Object.freeze({
|
|
|
40406
40505
|
form: "single",
|
|
40407
40506
|
optional: false
|
|
40408
40507
|
}],
|
|
40508
|
+
"recording.getAvailabilityBatch": [{
|
|
40509
|
+
name: "deviceIds",
|
|
40510
|
+
form: "array",
|
|
40511
|
+
optional: false
|
|
40512
|
+
}],
|
|
40409
40513
|
"recording.getDaysWithRecordings": [{
|
|
40410
40514
|
name: "deviceId",
|
|
40411
40515
|
form: "single",
|
|
40412
40516
|
optional: false
|
|
40413
40517
|
}],
|
|
40518
|
+
"recording.getDaysWithRecordingsBatch": [{
|
|
40519
|
+
name: "deviceIds",
|
|
40520
|
+
form: "array",
|
|
40521
|
+
optional: false
|
|
40522
|
+
}],
|
|
40414
40523
|
"recording.getDeviceConfig": [{
|
|
40415
40524
|
name: "deviceId",
|
|
40416
40525
|
form: "single",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-amcrest",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.53",
|
|
4
4
|
"description": "Amcrest/Dahua camera device provider addon for CamStack — Dahua CGI over HTTP(S) with digest auth (snapshot, RTSP catalog, PTZ, image/day-night config)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|