@camstack/addon-provider-hikvision 1.2.57 → 1.2.58
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 +234 -73
- package/dist/addon.mjs +234 -73
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -8091,6 +8091,13 @@ var MediaRelocateModeSchema = _enum([
|
|
|
8091
8091
|
]);
|
|
8092
8092
|
var RelocateMediaInputSchema = object({
|
|
8093
8093
|
toLocationId: string(),
|
|
8094
|
+
/**
|
|
8095
|
+
* Restrict the pass to rows currently on this location. Omitted / `'*'` =
|
|
8096
|
+
* every row that is not already on `toLocationId` (the historical
|
|
8097
|
+
* behaviour). A named source is what a from→to migration needs: without it
|
|
8098
|
+
* "move events off disk 2" also emptied disk 1.
|
|
8099
|
+
*/
|
|
8100
|
+
fromLocationId: string().optional(),
|
|
8094
8101
|
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8095
8102
|
/** Omitted = `move`, the pre-existing behaviour. */
|
|
8096
8103
|
mode: MediaRelocateModeSchema.optional()
|
|
@@ -8158,6 +8165,19 @@ var StorageMigrationDestinationsSchema = object({
|
|
|
8158
8165
|
galleryMedia: string().min(1).optional()
|
|
8159
8166
|
}).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
|
|
8160
8167
|
/**
|
|
8168
|
+
* Optional named source per class. Omitted = the class's current default
|
|
8169
|
+
* (the historical behaviour). A named source that is NOT the default is a
|
|
8170
|
+
* drain of that disk: bytes move, the default stays, and the source is
|
|
8171
|
+
* disabled when the move finishes.
|
|
8172
|
+
*/
|
|
8173
|
+
var StorageMigrationSourcesSchema = object({
|
|
8174
|
+
recordings: string().min(1).optional(),
|
|
8175
|
+
recordingsLow: string().min(1).optional(),
|
|
8176
|
+
eventMedia: string().min(1).optional(),
|
|
8177
|
+
backups: string().min(1).optional(),
|
|
8178
|
+
galleryMedia: string().min(1).optional()
|
|
8179
|
+
}).optional();
|
|
8180
|
+
/**
|
|
8161
8181
|
* How a migration sequences the cutover against the byte move.
|
|
8162
8182
|
*
|
|
8163
8183
|
* - `blocking` — the historical order: pause, move every byte, repoint,
|
|
@@ -8179,6 +8199,8 @@ var StorageMigrationModeSchema = _enum(["blocking", "nonBlocking"]);
|
|
|
8179
8199
|
/** Shared input for planning and starting an orchestrated storage migration. */
|
|
8180
8200
|
var StorageMigrationInputSchema = object({
|
|
8181
8201
|
destinations: StorageMigrationDestinationsSchema,
|
|
8202
|
+
/** Omitted = each class's current default. */
|
|
8203
|
+
sources: StorageMigrationSourcesSchema,
|
|
8182
8204
|
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8183
8205
|
/** Omitted = `blocking`, which stays the default. */
|
|
8184
8206
|
mode: StorageMigrationModeSchema.optional()
|
|
@@ -8258,6 +8280,13 @@ var StorageMigrationMoveSchema = object({
|
|
|
8258
8280
|
storageClass: StorageMigrationClassSchema,
|
|
8259
8281
|
fromLocationId: string(),
|
|
8260
8282
|
toLocationId: string(),
|
|
8283
|
+
/**
|
|
8284
|
+
* True when `from` was NOT the class default at plan time. The move still
|
|
8285
|
+
* copies bytes, but the default is left alone and the source is disabled
|
|
8286
|
+
* once the copy verifies. Absent on jobs planned before this field existed
|
|
8287
|
+
* — those jobs always repointed, which is `false`.
|
|
8288
|
+
*/
|
|
8289
|
+
freezeSource: boolean().optional(),
|
|
8261
8290
|
moverJobId: string().nullable(),
|
|
8262
8291
|
state: RelocateJobStateSchema.nullable(),
|
|
8263
8292
|
error: string().nullable(),
|
|
@@ -8271,6 +8300,7 @@ var StorageMigrationJobSchema = object({
|
|
|
8271
8300
|
* can tell a seconds-long cutover from a thirty-hour one. */
|
|
8272
8301
|
mode: StorageMigrationModeSchema,
|
|
8273
8302
|
destinations: StorageMigrationDestinationsSchema,
|
|
8303
|
+
sources: StorageMigrationSourcesSchema,
|
|
8274
8304
|
throttleMbps: number(),
|
|
8275
8305
|
moves: array(StorageMigrationMoveSchema),
|
|
8276
8306
|
pauseLeaseId: string().nullable(),
|
|
@@ -8296,6 +8326,7 @@ var StorageMigrationFindingSchema = object({
|
|
|
8296
8326
|
});
|
|
8297
8327
|
var StorageMigrationPlanSchema = object({
|
|
8298
8328
|
destinations: StorageMigrationDestinationsSchema,
|
|
8329
|
+
sources: StorageMigrationSourcesSchema,
|
|
8299
8330
|
/** The mode this plan was built for. A plan is only valid for its mode: the
|
|
8300
8331
|
* `eventMedia` seal gate and the single-cardinality refusal both depend on
|
|
8301
8332
|
* it. */
|
|
@@ -8303,7 +8334,8 @@ var StorageMigrationPlanSchema = object({
|
|
|
8303
8334
|
moves: array(object({
|
|
8304
8335
|
storageClass: StorageMigrationClassSchema,
|
|
8305
8336
|
fromLocationId: string(),
|
|
8306
|
-
toLocationId: string()
|
|
8337
|
+
toLocationId: string(),
|
|
8338
|
+
freezeSource: boolean().optional()
|
|
8307
8339
|
})),
|
|
8308
8340
|
findings: array(StorageMigrationFindingSchema)
|
|
8309
8341
|
});
|
|
@@ -8481,10 +8513,51 @@ var LedgerWalkReportSchema = object({
|
|
|
8481
8513
|
var RelocatableMediaCountSchema = object({ rows: number().int().nonnegative() }).nullable();
|
|
8482
8514
|
var RelocatableMediaCountInputSchema = object({
|
|
8483
8515
|
toLocationId: string().min(1),
|
|
8516
|
+
/** Restrict the count to one source; omitted / `'*'` = every non-target row. */
|
|
8517
|
+
fromLocationId: string().optional(),
|
|
8484
8518
|
/** Omitted = `move`. */
|
|
8485
8519
|
mode: MediaRelocateModeSchema.optional()
|
|
8486
8520
|
});
|
|
8487
8521
|
/**
|
|
8522
|
+
* Operator cleanup of leftover analytics rows, optional debug media, and
|
|
8523
|
+
* ghost ledger entries on frozen footage locations.
|
|
8524
|
+
*
|
|
8525
|
+
* A pass is tens of minutes on a standing backlog. The hub method RETURNS
|
|
8526
|
+
* `{ jobId }` immediately; progress is `cleanupStatus`. Awaiting the work
|
|
8527
|
+
* is how `addons.custom` hit the 60 s UDS deadline while reclaim continued
|
|
8528
|
+
* with no operator-visible status.
|
|
8529
|
+
*/
|
|
8530
|
+
var StorageCleanupPhaseSchema = _enum([
|
|
8531
|
+
"orphans",
|
|
8532
|
+
"debug-media",
|
|
8533
|
+
"ghost-ledger",
|
|
8534
|
+
"done",
|
|
8535
|
+
"failed",
|
|
8536
|
+
"cancelled"
|
|
8537
|
+
]);
|
|
8538
|
+
var StorageCleanupInputSchema = object({
|
|
8539
|
+
/** Also walk motion stills / track filmstrips. Off by default. */
|
|
8540
|
+
includeDebugMedia: boolean().optional() });
|
|
8541
|
+
var StorageCleanupJobSchema = object({
|
|
8542
|
+
jobId: string(),
|
|
8543
|
+
phase: StorageCleanupPhaseSchema,
|
|
8544
|
+
includeDebugMedia: boolean(),
|
|
8545
|
+
orphansReclaimed: number().int().nonnegative(),
|
|
8546
|
+
orphanBytesReclaimed: number().int().nonnegative(),
|
|
8547
|
+
debugMediaReclaimed: number().int().nonnegative(),
|
|
8548
|
+
debugMediaBytesReclaimed: number().int().nonnegative(),
|
|
8549
|
+
ghostsForgotten: number().int().nonnegative(),
|
|
8550
|
+
ghostBytesForgotten: number().int().nonnegative(),
|
|
8551
|
+
/** Short operator-facing line: current collection, pass, or location. */
|
|
8552
|
+
detail: string().nullable(),
|
|
8553
|
+
cancelRequested: boolean(),
|
|
8554
|
+
startedAt: number(),
|
|
8555
|
+
updatedAt: number(),
|
|
8556
|
+
finishedAt: number().nullable(),
|
|
8557
|
+
error: string().nullable()
|
|
8558
|
+
});
|
|
8559
|
+
var StorageCleanupStatusInputSchema = object({ jobId: string().optional() });
|
|
8560
|
+
/**
|
|
8488
8561
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
8489
8562
|
* storage a location serves. Defined here (not in `capabilities/storage.cap.ts`)
|
|
8490
8563
|
* so the persisted record schema and the consumer-facing cap can both consume it
|
|
@@ -8512,11 +8585,10 @@ var StorageLocationTypeSchema = string().regex(/^[a-z][a-zA-Z0-9-]*$/);
|
|
|
8512
8585
|
* The default location for a type uses `id === <type>:default` by
|
|
8513
8586
|
* convention (the bare type ref like `'backups'` resolves to it).
|
|
8514
8587
|
*
|
|
8515
|
-
* `isSystem
|
|
8516
|
-
*
|
|
8517
|
-
*
|
|
8518
|
-
*
|
|
8519
|
-
* deleting it is rejected at the cap level.
|
|
8588
|
+
* `isSystem` is a legacy persisted flag. Seed still creates the initial
|
|
8589
|
+
* `<type>:default` locations; the flag is no longer a lock, a badge, or a
|
|
8590
|
+
* prune selector. New writes leave it false. Deletion is gated on uniqueness
|
|
8591
|
+
* / last-enabled, not on this bit.
|
|
8520
8592
|
*/
|
|
8521
8593
|
var StorageLocationSchema = object({
|
|
8522
8594
|
id: string().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/),
|
|
@@ -13335,6 +13407,12 @@ method(object({
|
|
|
13335
13407
|
}), _void(), {
|
|
13336
13408
|
kind: "mutation",
|
|
13337
13409
|
auth: "admin"
|
|
13410
|
+
}), method(object({
|
|
13411
|
+
from: string(),
|
|
13412
|
+
to: string()
|
|
13413
|
+
}), object({ moved: number() }), {
|
|
13414
|
+
kind: "mutation",
|
|
13415
|
+
auth: "admin"
|
|
13338
13416
|
}), method(object({
|
|
13339
13417
|
deviceId: number(),
|
|
13340
13418
|
disabled: boolean()
|
|
@@ -19362,46 +19440,6 @@ var RecentTracksPageSchema = object({
|
|
|
19362
19440
|
/** Cursor for the next page, or null when this page is the last. */
|
|
19363
19441
|
nextCursor: string().nullable()
|
|
19364
19442
|
});
|
|
19365
|
-
var LIST_GROUPS_DEFAULT_LIMIT = 40;
|
|
19366
|
-
var LIST_GROUPS_MAX_LIMIT = 100;
|
|
19367
|
-
var AnalyticsGroupRecordSchema = object({
|
|
19368
|
-
id: string(),
|
|
19369
|
-
deviceId: number().int(),
|
|
19370
|
-
openedAt: number().int(),
|
|
19371
|
-
closedAt: number().int(),
|
|
19372
|
-
timestamp: number().int(),
|
|
19373
|
-
memberCount: number().int(),
|
|
19374
|
-
memberTrackIds: array(string()).readonly(),
|
|
19375
|
-
className: string(),
|
|
19376
|
-
classes: array(string()).readonly(),
|
|
19377
|
-
/** Relative event-media path, or null when the group has no picture yet. */
|
|
19378
|
-
mediaUrl: string().nullable(),
|
|
19379
|
-
singleton: boolean()
|
|
19380
|
-
});
|
|
19381
|
-
var AnalyticsGroupMemberSchema = object({
|
|
19382
|
-
trackId: string(),
|
|
19383
|
-
deviceId: number().int(),
|
|
19384
|
-
className: string(),
|
|
19385
|
-
firstSeen: number().int(),
|
|
19386
|
-
lastSeen: number().int(),
|
|
19387
|
-
mediaUrl: string().nullable()
|
|
19388
|
-
});
|
|
19389
|
-
var AnalyticsGroupDetailSchema = AnalyticsGroupRecordSchema.extend({ members: array(AnalyticsGroupMemberSchema).readonly() });
|
|
19390
|
-
var ListGroupsQueryInput = object({
|
|
19391
|
-
/** Devices to merge. An empty array yields `{ groups: [], nextCursor: null }`. */
|
|
19392
|
-
deviceIds: array(number()),
|
|
19393
|
-
/** Window lower bound on `closedAt` (inclusive). */
|
|
19394
|
-
since: number().optional(),
|
|
19395
|
-
/** Window upper bound on `openedAt` (inclusive). */
|
|
19396
|
-
until: number().optional(),
|
|
19397
|
-
limit: number().int().min(1).max(LIST_GROUPS_MAX_LIMIT).default(LIST_GROUPS_DEFAULT_LIMIT),
|
|
19398
|
-
/** Opaque continuation cursor from a previous page's `nextCursor`. */
|
|
19399
|
-
cursor: string().optional()
|
|
19400
|
-
});
|
|
19401
|
-
var ListGroupsPageSchema = object({
|
|
19402
|
-
groups: array(AnalyticsGroupRecordSchema).readonly(),
|
|
19403
|
-
nextCursor: string().nullable()
|
|
19404
|
-
});
|
|
19405
19443
|
var KEY_EVENTS_DEFAULT_LIMIT = 50;
|
|
19406
19444
|
var KEY_EVENTS_MAX_LIMIT = 200;
|
|
19407
19445
|
var KeyEventQueryInput = object({
|
|
@@ -19505,9 +19543,7 @@ var TrackCascadeCountsSchema = object({
|
|
|
19505
19543
|
/** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
|
|
19506
19544
|
plates: number().int(),
|
|
19507
19545
|
/** Per-track CLIP search vectors removed (best-effort). */
|
|
19508
|
-
embeddings: number().int()
|
|
19509
|
-
/** Group membership + group rows removed with their last member (best-effort). */
|
|
19510
|
-
groups: number().int()
|
|
19546
|
+
embeddings: number().int()
|
|
19511
19547
|
});
|
|
19512
19548
|
/** Disk-wins reconcile: media rows whose blobs are gone, then empty tracks. */
|
|
19513
19549
|
var DiskReconcileCountsSchema = object({
|
|
@@ -19677,6 +19713,47 @@ var RebuildStatusSchema = object({
|
|
|
19677
19713
|
/** Present when the pass ended by throwing. */
|
|
19678
19714
|
error: string().nullable()
|
|
19679
19715
|
});
|
|
19716
|
+
/**
|
|
19717
|
+
* Acknowledgement that a debug-media reclaim STARTED.
|
|
19718
|
+
*
|
|
19719
|
+
* The pass is paced at ~2 MB/s over a standing 100 GB — tens of minutes — so
|
|
19720
|
+
* it runs detached and this returns immediately. Awaiting it is how the
|
|
19721
|
+
* `addons.custom` door hit the 60 s UDS deadline while the walk carried on
|
|
19722
|
+
* with no status. Poll {@link pipelineAnalyticsCapability.methods.getMediaReclaimStatus}.
|
|
19723
|
+
*/
|
|
19724
|
+
var MediaReclaimStartResultSchema = object({
|
|
19725
|
+
started: boolean(),
|
|
19726
|
+
/** True when a pass was already running; the new request is ignored. */
|
|
19727
|
+
alreadyRunning: boolean()
|
|
19728
|
+
});
|
|
19729
|
+
var MediaReclaimInputSchema = object({
|
|
19730
|
+
mode: _enum(["report", "reclaim"]).default("report"),
|
|
19731
|
+
scopes: array(_enum(["motion-still", "track-filmstrip"])).min(1).optional(),
|
|
19732
|
+
deviceIds: array(number().int()).min(1).optional(),
|
|
19733
|
+
restart: boolean().optional(),
|
|
19734
|
+
pageSize: number().int().min(50).max(5e3).optional(),
|
|
19735
|
+
maxRowsPerDevice: number().int().min(1).max(5e5).optional(),
|
|
19736
|
+
maxReclaimPerDevice: number().int().min(1).max(5e5).optional(),
|
|
19737
|
+
maxBytesPerRun: number().int().min(1).optional(),
|
|
19738
|
+
budgetMinutes: number().int().min(1).max(720).optional(),
|
|
19739
|
+
throttleBytesPerSec: number().int().min(64 * 1024).optional(),
|
|
19740
|
+
graceMinutes: number().int().min(1).max(10080).optional()
|
|
19741
|
+
});
|
|
19742
|
+
var MediaReclaimStatusSchema = object({
|
|
19743
|
+
running: boolean(),
|
|
19744
|
+
mode: _enum(["report", "reclaim"]).nullable(),
|
|
19745
|
+
totalExamined: number(),
|
|
19746
|
+
totalEligible: number(),
|
|
19747
|
+
totalReclaimed: number(),
|
|
19748
|
+
totalBytesReclaimed: number(),
|
|
19749
|
+
totalRefused: number(),
|
|
19750
|
+
/** Device+scope windows finished in this pass. */
|
|
19751
|
+
devicesDone: number(),
|
|
19752
|
+
complete: boolean().nullable(),
|
|
19753
|
+
startedAtMs: number().nullable(),
|
|
19754
|
+
finishedAtMs: number().nullable(),
|
|
19755
|
+
error: string().nullable()
|
|
19756
|
+
});
|
|
19680
19757
|
var ReplayFrameInputSchema = object({
|
|
19681
19758
|
timestamp: number(),
|
|
19682
19759
|
frame: PipelineRunResultBridge
|
|
@@ -19715,10 +19792,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19715
19792
|
* stationary registry). Default false: the timeline lists passages,
|
|
19716
19793
|
* not parking records (operator decision, 2026-08-15). */
|
|
19717
19794
|
includeStationary: boolean().optional()
|
|
19718
|
-
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(
|
|
19719
|
-
deviceId: number(),
|
|
19720
|
-
groupId: string().min(1)
|
|
19721
|
-
}), AnalyticsGroupDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
|
|
19795
|
+
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
|
|
19722
19796
|
kind: "mutation",
|
|
19723
19797
|
auth: "admin"
|
|
19724
19798
|
}), method(DeviceEventQueryInput, array(MotionEventSchema).readonly()), method(ObjectEventQueryInput, array(ObjectEventSchema).readonly()), method(DeviceEventQueryInput, array(AudioEventSchema).readonly()), method(object({ deviceId: number() }), array(EventKindDescriptorSchema).readonly()), method(object({ deviceIds: array(number()).min(1).max(200) }), array(EventKindsForDeviceSchema).readonly()), method(object({
|
|
@@ -19818,6 +19892,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19818
19892
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
19819
19893
|
kind: "query",
|
|
19820
19894
|
auth: "admin"
|
|
19895
|
+
}), method(MediaReclaimInputSchema, MediaReclaimStartResultSchema, {
|
|
19896
|
+
kind: "mutation",
|
|
19897
|
+
auth: "admin"
|
|
19898
|
+
}), method(object({}), MediaReclaimStatusSchema, {
|
|
19899
|
+
kind: "query",
|
|
19900
|
+
auth: "admin"
|
|
19821
19901
|
}), method(object({ deviceIds: array(number()).optional() }), TrainingExportSummarySchema, {
|
|
19822
19902
|
kind: "query",
|
|
19823
19903
|
auth: "admin"
|
|
@@ -21892,7 +21972,13 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
|
|
|
21892
21972
|
}), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
|
|
21893
21973
|
kind: "mutation",
|
|
21894
21974
|
auth: "admin"
|
|
21895
|
-
})
|
|
21975
|
+
}), method(StorageCleanupInputSchema, object({ jobId: string() }), {
|
|
21976
|
+
kind: "mutation",
|
|
21977
|
+
auth: "admin"
|
|
21978
|
+
}), method(StorageCleanupStatusInputSchema, StorageCleanupJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
21979
|
+
kind: "mutation",
|
|
21980
|
+
auth: "admin"
|
|
21981
|
+
}), method(object({}), array(StorageMigrationJobSchema).readonly(), { auth: "admin" });
|
|
21896
21982
|
var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
21897
21983
|
providerId: string().min(1),
|
|
21898
21984
|
displayName: string().min(1),
|
|
@@ -29118,6 +29204,33 @@ var RecordingRebalanceInputSchema = object({
|
|
|
29118
29204
|
minMoveGb: number().min(0).optional()
|
|
29119
29205
|
});
|
|
29120
29206
|
/**
|
|
29207
|
+
* Operator-facing placement of one camera onto a recordings location.
|
|
29208
|
+
*
|
|
29209
|
+
* `pinLocationId` is the operator instruction: a location id, or `null` for
|
|
29210
|
+
* Auto (the planner may move this camera). `locationId` is where high/mid
|
|
29211
|
+
* currently write — the plan, which may disagree with the pin when Auto.
|
|
29212
|
+
*/
|
|
29213
|
+
var RecordingDevicePlacementSchema = object({
|
|
29214
|
+
deviceId: number().int(),
|
|
29215
|
+
profile: string(),
|
|
29216
|
+
locationId: string()
|
|
29217
|
+
});
|
|
29218
|
+
var RecordingDevicePinSchema = object({
|
|
29219
|
+
deviceId: number().int(),
|
|
29220
|
+
/** Recordings-class location this camera is pinned to. */
|
|
29221
|
+
locationId: string()
|
|
29222
|
+
});
|
|
29223
|
+
var RecordingPlacementViewSchema = object({
|
|
29224
|
+
assignments: array(RecordingDevicePlacementSchema),
|
|
29225
|
+
pins: array(RecordingDevicePinSchema),
|
|
29226
|
+
defaultLocations: record(string(), string())
|
|
29227
|
+
});
|
|
29228
|
+
var RecordingSetDevicePlacementInputSchema = object({
|
|
29229
|
+
deviceId: number().int(),
|
|
29230
|
+
/** `null` = Auto. Otherwise a `recordings:*` location id. */
|
|
29231
|
+
locationId: string().nullable()
|
|
29232
|
+
});
|
|
29233
|
+
/**
|
|
29121
29234
|
* Result of locating footage at a wall-clock instant for one device/profile.
|
|
29122
29235
|
* `segment` carries the covering segment's window; `gap` reports the forward
|
|
29123
29236
|
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
@@ -29343,6 +29456,12 @@ method(object({
|
|
|
29343
29456
|
}), method(RecordingRebalanceInputSchema, RecordingRebalancePlanSchema, {
|
|
29344
29457
|
kind: "mutation",
|
|
29345
29458
|
auth: "admin"
|
|
29459
|
+
}), method(object({}), RecordingPlacementViewSchema, {
|
|
29460
|
+
kind: "query",
|
|
29461
|
+
auth: "admin"
|
|
29462
|
+
}), method(RecordingSetDevicePlacementInputSchema, object({ ok: literal(true) }), {
|
|
29463
|
+
kind: "mutation",
|
|
29464
|
+
auth: "admin"
|
|
29346
29465
|
});
|
|
29347
29466
|
/**
|
|
29348
29467
|
* `recording-export` cap — render a footage time range into a single downloadable
|
|
@@ -34843,6 +34962,12 @@ Object.freeze({
|
|
|
34843
34962
|
addonId: null,
|
|
34844
34963
|
access: "delete"
|
|
34845
34964
|
},
|
|
34965
|
+
"deviceManager.renameLocation": {
|
|
34966
|
+
capName: "device-manager",
|
|
34967
|
+
capScope: "system",
|
|
34968
|
+
addonId: null,
|
|
34969
|
+
access: "create"
|
|
34970
|
+
},
|
|
34846
34971
|
"deviceManager.runDeviceAction": {
|
|
34847
34972
|
capName: "device-manager",
|
|
34848
34973
|
capScope: "system",
|
|
@@ -36535,19 +36660,19 @@ Object.freeze({
|
|
|
36535
36660
|
addonId: null,
|
|
36536
36661
|
access: "view"
|
|
36537
36662
|
},
|
|
36538
|
-
"pipelineAnalytics.
|
|
36663
|
+
"pipelineAnalytics.getKeyEvents": {
|
|
36539
36664
|
capName: "pipeline-analytics",
|
|
36540
36665
|
capScope: "device",
|
|
36541
36666
|
addonId: null,
|
|
36542
36667
|
access: "view"
|
|
36543
36668
|
},
|
|
36544
|
-
"pipelineAnalytics.
|
|
36669
|
+
"pipelineAnalytics.getKeyEventsBatch": {
|
|
36545
36670
|
capName: "pipeline-analytics",
|
|
36546
36671
|
capScope: "device",
|
|
36547
36672
|
addonId: null,
|
|
36548
36673
|
access: "view"
|
|
36549
36674
|
},
|
|
36550
|
-
"pipelineAnalytics.
|
|
36675
|
+
"pipelineAnalytics.getMediaReclaimStatus": {
|
|
36551
36676
|
capName: "pipeline-analytics",
|
|
36552
36677
|
capScope: "device",
|
|
36553
36678
|
addonId: null,
|
|
@@ -36637,12 +36762,6 @@ Object.freeze({
|
|
|
36637
36762
|
addonId: null,
|
|
36638
36763
|
access: "view"
|
|
36639
36764
|
},
|
|
36640
|
-
"pipelineAnalytics.listGroups": {
|
|
36641
|
-
capName: "pipeline-analytics",
|
|
36642
|
-
capScope: "device",
|
|
36643
|
-
addonId: null,
|
|
36644
|
-
access: "view"
|
|
36645
|
-
},
|
|
36646
36765
|
"pipelineAnalytics.listOpsLog": {
|
|
36647
36766
|
capName: "pipeline-analytics",
|
|
36648
36767
|
capScope: "device",
|
|
@@ -36727,6 +36846,12 @@ Object.freeze({
|
|
|
36727
36846
|
addonId: null,
|
|
36728
36847
|
access: "create"
|
|
36729
36848
|
},
|
|
36849
|
+
"pipelineAnalytics.reclaimDebugMedia": {
|
|
36850
|
+
capName: "pipeline-analytics",
|
|
36851
|
+
capScope: "device",
|
|
36852
|
+
addonId: null,
|
|
36853
|
+
access: "create"
|
|
36854
|
+
},
|
|
36730
36855
|
"pipelineAnalytics.reconcileFromDisk": {
|
|
36731
36856
|
capName: "pipeline-analytics",
|
|
36732
36857
|
capScope: "device",
|
|
@@ -37651,6 +37776,12 @@ Object.freeze({
|
|
|
37651
37776
|
addonId: null,
|
|
37652
37777
|
access: "view"
|
|
37653
37778
|
},
|
|
37779
|
+
"recording.getPlacement": {
|
|
37780
|
+
capName: "recording",
|
|
37781
|
+
capScope: "system",
|
|
37782
|
+
addonId: null,
|
|
37783
|
+
access: "view"
|
|
37784
|
+
},
|
|
37654
37785
|
"recording.getPlaybackManifest": {
|
|
37655
37786
|
capName: "recording",
|
|
37656
37787
|
capScope: "system",
|
|
@@ -37777,6 +37908,12 @@ Object.freeze({
|
|
|
37777
37908
|
addonId: null,
|
|
37778
37909
|
access: "create"
|
|
37779
37910
|
},
|
|
37911
|
+
"recording.setDevicePlacement": {
|
|
37912
|
+
capName: "recording",
|
|
37913
|
+
capScope: "system",
|
|
37914
|
+
addonId: null,
|
|
37915
|
+
access: "create"
|
|
37916
|
+
},
|
|
37780
37917
|
"recording.startStorageMigrationMove": {
|
|
37781
37918
|
capName: "recording",
|
|
37782
37919
|
capScope: "system",
|
|
@@ -38221,12 +38358,36 @@ Object.freeze({
|
|
|
38221
38358
|
addonId: null,
|
|
38222
38359
|
access: "create"
|
|
38223
38360
|
},
|
|
38361
|
+
"storageMigration.cleanupCancel": {
|
|
38362
|
+
capName: "storage-migration",
|
|
38363
|
+
capScope: "system",
|
|
38364
|
+
addonId: null,
|
|
38365
|
+
access: "create"
|
|
38366
|
+
},
|
|
38367
|
+
"storageMigration.cleanupStart": {
|
|
38368
|
+
capName: "storage-migration",
|
|
38369
|
+
capScope: "system",
|
|
38370
|
+
addonId: null,
|
|
38371
|
+
access: "create"
|
|
38372
|
+
},
|
|
38373
|
+
"storageMigration.cleanupStatus": {
|
|
38374
|
+
capName: "storage-migration",
|
|
38375
|
+
capScope: "system",
|
|
38376
|
+
addonId: null,
|
|
38377
|
+
access: "view"
|
|
38378
|
+
},
|
|
38224
38379
|
"storageMigration.drain": {
|
|
38225
38380
|
capName: "storage-migration",
|
|
38226
38381
|
capScope: "system",
|
|
38227
38382
|
addonId: null,
|
|
38228
38383
|
access: "create"
|
|
38229
38384
|
},
|
|
38385
|
+
"storageMigration.history": {
|
|
38386
|
+
capName: "storage-migration",
|
|
38387
|
+
capScope: "system",
|
|
38388
|
+
addonId: null,
|
|
38389
|
+
access: "view"
|
|
38390
|
+
},
|
|
38230
38391
|
"storageMigration.movers": {
|
|
38231
38392
|
capName: "storage-migration",
|
|
38232
38393
|
capScope: "system",
|
|
@@ -40223,11 +40384,6 @@ Object.freeze({
|
|
|
40223
40384
|
form: "single",
|
|
40224
40385
|
optional: true
|
|
40225
40386
|
}],
|
|
40226
|
-
"pipelineAnalytics.getGroup": [{
|
|
40227
|
-
name: "deviceId",
|
|
40228
|
-
form: "single",
|
|
40229
|
-
optional: false
|
|
40230
|
-
}],
|
|
40231
40387
|
"pipelineAnalytics.getKeyEvents": [{
|
|
40232
40388
|
name: "deviceId",
|
|
40233
40389
|
form: "single",
|
|
@@ -40293,11 +40449,6 @@ Object.freeze({
|
|
|
40293
40449
|
form: "single",
|
|
40294
40450
|
optional: false
|
|
40295
40451
|
}],
|
|
40296
|
-
"pipelineAnalytics.listGroups": [{
|
|
40297
|
-
name: "deviceIds",
|
|
40298
|
-
form: "array",
|
|
40299
|
-
optional: false
|
|
40300
|
-
}],
|
|
40301
40452
|
"pipelineAnalytics.listOpsLog": [{
|
|
40302
40453
|
name: "deviceId",
|
|
40303
40454
|
form: "single",
|
|
@@ -40343,6 +40494,11 @@ Object.freeze({
|
|
|
40343
40494
|
form: "single",
|
|
40344
40495
|
optional: true
|
|
40345
40496
|
}],
|
|
40497
|
+
"pipelineAnalytics.reclaimDebugMedia": [{
|
|
40498
|
+
name: "deviceIds",
|
|
40499
|
+
form: "array",
|
|
40500
|
+
optional: true
|
|
40501
|
+
}],
|
|
40346
40502
|
"pipelineAnalytics.reconcileFromDisk": [{
|
|
40347
40503
|
name: "deviceId",
|
|
40348
40504
|
form: "single",
|
|
@@ -40708,6 +40864,11 @@ Object.freeze({
|
|
|
40708
40864
|
form: "single",
|
|
40709
40865
|
optional: false
|
|
40710
40866
|
}],
|
|
40867
|
+
"recording.setDevicePlacement": [{
|
|
40868
|
+
name: "deviceId",
|
|
40869
|
+
form: "single",
|
|
40870
|
+
optional: false
|
|
40871
|
+
}],
|
|
40711
40872
|
"recording.startStorageMigrationMove": [{
|
|
40712
40873
|
name: "deviceId",
|
|
40713
40874
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -8092,6 +8092,13 @@ var MediaRelocateModeSchema = _enum([
|
|
|
8092
8092
|
]);
|
|
8093
8093
|
var RelocateMediaInputSchema = object({
|
|
8094
8094
|
toLocationId: string(),
|
|
8095
|
+
/**
|
|
8096
|
+
* Restrict the pass to rows currently on this location. Omitted / `'*'` =
|
|
8097
|
+
* every row that is not already on `toLocationId` (the historical
|
|
8098
|
+
* behaviour). A named source is what a from→to migration needs: without it
|
|
8099
|
+
* "move events off disk 2" also emptied disk 1.
|
|
8100
|
+
*/
|
|
8101
|
+
fromLocationId: string().optional(),
|
|
8095
8102
|
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8096
8103
|
/** Omitted = `move`, the pre-existing behaviour. */
|
|
8097
8104
|
mode: MediaRelocateModeSchema.optional()
|
|
@@ -8159,6 +8166,19 @@ var StorageMigrationDestinationsSchema = object({
|
|
|
8159
8166
|
galleryMedia: string().min(1).optional()
|
|
8160
8167
|
}).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
|
|
8161
8168
|
/**
|
|
8169
|
+
* Optional named source per class. Omitted = the class's current default
|
|
8170
|
+
* (the historical behaviour). A named source that is NOT the default is a
|
|
8171
|
+
* drain of that disk: bytes move, the default stays, and the source is
|
|
8172
|
+
* disabled when the move finishes.
|
|
8173
|
+
*/
|
|
8174
|
+
var StorageMigrationSourcesSchema = object({
|
|
8175
|
+
recordings: string().min(1).optional(),
|
|
8176
|
+
recordingsLow: string().min(1).optional(),
|
|
8177
|
+
eventMedia: string().min(1).optional(),
|
|
8178
|
+
backups: string().min(1).optional(),
|
|
8179
|
+
galleryMedia: string().min(1).optional()
|
|
8180
|
+
}).optional();
|
|
8181
|
+
/**
|
|
8162
8182
|
* How a migration sequences the cutover against the byte move.
|
|
8163
8183
|
*
|
|
8164
8184
|
* - `blocking` — the historical order: pause, move every byte, repoint,
|
|
@@ -8180,6 +8200,8 @@ var StorageMigrationModeSchema = _enum(["blocking", "nonBlocking"]);
|
|
|
8180
8200
|
/** Shared input for planning and starting an orchestrated storage migration. */
|
|
8181
8201
|
var StorageMigrationInputSchema = object({
|
|
8182
8202
|
destinations: StorageMigrationDestinationsSchema,
|
|
8203
|
+
/** Omitted = each class's current default. */
|
|
8204
|
+
sources: StorageMigrationSourcesSchema,
|
|
8183
8205
|
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8184
8206
|
/** Omitted = `blocking`, which stays the default. */
|
|
8185
8207
|
mode: StorageMigrationModeSchema.optional()
|
|
@@ -8259,6 +8281,13 @@ var StorageMigrationMoveSchema = object({
|
|
|
8259
8281
|
storageClass: StorageMigrationClassSchema,
|
|
8260
8282
|
fromLocationId: string(),
|
|
8261
8283
|
toLocationId: string(),
|
|
8284
|
+
/**
|
|
8285
|
+
* True when `from` was NOT the class default at plan time. The move still
|
|
8286
|
+
* copies bytes, but the default is left alone and the source is disabled
|
|
8287
|
+
* once the copy verifies. Absent on jobs planned before this field existed
|
|
8288
|
+
* — those jobs always repointed, which is `false`.
|
|
8289
|
+
*/
|
|
8290
|
+
freezeSource: boolean().optional(),
|
|
8262
8291
|
moverJobId: string().nullable(),
|
|
8263
8292
|
state: RelocateJobStateSchema.nullable(),
|
|
8264
8293
|
error: string().nullable(),
|
|
@@ -8272,6 +8301,7 @@ var StorageMigrationJobSchema = object({
|
|
|
8272
8301
|
* can tell a seconds-long cutover from a thirty-hour one. */
|
|
8273
8302
|
mode: StorageMigrationModeSchema,
|
|
8274
8303
|
destinations: StorageMigrationDestinationsSchema,
|
|
8304
|
+
sources: StorageMigrationSourcesSchema,
|
|
8275
8305
|
throttleMbps: number(),
|
|
8276
8306
|
moves: array(StorageMigrationMoveSchema),
|
|
8277
8307
|
pauseLeaseId: string().nullable(),
|
|
@@ -8297,6 +8327,7 @@ var StorageMigrationFindingSchema = object({
|
|
|
8297
8327
|
});
|
|
8298
8328
|
var StorageMigrationPlanSchema = object({
|
|
8299
8329
|
destinations: StorageMigrationDestinationsSchema,
|
|
8330
|
+
sources: StorageMigrationSourcesSchema,
|
|
8300
8331
|
/** The mode this plan was built for. A plan is only valid for its mode: the
|
|
8301
8332
|
* `eventMedia` seal gate and the single-cardinality refusal both depend on
|
|
8302
8333
|
* it. */
|
|
@@ -8304,7 +8335,8 @@ var StorageMigrationPlanSchema = object({
|
|
|
8304
8335
|
moves: array(object({
|
|
8305
8336
|
storageClass: StorageMigrationClassSchema,
|
|
8306
8337
|
fromLocationId: string(),
|
|
8307
|
-
toLocationId: string()
|
|
8338
|
+
toLocationId: string(),
|
|
8339
|
+
freezeSource: boolean().optional()
|
|
8308
8340
|
})),
|
|
8309
8341
|
findings: array(StorageMigrationFindingSchema)
|
|
8310
8342
|
});
|
|
@@ -8482,10 +8514,51 @@ var LedgerWalkReportSchema = object({
|
|
|
8482
8514
|
var RelocatableMediaCountSchema = object({ rows: number().int().nonnegative() }).nullable();
|
|
8483
8515
|
var RelocatableMediaCountInputSchema = object({
|
|
8484
8516
|
toLocationId: string().min(1),
|
|
8517
|
+
/** Restrict the count to one source; omitted / `'*'` = every non-target row. */
|
|
8518
|
+
fromLocationId: string().optional(),
|
|
8485
8519
|
/** Omitted = `move`. */
|
|
8486
8520
|
mode: MediaRelocateModeSchema.optional()
|
|
8487
8521
|
});
|
|
8488
8522
|
/**
|
|
8523
|
+
* Operator cleanup of leftover analytics rows, optional debug media, and
|
|
8524
|
+
* ghost ledger entries on frozen footage locations.
|
|
8525
|
+
*
|
|
8526
|
+
* A pass is tens of minutes on a standing backlog. The hub method RETURNS
|
|
8527
|
+
* `{ jobId }` immediately; progress is `cleanupStatus`. Awaiting the work
|
|
8528
|
+
* is how `addons.custom` hit the 60 s UDS deadline while reclaim continued
|
|
8529
|
+
* with no operator-visible status.
|
|
8530
|
+
*/
|
|
8531
|
+
var StorageCleanupPhaseSchema = _enum([
|
|
8532
|
+
"orphans",
|
|
8533
|
+
"debug-media",
|
|
8534
|
+
"ghost-ledger",
|
|
8535
|
+
"done",
|
|
8536
|
+
"failed",
|
|
8537
|
+
"cancelled"
|
|
8538
|
+
]);
|
|
8539
|
+
var StorageCleanupInputSchema = object({
|
|
8540
|
+
/** Also walk motion stills / track filmstrips. Off by default. */
|
|
8541
|
+
includeDebugMedia: boolean().optional() });
|
|
8542
|
+
var StorageCleanupJobSchema = object({
|
|
8543
|
+
jobId: string(),
|
|
8544
|
+
phase: StorageCleanupPhaseSchema,
|
|
8545
|
+
includeDebugMedia: boolean(),
|
|
8546
|
+
orphansReclaimed: number().int().nonnegative(),
|
|
8547
|
+
orphanBytesReclaimed: number().int().nonnegative(),
|
|
8548
|
+
debugMediaReclaimed: number().int().nonnegative(),
|
|
8549
|
+
debugMediaBytesReclaimed: number().int().nonnegative(),
|
|
8550
|
+
ghostsForgotten: number().int().nonnegative(),
|
|
8551
|
+
ghostBytesForgotten: number().int().nonnegative(),
|
|
8552
|
+
/** Short operator-facing line: current collection, pass, or location. */
|
|
8553
|
+
detail: string().nullable(),
|
|
8554
|
+
cancelRequested: boolean(),
|
|
8555
|
+
startedAt: number(),
|
|
8556
|
+
updatedAt: number(),
|
|
8557
|
+
finishedAt: number().nullable(),
|
|
8558
|
+
error: string().nullable()
|
|
8559
|
+
});
|
|
8560
|
+
var StorageCleanupStatusInputSchema = object({ jobId: string().optional() });
|
|
8561
|
+
/**
|
|
8489
8562
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
8490
8563
|
* storage a location serves. Defined here (not in `capabilities/storage.cap.ts`)
|
|
8491
8564
|
* so the persisted record schema and the consumer-facing cap can both consume it
|
|
@@ -8513,11 +8586,10 @@ var StorageLocationTypeSchema = string().regex(/^[a-z][a-zA-Z0-9-]*$/);
|
|
|
8513
8586
|
* The default location for a type uses `id === <type>:default` by
|
|
8514
8587
|
* convention (the bare type ref like `'backups'` resolves to it).
|
|
8515
8588
|
*
|
|
8516
|
-
* `isSystem
|
|
8517
|
-
*
|
|
8518
|
-
*
|
|
8519
|
-
*
|
|
8520
|
-
* deleting it is rejected at the cap level.
|
|
8589
|
+
* `isSystem` is a legacy persisted flag. Seed still creates the initial
|
|
8590
|
+
* `<type>:default` locations; the flag is no longer a lock, a badge, or a
|
|
8591
|
+
* prune selector. New writes leave it false. Deletion is gated on uniqueness
|
|
8592
|
+
* / last-enabled, not on this bit.
|
|
8521
8593
|
*/
|
|
8522
8594
|
var StorageLocationSchema = object({
|
|
8523
8595
|
id: string().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/),
|
|
@@ -13336,6 +13408,12 @@ method(object({
|
|
|
13336
13408
|
}), _void(), {
|
|
13337
13409
|
kind: "mutation",
|
|
13338
13410
|
auth: "admin"
|
|
13411
|
+
}), method(object({
|
|
13412
|
+
from: string(),
|
|
13413
|
+
to: string()
|
|
13414
|
+
}), object({ moved: number() }), {
|
|
13415
|
+
kind: "mutation",
|
|
13416
|
+
auth: "admin"
|
|
13339
13417
|
}), method(object({
|
|
13340
13418
|
deviceId: number(),
|
|
13341
13419
|
disabled: boolean()
|
|
@@ -19363,46 +19441,6 @@ var RecentTracksPageSchema = object({
|
|
|
19363
19441
|
/** Cursor for the next page, or null when this page is the last. */
|
|
19364
19442
|
nextCursor: string().nullable()
|
|
19365
19443
|
});
|
|
19366
|
-
var LIST_GROUPS_DEFAULT_LIMIT = 40;
|
|
19367
|
-
var LIST_GROUPS_MAX_LIMIT = 100;
|
|
19368
|
-
var AnalyticsGroupRecordSchema = object({
|
|
19369
|
-
id: string(),
|
|
19370
|
-
deviceId: number().int(),
|
|
19371
|
-
openedAt: number().int(),
|
|
19372
|
-
closedAt: number().int(),
|
|
19373
|
-
timestamp: number().int(),
|
|
19374
|
-
memberCount: number().int(),
|
|
19375
|
-
memberTrackIds: array(string()).readonly(),
|
|
19376
|
-
className: string(),
|
|
19377
|
-
classes: array(string()).readonly(),
|
|
19378
|
-
/** Relative event-media path, or null when the group has no picture yet. */
|
|
19379
|
-
mediaUrl: string().nullable(),
|
|
19380
|
-
singleton: boolean()
|
|
19381
|
-
});
|
|
19382
|
-
var AnalyticsGroupMemberSchema = object({
|
|
19383
|
-
trackId: string(),
|
|
19384
|
-
deviceId: number().int(),
|
|
19385
|
-
className: string(),
|
|
19386
|
-
firstSeen: number().int(),
|
|
19387
|
-
lastSeen: number().int(),
|
|
19388
|
-
mediaUrl: string().nullable()
|
|
19389
|
-
});
|
|
19390
|
-
var AnalyticsGroupDetailSchema = AnalyticsGroupRecordSchema.extend({ members: array(AnalyticsGroupMemberSchema).readonly() });
|
|
19391
|
-
var ListGroupsQueryInput = object({
|
|
19392
|
-
/** Devices to merge. An empty array yields `{ groups: [], nextCursor: null }`. */
|
|
19393
|
-
deviceIds: array(number()),
|
|
19394
|
-
/** Window lower bound on `closedAt` (inclusive). */
|
|
19395
|
-
since: number().optional(),
|
|
19396
|
-
/** Window upper bound on `openedAt` (inclusive). */
|
|
19397
|
-
until: number().optional(),
|
|
19398
|
-
limit: number().int().min(1).max(LIST_GROUPS_MAX_LIMIT).default(LIST_GROUPS_DEFAULT_LIMIT),
|
|
19399
|
-
/** Opaque continuation cursor from a previous page's `nextCursor`. */
|
|
19400
|
-
cursor: string().optional()
|
|
19401
|
-
});
|
|
19402
|
-
var ListGroupsPageSchema = object({
|
|
19403
|
-
groups: array(AnalyticsGroupRecordSchema).readonly(),
|
|
19404
|
-
nextCursor: string().nullable()
|
|
19405
|
-
});
|
|
19406
19444
|
var KEY_EVENTS_DEFAULT_LIMIT = 50;
|
|
19407
19445
|
var KEY_EVENTS_MAX_LIMIT = 200;
|
|
19408
19446
|
var KeyEventQueryInput = object({
|
|
@@ -19506,9 +19544,7 @@ var TrackCascadeCountsSchema = object({
|
|
|
19506
19544
|
/** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
|
|
19507
19545
|
plates: number().int(),
|
|
19508
19546
|
/** Per-track CLIP search vectors removed (best-effort). */
|
|
19509
|
-
embeddings: number().int()
|
|
19510
|
-
/** Group membership + group rows removed with their last member (best-effort). */
|
|
19511
|
-
groups: number().int()
|
|
19547
|
+
embeddings: number().int()
|
|
19512
19548
|
});
|
|
19513
19549
|
/** Disk-wins reconcile: media rows whose blobs are gone, then empty tracks. */
|
|
19514
19550
|
var DiskReconcileCountsSchema = object({
|
|
@@ -19678,6 +19714,47 @@ var RebuildStatusSchema = object({
|
|
|
19678
19714
|
/** Present when the pass ended by throwing. */
|
|
19679
19715
|
error: string().nullable()
|
|
19680
19716
|
});
|
|
19717
|
+
/**
|
|
19718
|
+
* Acknowledgement that a debug-media reclaim STARTED.
|
|
19719
|
+
*
|
|
19720
|
+
* The pass is paced at ~2 MB/s over a standing 100 GB — tens of minutes — so
|
|
19721
|
+
* it runs detached and this returns immediately. Awaiting it is how the
|
|
19722
|
+
* `addons.custom` door hit the 60 s UDS deadline while the walk carried on
|
|
19723
|
+
* with no status. Poll {@link pipelineAnalyticsCapability.methods.getMediaReclaimStatus}.
|
|
19724
|
+
*/
|
|
19725
|
+
var MediaReclaimStartResultSchema = object({
|
|
19726
|
+
started: boolean(),
|
|
19727
|
+
/** True when a pass was already running; the new request is ignored. */
|
|
19728
|
+
alreadyRunning: boolean()
|
|
19729
|
+
});
|
|
19730
|
+
var MediaReclaimInputSchema = object({
|
|
19731
|
+
mode: _enum(["report", "reclaim"]).default("report"),
|
|
19732
|
+
scopes: array(_enum(["motion-still", "track-filmstrip"])).min(1).optional(),
|
|
19733
|
+
deviceIds: array(number().int()).min(1).optional(),
|
|
19734
|
+
restart: boolean().optional(),
|
|
19735
|
+
pageSize: number().int().min(50).max(5e3).optional(),
|
|
19736
|
+
maxRowsPerDevice: number().int().min(1).max(5e5).optional(),
|
|
19737
|
+
maxReclaimPerDevice: number().int().min(1).max(5e5).optional(),
|
|
19738
|
+
maxBytesPerRun: number().int().min(1).optional(),
|
|
19739
|
+
budgetMinutes: number().int().min(1).max(720).optional(),
|
|
19740
|
+
throttleBytesPerSec: number().int().min(64 * 1024).optional(),
|
|
19741
|
+
graceMinutes: number().int().min(1).max(10080).optional()
|
|
19742
|
+
});
|
|
19743
|
+
var MediaReclaimStatusSchema = object({
|
|
19744
|
+
running: boolean(),
|
|
19745
|
+
mode: _enum(["report", "reclaim"]).nullable(),
|
|
19746
|
+
totalExamined: number(),
|
|
19747
|
+
totalEligible: number(),
|
|
19748
|
+
totalReclaimed: number(),
|
|
19749
|
+
totalBytesReclaimed: number(),
|
|
19750
|
+
totalRefused: number(),
|
|
19751
|
+
/** Device+scope windows finished in this pass. */
|
|
19752
|
+
devicesDone: number(),
|
|
19753
|
+
complete: boolean().nullable(),
|
|
19754
|
+
startedAtMs: number().nullable(),
|
|
19755
|
+
finishedAtMs: number().nullable(),
|
|
19756
|
+
error: string().nullable()
|
|
19757
|
+
});
|
|
19681
19758
|
var ReplayFrameInputSchema = object({
|
|
19682
19759
|
timestamp: number(),
|
|
19683
19760
|
frame: PipelineRunResultBridge
|
|
@@ -19716,10 +19793,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19716
19793
|
* stationary registry). Default false: the timeline lists passages,
|
|
19717
19794
|
* not parking records (operator decision, 2026-08-15). */
|
|
19718
19795
|
includeStationary: boolean().optional()
|
|
19719
|
-
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(
|
|
19720
|
-
deviceId: number(),
|
|
19721
|
-
groupId: string().min(1)
|
|
19722
|
-
}), AnalyticsGroupDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
|
|
19796
|
+
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
|
|
19723
19797
|
kind: "mutation",
|
|
19724
19798
|
auth: "admin"
|
|
19725
19799
|
}), method(DeviceEventQueryInput, array(MotionEventSchema).readonly()), method(ObjectEventQueryInput, array(ObjectEventSchema).readonly()), method(DeviceEventQueryInput, array(AudioEventSchema).readonly()), method(object({ deviceId: number() }), array(EventKindDescriptorSchema).readonly()), method(object({ deviceIds: array(number()).min(1).max(200) }), array(EventKindsForDeviceSchema).readonly()), method(object({
|
|
@@ -19819,6 +19893,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19819
19893
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
19820
19894
|
kind: "query",
|
|
19821
19895
|
auth: "admin"
|
|
19896
|
+
}), method(MediaReclaimInputSchema, MediaReclaimStartResultSchema, {
|
|
19897
|
+
kind: "mutation",
|
|
19898
|
+
auth: "admin"
|
|
19899
|
+
}), method(object({}), MediaReclaimStatusSchema, {
|
|
19900
|
+
kind: "query",
|
|
19901
|
+
auth: "admin"
|
|
19822
19902
|
}), method(object({ deviceIds: array(number()).optional() }), TrainingExportSummarySchema, {
|
|
19823
19903
|
kind: "query",
|
|
19824
19904
|
auth: "admin"
|
|
@@ -21893,7 +21973,13 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
|
|
|
21893
21973
|
}), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
|
|
21894
21974
|
kind: "mutation",
|
|
21895
21975
|
auth: "admin"
|
|
21896
|
-
})
|
|
21976
|
+
}), method(StorageCleanupInputSchema, object({ jobId: string() }), {
|
|
21977
|
+
kind: "mutation",
|
|
21978
|
+
auth: "admin"
|
|
21979
|
+
}), method(StorageCleanupStatusInputSchema, StorageCleanupJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
21980
|
+
kind: "mutation",
|
|
21981
|
+
auth: "admin"
|
|
21982
|
+
}), method(object({}), array(StorageMigrationJobSchema).readonly(), { auth: "admin" });
|
|
21897
21983
|
var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
21898
21984
|
providerId: string().min(1),
|
|
21899
21985
|
displayName: string().min(1),
|
|
@@ -29119,6 +29205,33 @@ var RecordingRebalanceInputSchema = object({
|
|
|
29119
29205
|
minMoveGb: number().min(0).optional()
|
|
29120
29206
|
});
|
|
29121
29207
|
/**
|
|
29208
|
+
* Operator-facing placement of one camera onto a recordings location.
|
|
29209
|
+
*
|
|
29210
|
+
* `pinLocationId` is the operator instruction: a location id, or `null` for
|
|
29211
|
+
* Auto (the planner may move this camera). `locationId` is where high/mid
|
|
29212
|
+
* currently write — the plan, which may disagree with the pin when Auto.
|
|
29213
|
+
*/
|
|
29214
|
+
var RecordingDevicePlacementSchema = object({
|
|
29215
|
+
deviceId: number().int(),
|
|
29216
|
+
profile: string(),
|
|
29217
|
+
locationId: string()
|
|
29218
|
+
});
|
|
29219
|
+
var RecordingDevicePinSchema = object({
|
|
29220
|
+
deviceId: number().int(),
|
|
29221
|
+
/** Recordings-class location this camera is pinned to. */
|
|
29222
|
+
locationId: string()
|
|
29223
|
+
});
|
|
29224
|
+
var RecordingPlacementViewSchema = object({
|
|
29225
|
+
assignments: array(RecordingDevicePlacementSchema),
|
|
29226
|
+
pins: array(RecordingDevicePinSchema),
|
|
29227
|
+
defaultLocations: record(string(), string())
|
|
29228
|
+
});
|
|
29229
|
+
var RecordingSetDevicePlacementInputSchema = object({
|
|
29230
|
+
deviceId: number().int(),
|
|
29231
|
+
/** `null` = Auto. Otherwise a `recordings:*` location id. */
|
|
29232
|
+
locationId: string().nullable()
|
|
29233
|
+
});
|
|
29234
|
+
/**
|
|
29122
29235
|
* Result of locating footage at a wall-clock instant for one device/profile.
|
|
29123
29236
|
* `segment` carries the covering segment's window; `gap` reports the forward
|
|
29124
29237
|
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
@@ -29344,6 +29457,12 @@ method(object({
|
|
|
29344
29457
|
}), method(RecordingRebalanceInputSchema, RecordingRebalancePlanSchema, {
|
|
29345
29458
|
kind: "mutation",
|
|
29346
29459
|
auth: "admin"
|
|
29460
|
+
}), method(object({}), RecordingPlacementViewSchema, {
|
|
29461
|
+
kind: "query",
|
|
29462
|
+
auth: "admin"
|
|
29463
|
+
}), method(RecordingSetDevicePlacementInputSchema, object({ ok: literal(true) }), {
|
|
29464
|
+
kind: "mutation",
|
|
29465
|
+
auth: "admin"
|
|
29347
29466
|
});
|
|
29348
29467
|
/**
|
|
29349
29468
|
* `recording-export` cap — render a footage time range into a single downloadable
|
|
@@ -34844,6 +34963,12 @@ Object.freeze({
|
|
|
34844
34963
|
addonId: null,
|
|
34845
34964
|
access: "delete"
|
|
34846
34965
|
},
|
|
34966
|
+
"deviceManager.renameLocation": {
|
|
34967
|
+
capName: "device-manager",
|
|
34968
|
+
capScope: "system",
|
|
34969
|
+
addonId: null,
|
|
34970
|
+
access: "create"
|
|
34971
|
+
},
|
|
34847
34972
|
"deviceManager.runDeviceAction": {
|
|
34848
34973
|
capName: "device-manager",
|
|
34849
34974
|
capScope: "system",
|
|
@@ -36536,19 +36661,19 @@ Object.freeze({
|
|
|
36536
36661
|
addonId: null,
|
|
36537
36662
|
access: "view"
|
|
36538
36663
|
},
|
|
36539
|
-
"pipelineAnalytics.
|
|
36664
|
+
"pipelineAnalytics.getKeyEvents": {
|
|
36540
36665
|
capName: "pipeline-analytics",
|
|
36541
36666
|
capScope: "device",
|
|
36542
36667
|
addonId: null,
|
|
36543
36668
|
access: "view"
|
|
36544
36669
|
},
|
|
36545
|
-
"pipelineAnalytics.
|
|
36670
|
+
"pipelineAnalytics.getKeyEventsBatch": {
|
|
36546
36671
|
capName: "pipeline-analytics",
|
|
36547
36672
|
capScope: "device",
|
|
36548
36673
|
addonId: null,
|
|
36549
36674
|
access: "view"
|
|
36550
36675
|
},
|
|
36551
|
-
"pipelineAnalytics.
|
|
36676
|
+
"pipelineAnalytics.getMediaReclaimStatus": {
|
|
36552
36677
|
capName: "pipeline-analytics",
|
|
36553
36678
|
capScope: "device",
|
|
36554
36679
|
addonId: null,
|
|
@@ -36638,12 +36763,6 @@ Object.freeze({
|
|
|
36638
36763
|
addonId: null,
|
|
36639
36764
|
access: "view"
|
|
36640
36765
|
},
|
|
36641
|
-
"pipelineAnalytics.listGroups": {
|
|
36642
|
-
capName: "pipeline-analytics",
|
|
36643
|
-
capScope: "device",
|
|
36644
|
-
addonId: null,
|
|
36645
|
-
access: "view"
|
|
36646
|
-
},
|
|
36647
36766
|
"pipelineAnalytics.listOpsLog": {
|
|
36648
36767
|
capName: "pipeline-analytics",
|
|
36649
36768
|
capScope: "device",
|
|
@@ -36728,6 +36847,12 @@ Object.freeze({
|
|
|
36728
36847
|
addonId: null,
|
|
36729
36848
|
access: "create"
|
|
36730
36849
|
},
|
|
36850
|
+
"pipelineAnalytics.reclaimDebugMedia": {
|
|
36851
|
+
capName: "pipeline-analytics",
|
|
36852
|
+
capScope: "device",
|
|
36853
|
+
addonId: null,
|
|
36854
|
+
access: "create"
|
|
36855
|
+
},
|
|
36731
36856
|
"pipelineAnalytics.reconcileFromDisk": {
|
|
36732
36857
|
capName: "pipeline-analytics",
|
|
36733
36858
|
capScope: "device",
|
|
@@ -37652,6 +37777,12 @@ Object.freeze({
|
|
|
37652
37777
|
addonId: null,
|
|
37653
37778
|
access: "view"
|
|
37654
37779
|
},
|
|
37780
|
+
"recording.getPlacement": {
|
|
37781
|
+
capName: "recording",
|
|
37782
|
+
capScope: "system",
|
|
37783
|
+
addonId: null,
|
|
37784
|
+
access: "view"
|
|
37785
|
+
},
|
|
37655
37786
|
"recording.getPlaybackManifest": {
|
|
37656
37787
|
capName: "recording",
|
|
37657
37788
|
capScope: "system",
|
|
@@ -37778,6 +37909,12 @@ Object.freeze({
|
|
|
37778
37909
|
addonId: null,
|
|
37779
37910
|
access: "create"
|
|
37780
37911
|
},
|
|
37912
|
+
"recording.setDevicePlacement": {
|
|
37913
|
+
capName: "recording",
|
|
37914
|
+
capScope: "system",
|
|
37915
|
+
addonId: null,
|
|
37916
|
+
access: "create"
|
|
37917
|
+
},
|
|
37781
37918
|
"recording.startStorageMigrationMove": {
|
|
37782
37919
|
capName: "recording",
|
|
37783
37920
|
capScope: "system",
|
|
@@ -38222,12 +38359,36 @@ Object.freeze({
|
|
|
38222
38359
|
addonId: null,
|
|
38223
38360
|
access: "create"
|
|
38224
38361
|
},
|
|
38362
|
+
"storageMigration.cleanupCancel": {
|
|
38363
|
+
capName: "storage-migration",
|
|
38364
|
+
capScope: "system",
|
|
38365
|
+
addonId: null,
|
|
38366
|
+
access: "create"
|
|
38367
|
+
},
|
|
38368
|
+
"storageMigration.cleanupStart": {
|
|
38369
|
+
capName: "storage-migration",
|
|
38370
|
+
capScope: "system",
|
|
38371
|
+
addonId: null,
|
|
38372
|
+
access: "create"
|
|
38373
|
+
},
|
|
38374
|
+
"storageMigration.cleanupStatus": {
|
|
38375
|
+
capName: "storage-migration",
|
|
38376
|
+
capScope: "system",
|
|
38377
|
+
addonId: null,
|
|
38378
|
+
access: "view"
|
|
38379
|
+
},
|
|
38225
38380
|
"storageMigration.drain": {
|
|
38226
38381
|
capName: "storage-migration",
|
|
38227
38382
|
capScope: "system",
|
|
38228
38383
|
addonId: null,
|
|
38229
38384
|
access: "create"
|
|
38230
38385
|
},
|
|
38386
|
+
"storageMigration.history": {
|
|
38387
|
+
capName: "storage-migration",
|
|
38388
|
+
capScope: "system",
|
|
38389
|
+
addonId: null,
|
|
38390
|
+
access: "view"
|
|
38391
|
+
},
|
|
38231
38392
|
"storageMigration.movers": {
|
|
38232
38393
|
capName: "storage-migration",
|
|
38233
38394
|
capScope: "system",
|
|
@@ -40224,11 +40385,6 @@ Object.freeze({
|
|
|
40224
40385
|
form: "single",
|
|
40225
40386
|
optional: true
|
|
40226
40387
|
}],
|
|
40227
|
-
"pipelineAnalytics.getGroup": [{
|
|
40228
|
-
name: "deviceId",
|
|
40229
|
-
form: "single",
|
|
40230
|
-
optional: false
|
|
40231
|
-
}],
|
|
40232
40388
|
"pipelineAnalytics.getKeyEvents": [{
|
|
40233
40389
|
name: "deviceId",
|
|
40234
40390
|
form: "single",
|
|
@@ -40294,11 +40450,6 @@ Object.freeze({
|
|
|
40294
40450
|
form: "single",
|
|
40295
40451
|
optional: false
|
|
40296
40452
|
}],
|
|
40297
|
-
"pipelineAnalytics.listGroups": [{
|
|
40298
|
-
name: "deviceIds",
|
|
40299
|
-
form: "array",
|
|
40300
|
-
optional: false
|
|
40301
|
-
}],
|
|
40302
40453
|
"pipelineAnalytics.listOpsLog": [{
|
|
40303
40454
|
name: "deviceId",
|
|
40304
40455
|
form: "single",
|
|
@@ -40344,6 +40495,11 @@ Object.freeze({
|
|
|
40344
40495
|
form: "single",
|
|
40345
40496
|
optional: true
|
|
40346
40497
|
}],
|
|
40498
|
+
"pipelineAnalytics.reclaimDebugMedia": [{
|
|
40499
|
+
name: "deviceIds",
|
|
40500
|
+
form: "array",
|
|
40501
|
+
optional: true
|
|
40502
|
+
}],
|
|
40347
40503
|
"pipelineAnalytics.reconcileFromDisk": [{
|
|
40348
40504
|
name: "deviceId",
|
|
40349
40505
|
form: "single",
|
|
@@ -40709,6 +40865,11 @@ Object.freeze({
|
|
|
40709
40865
|
form: "single",
|
|
40710
40866
|
optional: false
|
|
40711
40867
|
}],
|
|
40868
|
+
"recording.setDevicePlacement": [{
|
|
40869
|
+
name: "deviceId",
|
|
40870
|
+
form: "single",
|
|
40871
|
+
optional: false
|
|
40872
|
+
}],
|
|
40712
40873
|
"recording.startStorageMigrationMove": [{
|
|
40713
40874
|
name: "deviceId",
|
|
40714
40875
|
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.58",
|
|
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",
|