@camstack/addon-provider-hikvision 1.2.37 → 1.2.38
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 +77 -2
- package/dist/addon.mjs +77 -2
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -15964,7 +15964,23 @@ var NcHistoryEntrySchema = object({
|
|
|
15964
15964
|
updatedAt: number(),
|
|
15965
15965
|
/** Failure detail — present on a `dead` row. */
|
|
15966
15966
|
error: string().optional(),
|
|
15967
|
-
subject: NcHistorySubjectSchema
|
|
15967
|
+
subject: NcHistorySubjectSchema,
|
|
15968
|
+
/**
|
|
15969
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
15970
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
15971
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
15972
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
15973
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
15974
|
+
*
|
|
15975
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
15976
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
15977
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
15978
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
15979
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
15980
|
+
* Assistant export) must render as "no image right now", never as a
|
|
15981
|
+
* broken link.
|
|
15982
|
+
*/
|
|
15983
|
+
artifactIds: array(string().min(1)).optional()
|
|
15968
15984
|
});
|
|
15969
15985
|
/**
|
|
15970
15986
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -16191,7 +16207,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
16191
16207
|
}), method(object({}), object({
|
|
16192
16208
|
catalog: array(NcConditionDescriptorSchema),
|
|
16193
16209
|
taxonomy: NcTaxonomySchema.optional()
|
|
16194
|
-
})), method(object({ filter: NcHistoryFilterSchema.default({ limit: 100 }) }), object({ entries: array(NcHistoryEntrySchema) }), { auth: "admin" }), method(object({}), object({ snoozes: array(NcSnoozeSchema) }), { caller: "required" }), method(object({ snooze: NcSnoozeInputSchema }), object({ snooze: NcSnoozeSchema }), {
|
|
16210
|
+
})), method(object({ filter: NcHistoryFilterSchema.default({ limit: 100 }) }), object({ entries: array(NcHistoryEntrySchema) }), { auth: "admin" }), method(object({ artifactId: string().min(1) }), object({ url: string().nullable() }), { auth: "admin" }), method(object({}), object({ snoozes: array(NcSnoozeSchema) }), { caller: "required" }), method(object({ snooze: NcSnoozeInputSchema }), object({ snooze: NcSnoozeSchema }), {
|
|
16195
16211
|
kind: "mutation",
|
|
16196
16212
|
caller: "required"
|
|
16197
16213
|
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
@@ -27448,6 +27464,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
27448
27464
|
/** Media ms the returned fragment covers. */
|
|
27449
27465
|
gopDurMs: number()
|
|
27450
27466
|
});
|
|
27467
|
+
/**
|
|
27468
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
27469
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
27470
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
27471
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
27472
|
+
*
|
|
27473
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
27474
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
27475
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
27476
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
27477
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
27478
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
27479
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
27480
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
27481
|
+
* bytes nothing has proven decodable.
|
|
27482
|
+
*/
|
|
27483
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
27484
|
+
kind: literal("ok"),
|
|
27485
|
+
data: _instanceof(Uint8Array),
|
|
27486
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
27487
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
27488
|
+
gopStartMs: number(),
|
|
27489
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
27490
|
+
gopDurMs: number(),
|
|
27491
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
27492
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
27493
|
+
reachesRequestedEnd: boolean()
|
|
27494
|
+
}), object({
|
|
27495
|
+
kind: literal("spans-multiple-segments"),
|
|
27496
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
27497
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
27498
|
+
segmentEndMs: number()
|
|
27499
|
+
})]);
|
|
27451
27500
|
method(object({
|
|
27452
27501
|
deviceId: number(),
|
|
27453
27502
|
fromMs: number(),
|
|
@@ -27498,6 +27547,15 @@ method(object({
|
|
|
27498
27547
|
}), ReadGopBytesResultSchema, {
|
|
27499
27548
|
kind: "query",
|
|
27500
27549
|
auth: "admin"
|
|
27550
|
+
}), method(object({
|
|
27551
|
+
deviceId: number(),
|
|
27552
|
+
profile: string(),
|
|
27553
|
+
startMs: number(),
|
|
27554
|
+
fromMs: number(),
|
|
27555
|
+
toMs: number()
|
|
27556
|
+
}), ReadWindowBytesResultSchema, {
|
|
27557
|
+
kind: "query",
|
|
27558
|
+
auth: "admin"
|
|
27501
27559
|
}), method(object({
|
|
27502
27560
|
deviceId: number(),
|
|
27503
27561
|
config: RecordingConfigSchema
|
|
@@ -34016,6 +34074,12 @@ Object.freeze({
|
|
|
34016
34074
|
addonId: null,
|
|
34017
34075
|
access: "view"
|
|
34018
34076
|
},
|
|
34077
|
+
"notificationRules.resolveArtifactUrl": {
|
|
34078
|
+
capName: "notification-rules",
|
|
34079
|
+
capScope: "system",
|
|
34080
|
+
addonId: null,
|
|
34081
|
+
access: "view"
|
|
34082
|
+
},
|
|
34019
34083
|
"notificationRules.setAlarmConfig": {
|
|
34020
34084
|
capName: "notification-rules",
|
|
34021
34085
|
capScope: "system",
|
|
@@ -35420,6 +35484,12 @@ Object.freeze({
|
|
|
35420
35484
|
addonId: null,
|
|
35421
35485
|
access: "view"
|
|
35422
35486
|
},
|
|
35487
|
+
"recording.readWindowBytes": {
|
|
35488
|
+
capName: "recording",
|
|
35489
|
+
capScope: "system",
|
|
35490
|
+
addonId: null,
|
|
35491
|
+
access: "view"
|
|
35492
|
+
},
|
|
35423
35493
|
"recording.refreshStorageLocationsForMigration": {
|
|
35424
35494
|
capName: "recording",
|
|
35425
35495
|
capScope: "system",
|
|
@@ -38250,6 +38320,11 @@ Object.freeze({
|
|
|
38250
38320
|
form: "single",
|
|
38251
38321
|
optional: false
|
|
38252
38322
|
}],
|
|
38323
|
+
"recording.readWindowBytes": [{
|
|
38324
|
+
name: "deviceId",
|
|
38325
|
+
form: "single",
|
|
38326
|
+
optional: false
|
|
38327
|
+
}],
|
|
38253
38328
|
"recording.relocateFootage": [{
|
|
38254
38329
|
name: "deviceId",
|
|
38255
38330
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -15965,7 +15965,23 @@ var NcHistoryEntrySchema = object({
|
|
|
15965
15965
|
updatedAt: number(),
|
|
15966
15966
|
/** Failure detail — present on a `dead` row. */
|
|
15967
15967
|
error: string().optional(),
|
|
15968
|
-
subject: NcHistorySubjectSchema
|
|
15968
|
+
subject: NcHistorySubjectSchema,
|
|
15969
|
+
/**
|
|
15970
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
15971
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
15972
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
15973
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
15974
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
15975
|
+
*
|
|
15976
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
15977
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
15978
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
15979
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
15980
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
15981
|
+
* Assistant export) must render as "no image right now", never as a
|
|
15982
|
+
* broken link.
|
|
15983
|
+
*/
|
|
15984
|
+
artifactIds: array(string().min(1)).optional()
|
|
15969
15985
|
});
|
|
15970
15986
|
/**
|
|
15971
15987
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -16192,7 +16208,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
16192
16208
|
}), method(object({}), object({
|
|
16193
16209
|
catalog: array(NcConditionDescriptorSchema),
|
|
16194
16210
|
taxonomy: NcTaxonomySchema.optional()
|
|
16195
|
-
})), method(object({ filter: NcHistoryFilterSchema.default({ limit: 100 }) }), object({ entries: array(NcHistoryEntrySchema) }), { auth: "admin" }), method(object({}), object({ snoozes: array(NcSnoozeSchema) }), { caller: "required" }), method(object({ snooze: NcSnoozeInputSchema }), object({ snooze: NcSnoozeSchema }), {
|
|
16211
|
+
})), method(object({ filter: NcHistoryFilterSchema.default({ limit: 100 }) }), object({ entries: array(NcHistoryEntrySchema) }), { auth: "admin" }), method(object({ artifactId: string().min(1) }), object({ url: string().nullable() }), { auth: "admin" }), method(object({}), object({ snoozes: array(NcSnoozeSchema) }), { caller: "required" }), method(object({ snooze: NcSnoozeInputSchema }), object({ snooze: NcSnoozeSchema }), {
|
|
16196
16212
|
kind: "mutation",
|
|
16197
16213
|
caller: "required"
|
|
16198
16214
|
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
@@ -27449,6 +27465,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
27449
27465
|
/** Media ms the returned fragment covers. */
|
|
27450
27466
|
gopDurMs: number()
|
|
27451
27467
|
});
|
|
27468
|
+
/**
|
|
27469
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
27470
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
27471
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
27472
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
27473
|
+
*
|
|
27474
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
27475
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
27476
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
27477
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
27478
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
27479
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
27480
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
27481
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
27482
|
+
* bytes nothing has proven decodable.
|
|
27483
|
+
*/
|
|
27484
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
27485
|
+
kind: literal("ok"),
|
|
27486
|
+
data: _instanceof(Uint8Array),
|
|
27487
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
27488
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
27489
|
+
gopStartMs: number(),
|
|
27490
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
27491
|
+
gopDurMs: number(),
|
|
27492
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
27493
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
27494
|
+
reachesRequestedEnd: boolean()
|
|
27495
|
+
}), object({
|
|
27496
|
+
kind: literal("spans-multiple-segments"),
|
|
27497
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
27498
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
27499
|
+
segmentEndMs: number()
|
|
27500
|
+
})]);
|
|
27452
27501
|
method(object({
|
|
27453
27502
|
deviceId: number(),
|
|
27454
27503
|
fromMs: number(),
|
|
@@ -27499,6 +27548,15 @@ method(object({
|
|
|
27499
27548
|
}), ReadGopBytesResultSchema, {
|
|
27500
27549
|
kind: "query",
|
|
27501
27550
|
auth: "admin"
|
|
27551
|
+
}), method(object({
|
|
27552
|
+
deviceId: number(),
|
|
27553
|
+
profile: string(),
|
|
27554
|
+
startMs: number(),
|
|
27555
|
+
fromMs: number(),
|
|
27556
|
+
toMs: number()
|
|
27557
|
+
}), ReadWindowBytesResultSchema, {
|
|
27558
|
+
kind: "query",
|
|
27559
|
+
auth: "admin"
|
|
27502
27560
|
}), method(object({
|
|
27503
27561
|
deviceId: number(),
|
|
27504
27562
|
config: RecordingConfigSchema
|
|
@@ -34017,6 +34075,12 @@ Object.freeze({
|
|
|
34017
34075
|
addonId: null,
|
|
34018
34076
|
access: "view"
|
|
34019
34077
|
},
|
|
34078
|
+
"notificationRules.resolveArtifactUrl": {
|
|
34079
|
+
capName: "notification-rules",
|
|
34080
|
+
capScope: "system",
|
|
34081
|
+
addonId: null,
|
|
34082
|
+
access: "view"
|
|
34083
|
+
},
|
|
34020
34084
|
"notificationRules.setAlarmConfig": {
|
|
34021
34085
|
capName: "notification-rules",
|
|
34022
34086
|
capScope: "system",
|
|
@@ -35421,6 +35485,12 @@ Object.freeze({
|
|
|
35421
35485
|
addonId: null,
|
|
35422
35486
|
access: "view"
|
|
35423
35487
|
},
|
|
35488
|
+
"recording.readWindowBytes": {
|
|
35489
|
+
capName: "recording",
|
|
35490
|
+
capScope: "system",
|
|
35491
|
+
addonId: null,
|
|
35492
|
+
access: "view"
|
|
35493
|
+
},
|
|
35424
35494
|
"recording.refreshStorageLocationsForMigration": {
|
|
35425
35495
|
capName: "recording",
|
|
35426
35496
|
capScope: "system",
|
|
@@ -38251,6 +38321,11 @@ Object.freeze({
|
|
|
38251
38321
|
form: "single",
|
|
38252
38322
|
optional: false
|
|
38253
38323
|
}],
|
|
38324
|
+
"recording.readWindowBytes": [{
|
|
38325
|
+
name: "deviceId",
|
|
38326
|
+
form: "single",
|
|
38327
|
+
optional: false
|
|
38328
|
+
}],
|
|
38254
38329
|
"recording.relocateFootage": [{
|
|
38255
38330
|
name: "deviceId",
|
|
38256
38331
|
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.38",
|
|
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",
|