@camstack/addon-provider-onvif 1.2.29 → 1.2.30
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
|
@@ -15534,7 +15534,23 @@ var NcHistoryEntrySchema = object({
|
|
|
15534
15534
|
updatedAt: number(),
|
|
15535
15535
|
/** Failure detail — present on a `dead` row. */
|
|
15536
15536
|
error: string().optional(),
|
|
15537
|
-
subject: NcHistorySubjectSchema
|
|
15537
|
+
subject: NcHistorySubjectSchema,
|
|
15538
|
+
/**
|
|
15539
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
15540
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
15541
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
15542
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
15543
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
15544
|
+
*
|
|
15545
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
15546
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
15547
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
15548
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
15549
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
15550
|
+
* Assistant export) must render as "no image right now", never as a
|
|
15551
|
+
* broken link.
|
|
15552
|
+
*/
|
|
15553
|
+
artifactIds: array(string().min(1)).optional()
|
|
15538
15554
|
});
|
|
15539
15555
|
/**
|
|
15540
15556
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -15761,7 +15777,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
15761
15777
|
}), method(object({}), object({
|
|
15762
15778
|
catalog: array(NcConditionDescriptorSchema),
|
|
15763
15779
|
taxonomy: NcTaxonomySchema.optional()
|
|
15764
|
-
})), 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 }), {
|
|
15780
|
+
})), 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 }), {
|
|
15765
15781
|
kind: "mutation",
|
|
15766
15782
|
caller: "required"
|
|
15767
15783
|
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
@@ -25199,6 +25215,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
25199
25215
|
/** Media ms the returned fragment covers. */
|
|
25200
25216
|
gopDurMs: number()
|
|
25201
25217
|
});
|
|
25218
|
+
/**
|
|
25219
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
25220
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
25221
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
25222
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
25223
|
+
*
|
|
25224
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
25225
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
25226
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
25227
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
25228
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
25229
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
25230
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
25231
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
25232
|
+
* bytes nothing has proven decodable.
|
|
25233
|
+
*/
|
|
25234
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
25235
|
+
kind: literal("ok"),
|
|
25236
|
+
data: _instanceof(Uint8Array),
|
|
25237
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
25238
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
25239
|
+
gopStartMs: number(),
|
|
25240
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
25241
|
+
gopDurMs: number(),
|
|
25242
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
25243
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
25244
|
+
reachesRequestedEnd: boolean()
|
|
25245
|
+
}), object({
|
|
25246
|
+
kind: literal("spans-multiple-segments"),
|
|
25247
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
25248
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
25249
|
+
segmentEndMs: number()
|
|
25250
|
+
})]);
|
|
25202
25251
|
method(object({
|
|
25203
25252
|
deviceId: number(),
|
|
25204
25253
|
fromMs: number(),
|
|
@@ -25249,6 +25298,15 @@ method(object({
|
|
|
25249
25298
|
}), ReadGopBytesResultSchema, {
|
|
25250
25299
|
kind: "query",
|
|
25251
25300
|
auth: "admin"
|
|
25301
|
+
}), method(object({
|
|
25302
|
+
deviceId: number(),
|
|
25303
|
+
profile: string(),
|
|
25304
|
+
startMs: number(),
|
|
25305
|
+
fromMs: number(),
|
|
25306
|
+
toMs: number()
|
|
25307
|
+
}), ReadWindowBytesResultSchema, {
|
|
25308
|
+
kind: "query",
|
|
25309
|
+
auth: "admin"
|
|
25252
25310
|
}), method(object({
|
|
25253
25311
|
deviceId: number(),
|
|
25254
25312
|
config: RecordingConfigSchema
|
|
@@ -30077,6 +30135,12 @@ Object.freeze({
|
|
|
30077
30135
|
addonId: null,
|
|
30078
30136
|
access: "view"
|
|
30079
30137
|
},
|
|
30138
|
+
"notificationRules.resolveArtifactUrl": {
|
|
30139
|
+
capName: "notification-rules",
|
|
30140
|
+
capScope: "system",
|
|
30141
|
+
addonId: null,
|
|
30142
|
+
access: "view"
|
|
30143
|
+
},
|
|
30080
30144
|
"notificationRules.setAlarmConfig": {
|
|
30081
30145
|
capName: "notification-rules",
|
|
30082
30146
|
capScope: "system",
|
|
@@ -31481,6 +31545,12 @@ Object.freeze({
|
|
|
31481
31545
|
addonId: null,
|
|
31482
31546
|
access: "view"
|
|
31483
31547
|
},
|
|
31548
|
+
"recording.readWindowBytes": {
|
|
31549
|
+
capName: "recording",
|
|
31550
|
+
capScope: "system",
|
|
31551
|
+
addonId: null,
|
|
31552
|
+
access: "view"
|
|
31553
|
+
},
|
|
31484
31554
|
"recording.refreshStorageLocationsForMigration": {
|
|
31485
31555
|
capName: "recording",
|
|
31486
31556
|
capScope: "system",
|
|
@@ -34311,6 +34381,11 @@ Object.freeze({
|
|
|
34311
34381
|
form: "single",
|
|
34312
34382
|
optional: false
|
|
34313
34383
|
}],
|
|
34384
|
+
"recording.readWindowBytes": [{
|
|
34385
|
+
name: "deviceId",
|
|
34386
|
+
form: "single",
|
|
34387
|
+
optional: false
|
|
34388
|
+
}],
|
|
34314
34389
|
"recording.relocateFootage": [{
|
|
34315
34390
|
name: "deviceId",
|
|
34316
34391
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -15535,7 +15535,23 @@ var NcHistoryEntrySchema = object({
|
|
|
15535
15535
|
updatedAt: number(),
|
|
15536
15536
|
/** Failure detail — present on a `dead` row. */
|
|
15537
15537
|
error: string().optional(),
|
|
15538
|
-
subject: NcHistorySubjectSchema
|
|
15538
|
+
subject: NcHistorySubjectSchema,
|
|
15539
|
+
/**
|
|
15540
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
15541
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
15542
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
15543
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
15544
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
15545
|
+
*
|
|
15546
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
15547
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
15548
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
15549
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
15550
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
15551
|
+
* Assistant export) must render as "no image right now", never as a
|
|
15552
|
+
* broken link.
|
|
15553
|
+
*/
|
|
15554
|
+
artifactIds: array(string().min(1)).optional()
|
|
15539
15555
|
});
|
|
15540
15556
|
/**
|
|
15541
15557
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -15762,7 +15778,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
15762
15778
|
}), method(object({}), object({
|
|
15763
15779
|
catalog: array(NcConditionDescriptorSchema),
|
|
15764
15780
|
taxonomy: NcTaxonomySchema.optional()
|
|
15765
|
-
})), 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 }), {
|
|
15781
|
+
})), 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 }), {
|
|
15766
15782
|
kind: "mutation",
|
|
15767
15783
|
caller: "required"
|
|
15768
15784
|
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
@@ -25200,6 +25216,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
25200
25216
|
/** Media ms the returned fragment covers. */
|
|
25201
25217
|
gopDurMs: number()
|
|
25202
25218
|
});
|
|
25219
|
+
/**
|
|
25220
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
25221
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
25222
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
25223
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
25224
|
+
*
|
|
25225
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
25226
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
25227
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
25228
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
25229
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
25230
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
25231
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
25232
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
25233
|
+
* bytes nothing has proven decodable.
|
|
25234
|
+
*/
|
|
25235
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
25236
|
+
kind: literal("ok"),
|
|
25237
|
+
data: _instanceof(Uint8Array),
|
|
25238
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
25239
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
25240
|
+
gopStartMs: number(),
|
|
25241
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
25242
|
+
gopDurMs: number(),
|
|
25243
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
25244
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
25245
|
+
reachesRequestedEnd: boolean()
|
|
25246
|
+
}), object({
|
|
25247
|
+
kind: literal("spans-multiple-segments"),
|
|
25248
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
25249
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
25250
|
+
segmentEndMs: number()
|
|
25251
|
+
})]);
|
|
25203
25252
|
method(object({
|
|
25204
25253
|
deviceId: number(),
|
|
25205
25254
|
fromMs: number(),
|
|
@@ -25250,6 +25299,15 @@ method(object({
|
|
|
25250
25299
|
}), ReadGopBytesResultSchema, {
|
|
25251
25300
|
kind: "query",
|
|
25252
25301
|
auth: "admin"
|
|
25302
|
+
}), method(object({
|
|
25303
|
+
deviceId: number(),
|
|
25304
|
+
profile: string(),
|
|
25305
|
+
startMs: number(),
|
|
25306
|
+
fromMs: number(),
|
|
25307
|
+
toMs: number()
|
|
25308
|
+
}), ReadWindowBytesResultSchema, {
|
|
25309
|
+
kind: "query",
|
|
25310
|
+
auth: "admin"
|
|
25253
25311
|
}), method(object({
|
|
25254
25312
|
deviceId: number(),
|
|
25255
25313
|
config: RecordingConfigSchema
|
|
@@ -30078,6 +30136,12 @@ Object.freeze({
|
|
|
30078
30136
|
addonId: null,
|
|
30079
30137
|
access: "view"
|
|
30080
30138
|
},
|
|
30139
|
+
"notificationRules.resolveArtifactUrl": {
|
|
30140
|
+
capName: "notification-rules",
|
|
30141
|
+
capScope: "system",
|
|
30142
|
+
addonId: null,
|
|
30143
|
+
access: "view"
|
|
30144
|
+
},
|
|
30081
30145
|
"notificationRules.setAlarmConfig": {
|
|
30082
30146
|
capName: "notification-rules",
|
|
30083
30147
|
capScope: "system",
|
|
@@ -31482,6 +31546,12 @@ Object.freeze({
|
|
|
31482
31546
|
addonId: null,
|
|
31483
31547
|
access: "view"
|
|
31484
31548
|
},
|
|
31549
|
+
"recording.readWindowBytes": {
|
|
31550
|
+
capName: "recording",
|
|
31551
|
+
capScope: "system",
|
|
31552
|
+
addonId: null,
|
|
31553
|
+
access: "view"
|
|
31554
|
+
},
|
|
31485
31555
|
"recording.refreshStorageLocationsForMigration": {
|
|
31486
31556
|
capName: "recording",
|
|
31487
31557
|
capScope: "system",
|
|
@@ -34312,6 +34382,11 @@ Object.freeze({
|
|
|
34312
34382
|
form: "single",
|
|
34313
34383
|
optional: false
|
|
34314
34384
|
}],
|
|
34385
|
+
"recording.readWindowBytes": [{
|
|
34386
|
+
name: "deviceId",
|
|
34387
|
+
form: "single",
|
|
34388
|
+
optional: false
|
|
34389
|
+
}],
|
|
34315
34390
|
"recording.relocateFootage": [{
|
|
34316
34391
|
name: "deviceId",
|
|
34317
34392
|
form: "single",
|