@camstack/addon-agent-ui 1.1.27 → 1.1.28
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 +145 -2
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -7338,6 +7338,62 @@ var RecordingConfigSchema = object({
|
|
|
7338
7338
|
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
7339
7339
|
});
|
|
7340
7340
|
/**
|
|
7341
|
+
* Ops-log — the durable, append-only operations audit shared by the
|
|
7342
|
+
* recordings and events management surfaces.
|
|
7343
|
+
*
|
|
7344
|
+
* ONE row shape is reused for both domains so a single "Activity" view can
|
|
7345
|
+
* merge the recorder's DurableState ring (recordings ops-log) and the
|
|
7346
|
+
* pipeline-analytics SQLite collection (events ops-log). Each row records a
|
|
7347
|
+
* management operation, WHY it ran (reason), and its measurable effect
|
|
7348
|
+
* (itemsAffected + bytesReclaimed). Writes are best-effort — a failed log must
|
|
7349
|
+
* never fail the operation it records.
|
|
7350
|
+
*/
|
|
7351
|
+
/** Which management domain the operation belongs to. */
|
|
7352
|
+
var OpsLogDomainSchema = _enum(["recording", "events"]);
|
|
7353
|
+
/** The kind of management operation performed. */
|
|
7354
|
+
var OpsLogOpSchema = _enum([
|
|
7355
|
+
"prune",
|
|
7356
|
+
"manual-delete",
|
|
7357
|
+
"rescan",
|
|
7358
|
+
"retention-run"
|
|
7359
|
+
]);
|
|
7360
|
+
/** Why the operation ran. */
|
|
7361
|
+
var OpsLogReasonSchema = _enum([
|
|
7362
|
+
"retention",
|
|
7363
|
+
"quota",
|
|
7364
|
+
"manual",
|
|
7365
|
+
"operator"
|
|
7366
|
+
]);
|
|
7367
|
+
/** One audit row, shared verbatim by both domains. */
|
|
7368
|
+
var OpsLogEntrySchema = object({
|
|
7369
|
+
/** Unique row id. */
|
|
7370
|
+
id: string(),
|
|
7371
|
+
/** Epoch ms the operation completed. */
|
|
7372
|
+
at: number(),
|
|
7373
|
+
domain: OpsLogDomainSchema,
|
|
7374
|
+
op: OpsLogOpSchema,
|
|
7375
|
+
reason: OpsLogReasonSchema,
|
|
7376
|
+
/** The camera the op targeted; null for a cluster/global op. */
|
|
7377
|
+
deviceId: number().nullable(),
|
|
7378
|
+
/** Node that performed the op (the log carries nodeId — no cross-node aggregation). */
|
|
7379
|
+
nodeId: string(),
|
|
7380
|
+
/** Buckets / rows deleted (op-specific unit). */
|
|
7381
|
+
itemsAffected: number(),
|
|
7382
|
+
/** Bytes reclaimed by the op (0 when not measurable). */
|
|
7383
|
+
bytesReclaimed: number(),
|
|
7384
|
+
/** Free-text detail (e.g. "floor moved to <ts>"); null when none. */
|
|
7385
|
+
detail: string().nullable(),
|
|
7386
|
+
/** Who/what triggered the op. */
|
|
7387
|
+
actor: string()
|
|
7388
|
+
});
|
|
7389
|
+
/** Shared query input for the per-domain `listOpsLog` cap methods. */
|
|
7390
|
+
var OpsLogQueryInputSchema = object({
|
|
7391
|
+
/** Restrict to a single camera; omit for every row. */
|
|
7392
|
+
deviceId: number().optional(),
|
|
7393
|
+
/** Max rows returned, newest-first. */
|
|
7394
|
+
limit: number().int().min(1).max(1e3).optional()
|
|
7395
|
+
});
|
|
7396
|
+
/**
|
|
7341
7397
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
7342
7398
|
* storage a location serves. Defined here (not in `capabilities/storage.cap.ts`)
|
|
7343
7399
|
* so the persisted record schema and the consumer-facing cap can both consume it
|
|
@@ -16138,6 +16194,26 @@ var TrackCascadeCountsSchema = object({
|
|
|
16138
16194
|
/** Per-track CLIP search vectors removed (best-effort). */
|
|
16139
16195
|
embeddings: number().int()
|
|
16140
16196
|
});
|
|
16197
|
+
/** Event-store footprint for one camera. */
|
|
16198
|
+
var EventStoreDeviceFootprintSchema = object({
|
|
16199
|
+
deviceId: number(),
|
|
16200
|
+
/** Persisted event rows (motion + object + audio) for the camera. */
|
|
16201
|
+
rows: number().int(),
|
|
16202
|
+
/** Event-owned media bytes on disk for the camera. */
|
|
16203
|
+
bytes: number().int()
|
|
16204
|
+
});
|
|
16205
|
+
/** Aggregate event-store footprint: global totals + per-camera breakdown. */
|
|
16206
|
+
var EventStoreFootprintSchema = object({
|
|
16207
|
+
totalRows: number().int(),
|
|
16208
|
+
totalBytes: number().int(),
|
|
16209
|
+
devices: array(EventStoreDeviceFootprintSchema).readonly()
|
|
16210
|
+
});
|
|
16211
|
+
/** Per-kind counts returned by the event-prune / device-delete mutations. */
|
|
16212
|
+
var EventPruneCountsSchema = object({
|
|
16213
|
+
motion: number().int(),
|
|
16214
|
+
object: number().int(),
|
|
16215
|
+
audio: number().int()
|
|
16216
|
+
});
|
|
16141
16217
|
DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).readonly()), method(object({
|
|
16142
16218
|
deviceId: number(),
|
|
16143
16219
|
trackId: string()
|
|
@@ -16201,6 +16277,21 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
16201
16277
|
}), {
|
|
16202
16278
|
kind: "mutation",
|
|
16203
16279
|
auth: "admin"
|
|
16280
|
+
}), method(object({}), EventStoreFootprintSchema, {
|
|
16281
|
+
kind: "query",
|
|
16282
|
+
auth: "admin"
|
|
16283
|
+
}), method(object({
|
|
16284
|
+
olderThanMs: number(),
|
|
16285
|
+
reason: OpsLogReasonSchema.optional()
|
|
16286
|
+
}), EventPruneCountsSchema, {
|
|
16287
|
+
kind: "mutation",
|
|
16288
|
+
auth: "admin"
|
|
16289
|
+
}), method(object({ deviceId: number() }), EventPruneCountsSchema, {
|
|
16290
|
+
kind: "mutation",
|
|
16291
|
+
auth: "admin"
|
|
16292
|
+
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
16293
|
+
kind: "query",
|
|
16294
|
+
auth: "admin"
|
|
16204
16295
|
}), method(object({
|
|
16205
16296
|
eventId: string(),
|
|
16206
16297
|
kind: MediaFileKindEnum.optional()
|
|
@@ -19434,13 +19525,29 @@ method(object({
|
|
|
19434
19525
|
}), method(object({ deviceId: number() }), RecordingStatusSchema, {
|
|
19435
19526
|
kind: "mutation",
|
|
19436
19527
|
auth: "admin"
|
|
19437
|
-
}), method(object({
|
|
19528
|
+
}), method(object({
|
|
19529
|
+
deviceId: number(),
|
|
19530
|
+
reason: OpsLogReasonSchema.optional()
|
|
19531
|
+
}), object({
|
|
19438
19532
|
floorMs: number().nullable(),
|
|
19439
19533
|
deletedBuckets: number().int(),
|
|
19440
19534
|
reclaimedBytes: number().int()
|
|
19441
19535
|
}), {
|
|
19442
19536
|
kind: "mutation",
|
|
19443
19537
|
auth: "admin"
|
|
19538
|
+
}), method(object({
|
|
19539
|
+
deviceId: number(),
|
|
19540
|
+
fromMs: number().optional(),
|
|
19541
|
+
toMs: number().optional()
|
|
19542
|
+
}), object({
|
|
19543
|
+
deletedBuckets: number().int(),
|
|
19544
|
+
reclaimedBytes: number().int()
|
|
19545
|
+
}), {
|
|
19546
|
+
kind: "mutation",
|
|
19547
|
+
auth: "admin"
|
|
19548
|
+
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
19549
|
+
kind: "query",
|
|
19550
|
+
auth: "admin"
|
|
19444
19551
|
});
|
|
19445
19552
|
/**
|
|
19446
19553
|
* `recordingExport` cap — render a footage time range into a single downloadable
|
|
@@ -22562,6 +22669,12 @@ Object.freeze({
|
|
|
22562
22669
|
addonId: null,
|
|
22563
22670
|
access: "delete"
|
|
22564
22671
|
},
|
|
22672
|
+
"pipelineAnalytics.deleteDeviceEvents": {
|
|
22673
|
+
capName: "pipeline-analytics",
|
|
22674
|
+
capScope: "device",
|
|
22675
|
+
addonId: null,
|
|
22676
|
+
access: "delete"
|
|
22677
|
+
},
|
|
22565
22678
|
"pipelineAnalytics.deleteTracks": {
|
|
22566
22679
|
capName: "pipeline-analytics",
|
|
22567
22680
|
capScope: "device",
|
|
@@ -22592,6 +22705,12 @@ Object.freeze({
|
|
|
22592
22705
|
addonId: null,
|
|
22593
22706
|
access: "view"
|
|
22594
22707
|
},
|
|
22708
|
+
"pipelineAnalytics.getEventStoreFootprint": {
|
|
22709
|
+
capName: "pipeline-analytics",
|
|
22710
|
+
capScope: "device",
|
|
22711
|
+
addonId: null,
|
|
22712
|
+
access: "view"
|
|
22713
|
+
},
|
|
22595
22714
|
"pipelineAnalytics.getKeyEvents": {
|
|
22596
22715
|
capName: "pipeline-analytics",
|
|
22597
22716
|
capScope: "device",
|
|
@@ -22634,6 +22753,12 @@ Object.freeze({
|
|
|
22634
22753
|
addonId: null,
|
|
22635
22754
|
access: "view"
|
|
22636
22755
|
},
|
|
22756
|
+
"pipelineAnalytics.listOpsLog": {
|
|
22757
|
+
capName: "pipeline-analytics",
|
|
22758
|
+
capScope: "device",
|
|
22759
|
+
addonId: null,
|
|
22760
|
+
access: "view"
|
|
22761
|
+
},
|
|
22637
22762
|
"pipelineAnalytics.listRecentTracks": {
|
|
22638
22763
|
capName: "pipeline-analytics",
|
|
22639
22764
|
capScope: "device",
|
|
@@ -22646,6 +22771,12 @@ Object.freeze({
|
|
|
22646
22771
|
addonId: null,
|
|
22647
22772
|
access: "view"
|
|
22648
22773
|
},
|
|
22774
|
+
"pipelineAnalytics.pruneEvents": {
|
|
22775
|
+
capName: "pipeline-analytics",
|
|
22776
|
+
capScope: "device",
|
|
22777
|
+
addonId: null,
|
|
22778
|
+
access: "create"
|
|
22779
|
+
},
|
|
22649
22780
|
"pipelineAnalytics.pruneEventsBefore": {
|
|
22650
22781
|
capName: "pipeline-analytics",
|
|
22651
22782
|
capScope: "device",
|
|
@@ -23408,6 +23539,12 @@ Object.freeze({
|
|
|
23408
23539
|
addonId: null,
|
|
23409
23540
|
access: "create"
|
|
23410
23541
|
},
|
|
23542
|
+
"recording.deleteFootprint": {
|
|
23543
|
+
capName: "recording",
|
|
23544
|
+
capScope: "system",
|
|
23545
|
+
addonId: null,
|
|
23546
|
+
access: "delete"
|
|
23547
|
+
},
|
|
23411
23548
|
"recording.getAvailability": {
|
|
23412
23549
|
capName: "recording",
|
|
23413
23550
|
capScope: "system",
|
|
@@ -23438,6 +23575,12 @@ Object.freeze({
|
|
|
23438
23575
|
addonId: null,
|
|
23439
23576
|
access: "view"
|
|
23440
23577
|
},
|
|
23578
|
+
"recording.listOpsLog": {
|
|
23579
|
+
capName: "recording",
|
|
23580
|
+
capScope: "system",
|
|
23581
|
+
addonId: null,
|
|
23582
|
+
access: "view"
|
|
23583
|
+
},
|
|
23441
23584
|
"recording.locateSegment": {
|
|
23442
23585
|
capName: "recording",
|
|
23443
23586
|
capScope: "system",
|
|
@@ -24683,7 +24826,7 @@ var AgentUIAddon = class extends BaseAddon {
|
|
|
24683
24826
|
capability: adminUiCapability,
|
|
24684
24827
|
provider: {
|
|
24685
24828
|
getStaticDir: async () => ({ staticDir: path.resolve(__dirname) }),
|
|
24686
|
-
getVersion: async () => ({ version: "1.1.
|
|
24829
|
+
getVersion: async () => ({ version: "1.1.28" })
|
|
24687
24830
|
}
|
|
24688
24831
|
}];
|
|
24689
24832
|
}
|