@camstack/addon-provider-rtsp 1.2.30 → 1.2.31
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
|
@@ -15838,7 +15838,23 @@ var NcHistoryEntrySchema = object({
|
|
|
15838
15838
|
updatedAt: number(),
|
|
15839
15839
|
/** Failure detail — present on a `dead` row. */
|
|
15840
15840
|
error: string().optional(),
|
|
15841
|
-
subject: NcHistorySubjectSchema
|
|
15841
|
+
subject: NcHistorySubjectSchema,
|
|
15842
|
+
/**
|
|
15843
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
15844
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
15845
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
15846
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
15847
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
15848
|
+
*
|
|
15849
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
15850
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
15851
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
15852
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
15853
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
15854
|
+
* Assistant export) must render as "no image right now", never as a
|
|
15855
|
+
* broken link.
|
|
15856
|
+
*/
|
|
15857
|
+
artifactIds: array(string().min(1)).optional()
|
|
15842
15858
|
});
|
|
15843
15859
|
/**
|
|
15844
15860
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -16065,7 +16081,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
16065
16081
|
}), method(object({}), object({
|
|
16066
16082
|
catalog: array(NcConditionDescriptorSchema),
|
|
16067
16083
|
taxonomy: NcTaxonomySchema.optional()
|
|
16068
|
-
})), 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 }), {
|
|
16084
|
+
})), 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 }), {
|
|
16069
16085
|
kind: "mutation",
|
|
16070
16086
|
caller: "required"
|
|
16071
16087
|
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
@@ -27197,6 +27213,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
27197
27213
|
/** Media ms the returned fragment covers. */
|
|
27198
27214
|
gopDurMs: number()
|
|
27199
27215
|
});
|
|
27216
|
+
/**
|
|
27217
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
27218
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
27219
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
27220
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
27221
|
+
*
|
|
27222
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
27223
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
27224
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
27225
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
27226
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
27227
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
27228
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
27229
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
27230
|
+
* bytes nothing has proven decodable.
|
|
27231
|
+
*/
|
|
27232
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
27233
|
+
kind: literal("ok"),
|
|
27234
|
+
data: _instanceof(Uint8Array),
|
|
27235
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
27236
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
27237
|
+
gopStartMs: number(),
|
|
27238
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
27239
|
+
gopDurMs: number(),
|
|
27240
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
27241
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
27242
|
+
reachesRequestedEnd: boolean()
|
|
27243
|
+
}), object({
|
|
27244
|
+
kind: literal("spans-multiple-segments"),
|
|
27245
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
27246
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
27247
|
+
segmentEndMs: number()
|
|
27248
|
+
})]);
|
|
27200
27249
|
method(object({
|
|
27201
27250
|
deviceId: number(),
|
|
27202
27251
|
fromMs: number(),
|
|
@@ -27247,6 +27296,15 @@ method(object({
|
|
|
27247
27296
|
}), ReadGopBytesResultSchema, {
|
|
27248
27297
|
kind: "query",
|
|
27249
27298
|
auth: "admin"
|
|
27299
|
+
}), method(object({
|
|
27300
|
+
deviceId: number(),
|
|
27301
|
+
profile: string(),
|
|
27302
|
+
startMs: number(),
|
|
27303
|
+
fromMs: number(),
|
|
27304
|
+
toMs: number()
|
|
27305
|
+
}), ReadWindowBytesResultSchema, {
|
|
27306
|
+
kind: "query",
|
|
27307
|
+
auth: "admin"
|
|
27250
27308
|
}), method(object({
|
|
27251
27309
|
deviceId: number(),
|
|
27252
27310
|
config: RecordingConfigSchema
|
|
@@ -33400,6 +33458,12 @@ Object.freeze({
|
|
|
33400
33458
|
addonId: null,
|
|
33401
33459
|
access: "view"
|
|
33402
33460
|
},
|
|
33461
|
+
"notificationRules.resolveArtifactUrl": {
|
|
33462
|
+
capName: "notification-rules",
|
|
33463
|
+
capScope: "system",
|
|
33464
|
+
addonId: null,
|
|
33465
|
+
access: "view"
|
|
33466
|
+
},
|
|
33403
33467
|
"notificationRules.setAlarmConfig": {
|
|
33404
33468
|
capName: "notification-rules",
|
|
33405
33469
|
capScope: "system",
|
|
@@ -34804,6 +34868,12 @@ Object.freeze({
|
|
|
34804
34868
|
addonId: null,
|
|
34805
34869
|
access: "view"
|
|
34806
34870
|
},
|
|
34871
|
+
"recording.readWindowBytes": {
|
|
34872
|
+
capName: "recording",
|
|
34873
|
+
capScope: "system",
|
|
34874
|
+
addonId: null,
|
|
34875
|
+
access: "view"
|
|
34876
|
+
},
|
|
34807
34877
|
"recording.refreshStorageLocationsForMigration": {
|
|
34808
34878
|
capName: "recording",
|
|
34809
34879
|
capScope: "system",
|
|
@@ -37634,6 +37704,11 @@ Object.freeze({
|
|
|
37634
37704
|
form: "single",
|
|
37635
37705
|
optional: false
|
|
37636
37706
|
}],
|
|
37707
|
+
"recording.readWindowBytes": [{
|
|
37708
|
+
name: "deviceId",
|
|
37709
|
+
form: "single",
|
|
37710
|
+
optional: false
|
|
37711
|
+
}],
|
|
37637
37712
|
"recording.relocateFootage": [{
|
|
37638
37713
|
name: "deviceId",
|
|
37639
37714
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -15814,7 +15814,23 @@ var NcHistoryEntrySchema = object({
|
|
|
15814
15814
|
updatedAt: number(),
|
|
15815
15815
|
/** Failure detail — present on a `dead` row. */
|
|
15816
15816
|
error: string().optional(),
|
|
15817
|
-
subject: NcHistorySubjectSchema
|
|
15817
|
+
subject: NcHistorySubjectSchema,
|
|
15818
|
+
/**
|
|
15819
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
15820
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
15821
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
15822
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
15823
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
15824
|
+
*
|
|
15825
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
15826
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
15827
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
15828
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
15829
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
15830
|
+
* Assistant export) must render as "no image right now", never as a
|
|
15831
|
+
* broken link.
|
|
15832
|
+
*/
|
|
15833
|
+
artifactIds: array(string().min(1)).optional()
|
|
15818
15834
|
});
|
|
15819
15835
|
/**
|
|
15820
15836
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -16041,7 +16057,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
16041
16057
|
}), method(object({}), object({
|
|
16042
16058
|
catalog: array(NcConditionDescriptorSchema),
|
|
16043
16059
|
taxonomy: NcTaxonomySchema.optional()
|
|
16044
|
-
})), 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 }), {
|
|
16060
|
+
})), 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 }), {
|
|
16045
16061
|
kind: "mutation",
|
|
16046
16062
|
caller: "required"
|
|
16047
16063
|
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
@@ -27173,6 +27189,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
27173
27189
|
/** Media ms the returned fragment covers. */
|
|
27174
27190
|
gopDurMs: number()
|
|
27175
27191
|
});
|
|
27192
|
+
/**
|
|
27193
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
27194
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
27195
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
27196
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
27197
|
+
*
|
|
27198
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
27199
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
27200
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
27201
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
27202
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
27203
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
27204
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
27205
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
27206
|
+
* bytes nothing has proven decodable.
|
|
27207
|
+
*/
|
|
27208
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
27209
|
+
kind: literal("ok"),
|
|
27210
|
+
data: _instanceof(Uint8Array),
|
|
27211
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
27212
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
27213
|
+
gopStartMs: number(),
|
|
27214
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
27215
|
+
gopDurMs: number(),
|
|
27216
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
27217
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
27218
|
+
reachesRequestedEnd: boolean()
|
|
27219
|
+
}), object({
|
|
27220
|
+
kind: literal("spans-multiple-segments"),
|
|
27221
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
27222
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
27223
|
+
segmentEndMs: number()
|
|
27224
|
+
})]);
|
|
27176
27225
|
method(object({
|
|
27177
27226
|
deviceId: number(),
|
|
27178
27227
|
fromMs: number(),
|
|
@@ -27223,6 +27272,15 @@ method(object({
|
|
|
27223
27272
|
}), ReadGopBytesResultSchema, {
|
|
27224
27273
|
kind: "query",
|
|
27225
27274
|
auth: "admin"
|
|
27275
|
+
}), method(object({
|
|
27276
|
+
deviceId: number(),
|
|
27277
|
+
profile: string(),
|
|
27278
|
+
startMs: number(),
|
|
27279
|
+
fromMs: number(),
|
|
27280
|
+
toMs: number()
|
|
27281
|
+
}), ReadWindowBytesResultSchema, {
|
|
27282
|
+
kind: "query",
|
|
27283
|
+
auth: "admin"
|
|
27226
27284
|
}), method(object({
|
|
27227
27285
|
deviceId: number(),
|
|
27228
27286
|
config: RecordingConfigSchema
|
|
@@ -33376,6 +33434,12 @@ Object.freeze({
|
|
|
33376
33434
|
addonId: null,
|
|
33377
33435
|
access: "view"
|
|
33378
33436
|
},
|
|
33437
|
+
"notificationRules.resolveArtifactUrl": {
|
|
33438
|
+
capName: "notification-rules",
|
|
33439
|
+
capScope: "system",
|
|
33440
|
+
addonId: null,
|
|
33441
|
+
access: "view"
|
|
33442
|
+
},
|
|
33379
33443
|
"notificationRules.setAlarmConfig": {
|
|
33380
33444
|
capName: "notification-rules",
|
|
33381
33445
|
capScope: "system",
|
|
@@ -34780,6 +34844,12 @@ Object.freeze({
|
|
|
34780
34844
|
addonId: null,
|
|
34781
34845
|
access: "view"
|
|
34782
34846
|
},
|
|
34847
|
+
"recording.readWindowBytes": {
|
|
34848
|
+
capName: "recording",
|
|
34849
|
+
capScope: "system",
|
|
34850
|
+
addonId: null,
|
|
34851
|
+
access: "view"
|
|
34852
|
+
},
|
|
34783
34853
|
"recording.refreshStorageLocationsForMigration": {
|
|
34784
34854
|
capName: "recording",
|
|
34785
34855
|
capScope: "system",
|
|
@@ -37610,6 +37680,11 @@ Object.freeze({
|
|
|
37610
37680
|
form: "single",
|
|
37611
37681
|
optional: false
|
|
37612
37682
|
}],
|
|
37683
|
+
"recording.readWindowBytes": [{
|
|
37684
|
+
name: "deviceId",
|
|
37685
|
+
form: "single",
|
|
37686
|
+
optional: false
|
|
37687
|
+
}],
|
|
37613
37688
|
"recording.relocateFootage": [{
|
|
37614
37689
|
name: "deviceId",
|
|
37615
37690
|
form: "single",
|