@camstack/addon-agent-ui 1.2.31 → 1.2.32
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 +78 -3
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -15483,7 +15483,23 @@ var NcHistoryEntrySchema = object({
|
|
|
15483
15483
|
updatedAt: number(),
|
|
15484
15484
|
/** Failure detail — present on a `dead` row. */
|
|
15485
15485
|
error: string().optional(),
|
|
15486
|
-
subject: NcHistorySubjectSchema
|
|
15486
|
+
subject: NcHistorySubjectSchema,
|
|
15487
|
+
/**
|
|
15488
|
+
* Ids of the artefacts (still, then gif, then clip) this row's successful
|
|
15489
|
+
* delivery indexed in the artefact library — a REFERENCE, never the bytes
|
|
15490
|
+
* (an artefact is often megabytes; this row is durable JSON rewritten on
|
|
15491
|
+
* every delivery attempt). Absent on a row still pending/dead, a row
|
|
15492
|
+
* delivered before this field shipped, or a wiring with no artefact index.
|
|
15493
|
+
*
|
|
15494
|
+
* Resolve one to a fetchable URL with `resolveArtifactUrl` — an id
|
|
15495
|
+
* outlives any one URL's TTL, so a caller mints a fresh link on demand
|
|
15496
|
+
* rather than trusting one frozen at delivery time. `resolveArtifactUrl`
|
|
15497
|
+
* also answers `null` for an id whose artefact has since expired past the
|
|
15498
|
+
* retained shelf's own age bound — the degrade a caller (the Home
|
|
15499
|
+
* Assistant export) must render as "no image right now", never as a
|
|
15500
|
+
* broken link.
|
|
15501
|
+
*/
|
|
15502
|
+
artifactIds: array(string().min(1)).optional()
|
|
15487
15503
|
});
|
|
15488
15504
|
/**
|
|
15489
15505
|
* Query filter for `getHistory` (spec §4.2). Every field is a narrowing
|
|
@@ -15710,7 +15726,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
15710
15726
|
}), method(object({}), object({
|
|
15711
15727
|
catalog: array(NcConditionDescriptorSchema),
|
|
15712
15728
|
taxonomy: NcTaxonomySchema.optional()
|
|
15713
|
-
})), 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 }), {
|
|
15729
|
+
})), 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 }), {
|
|
15714
15730
|
kind: "mutation",
|
|
15715
15731
|
caller: "required"
|
|
15716
15732
|
}), method(object({ snoozeId: string() }), object({ success: literal(true) }), {
|
|
@@ -25002,6 +25018,39 @@ var ReadGopBytesResultSchema = object({
|
|
|
25002
25018
|
/** Media ms the returned fragment covers. */
|
|
25003
25019
|
gopDurMs: number()
|
|
25004
25020
|
});
|
|
25021
|
+
/**
|
|
25022
|
+
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
25023
|
+
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
25024
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-clip-su-pipeline.md`):
|
|
25025
|
+
* a replay needs several seconds of native pixels, not one frame.
|
|
25026
|
+
*
|
|
25027
|
+
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
25028
|
+
* is `false` when the returned bytes were cut short by the read's own safety
|
|
25029
|
+
* byte cap before covering `[fromMs, toMs)` — a truncation, reported, not a
|
|
25030
|
+
* silently shorter answer. `spans-multiple-segments` is a REFUSAL, not a
|
|
25031
|
+
* degradation: a window whose end falls past the covering segment would need
|
|
25032
|
+
* bytes stitched from a second segment file (its own `ftyp`+`moov`), which is
|
|
25033
|
+
* not one standalone-demuxable stream — the caller's answer is to request a
|
|
25034
|
+
* shorter window or one aligned to a single segment, not to receive spliced
|
|
25035
|
+
* bytes nothing has proven decodable.
|
|
25036
|
+
*/
|
|
25037
|
+
var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
|
|
25038
|
+
kind: literal("ok"),
|
|
25039
|
+
data: _instanceof(Uint8Array),
|
|
25040
|
+
/** Absolute epoch ms of the returned bytes' first sample — at or before
|
|
25041
|
+
* the requested `fromMs` (anchored on the nearest keyframe). */
|
|
25042
|
+
gopStartMs: number(),
|
|
25043
|
+
/** Media ms the returned bytes cover, from `gopStartMs`. */
|
|
25044
|
+
gopDurMs: number(),
|
|
25045
|
+
/** `false` ⇒ the safety byte cap cut the read short before it reached
|
|
25046
|
+
* the requested `toMs`; the caller got fewer frames than asked for. */
|
|
25047
|
+
reachesRequestedEnd: boolean()
|
|
25048
|
+
}), object({
|
|
25049
|
+
kind: literal("spans-multiple-segments"),
|
|
25050
|
+
/** Where the covering segment's own footage runs out — informational,
|
|
25051
|
+
* not a retry hint (retrying the same window would refuse again). */
|
|
25052
|
+
segmentEndMs: number()
|
|
25053
|
+
})]);
|
|
25005
25054
|
method(object({
|
|
25006
25055
|
deviceId: number(),
|
|
25007
25056
|
fromMs: number(),
|
|
@@ -25052,6 +25101,15 @@ method(object({
|
|
|
25052
25101
|
}), ReadGopBytesResultSchema, {
|
|
25053
25102
|
kind: "query",
|
|
25054
25103
|
auth: "admin"
|
|
25104
|
+
}), method(object({
|
|
25105
|
+
deviceId: number(),
|
|
25106
|
+
profile: string(),
|
|
25107
|
+
startMs: number(),
|
|
25108
|
+
fromMs: number(),
|
|
25109
|
+
toMs: number()
|
|
25110
|
+
}), ReadWindowBytesResultSchema, {
|
|
25111
|
+
kind: "query",
|
|
25112
|
+
auth: "admin"
|
|
25055
25113
|
}), method(object({
|
|
25056
25114
|
deviceId: number(),
|
|
25057
25115
|
config: RecordingConfigSchema
|
|
@@ -29470,6 +29528,12 @@ Object.freeze({
|
|
|
29470
29528
|
addonId: null,
|
|
29471
29529
|
access: "view"
|
|
29472
29530
|
},
|
|
29531
|
+
"notificationRules.resolveArtifactUrl": {
|
|
29532
|
+
capName: "notification-rules",
|
|
29533
|
+
capScope: "system",
|
|
29534
|
+
addonId: null,
|
|
29535
|
+
access: "view"
|
|
29536
|
+
},
|
|
29473
29537
|
"notificationRules.setAlarmConfig": {
|
|
29474
29538
|
capName: "notification-rules",
|
|
29475
29539
|
capScope: "system",
|
|
@@ -30874,6 +30938,12 @@ Object.freeze({
|
|
|
30874
30938
|
addonId: null,
|
|
30875
30939
|
access: "view"
|
|
30876
30940
|
},
|
|
30941
|
+
"recording.readWindowBytes": {
|
|
30942
|
+
capName: "recording",
|
|
30943
|
+
capScope: "system",
|
|
30944
|
+
addonId: null,
|
|
30945
|
+
access: "view"
|
|
30946
|
+
},
|
|
30877
30947
|
"recording.refreshStorageLocationsForMigration": {
|
|
30878
30948
|
capName: "recording",
|
|
30879
30949
|
capScope: "system",
|
|
@@ -33704,6 +33774,11 @@ Object.freeze({
|
|
|
33704
33774
|
form: "single",
|
|
33705
33775
|
optional: false
|
|
33706
33776
|
}],
|
|
33777
|
+
"recording.readWindowBytes": [{
|
|
33778
|
+
name: "deviceId",
|
|
33779
|
+
form: "single",
|
|
33780
|
+
optional: false
|
|
33781
|
+
}],
|
|
33707
33782
|
"recording.relocateFootage": [{
|
|
33708
33783
|
name: "deviceId",
|
|
33709
33784
|
form: "single",
|
|
@@ -34550,7 +34625,7 @@ var AgentUIAddon = class extends BaseAddon {
|
|
|
34550
34625
|
capability: adminUiCapability,
|
|
34551
34626
|
provider: {
|
|
34552
34627
|
getStaticDir: async () => ({ staticDir: path.resolve(__dirname) }),
|
|
34553
|
-
getVersion: async () => ({ version: "1.2.
|
|
34628
|
+
getVersion: async () => ({ version: "1.2.32" })
|
|
34554
34629
|
}
|
|
34555
34630
|
}];
|
|
34556
34631
|
}
|