@camstack/addon-provider-hikvision 1.2.59 → 1.2.60
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
|
@@ -19498,6 +19498,34 @@ var KeyEventsForDeviceSchema = object({
|
|
|
19498
19498
|
deviceId: number(),
|
|
19499
19499
|
events: array(KeyEventSchema).readonly()
|
|
19500
19500
|
});
|
|
19501
|
+
/** One non-empty bucket of the timeline histogram. */
|
|
19502
|
+
var EventDensityBucketSchema = object({
|
|
19503
|
+
bucketStart: number(),
|
|
19504
|
+
motion: number().int(),
|
|
19505
|
+
object: number().int(),
|
|
19506
|
+
audio: number().int()
|
|
19507
|
+
});
|
|
19508
|
+
/**
|
|
19509
|
+
* One camera's row in a `getEventDensityBatch` answer.
|
|
19510
|
+
*
|
|
19511
|
+
* TWO facts, and the timeline draws them differently:
|
|
19512
|
+
*
|
|
19513
|
+
* - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
|
|
19514
|
+
* claim: read, and nothing happened in the window.
|
|
19515
|
+
* - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
|
|
19516
|
+
* empty and that emptiness means NOTHING; the timeline must render unknown,
|
|
19517
|
+
* not quiet.
|
|
19518
|
+
*
|
|
19519
|
+
* Fanned out per camera the difference was free — one query rejected while the
|
|
19520
|
+
* others resolved — and collapsing to a batch is the exact moment it is lost
|
|
19521
|
+
* silently. Every requested id gets a row: a caller that asked for twelve and
|
|
19522
|
+
* got eleven cannot tell which one is missing, or that any is.
|
|
19523
|
+
*/
|
|
19524
|
+
var EventDensityForDeviceSchema = object({
|
|
19525
|
+
deviceId: number(),
|
|
19526
|
+
read: _enum(["read", "unreadable"]),
|
|
19527
|
+
buckets: array(EventDensityBucketSchema).readonly()
|
|
19528
|
+
});
|
|
19501
19529
|
object({
|
|
19502
19530
|
trackId: string(),
|
|
19503
19531
|
className: string(),
|
|
@@ -19808,12 +19836,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19808
19836
|
since: number(),
|
|
19809
19837
|
until: number(),
|
|
19810
19838
|
bucketMs: number().int().positive()
|
|
19811
|
-
}), array(object({
|
|
19812
|
-
|
|
19813
|
-
|
|
19814
|
-
|
|
19815
|
-
|
|
19816
|
-
})).readonly()), method(object({
|
|
19839
|
+
}), array(EventDensityBucketSchema).readonly()), method(object({
|
|
19840
|
+
deviceIds: array(number()).min(1).max(200),
|
|
19841
|
+
since: number(),
|
|
19842
|
+
until: number(),
|
|
19843
|
+
bucketMs: number().int().positive()
|
|
19844
|
+
}), array(EventDensityForDeviceSchema).readonly()), method(object({
|
|
19817
19845
|
deviceId: number(),
|
|
19818
19846
|
cutoffMs: number()
|
|
19819
19847
|
}), object({
|
|
@@ -29075,6 +29103,39 @@ var RecordingDaysSchema = object({
|
|
|
29075
29103
|
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
29076
29104
|
days: array(number())
|
|
29077
29105
|
});
|
|
29106
|
+
/**
|
|
29107
|
+
* One camera's row in a `getAvailabilityBatch` answer.
|
|
29108
|
+
*
|
|
29109
|
+
* `ranges` is EXACTLY what `getAvailability` returns for that camera — the
|
|
29110
|
+
* batch collapses the transport, not the work — plus the one thing the singular
|
|
29111
|
+
* method never had to say:
|
|
29112
|
+
*
|
|
29113
|
+
* - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
|
|
29114
|
+
* no footage in the window", which is a real claim.
|
|
29115
|
+
* - `read: 'unreadable'` — the recorder could not answer for this camera (its
|
|
29116
|
+
* calendar rung threw, its location is unmounted). `ranges` is empty and
|
|
29117
|
+
* that emptiness means NOTHING.
|
|
29118
|
+
*
|
|
29119
|
+
* A timeline that renders the second as the first tells an operator there is no
|
|
29120
|
+
* footage when the truth is that nobody looked.
|
|
29121
|
+
*/
|
|
29122
|
+
var RecordingAvailabilityForDeviceSchema = object({
|
|
29123
|
+
deviceId: number(),
|
|
29124
|
+
read: _enum(["read", "unreadable"]),
|
|
29125
|
+
ranges: array(RecordingRangeSchema).readonly()
|
|
29126
|
+
});
|
|
29127
|
+
/**
|
|
29128
|
+
* One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
|
|
29129
|
+
* {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
|
|
29130
|
+
* "no footage in this month", `read: 'unreadable'` is "nobody could look", and
|
|
29131
|
+
* the date-picker's day dots must not spell them the same.
|
|
29132
|
+
*/
|
|
29133
|
+
var RecordingDaysForDeviceSchema = object({
|
|
29134
|
+
deviceId: number(),
|
|
29135
|
+
read: _enum(["read", "unreadable"]),
|
|
29136
|
+
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
29137
|
+
days: array(number()).readonly()
|
|
29138
|
+
});
|
|
29078
29139
|
var RecordingManifestSchema = object({
|
|
29079
29140
|
deviceId: number(),
|
|
29080
29141
|
/** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
|
|
@@ -29309,6 +29370,13 @@ method(object({
|
|
|
29309
29370
|
}), RecordingAvailabilitySchema, {
|
|
29310
29371
|
kind: "query",
|
|
29311
29372
|
auth: "protected"
|
|
29373
|
+
}), method(object({
|
|
29374
|
+
deviceIds: array(number()).min(1).max(200),
|
|
29375
|
+
fromMs: number(),
|
|
29376
|
+
toMs: number()
|
|
29377
|
+
}), array(RecordingAvailabilityForDeviceSchema).readonly(), {
|
|
29378
|
+
kind: "query",
|
|
29379
|
+
auth: "protected"
|
|
29312
29380
|
}), method(object({
|
|
29313
29381
|
deviceId: number(),
|
|
29314
29382
|
fromMs: number(),
|
|
@@ -29317,6 +29385,14 @@ method(object({
|
|
|
29317
29385
|
}), RecordingDaysSchema, {
|
|
29318
29386
|
kind: "query",
|
|
29319
29387
|
auth: "protected"
|
|
29388
|
+
}), method(object({
|
|
29389
|
+
deviceIds: array(number()).min(1).max(200),
|
|
29390
|
+
fromMs: number(),
|
|
29391
|
+
toMs: number(),
|
|
29392
|
+
tzOffsetMinutes: number()
|
|
29393
|
+
}), array(RecordingDaysForDeviceSchema).readonly(), {
|
|
29394
|
+
kind: "query",
|
|
29395
|
+
auth: "protected"
|
|
29320
29396
|
}), method(object({
|
|
29321
29397
|
deviceId: number(),
|
|
29322
29398
|
fromMs: number(),
|
|
@@ -36644,6 +36720,12 @@ Object.freeze({
|
|
|
36644
36720
|
addonId: null,
|
|
36645
36721
|
access: "view"
|
|
36646
36722
|
},
|
|
36723
|
+
"pipelineAnalytics.getEventDensityBatch": {
|
|
36724
|
+
capName: "pipeline-analytics",
|
|
36725
|
+
capScope: "device",
|
|
36726
|
+
addonId: null,
|
|
36727
|
+
access: "view"
|
|
36728
|
+
},
|
|
36647
36729
|
"pipelineAnalytics.getEventMedia": {
|
|
36648
36730
|
capName: "pipeline-analytics",
|
|
36649
36731
|
capScope: "device",
|
|
@@ -37766,12 +37848,24 @@ Object.freeze({
|
|
|
37766
37848
|
addonId: null,
|
|
37767
37849
|
access: "view"
|
|
37768
37850
|
},
|
|
37851
|
+
"recording.getAvailabilityBatch": {
|
|
37852
|
+
capName: "recording",
|
|
37853
|
+
capScope: "system",
|
|
37854
|
+
addonId: null,
|
|
37855
|
+
access: "view"
|
|
37856
|
+
},
|
|
37769
37857
|
"recording.getDaysWithRecordings": {
|
|
37770
37858
|
capName: "recording",
|
|
37771
37859
|
capScope: "system",
|
|
37772
37860
|
addonId: null,
|
|
37773
37861
|
access: "view"
|
|
37774
37862
|
},
|
|
37863
|
+
"recording.getDaysWithRecordingsBatch": {
|
|
37864
|
+
capName: "recording",
|
|
37865
|
+
capScope: "system",
|
|
37866
|
+
addonId: null,
|
|
37867
|
+
access: "view"
|
|
37868
|
+
},
|
|
37775
37869
|
"recording.getDeviceConfig": {
|
|
37776
37870
|
capName: "recording",
|
|
37777
37871
|
capScope: "system",
|
|
@@ -40376,6 +40470,11 @@ Object.freeze({
|
|
|
40376
40470
|
form: "single",
|
|
40377
40471
|
optional: false
|
|
40378
40472
|
}],
|
|
40473
|
+
"pipelineAnalytics.getEventDensityBatch": [{
|
|
40474
|
+
name: "deviceIds",
|
|
40475
|
+
form: "array",
|
|
40476
|
+
optional: false
|
|
40477
|
+
}],
|
|
40379
40478
|
"pipelineAnalytics.getEventMedia": [{
|
|
40380
40479
|
name: "deviceId",
|
|
40381
40480
|
form: "single",
|
|
@@ -40791,11 +40890,21 @@ Object.freeze({
|
|
|
40791
40890
|
form: "single",
|
|
40792
40891
|
optional: false
|
|
40793
40892
|
}],
|
|
40893
|
+
"recording.getAvailabilityBatch": [{
|
|
40894
|
+
name: "deviceIds",
|
|
40895
|
+
form: "array",
|
|
40896
|
+
optional: false
|
|
40897
|
+
}],
|
|
40794
40898
|
"recording.getDaysWithRecordings": [{
|
|
40795
40899
|
name: "deviceId",
|
|
40796
40900
|
form: "single",
|
|
40797
40901
|
optional: false
|
|
40798
40902
|
}],
|
|
40903
|
+
"recording.getDaysWithRecordingsBatch": [{
|
|
40904
|
+
name: "deviceIds",
|
|
40905
|
+
form: "array",
|
|
40906
|
+
optional: false
|
|
40907
|
+
}],
|
|
40799
40908
|
"recording.getDeviceConfig": [{
|
|
40800
40909
|
name: "deviceId",
|
|
40801
40910
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -19499,6 +19499,34 @@ var KeyEventsForDeviceSchema = object({
|
|
|
19499
19499
|
deviceId: number(),
|
|
19500
19500
|
events: array(KeyEventSchema).readonly()
|
|
19501
19501
|
});
|
|
19502
|
+
/** One non-empty bucket of the timeline histogram. */
|
|
19503
|
+
var EventDensityBucketSchema = object({
|
|
19504
|
+
bucketStart: number(),
|
|
19505
|
+
motion: number().int(),
|
|
19506
|
+
object: number().int(),
|
|
19507
|
+
audio: number().int()
|
|
19508
|
+
});
|
|
19509
|
+
/**
|
|
19510
|
+
* One camera's row in a `getEventDensityBatch` answer.
|
|
19511
|
+
*
|
|
19512
|
+
* TWO facts, and the timeline draws them differently:
|
|
19513
|
+
*
|
|
19514
|
+
* - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
|
|
19515
|
+
* claim: read, and nothing happened in the window.
|
|
19516
|
+
* - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
|
|
19517
|
+
* empty and that emptiness means NOTHING; the timeline must render unknown,
|
|
19518
|
+
* not quiet.
|
|
19519
|
+
*
|
|
19520
|
+
* Fanned out per camera the difference was free — one query rejected while the
|
|
19521
|
+
* others resolved — and collapsing to a batch is the exact moment it is lost
|
|
19522
|
+
* silently. Every requested id gets a row: a caller that asked for twelve and
|
|
19523
|
+
* got eleven cannot tell which one is missing, or that any is.
|
|
19524
|
+
*/
|
|
19525
|
+
var EventDensityForDeviceSchema = object({
|
|
19526
|
+
deviceId: number(),
|
|
19527
|
+
read: _enum(["read", "unreadable"]),
|
|
19528
|
+
buckets: array(EventDensityBucketSchema).readonly()
|
|
19529
|
+
});
|
|
19502
19530
|
object({
|
|
19503
19531
|
trackId: string(),
|
|
19504
19532
|
className: string(),
|
|
@@ -19809,12 +19837,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19809
19837
|
since: number(),
|
|
19810
19838
|
until: number(),
|
|
19811
19839
|
bucketMs: number().int().positive()
|
|
19812
|
-
}), array(object({
|
|
19813
|
-
|
|
19814
|
-
|
|
19815
|
-
|
|
19816
|
-
|
|
19817
|
-
})).readonly()), method(object({
|
|
19840
|
+
}), array(EventDensityBucketSchema).readonly()), method(object({
|
|
19841
|
+
deviceIds: array(number()).min(1).max(200),
|
|
19842
|
+
since: number(),
|
|
19843
|
+
until: number(),
|
|
19844
|
+
bucketMs: number().int().positive()
|
|
19845
|
+
}), array(EventDensityForDeviceSchema).readonly()), method(object({
|
|
19818
19846
|
deviceId: number(),
|
|
19819
19847
|
cutoffMs: number()
|
|
19820
19848
|
}), object({
|
|
@@ -29076,6 +29104,39 @@ var RecordingDaysSchema = object({
|
|
|
29076
29104
|
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
29077
29105
|
days: array(number())
|
|
29078
29106
|
});
|
|
29107
|
+
/**
|
|
29108
|
+
* One camera's row in a `getAvailabilityBatch` answer.
|
|
29109
|
+
*
|
|
29110
|
+
* `ranges` is EXACTLY what `getAvailability` returns for that camera — the
|
|
29111
|
+
* batch collapses the transport, not the work — plus the one thing the singular
|
|
29112
|
+
* method never had to say:
|
|
29113
|
+
*
|
|
29114
|
+
* - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
|
|
29115
|
+
* no footage in the window", which is a real claim.
|
|
29116
|
+
* - `read: 'unreadable'` — the recorder could not answer for this camera (its
|
|
29117
|
+
* calendar rung threw, its location is unmounted). `ranges` is empty and
|
|
29118
|
+
* that emptiness means NOTHING.
|
|
29119
|
+
*
|
|
29120
|
+
* A timeline that renders the second as the first tells an operator there is no
|
|
29121
|
+
* footage when the truth is that nobody looked.
|
|
29122
|
+
*/
|
|
29123
|
+
var RecordingAvailabilityForDeviceSchema = object({
|
|
29124
|
+
deviceId: number(),
|
|
29125
|
+
read: _enum(["read", "unreadable"]),
|
|
29126
|
+
ranges: array(RecordingRangeSchema).readonly()
|
|
29127
|
+
});
|
|
29128
|
+
/**
|
|
29129
|
+
* One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
|
|
29130
|
+
* {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
|
|
29131
|
+
* "no footage in this month", `read: 'unreadable'` is "nobody could look", and
|
|
29132
|
+
* the date-picker's day dots must not spell them the same.
|
|
29133
|
+
*/
|
|
29134
|
+
var RecordingDaysForDeviceSchema = object({
|
|
29135
|
+
deviceId: number(),
|
|
29136
|
+
read: _enum(["read", "unreadable"]),
|
|
29137
|
+
/** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
|
|
29138
|
+
days: array(number()).readonly()
|
|
29139
|
+
});
|
|
29079
29140
|
var RecordingManifestSchema = object({
|
|
29080
29141
|
deviceId: number(),
|
|
29081
29142
|
/** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
|
|
@@ -29310,6 +29371,13 @@ method(object({
|
|
|
29310
29371
|
}), RecordingAvailabilitySchema, {
|
|
29311
29372
|
kind: "query",
|
|
29312
29373
|
auth: "protected"
|
|
29374
|
+
}), method(object({
|
|
29375
|
+
deviceIds: array(number()).min(1).max(200),
|
|
29376
|
+
fromMs: number(),
|
|
29377
|
+
toMs: number()
|
|
29378
|
+
}), array(RecordingAvailabilityForDeviceSchema).readonly(), {
|
|
29379
|
+
kind: "query",
|
|
29380
|
+
auth: "protected"
|
|
29313
29381
|
}), method(object({
|
|
29314
29382
|
deviceId: number(),
|
|
29315
29383
|
fromMs: number(),
|
|
@@ -29318,6 +29386,14 @@ method(object({
|
|
|
29318
29386
|
}), RecordingDaysSchema, {
|
|
29319
29387
|
kind: "query",
|
|
29320
29388
|
auth: "protected"
|
|
29389
|
+
}), method(object({
|
|
29390
|
+
deviceIds: array(number()).min(1).max(200),
|
|
29391
|
+
fromMs: number(),
|
|
29392
|
+
toMs: number(),
|
|
29393
|
+
tzOffsetMinutes: number()
|
|
29394
|
+
}), array(RecordingDaysForDeviceSchema).readonly(), {
|
|
29395
|
+
kind: "query",
|
|
29396
|
+
auth: "protected"
|
|
29321
29397
|
}), method(object({
|
|
29322
29398
|
deviceId: number(),
|
|
29323
29399
|
fromMs: number(),
|
|
@@ -36645,6 +36721,12 @@ Object.freeze({
|
|
|
36645
36721
|
addonId: null,
|
|
36646
36722
|
access: "view"
|
|
36647
36723
|
},
|
|
36724
|
+
"pipelineAnalytics.getEventDensityBatch": {
|
|
36725
|
+
capName: "pipeline-analytics",
|
|
36726
|
+
capScope: "device",
|
|
36727
|
+
addonId: null,
|
|
36728
|
+
access: "view"
|
|
36729
|
+
},
|
|
36648
36730
|
"pipelineAnalytics.getEventMedia": {
|
|
36649
36731
|
capName: "pipeline-analytics",
|
|
36650
36732
|
capScope: "device",
|
|
@@ -37767,12 +37849,24 @@ Object.freeze({
|
|
|
37767
37849
|
addonId: null,
|
|
37768
37850
|
access: "view"
|
|
37769
37851
|
},
|
|
37852
|
+
"recording.getAvailabilityBatch": {
|
|
37853
|
+
capName: "recording",
|
|
37854
|
+
capScope: "system",
|
|
37855
|
+
addonId: null,
|
|
37856
|
+
access: "view"
|
|
37857
|
+
},
|
|
37770
37858
|
"recording.getDaysWithRecordings": {
|
|
37771
37859
|
capName: "recording",
|
|
37772
37860
|
capScope: "system",
|
|
37773
37861
|
addonId: null,
|
|
37774
37862
|
access: "view"
|
|
37775
37863
|
},
|
|
37864
|
+
"recording.getDaysWithRecordingsBatch": {
|
|
37865
|
+
capName: "recording",
|
|
37866
|
+
capScope: "system",
|
|
37867
|
+
addonId: null,
|
|
37868
|
+
access: "view"
|
|
37869
|
+
},
|
|
37776
37870
|
"recording.getDeviceConfig": {
|
|
37777
37871
|
capName: "recording",
|
|
37778
37872
|
capScope: "system",
|
|
@@ -40377,6 +40471,11 @@ Object.freeze({
|
|
|
40377
40471
|
form: "single",
|
|
40378
40472
|
optional: false
|
|
40379
40473
|
}],
|
|
40474
|
+
"pipelineAnalytics.getEventDensityBatch": [{
|
|
40475
|
+
name: "deviceIds",
|
|
40476
|
+
form: "array",
|
|
40477
|
+
optional: false
|
|
40478
|
+
}],
|
|
40380
40479
|
"pipelineAnalytics.getEventMedia": [{
|
|
40381
40480
|
name: "deviceId",
|
|
40382
40481
|
form: "single",
|
|
@@ -40792,11 +40891,21 @@ Object.freeze({
|
|
|
40792
40891
|
form: "single",
|
|
40793
40892
|
optional: false
|
|
40794
40893
|
}],
|
|
40894
|
+
"recording.getAvailabilityBatch": [{
|
|
40895
|
+
name: "deviceIds",
|
|
40896
|
+
form: "array",
|
|
40897
|
+
optional: false
|
|
40898
|
+
}],
|
|
40795
40899
|
"recording.getDaysWithRecordings": [{
|
|
40796
40900
|
name: "deviceId",
|
|
40797
40901
|
form: "single",
|
|
40798
40902
|
optional: false
|
|
40799
40903
|
}],
|
|
40904
|
+
"recording.getDaysWithRecordingsBatch": [{
|
|
40905
|
+
name: "deviceIds",
|
|
40906
|
+
form: "array",
|
|
40907
|
+
optional: false
|
|
40908
|
+
}],
|
|
40800
40909
|
"recording.getDeviceConfig": [{
|
|
40801
40910
|
name: "deviceId",
|
|
40802
40911
|
form: "single",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-hikvision",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.60",
|
|
4
4
|
"description": "Hikvision camera device provider addon for CamStack — ISAPI over HTTP(S) with digest auth (snapshot, alarm stream, RTSP discovery)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|