@camstack/addon-osd-manager 0.1.42 → 0.1.44
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/{MotionZonesSettings-CdyvFlWR.mjs → MotionZonesSettings-Kfufz0ST.mjs} +2 -2
- package/dist/{PrivacyMaskSettings-CUfurhy1.mjs → PrivacyMaskSettings-Dx73Qzix.mjs} +4 -4
- package/dist/{SceneMonitorEditor-E_PU8Px7.mjs → SceneMonitorEditor-UB2sy-dH.mjs} +3 -3
- package/dist/_stub.js +11 -11
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-BmuIjiOx.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-BKO7P9eF.mjs} +4 -4
- package/dist/_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-8ErlyuY8.mjs +26 -0
- package/dist/{hostInit-Bf1t6pHC.mjs → hostInit-_w5nikMn.mjs} +3 -3
- package/dist/index.js +276 -79
- package/dist/index.mjs +276 -79
- package/dist/{player-overlays-9-h959au.mjs → player-overlays-CEeNvQmJ.mjs} +1 -1
- package/dist/remoteEntry.js +1 -1
- package/dist/{responsive-DuPMoboD.mjs → responsive-Bb0wIt10.mjs} +1 -1
- package/dist/{square-CbixHwGb.mjs → square-DqTV-QmK.mjs} +1 -1
- package/dist/{trash-2---I9LVPc.mjs → trash-2-NlZ3Kw3u.mjs} +1 -1
- package/dist/{use-device-snapshot-DtmjvvAg.mjs → use-device-snapshot-BQz4Wma8.mjs} +1 -1
- package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-B5mIR9KJ.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-C_N6ECAC.mjs} +1 -1
- package/package.json +1 -1
- package/dist/_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BI_yNGG4.mjs +0 -26
package/dist/index.js
CHANGED
|
@@ -8195,6 +8195,13 @@ var MediaRelocateModeSchema = _enum([
|
|
|
8195
8195
|
]);
|
|
8196
8196
|
var RelocateMediaInputSchema = object({
|
|
8197
8197
|
toLocationId: string(),
|
|
8198
|
+
/**
|
|
8199
|
+
* Restrict the pass to rows currently on this location. Omitted / `'*'` =
|
|
8200
|
+
* every row that is not already on `toLocationId` (the historical
|
|
8201
|
+
* behaviour). A named source is what a from→to migration needs: without it
|
|
8202
|
+
* "move events off disk 2" also emptied disk 1.
|
|
8203
|
+
*/
|
|
8204
|
+
fromLocationId: string().optional(),
|
|
8198
8205
|
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8199
8206
|
/** Omitted = `move`, the pre-existing behaviour. */
|
|
8200
8207
|
mode: MediaRelocateModeSchema.optional()
|
|
@@ -8262,6 +8269,19 @@ var StorageMigrationDestinationsSchema = object({
|
|
|
8262
8269
|
galleryMedia: string().min(1).optional()
|
|
8263
8270
|
}).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
|
|
8264
8271
|
/**
|
|
8272
|
+
* Optional named source per class. Omitted = the class's current default
|
|
8273
|
+
* (the historical behaviour). A named source that is NOT the default is a
|
|
8274
|
+
* drain of that disk: bytes move, the default stays, and the source is
|
|
8275
|
+
* disabled when the move finishes.
|
|
8276
|
+
*/
|
|
8277
|
+
var StorageMigrationSourcesSchema = object({
|
|
8278
|
+
recordings: string().min(1).optional(),
|
|
8279
|
+
recordingsLow: string().min(1).optional(),
|
|
8280
|
+
eventMedia: string().min(1).optional(),
|
|
8281
|
+
backups: string().min(1).optional(),
|
|
8282
|
+
galleryMedia: string().min(1).optional()
|
|
8283
|
+
}).optional();
|
|
8284
|
+
/**
|
|
8265
8285
|
* How a migration sequences the cutover against the byte move.
|
|
8266
8286
|
*
|
|
8267
8287
|
* - `blocking` — the historical order: pause, move every byte, repoint,
|
|
@@ -8283,6 +8303,8 @@ var StorageMigrationModeSchema = _enum(["blocking", "nonBlocking"]);
|
|
|
8283
8303
|
/** Shared input for planning and starting an orchestrated storage migration. */
|
|
8284
8304
|
var StorageMigrationInputSchema = object({
|
|
8285
8305
|
destinations: StorageMigrationDestinationsSchema,
|
|
8306
|
+
/** Omitted = each class's current default. */
|
|
8307
|
+
sources: StorageMigrationSourcesSchema,
|
|
8286
8308
|
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8287
8309
|
/** Omitted = `blocking`, which stays the default. */
|
|
8288
8310
|
mode: StorageMigrationModeSchema.optional()
|
|
@@ -8362,6 +8384,13 @@ var StorageMigrationMoveSchema = object({
|
|
|
8362
8384
|
storageClass: StorageMigrationClassSchema,
|
|
8363
8385
|
fromLocationId: string(),
|
|
8364
8386
|
toLocationId: string(),
|
|
8387
|
+
/**
|
|
8388
|
+
* True when `from` was NOT the class default at plan time. The move still
|
|
8389
|
+
* copies bytes, but the default is left alone and the source is disabled
|
|
8390
|
+
* once the copy verifies. Absent on jobs planned before this field existed
|
|
8391
|
+
* — those jobs always repointed, which is `false`.
|
|
8392
|
+
*/
|
|
8393
|
+
freezeSource: boolean().optional(),
|
|
8365
8394
|
moverJobId: string().nullable(),
|
|
8366
8395
|
state: RelocateJobStateSchema.nullable(),
|
|
8367
8396
|
error: string().nullable(),
|
|
@@ -8375,6 +8404,7 @@ var StorageMigrationJobSchema = object({
|
|
|
8375
8404
|
* can tell a seconds-long cutover from a thirty-hour one. */
|
|
8376
8405
|
mode: StorageMigrationModeSchema,
|
|
8377
8406
|
destinations: StorageMigrationDestinationsSchema,
|
|
8407
|
+
sources: StorageMigrationSourcesSchema,
|
|
8378
8408
|
throttleMbps: number(),
|
|
8379
8409
|
moves: array(StorageMigrationMoveSchema),
|
|
8380
8410
|
pauseLeaseId: string().nullable(),
|
|
@@ -8400,6 +8430,7 @@ var StorageMigrationFindingSchema = object({
|
|
|
8400
8430
|
});
|
|
8401
8431
|
var StorageMigrationPlanSchema = object({
|
|
8402
8432
|
destinations: StorageMigrationDestinationsSchema,
|
|
8433
|
+
sources: StorageMigrationSourcesSchema,
|
|
8403
8434
|
/** The mode this plan was built for. A plan is only valid for its mode: the
|
|
8404
8435
|
* `eventMedia` seal gate and the single-cardinality refusal both depend on
|
|
8405
8436
|
* it. */
|
|
@@ -8407,7 +8438,8 @@ var StorageMigrationPlanSchema = object({
|
|
|
8407
8438
|
moves: array(object({
|
|
8408
8439
|
storageClass: StorageMigrationClassSchema,
|
|
8409
8440
|
fromLocationId: string(),
|
|
8410
|
-
toLocationId: string()
|
|
8441
|
+
toLocationId: string(),
|
|
8442
|
+
freezeSource: boolean().optional()
|
|
8411
8443
|
})),
|
|
8412
8444
|
findings: array(StorageMigrationFindingSchema)
|
|
8413
8445
|
});
|
|
@@ -8585,10 +8617,51 @@ var LedgerWalkReportSchema = object({
|
|
|
8585
8617
|
var RelocatableMediaCountSchema = object({ rows: number().int().nonnegative() }).nullable();
|
|
8586
8618
|
var RelocatableMediaCountInputSchema = object({
|
|
8587
8619
|
toLocationId: string().min(1),
|
|
8620
|
+
/** Restrict the count to one source; omitted / `'*'` = every non-target row. */
|
|
8621
|
+
fromLocationId: string().optional(),
|
|
8588
8622
|
/** Omitted = `move`. */
|
|
8589
8623
|
mode: MediaRelocateModeSchema.optional()
|
|
8590
8624
|
});
|
|
8591
8625
|
/**
|
|
8626
|
+
* Operator cleanup of leftover analytics rows, optional debug media, and
|
|
8627
|
+
* ghost ledger entries on frozen footage locations.
|
|
8628
|
+
*
|
|
8629
|
+
* A pass is tens of minutes on a standing backlog. The hub method RETURNS
|
|
8630
|
+
* `{ jobId }` immediately; progress is `cleanupStatus`. Awaiting the work
|
|
8631
|
+
* is how `addons.custom` hit the 60 s UDS deadline while reclaim continued
|
|
8632
|
+
* with no operator-visible status.
|
|
8633
|
+
*/
|
|
8634
|
+
var StorageCleanupPhaseSchema = _enum([
|
|
8635
|
+
"orphans",
|
|
8636
|
+
"debug-media",
|
|
8637
|
+
"ghost-ledger",
|
|
8638
|
+
"done",
|
|
8639
|
+
"failed",
|
|
8640
|
+
"cancelled"
|
|
8641
|
+
]);
|
|
8642
|
+
var StorageCleanupInputSchema = object({
|
|
8643
|
+
/** Also walk motion stills / track filmstrips. Off by default. */
|
|
8644
|
+
includeDebugMedia: boolean().optional() });
|
|
8645
|
+
var StorageCleanupJobSchema = object({
|
|
8646
|
+
jobId: string(),
|
|
8647
|
+
phase: StorageCleanupPhaseSchema,
|
|
8648
|
+
includeDebugMedia: boolean(),
|
|
8649
|
+
orphansReclaimed: number().int().nonnegative(),
|
|
8650
|
+
orphanBytesReclaimed: number().int().nonnegative(),
|
|
8651
|
+
debugMediaReclaimed: number().int().nonnegative(),
|
|
8652
|
+
debugMediaBytesReclaimed: number().int().nonnegative(),
|
|
8653
|
+
ghostsForgotten: number().int().nonnegative(),
|
|
8654
|
+
ghostBytesForgotten: number().int().nonnegative(),
|
|
8655
|
+
/** Short operator-facing line: current collection, pass, or location. */
|
|
8656
|
+
detail: string().nullable(),
|
|
8657
|
+
cancelRequested: boolean(),
|
|
8658
|
+
startedAt: number(),
|
|
8659
|
+
updatedAt: number(),
|
|
8660
|
+
finishedAt: number().nullable(),
|
|
8661
|
+
error: string().nullable()
|
|
8662
|
+
});
|
|
8663
|
+
var StorageCleanupStatusInputSchema = object({ jobId: string().optional() });
|
|
8664
|
+
/**
|
|
8592
8665
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
8593
8666
|
* storage a location serves. Defined here (not in `capabilities/storage.cap.ts`)
|
|
8594
8667
|
* so the persisted record schema and the consumer-facing cap can both consume it
|
|
@@ -8616,11 +8689,10 @@ var StorageLocationTypeSchema = string().regex(/^[a-z][a-zA-Z0-9-]*$/);
|
|
|
8616
8689
|
* The default location for a type uses `id === <type>:default` by
|
|
8617
8690
|
* convention (the bare type ref like `'backups'` resolves to it).
|
|
8618
8691
|
*
|
|
8619
|
-
* `isSystem
|
|
8620
|
-
*
|
|
8621
|
-
*
|
|
8622
|
-
*
|
|
8623
|
-
* deleting it is rejected at the cap level.
|
|
8692
|
+
* `isSystem` is a legacy persisted flag. Seed still creates the initial
|
|
8693
|
+
* `<type>:default` locations; the flag is no longer a lock, a badge, or a
|
|
8694
|
+
* prune selector. New writes leave it false. Deletion is gated on uniqueness
|
|
8695
|
+
* / last-enabled, not on this bit.
|
|
8624
8696
|
*/
|
|
8625
8697
|
var StorageLocationSchema = object({
|
|
8626
8698
|
id: string().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/),
|
|
@@ -14194,6 +14266,27 @@ var deviceManagerCapability = {
|
|
|
14194
14266
|
kind: "mutation",
|
|
14195
14267
|
auth: "admin"
|
|
14196
14268
|
}),
|
|
14269
|
+
/** Rename a room: replace the label in the registry IN PLACE and move
|
|
14270
|
+
* every device that carried it, as ONE server operation.
|
|
14271
|
+
*
|
|
14272
|
+
* The admin UI used to do this as `addLocation(to)` → N ×
|
|
14273
|
+
* `setLocation(device, to)` → `removeLocation(from)` from the browser.
|
|
14274
|
+
* Nothing bound those three together, so a closed tab left the fleet
|
|
14275
|
+
* split across two rooms — one of which the operator believed was gone.
|
|
14276
|
+
*
|
|
14277
|
+
* `from` is matched the way the registry matches everywhere else
|
|
14278
|
+
* (trimmed, case-insensitive) and need NOT be registered: the registry is
|
|
14279
|
+
* a suggestion list, and the devices that most need a rename are exactly
|
|
14280
|
+
* the ones carrying a label nobody registered. `to` renames onto an
|
|
14281
|
+
* existing room by MERGING into it, leaving no duplicate label. An empty
|
|
14282
|
+
* `to` throws before anything is written. */
|
|
14283
|
+
renameLocation: method(object({
|
|
14284
|
+
from: string(),
|
|
14285
|
+
to: string()
|
|
14286
|
+
}), object({ moved: number() }), {
|
|
14287
|
+
kind: "mutation",
|
|
14288
|
+
auth: "admin"
|
|
14289
|
+
}),
|
|
14197
14290
|
/** Soft-disable / re-enable the device. Drivers consult
|
|
14198
14291
|
* `BaseDevice.disabled` to gate lifecycle hooks. */
|
|
14199
14292
|
setDisabled: method(object({
|
|
@@ -21675,46 +21768,6 @@ var RecentTracksPageSchema = object({
|
|
|
21675
21768
|
/** Cursor for the next page, or null when this page is the last. */
|
|
21676
21769
|
nextCursor: string().nullable()
|
|
21677
21770
|
});
|
|
21678
|
-
var LIST_GROUPS_DEFAULT_LIMIT = 40;
|
|
21679
|
-
var LIST_GROUPS_MAX_LIMIT = 100;
|
|
21680
|
-
var AnalyticsGroupRecordSchema = object({
|
|
21681
|
-
id: string(),
|
|
21682
|
-
deviceId: number().int(),
|
|
21683
|
-
openedAt: number().int(),
|
|
21684
|
-
closedAt: number().int(),
|
|
21685
|
-
timestamp: number().int(),
|
|
21686
|
-
memberCount: number().int(),
|
|
21687
|
-
memberTrackIds: array(string()).readonly(),
|
|
21688
|
-
className: string(),
|
|
21689
|
-
classes: array(string()).readonly(),
|
|
21690
|
-
/** Relative event-media path, or null when the group has no picture yet. */
|
|
21691
|
-
mediaUrl: string().nullable(),
|
|
21692
|
-
singleton: boolean()
|
|
21693
|
-
});
|
|
21694
|
-
var AnalyticsGroupMemberSchema = object({
|
|
21695
|
-
trackId: string(),
|
|
21696
|
-
deviceId: number().int(),
|
|
21697
|
-
className: string(),
|
|
21698
|
-
firstSeen: number().int(),
|
|
21699
|
-
lastSeen: number().int(),
|
|
21700
|
-
mediaUrl: string().nullable()
|
|
21701
|
-
});
|
|
21702
|
-
var AnalyticsGroupDetailSchema = AnalyticsGroupRecordSchema.extend({ members: array(AnalyticsGroupMemberSchema).readonly() });
|
|
21703
|
-
var ListGroupsQueryInput = object({
|
|
21704
|
-
/** Devices to merge. An empty array yields `{ groups: [], nextCursor: null }`. */
|
|
21705
|
-
deviceIds: array(number()),
|
|
21706
|
-
/** Window lower bound on `closedAt` (inclusive). */
|
|
21707
|
-
since: number().optional(),
|
|
21708
|
-
/** Window upper bound on `openedAt` (inclusive). */
|
|
21709
|
-
until: number().optional(),
|
|
21710
|
-
limit: number().int().min(1).max(LIST_GROUPS_MAX_LIMIT).default(LIST_GROUPS_DEFAULT_LIMIT),
|
|
21711
|
-
/** Opaque continuation cursor from a previous page's `nextCursor`. */
|
|
21712
|
-
cursor: string().optional()
|
|
21713
|
-
});
|
|
21714
|
-
var ListGroupsPageSchema = object({
|
|
21715
|
-
groups: array(AnalyticsGroupRecordSchema).readonly(),
|
|
21716
|
-
nextCursor: string().nullable()
|
|
21717
|
-
});
|
|
21718
21771
|
var KEY_EVENTS_DEFAULT_LIMIT = 50;
|
|
21719
21772
|
var KEY_EVENTS_MAX_LIMIT = 200;
|
|
21720
21773
|
var KeyEventQueryInput = object({
|
|
@@ -21818,9 +21871,7 @@ var TrackCascadeCountsSchema = object({
|
|
|
21818
21871
|
/** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
|
|
21819
21872
|
plates: number().int(),
|
|
21820
21873
|
/** Per-track CLIP search vectors removed (best-effort). */
|
|
21821
|
-
embeddings: number().int()
|
|
21822
|
-
/** Group membership + group rows removed with their last member (best-effort). */
|
|
21823
|
-
groups: number().int()
|
|
21874
|
+
embeddings: number().int()
|
|
21824
21875
|
});
|
|
21825
21876
|
/** Disk-wins reconcile: media rows whose blobs are gone, then empty tracks. */
|
|
21826
21877
|
var DiskReconcileCountsSchema = object({
|
|
@@ -21990,6 +22041,47 @@ var RebuildStatusSchema = object({
|
|
|
21990
22041
|
/** Present when the pass ended by throwing. */
|
|
21991
22042
|
error: string().nullable()
|
|
21992
22043
|
});
|
|
22044
|
+
/**
|
|
22045
|
+
* Acknowledgement that a debug-media reclaim STARTED.
|
|
22046
|
+
*
|
|
22047
|
+
* The pass is paced at ~2 MB/s over a standing 100 GB — tens of minutes — so
|
|
22048
|
+
* it runs detached and this returns immediately. Awaiting it is how the
|
|
22049
|
+
* `addons.custom` door hit the 60 s UDS deadline while the walk carried on
|
|
22050
|
+
* with no status. Poll {@link pipelineAnalyticsCapability.methods.getMediaReclaimStatus}.
|
|
22051
|
+
*/
|
|
22052
|
+
var MediaReclaimStartResultSchema = object({
|
|
22053
|
+
started: boolean(),
|
|
22054
|
+
/** True when a pass was already running; the new request is ignored. */
|
|
22055
|
+
alreadyRunning: boolean()
|
|
22056
|
+
});
|
|
22057
|
+
var MediaReclaimInputSchema = object({
|
|
22058
|
+
mode: _enum(["report", "reclaim"]).default("report"),
|
|
22059
|
+
scopes: array(_enum(["motion-still", "track-filmstrip"])).min(1).optional(),
|
|
22060
|
+
deviceIds: array(number().int()).min(1).optional(),
|
|
22061
|
+
restart: boolean().optional(),
|
|
22062
|
+
pageSize: number().int().min(50).max(5e3).optional(),
|
|
22063
|
+
maxRowsPerDevice: number().int().min(1).max(5e5).optional(),
|
|
22064
|
+
maxReclaimPerDevice: number().int().min(1).max(5e5).optional(),
|
|
22065
|
+
maxBytesPerRun: number().int().min(1).optional(),
|
|
22066
|
+
budgetMinutes: number().int().min(1).max(720).optional(),
|
|
22067
|
+
throttleBytesPerSec: number().int().min(64 * 1024).optional(),
|
|
22068
|
+
graceMinutes: number().int().min(1).max(10080).optional()
|
|
22069
|
+
});
|
|
22070
|
+
var MediaReclaimStatusSchema = object({
|
|
22071
|
+
running: boolean(),
|
|
22072
|
+
mode: _enum(["report", "reclaim"]).nullable(),
|
|
22073
|
+
totalExamined: number(),
|
|
22074
|
+
totalEligible: number(),
|
|
22075
|
+
totalReclaimed: number(),
|
|
22076
|
+
totalBytesReclaimed: number(),
|
|
22077
|
+
totalRefused: number(),
|
|
22078
|
+
/** Device+scope windows finished in this pass. */
|
|
22079
|
+
devicesDone: number(),
|
|
22080
|
+
complete: boolean().nullable(),
|
|
22081
|
+
startedAtMs: number().nullable(),
|
|
22082
|
+
finishedAtMs: number().nullable(),
|
|
22083
|
+
error: string().nullable()
|
|
22084
|
+
});
|
|
21993
22085
|
var ReplayFrameInputSchema = object({
|
|
21994
22086
|
timestamp: number(),
|
|
21995
22087
|
frame: PipelineRunResultBridge
|
|
@@ -22054,16 +22146,6 @@ var pipelineAnalyticsCapability = {
|
|
|
22054
22146
|
* are not included (same contract as `listTracks`).
|
|
22055
22147
|
*/
|
|
22056
22148
|
listRecentTracks: method(RecentTracksQueryInput, RecentTracksPageSchema),
|
|
22057
|
-
/**
|
|
22058
|
-
* Batched co-moving group listing — the Groups feed. Same merge/cursor
|
|
22059
|
-
* contract as {@link listRecentTracks}. A group is a sealed partition of
|
|
22060
|
-
* one session; `getGroup` is the detail with members.
|
|
22061
|
-
*/
|
|
22062
|
-
listGroups: method(ListGroupsQueryInput, ListGroupsPageSchema),
|
|
22063
|
-
getGroup: method(object({
|
|
22064
|
-
deviceId: number(),
|
|
22065
|
-
groupId: string().min(1)
|
|
22066
|
-
}), AnalyticsGroupDetailSchema.nullable()),
|
|
22067
22149
|
clearTracks: method(object({ deviceId: number() }), _void(), {
|
|
22068
22150
|
kind: "mutation",
|
|
22069
22151
|
auth: "admin"
|
|
@@ -22412,6 +22494,20 @@ var pipelineAnalyticsCapability = {
|
|
|
22412
22494
|
auth: "admin"
|
|
22413
22495
|
}),
|
|
22414
22496
|
/**
|
|
22497
|
+
* Reclaim the standing debug-media backlog (motion-visit stills + track
|
|
22498
|
+
* filmstrips). DETACHED: returns `{ started }` immediately. The pass is
|
|
22499
|
+
* tens of minutes; awaiting it is a timeout, not a verdict. Dry-run unless
|
|
22500
|
+
* `mode: 'reclaim'`. Poll `getMediaReclaimStatus`.
|
|
22501
|
+
*/
|
|
22502
|
+
reclaimDebugMedia: method(MediaReclaimInputSchema, MediaReclaimStartResultSchema, {
|
|
22503
|
+
kind: "mutation",
|
|
22504
|
+
auth: "admin"
|
|
22505
|
+
}),
|
|
22506
|
+
getMediaReclaimStatus: method(object({}), MediaReclaimStatusSchema, {
|
|
22507
|
+
kind: "query",
|
|
22508
|
+
auth: "admin"
|
|
22509
|
+
}),
|
|
22510
|
+
/**
|
|
22415
22511
|
* The CHEAP QUESTION, asked before any media moves: how big is the dataset
|
|
22416
22512
|
* the marked (`markForTrain`) tracks would produce?
|
|
22417
22513
|
*
|
|
@@ -25364,7 +25460,23 @@ var storageMigrationCapability = {
|
|
|
25364
25460
|
drain: method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
|
|
25365
25461
|
kind: "mutation",
|
|
25366
25462
|
auth: "admin"
|
|
25367
|
-
})
|
|
25463
|
+
}),
|
|
25464
|
+
/**
|
|
25465
|
+
* One operator cleanup of leftover analytics (DB + blobs) and ghost
|
|
25466
|
+
* ledger rows on frozen footage locations. Optional debug-media sweep.
|
|
25467
|
+
* Returns immediately; poll {@link cleanupStatus}.
|
|
25468
|
+
*/
|
|
25469
|
+
cleanupStart: method(StorageCleanupInputSchema, object({ jobId: string() }), {
|
|
25470
|
+
kind: "mutation",
|
|
25471
|
+
auth: "admin"
|
|
25472
|
+
}),
|
|
25473
|
+
cleanupStatus: method(StorageCleanupStatusInputSchema, StorageCleanupJobSchema.nullable(), { auth: "admin" }),
|
|
25474
|
+
cleanupCancel: method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
25475
|
+
kind: "mutation",
|
|
25476
|
+
auth: "admin"
|
|
25477
|
+
}),
|
|
25478
|
+
/** Recent finished migration jobs, newest first. The live job is `status`. */
|
|
25479
|
+
history: method(object({}), array(StorageMigrationJobSchema).readonly(), { auth: "admin" })
|
|
25368
25480
|
}
|
|
25369
25481
|
};
|
|
25370
25482
|
var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
@@ -33517,6 +33629,33 @@ var RecordingRebalanceInputSchema = object({
|
|
|
33517
33629
|
minMoveGb: number().min(0).optional()
|
|
33518
33630
|
});
|
|
33519
33631
|
/**
|
|
33632
|
+
* Operator-facing placement of one camera onto a recordings location.
|
|
33633
|
+
*
|
|
33634
|
+
* `pinLocationId` is the operator instruction: a location id, or `null` for
|
|
33635
|
+
* Auto (the planner may move this camera). `locationId` is where high/mid
|
|
33636
|
+
* currently write — the plan, which may disagree with the pin when Auto.
|
|
33637
|
+
*/
|
|
33638
|
+
var RecordingDevicePlacementSchema = object({
|
|
33639
|
+
deviceId: number().int(),
|
|
33640
|
+
profile: string(),
|
|
33641
|
+
locationId: string()
|
|
33642
|
+
});
|
|
33643
|
+
var RecordingDevicePinSchema = object({
|
|
33644
|
+
deviceId: number().int(),
|
|
33645
|
+
/** Recordings-class location this camera is pinned to. */
|
|
33646
|
+
locationId: string()
|
|
33647
|
+
});
|
|
33648
|
+
var RecordingPlacementViewSchema = object({
|
|
33649
|
+
assignments: array(RecordingDevicePlacementSchema),
|
|
33650
|
+
pins: array(RecordingDevicePinSchema),
|
|
33651
|
+
defaultLocations: record(string(), string())
|
|
33652
|
+
});
|
|
33653
|
+
var RecordingSetDevicePlacementInputSchema = object({
|
|
33654
|
+
deviceId: number().int(),
|
|
33655
|
+
/** `null` = Auto. Otherwise a `recordings:*` location id. */
|
|
33656
|
+
locationId: string().nullable()
|
|
33657
|
+
});
|
|
33658
|
+
/**
|
|
33520
33659
|
* Result of locating footage at a wall-clock instant for one device/profile.
|
|
33521
33660
|
* `segment` carries the covering segment's window; `gap` reports the forward
|
|
33522
33661
|
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
@@ -33869,6 +34008,22 @@ var recordingCapability = {
|
|
|
33869
34008
|
startStorageRebalance: method(RecordingRebalanceInputSchema, RecordingRebalancePlanSchema, {
|
|
33870
34009
|
kind: "mutation",
|
|
33871
34010
|
auth: "admin"
|
|
34011
|
+
}),
|
|
34012
|
+
/**
|
|
34013
|
+
* The placement plan in force plus operator pins. Drives the Locations
|
|
34014
|
+
* admin page: Auto vs a named recordings location, per camera.
|
|
34015
|
+
*/
|
|
34016
|
+
getPlacement: method(object({}), RecordingPlacementViewSchema, {
|
|
34017
|
+
kind: "query",
|
|
34018
|
+
auth: "admin"
|
|
34019
|
+
}),
|
|
34020
|
+
/**
|
|
34021
|
+
* Pin a camera to a recordings location, or clear the pin (Auto). High and
|
|
34022
|
+
* mid follow the pin; low stays with the recordingsLow planner.
|
|
34023
|
+
*/
|
|
34024
|
+
setDevicePlacement: method(RecordingSetDevicePlacementInputSchema, object({ ok: literal(true) }), {
|
|
34025
|
+
kind: "mutation",
|
|
34026
|
+
auth: "admin"
|
|
33872
34027
|
})
|
|
33873
34028
|
}
|
|
33874
34029
|
};
|
|
@@ -38307,6 +38462,12 @@ Object.freeze({
|
|
|
38307
38462
|
addonId: null,
|
|
38308
38463
|
access: "delete"
|
|
38309
38464
|
},
|
|
38465
|
+
"deviceManager.renameLocation": {
|
|
38466
|
+
capName: "device-manager",
|
|
38467
|
+
capScope: "system",
|
|
38468
|
+
addonId: null,
|
|
38469
|
+
access: "create"
|
|
38470
|
+
},
|
|
38310
38471
|
"deviceManager.runDeviceAction": {
|
|
38311
38472
|
capName: "device-manager",
|
|
38312
38473
|
capScope: "system",
|
|
@@ -39999,19 +40160,19 @@ Object.freeze({
|
|
|
39999
40160
|
addonId: null,
|
|
40000
40161
|
access: "view"
|
|
40001
40162
|
},
|
|
40002
|
-
"pipelineAnalytics.
|
|
40163
|
+
"pipelineAnalytics.getKeyEvents": {
|
|
40003
40164
|
capName: "pipeline-analytics",
|
|
40004
40165
|
capScope: "device",
|
|
40005
40166
|
addonId: null,
|
|
40006
40167
|
access: "view"
|
|
40007
40168
|
},
|
|
40008
|
-
"pipelineAnalytics.
|
|
40169
|
+
"pipelineAnalytics.getKeyEventsBatch": {
|
|
40009
40170
|
capName: "pipeline-analytics",
|
|
40010
40171
|
capScope: "device",
|
|
40011
40172
|
addonId: null,
|
|
40012
40173
|
access: "view"
|
|
40013
40174
|
},
|
|
40014
|
-
"pipelineAnalytics.
|
|
40175
|
+
"pipelineAnalytics.getMediaReclaimStatus": {
|
|
40015
40176
|
capName: "pipeline-analytics",
|
|
40016
40177
|
capScope: "device",
|
|
40017
40178
|
addonId: null,
|
|
@@ -40101,12 +40262,6 @@ Object.freeze({
|
|
|
40101
40262
|
addonId: null,
|
|
40102
40263
|
access: "view"
|
|
40103
40264
|
},
|
|
40104
|
-
"pipelineAnalytics.listGroups": {
|
|
40105
|
-
capName: "pipeline-analytics",
|
|
40106
|
-
capScope: "device",
|
|
40107
|
-
addonId: null,
|
|
40108
|
-
access: "view"
|
|
40109
|
-
},
|
|
40110
40265
|
"pipelineAnalytics.listOpsLog": {
|
|
40111
40266
|
capName: "pipeline-analytics",
|
|
40112
40267
|
capScope: "device",
|
|
@@ -40191,6 +40346,12 @@ Object.freeze({
|
|
|
40191
40346
|
addonId: null,
|
|
40192
40347
|
access: "create"
|
|
40193
40348
|
},
|
|
40349
|
+
"pipelineAnalytics.reclaimDebugMedia": {
|
|
40350
|
+
capName: "pipeline-analytics",
|
|
40351
|
+
capScope: "device",
|
|
40352
|
+
addonId: null,
|
|
40353
|
+
access: "create"
|
|
40354
|
+
},
|
|
40194
40355
|
"pipelineAnalytics.reconcileFromDisk": {
|
|
40195
40356
|
capName: "pipeline-analytics",
|
|
40196
40357
|
capScope: "device",
|
|
@@ -41115,6 +41276,12 @@ Object.freeze({
|
|
|
41115
41276
|
addonId: null,
|
|
41116
41277
|
access: "view"
|
|
41117
41278
|
},
|
|
41279
|
+
"recording.getPlacement": {
|
|
41280
|
+
capName: "recording",
|
|
41281
|
+
capScope: "system",
|
|
41282
|
+
addonId: null,
|
|
41283
|
+
access: "view"
|
|
41284
|
+
},
|
|
41118
41285
|
"recording.getPlaybackManifest": {
|
|
41119
41286
|
capName: "recording",
|
|
41120
41287
|
capScope: "system",
|
|
@@ -41241,6 +41408,12 @@ Object.freeze({
|
|
|
41241
41408
|
addonId: null,
|
|
41242
41409
|
access: "create"
|
|
41243
41410
|
},
|
|
41411
|
+
"recording.setDevicePlacement": {
|
|
41412
|
+
capName: "recording",
|
|
41413
|
+
capScope: "system",
|
|
41414
|
+
addonId: null,
|
|
41415
|
+
access: "create"
|
|
41416
|
+
},
|
|
41244
41417
|
"recording.startStorageMigrationMove": {
|
|
41245
41418
|
capName: "recording",
|
|
41246
41419
|
capScope: "system",
|
|
@@ -41685,12 +41858,36 @@ Object.freeze({
|
|
|
41685
41858
|
addonId: null,
|
|
41686
41859
|
access: "create"
|
|
41687
41860
|
},
|
|
41861
|
+
"storageMigration.cleanupCancel": {
|
|
41862
|
+
capName: "storage-migration",
|
|
41863
|
+
capScope: "system",
|
|
41864
|
+
addonId: null,
|
|
41865
|
+
access: "create"
|
|
41866
|
+
},
|
|
41867
|
+
"storageMigration.cleanupStart": {
|
|
41868
|
+
capName: "storage-migration",
|
|
41869
|
+
capScope: "system",
|
|
41870
|
+
addonId: null,
|
|
41871
|
+
access: "create"
|
|
41872
|
+
},
|
|
41873
|
+
"storageMigration.cleanupStatus": {
|
|
41874
|
+
capName: "storage-migration",
|
|
41875
|
+
capScope: "system",
|
|
41876
|
+
addonId: null,
|
|
41877
|
+
access: "view"
|
|
41878
|
+
},
|
|
41688
41879
|
"storageMigration.drain": {
|
|
41689
41880
|
capName: "storage-migration",
|
|
41690
41881
|
capScope: "system",
|
|
41691
41882
|
addonId: null,
|
|
41692
41883
|
access: "create"
|
|
41693
41884
|
},
|
|
41885
|
+
"storageMigration.history": {
|
|
41886
|
+
capName: "storage-migration",
|
|
41887
|
+
capScope: "system",
|
|
41888
|
+
addonId: null,
|
|
41889
|
+
access: "view"
|
|
41890
|
+
},
|
|
41694
41891
|
"storageMigration.movers": {
|
|
41695
41892
|
capName: "storage-migration",
|
|
41696
41893
|
capScope: "system",
|
|
@@ -43687,11 +43884,6 @@ Object.freeze({
|
|
|
43687
43884
|
form: "single",
|
|
43688
43885
|
optional: true
|
|
43689
43886
|
}],
|
|
43690
|
-
"pipelineAnalytics.getGroup": [{
|
|
43691
|
-
name: "deviceId",
|
|
43692
|
-
form: "single",
|
|
43693
|
-
optional: false
|
|
43694
|
-
}],
|
|
43695
43887
|
"pipelineAnalytics.getKeyEvents": [{
|
|
43696
43888
|
name: "deviceId",
|
|
43697
43889
|
form: "single",
|
|
@@ -43757,11 +43949,6 @@ Object.freeze({
|
|
|
43757
43949
|
form: "single",
|
|
43758
43950
|
optional: false
|
|
43759
43951
|
}],
|
|
43760
|
-
"pipelineAnalytics.listGroups": [{
|
|
43761
|
-
name: "deviceIds",
|
|
43762
|
-
form: "array",
|
|
43763
|
-
optional: false
|
|
43764
|
-
}],
|
|
43765
43952
|
"pipelineAnalytics.listOpsLog": [{
|
|
43766
43953
|
name: "deviceId",
|
|
43767
43954
|
form: "single",
|
|
@@ -43807,6 +43994,11 @@ Object.freeze({
|
|
|
43807
43994
|
form: "single",
|
|
43808
43995
|
optional: true
|
|
43809
43996
|
}],
|
|
43997
|
+
"pipelineAnalytics.reclaimDebugMedia": [{
|
|
43998
|
+
name: "deviceIds",
|
|
43999
|
+
form: "array",
|
|
44000
|
+
optional: true
|
|
44001
|
+
}],
|
|
43810
44002
|
"pipelineAnalytics.reconcileFromDisk": [{
|
|
43811
44003
|
name: "deviceId",
|
|
43812
44004
|
form: "single",
|
|
@@ -44172,6 +44364,11 @@ Object.freeze({
|
|
|
44172
44364
|
form: "single",
|
|
44173
44365
|
optional: false
|
|
44174
44366
|
}],
|
|
44367
|
+
"recording.setDevicePlacement": [{
|
|
44368
|
+
name: "deviceId",
|
|
44369
|
+
form: "single",
|
|
44370
|
+
optional: false
|
|
44371
|
+
}],
|
|
44175
44372
|
"recording.startStorageMigrationMove": [{
|
|
44176
44373
|
name: "deviceId",
|
|
44177
44374
|
form: "single",
|