@camstack/addon-provider-amcrest 0.2.51 → 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 +117 -6
- package/dist/addon.mjs +117 -6
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -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",
|
|
@@ -19182,6 +19184,34 @@ var KeyEventsForDeviceSchema = object({
|
|
|
19182
19184
|
deviceId: number(),
|
|
19183
19185
|
events: array(KeyEventSchema).readonly()
|
|
19184
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
|
+
});
|
|
19185
19215
|
object({
|
|
19186
19216
|
trackId: string(),
|
|
19187
19217
|
className: string(),
|
|
@@ -19492,12 +19522,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19492
19522
|
since: number(),
|
|
19493
19523
|
until: number(),
|
|
19494
19524
|
bucketMs: number().int().positive()
|
|
19495
|
-
}), array(object({
|
|
19496
|
-
|
|
19497
|
-
|
|
19498
|
-
|
|
19499
|
-
|
|
19500
|
-
})).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({
|
|
19501
19531
|
deviceId: number(),
|
|
19502
19532
|
cutoffMs: number()
|
|
19503
19533
|
}), object({
|
|
@@ -28714,6 +28744,39 @@ var RecordingDaysSchema = object({
|
|
|
28714
28744
|
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
28715
28745
|
days: array(number())
|
|
28716
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
|
+
});
|
|
28717
28780
|
var RecordingManifestSchema = object({
|
|
28718
28781
|
deviceId: number(),
|
|
28719
28782
|
/** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
|
|
@@ -28948,6 +29011,13 @@ method(object({
|
|
|
28948
29011
|
}), RecordingAvailabilitySchema, {
|
|
28949
29012
|
kind: "query",
|
|
28950
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"
|
|
28951
29021
|
}), method(object({
|
|
28952
29022
|
deviceId: number(),
|
|
28953
29023
|
fromMs: number(),
|
|
@@ -28956,6 +29026,14 @@ method(object({
|
|
|
28956
29026
|
}), RecordingDaysSchema, {
|
|
28957
29027
|
kind: "query",
|
|
28958
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"
|
|
28959
29037
|
}), method(object({
|
|
28960
29038
|
deviceId: number(),
|
|
28961
29039
|
fromMs: number(),
|
|
@@ -36256,6 +36334,12 @@ Object.freeze({
|
|
|
36256
36334
|
addonId: null,
|
|
36257
36335
|
access: "view"
|
|
36258
36336
|
},
|
|
36337
|
+
"pipelineAnalytics.getEventDensityBatch": {
|
|
36338
|
+
capName: "pipeline-analytics",
|
|
36339
|
+
capScope: "device",
|
|
36340
|
+
addonId: null,
|
|
36341
|
+
access: "view"
|
|
36342
|
+
},
|
|
36259
36343
|
"pipelineAnalytics.getEventMedia": {
|
|
36260
36344
|
capName: "pipeline-analytics",
|
|
36261
36345
|
capScope: "device",
|
|
@@ -37378,12 +37462,24 @@ Object.freeze({
|
|
|
37378
37462
|
addonId: null,
|
|
37379
37463
|
access: "view"
|
|
37380
37464
|
},
|
|
37465
|
+
"recording.getAvailabilityBatch": {
|
|
37466
|
+
capName: "recording",
|
|
37467
|
+
capScope: "system",
|
|
37468
|
+
addonId: null,
|
|
37469
|
+
access: "view"
|
|
37470
|
+
},
|
|
37381
37471
|
"recording.getDaysWithRecordings": {
|
|
37382
37472
|
capName: "recording",
|
|
37383
37473
|
capScope: "system",
|
|
37384
37474
|
addonId: null,
|
|
37385
37475
|
access: "view"
|
|
37386
37476
|
},
|
|
37477
|
+
"recording.getDaysWithRecordingsBatch": {
|
|
37478
|
+
capName: "recording",
|
|
37479
|
+
capScope: "system",
|
|
37480
|
+
addonId: null,
|
|
37481
|
+
access: "view"
|
|
37482
|
+
},
|
|
37387
37483
|
"recording.getDeviceConfig": {
|
|
37388
37484
|
capName: "recording",
|
|
37389
37485
|
capScope: "system",
|
|
@@ -39988,6 +40084,11 @@ Object.freeze({
|
|
|
39988
40084
|
form: "single",
|
|
39989
40085
|
optional: false
|
|
39990
40086
|
}],
|
|
40087
|
+
"pipelineAnalytics.getEventDensityBatch": [{
|
|
40088
|
+
name: "deviceIds",
|
|
40089
|
+
form: "array",
|
|
40090
|
+
optional: false
|
|
40091
|
+
}],
|
|
39991
40092
|
"pipelineAnalytics.getEventMedia": [{
|
|
39992
40093
|
name: "deviceId",
|
|
39993
40094
|
form: "single",
|
|
@@ -40403,11 +40504,21 @@ Object.freeze({
|
|
|
40403
40504
|
form: "single",
|
|
40404
40505
|
optional: false
|
|
40405
40506
|
}],
|
|
40507
|
+
"recording.getAvailabilityBatch": [{
|
|
40508
|
+
name: "deviceIds",
|
|
40509
|
+
form: "array",
|
|
40510
|
+
optional: false
|
|
40511
|
+
}],
|
|
40406
40512
|
"recording.getDaysWithRecordings": [{
|
|
40407
40513
|
name: "deviceId",
|
|
40408
40514
|
form: "single",
|
|
40409
40515
|
optional: false
|
|
40410
40516
|
}],
|
|
40517
|
+
"recording.getDaysWithRecordingsBatch": [{
|
|
40518
|
+
name: "deviceIds",
|
|
40519
|
+
form: "array",
|
|
40520
|
+
optional: false
|
|
40521
|
+
}],
|
|
40411
40522
|
"recording.getDeviceConfig": [{
|
|
40412
40523
|
name: "deviceId",
|
|
40413
40524
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -15869,6 +15869,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
15869
15869
|
"device-offline",
|
|
15870
15870
|
"device-disabled",
|
|
15871
15871
|
"device-enabled",
|
|
15872
|
+
"device-battery-low",
|
|
15873
|
+
"device-battery-normal",
|
|
15872
15874
|
"stream-online",
|
|
15873
15875
|
"stream-offline",
|
|
15874
15876
|
"node-online",
|
|
@@ -19183,6 +19185,34 @@ var KeyEventsForDeviceSchema = object({
|
|
|
19183
19185
|
deviceId: number(),
|
|
19184
19186
|
events: array(KeyEventSchema).readonly()
|
|
19185
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
|
+
});
|
|
19186
19216
|
object({
|
|
19187
19217
|
trackId: string(),
|
|
19188
19218
|
className: string(),
|
|
@@ -19493,12 +19523,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19493
19523
|
since: number(),
|
|
19494
19524
|
until: number(),
|
|
19495
19525
|
bucketMs: number().int().positive()
|
|
19496
|
-
}), array(object({
|
|
19497
|
-
|
|
19498
|
-
|
|
19499
|
-
|
|
19500
|
-
|
|
19501
|
-
})).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({
|
|
19502
19532
|
deviceId: number(),
|
|
19503
19533
|
cutoffMs: number()
|
|
19504
19534
|
}), object({
|
|
@@ -28715,6 +28745,39 @@ var RecordingDaysSchema = object({
|
|
|
28715
28745
|
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
28716
28746
|
days: array(number())
|
|
28717
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
|
+
});
|
|
28718
28781
|
var RecordingManifestSchema = object({
|
|
28719
28782
|
deviceId: number(),
|
|
28720
28783
|
/** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
|
|
@@ -28949,6 +29012,13 @@ method(object({
|
|
|
28949
29012
|
}), RecordingAvailabilitySchema, {
|
|
28950
29013
|
kind: "query",
|
|
28951
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"
|
|
28952
29022
|
}), method(object({
|
|
28953
29023
|
deviceId: number(),
|
|
28954
29024
|
fromMs: number(),
|
|
@@ -28957,6 +29027,14 @@ method(object({
|
|
|
28957
29027
|
}), RecordingDaysSchema, {
|
|
28958
29028
|
kind: "query",
|
|
28959
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"
|
|
28960
29038
|
}), method(object({
|
|
28961
29039
|
deviceId: number(),
|
|
28962
29040
|
fromMs: number(),
|
|
@@ -36257,6 +36335,12 @@ Object.freeze({
|
|
|
36257
36335
|
addonId: null,
|
|
36258
36336
|
access: "view"
|
|
36259
36337
|
},
|
|
36338
|
+
"pipelineAnalytics.getEventDensityBatch": {
|
|
36339
|
+
capName: "pipeline-analytics",
|
|
36340
|
+
capScope: "device",
|
|
36341
|
+
addonId: null,
|
|
36342
|
+
access: "view"
|
|
36343
|
+
},
|
|
36260
36344
|
"pipelineAnalytics.getEventMedia": {
|
|
36261
36345
|
capName: "pipeline-analytics",
|
|
36262
36346
|
capScope: "device",
|
|
@@ -37379,12 +37463,24 @@ Object.freeze({
|
|
|
37379
37463
|
addonId: null,
|
|
37380
37464
|
access: "view"
|
|
37381
37465
|
},
|
|
37466
|
+
"recording.getAvailabilityBatch": {
|
|
37467
|
+
capName: "recording",
|
|
37468
|
+
capScope: "system",
|
|
37469
|
+
addonId: null,
|
|
37470
|
+
access: "view"
|
|
37471
|
+
},
|
|
37382
37472
|
"recording.getDaysWithRecordings": {
|
|
37383
37473
|
capName: "recording",
|
|
37384
37474
|
capScope: "system",
|
|
37385
37475
|
addonId: null,
|
|
37386
37476
|
access: "view"
|
|
37387
37477
|
},
|
|
37478
|
+
"recording.getDaysWithRecordingsBatch": {
|
|
37479
|
+
capName: "recording",
|
|
37480
|
+
capScope: "system",
|
|
37481
|
+
addonId: null,
|
|
37482
|
+
access: "view"
|
|
37483
|
+
},
|
|
37388
37484
|
"recording.getDeviceConfig": {
|
|
37389
37485
|
capName: "recording",
|
|
37390
37486
|
capScope: "system",
|
|
@@ -39989,6 +40085,11 @@ Object.freeze({
|
|
|
39989
40085
|
form: "single",
|
|
39990
40086
|
optional: false
|
|
39991
40087
|
}],
|
|
40088
|
+
"pipelineAnalytics.getEventDensityBatch": [{
|
|
40089
|
+
name: "deviceIds",
|
|
40090
|
+
form: "array",
|
|
40091
|
+
optional: false
|
|
40092
|
+
}],
|
|
39992
40093
|
"pipelineAnalytics.getEventMedia": [{
|
|
39993
40094
|
name: "deviceId",
|
|
39994
40095
|
form: "single",
|
|
@@ -40404,11 +40505,21 @@ Object.freeze({
|
|
|
40404
40505
|
form: "single",
|
|
40405
40506
|
optional: false
|
|
40406
40507
|
}],
|
|
40508
|
+
"recording.getAvailabilityBatch": [{
|
|
40509
|
+
name: "deviceIds",
|
|
40510
|
+
form: "array",
|
|
40511
|
+
optional: false
|
|
40512
|
+
}],
|
|
40407
40513
|
"recording.getDaysWithRecordings": [{
|
|
40408
40514
|
name: "deviceId",
|
|
40409
40515
|
form: "single",
|
|
40410
40516
|
optional: false
|
|
40411
40517
|
}],
|
|
40518
|
+
"recording.getDaysWithRecordingsBatch": [{
|
|
40519
|
+
name: "deviceIds",
|
|
40520
|
+
form: "array",
|
|
40521
|
+
optional: false
|
|
40522
|
+
}],
|
|
40412
40523
|
"recording.getDeviceConfig": [{
|
|
40413
40524
|
name: "deviceId",
|
|
40414
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",
|