@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.mjs
CHANGED
|
@@ -8191,6 +8191,13 @@ var MediaRelocateModeSchema = _enum([
|
|
|
8191
8191
|
]);
|
|
8192
8192
|
var RelocateMediaInputSchema = object({
|
|
8193
8193
|
toLocationId: string(),
|
|
8194
|
+
/**
|
|
8195
|
+
* Restrict the pass to rows currently on this location. Omitted / `'*'` =
|
|
8196
|
+
* every row that is not already on `toLocationId` (the historical
|
|
8197
|
+
* behaviour). A named source is what a from→to migration needs: without it
|
|
8198
|
+
* "move events off disk 2" also emptied disk 1.
|
|
8199
|
+
*/
|
|
8200
|
+
fromLocationId: string().optional(),
|
|
8194
8201
|
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8195
8202
|
/** Omitted = `move`, the pre-existing behaviour. */
|
|
8196
8203
|
mode: MediaRelocateModeSchema.optional()
|
|
@@ -8258,6 +8265,19 @@ var StorageMigrationDestinationsSchema = object({
|
|
|
8258
8265
|
galleryMedia: string().min(1).optional()
|
|
8259
8266
|
}).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
|
|
8260
8267
|
/**
|
|
8268
|
+
* Optional named source per class. Omitted = the class's current default
|
|
8269
|
+
* (the historical behaviour). A named source that is NOT the default is a
|
|
8270
|
+
* drain of that disk: bytes move, the default stays, and the source is
|
|
8271
|
+
* disabled when the move finishes.
|
|
8272
|
+
*/
|
|
8273
|
+
var StorageMigrationSourcesSchema = object({
|
|
8274
|
+
recordings: string().min(1).optional(),
|
|
8275
|
+
recordingsLow: string().min(1).optional(),
|
|
8276
|
+
eventMedia: string().min(1).optional(),
|
|
8277
|
+
backups: string().min(1).optional(),
|
|
8278
|
+
galleryMedia: string().min(1).optional()
|
|
8279
|
+
}).optional();
|
|
8280
|
+
/**
|
|
8261
8281
|
* How a migration sequences the cutover against the byte move.
|
|
8262
8282
|
*
|
|
8263
8283
|
* - `blocking` — the historical order: pause, move every byte, repoint,
|
|
@@ -8279,6 +8299,8 @@ var StorageMigrationModeSchema = _enum(["blocking", "nonBlocking"]);
|
|
|
8279
8299
|
/** Shared input for planning and starting an orchestrated storage migration. */
|
|
8280
8300
|
var StorageMigrationInputSchema = object({
|
|
8281
8301
|
destinations: StorageMigrationDestinationsSchema,
|
|
8302
|
+
/** Omitted = each class's current default. */
|
|
8303
|
+
sources: StorageMigrationSourcesSchema,
|
|
8282
8304
|
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8283
8305
|
/** Omitted = `blocking`, which stays the default. */
|
|
8284
8306
|
mode: StorageMigrationModeSchema.optional()
|
|
@@ -8358,6 +8380,13 @@ var StorageMigrationMoveSchema = object({
|
|
|
8358
8380
|
storageClass: StorageMigrationClassSchema,
|
|
8359
8381
|
fromLocationId: string(),
|
|
8360
8382
|
toLocationId: string(),
|
|
8383
|
+
/**
|
|
8384
|
+
* True when `from` was NOT the class default at plan time. The move still
|
|
8385
|
+
* copies bytes, but the default is left alone and the source is disabled
|
|
8386
|
+
* once the copy verifies. Absent on jobs planned before this field existed
|
|
8387
|
+
* — those jobs always repointed, which is `false`.
|
|
8388
|
+
*/
|
|
8389
|
+
freezeSource: boolean().optional(),
|
|
8361
8390
|
moverJobId: string().nullable(),
|
|
8362
8391
|
state: RelocateJobStateSchema.nullable(),
|
|
8363
8392
|
error: string().nullable(),
|
|
@@ -8371,6 +8400,7 @@ var StorageMigrationJobSchema = object({
|
|
|
8371
8400
|
* can tell a seconds-long cutover from a thirty-hour one. */
|
|
8372
8401
|
mode: StorageMigrationModeSchema,
|
|
8373
8402
|
destinations: StorageMigrationDestinationsSchema,
|
|
8403
|
+
sources: StorageMigrationSourcesSchema,
|
|
8374
8404
|
throttleMbps: number(),
|
|
8375
8405
|
moves: array(StorageMigrationMoveSchema),
|
|
8376
8406
|
pauseLeaseId: string().nullable(),
|
|
@@ -8396,6 +8426,7 @@ var StorageMigrationFindingSchema = object({
|
|
|
8396
8426
|
});
|
|
8397
8427
|
var StorageMigrationPlanSchema = object({
|
|
8398
8428
|
destinations: StorageMigrationDestinationsSchema,
|
|
8429
|
+
sources: StorageMigrationSourcesSchema,
|
|
8399
8430
|
/** The mode this plan was built for. A plan is only valid for its mode: the
|
|
8400
8431
|
* `eventMedia` seal gate and the single-cardinality refusal both depend on
|
|
8401
8432
|
* it. */
|
|
@@ -8403,7 +8434,8 @@ var StorageMigrationPlanSchema = object({
|
|
|
8403
8434
|
moves: array(object({
|
|
8404
8435
|
storageClass: StorageMigrationClassSchema,
|
|
8405
8436
|
fromLocationId: string(),
|
|
8406
|
-
toLocationId: string()
|
|
8437
|
+
toLocationId: string(),
|
|
8438
|
+
freezeSource: boolean().optional()
|
|
8407
8439
|
})),
|
|
8408
8440
|
findings: array(StorageMigrationFindingSchema)
|
|
8409
8441
|
});
|
|
@@ -8581,10 +8613,51 @@ var LedgerWalkReportSchema = object({
|
|
|
8581
8613
|
var RelocatableMediaCountSchema = object({ rows: number().int().nonnegative() }).nullable();
|
|
8582
8614
|
var RelocatableMediaCountInputSchema = object({
|
|
8583
8615
|
toLocationId: string().min(1),
|
|
8616
|
+
/** Restrict the count to one source; omitted / `'*'` = every non-target row. */
|
|
8617
|
+
fromLocationId: string().optional(),
|
|
8584
8618
|
/** Omitted = `move`. */
|
|
8585
8619
|
mode: MediaRelocateModeSchema.optional()
|
|
8586
8620
|
});
|
|
8587
8621
|
/**
|
|
8622
|
+
* Operator cleanup of leftover analytics rows, optional debug media, and
|
|
8623
|
+
* ghost ledger entries on frozen footage locations.
|
|
8624
|
+
*
|
|
8625
|
+
* A pass is tens of minutes on a standing backlog. The hub method RETURNS
|
|
8626
|
+
* `{ jobId }` immediately; progress is `cleanupStatus`. Awaiting the work
|
|
8627
|
+
* is how `addons.custom` hit the 60 s UDS deadline while reclaim continued
|
|
8628
|
+
* with no operator-visible status.
|
|
8629
|
+
*/
|
|
8630
|
+
var StorageCleanupPhaseSchema = _enum([
|
|
8631
|
+
"orphans",
|
|
8632
|
+
"debug-media",
|
|
8633
|
+
"ghost-ledger",
|
|
8634
|
+
"done",
|
|
8635
|
+
"failed",
|
|
8636
|
+
"cancelled"
|
|
8637
|
+
]);
|
|
8638
|
+
var StorageCleanupInputSchema = object({
|
|
8639
|
+
/** Also walk motion stills / track filmstrips. Off by default. */
|
|
8640
|
+
includeDebugMedia: boolean().optional() });
|
|
8641
|
+
var StorageCleanupJobSchema = object({
|
|
8642
|
+
jobId: string(),
|
|
8643
|
+
phase: StorageCleanupPhaseSchema,
|
|
8644
|
+
includeDebugMedia: boolean(),
|
|
8645
|
+
orphansReclaimed: number().int().nonnegative(),
|
|
8646
|
+
orphanBytesReclaimed: number().int().nonnegative(),
|
|
8647
|
+
debugMediaReclaimed: number().int().nonnegative(),
|
|
8648
|
+
debugMediaBytesReclaimed: number().int().nonnegative(),
|
|
8649
|
+
ghostsForgotten: number().int().nonnegative(),
|
|
8650
|
+
ghostBytesForgotten: number().int().nonnegative(),
|
|
8651
|
+
/** Short operator-facing line: current collection, pass, or location. */
|
|
8652
|
+
detail: string().nullable(),
|
|
8653
|
+
cancelRequested: boolean(),
|
|
8654
|
+
startedAt: number(),
|
|
8655
|
+
updatedAt: number(),
|
|
8656
|
+
finishedAt: number().nullable(),
|
|
8657
|
+
error: string().nullable()
|
|
8658
|
+
});
|
|
8659
|
+
var StorageCleanupStatusInputSchema = object({ jobId: string().optional() });
|
|
8660
|
+
/**
|
|
8588
8661
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
8589
8662
|
* storage a location serves. Defined here (not in `capabilities/storage.cap.ts`)
|
|
8590
8663
|
* so the persisted record schema and the consumer-facing cap can both consume it
|
|
@@ -8612,11 +8685,10 @@ var StorageLocationTypeSchema = string().regex(/^[a-z][a-zA-Z0-9-]*$/);
|
|
|
8612
8685
|
* The default location for a type uses `id === <type>:default` by
|
|
8613
8686
|
* convention (the bare type ref like `'backups'` resolves to it).
|
|
8614
8687
|
*
|
|
8615
|
-
* `isSystem
|
|
8616
|
-
*
|
|
8617
|
-
*
|
|
8618
|
-
*
|
|
8619
|
-
* deleting it is rejected at the cap level.
|
|
8688
|
+
* `isSystem` is a legacy persisted flag. Seed still creates the initial
|
|
8689
|
+
* `<type>:default` locations; the flag is no longer a lock, a badge, or a
|
|
8690
|
+
* prune selector. New writes leave it false. Deletion is gated on uniqueness
|
|
8691
|
+
* / last-enabled, not on this bit.
|
|
8620
8692
|
*/
|
|
8621
8693
|
var StorageLocationSchema = object({
|
|
8622
8694
|
id: string().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/),
|
|
@@ -14190,6 +14262,27 @@ var deviceManagerCapability = {
|
|
|
14190
14262
|
kind: "mutation",
|
|
14191
14263
|
auth: "admin"
|
|
14192
14264
|
}),
|
|
14265
|
+
/** Rename a room: replace the label in the registry IN PLACE and move
|
|
14266
|
+
* every device that carried it, as ONE server operation.
|
|
14267
|
+
*
|
|
14268
|
+
* The admin UI used to do this as `addLocation(to)` → N ×
|
|
14269
|
+
* `setLocation(device, to)` → `removeLocation(from)` from the browser.
|
|
14270
|
+
* Nothing bound those three together, so a closed tab left the fleet
|
|
14271
|
+
* split across two rooms — one of which the operator believed was gone.
|
|
14272
|
+
*
|
|
14273
|
+
* `from` is matched the way the registry matches everywhere else
|
|
14274
|
+
* (trimmed, case-insensitive) and need NOT be registered: the registry is
|
|
14275
|
+
* a suggestion list, and the devices that most need a rename are exactly
|
|
14276
|
+
* the ones carrying a label nobody registered. `to` renames onto an
|
|
14277
|
+
* existing room by MERGING into it, leaving no duplicate label. An empty
|
|
14278
|
+
* `to` throws before anything is written. */
|
|
14279
|
+
renameLocation: method(object({
|
|
14280
|
+
from: string(),
|
|
14281
|
+
to: string()
|
|
14282
|
+
}), object({ moved: number() }), {
|
|
14283
|
+
kind: "mutation",
|
|
14284
|
+
auth: "admin"
|
|
14285
|
+
}),
|
|
14193
14286
|
/** Soft-disable / re-enable the device. Drivers consult
|
|
14194
14287
|
* `BaseDevice.disabled` to gate lifecycle hooks. */
|
|
14195
14288
|
setDisabled: method(object({
|
|
@@ -21671,46 +21764,6 @@ var RecentTracksPageSchema = object({
|
|
|
21671
21764
|
/** Cursor for the next page, or null when this page is the last. */
|
|
21672
21765
|
nextCursor: string().nullable()
|
|
21673
21766
|
});
|
|
21674
|
-
var LIST_GROUPS_DEFAULT_LIMIT = 40;
|
|
21675
|
-
var LIST_GROUPS_MAX_LIMIT = 100;
|
|
21676
|
-
var AnalyticsGroupRecordSchema = object({
|
|
21677
|
-
id: string(),
|
|
21678
|
-
deviceId: number().int(),
|
|
21679
|
-
openedAt: number().int(),
|
|
21680
|
-
closedAt: number().int(),
|
|
21681
|
-
timestamp: number().int(),
|
|
21682
|
-
memberCount: number().int(),
|
|
21683
|
-
memberTrackIds: array(string()).readonly(),
|
|
21684
|
-
className: string(),
|
|
21685
|
-
classes: array(string()).readonly(),
|
|
21686
|
-
/** Relative event-media path, or null when the group has no picture yet. */
|
|
21687
|
-
mediaUrl: string().nullable(),
|
|
21688
|
-
singleton: boolean()
|
|
21689
|
-
});
|
|
21690
|
-
var AnalyticsGroupMemberSchema = object({
|
|
21691
|
-
trackId: string(),
|
|
21692
|
-
deviceId: number().int(),
|
|
21693
|
-
className: string(),
|
|
21694
|
-
firstSeen: number().int(),
|
|
21695
|
-
lastSeen: number().int(),
|
|
21696
|
-
mediaUrl: string().nullable()
|
|
21697
|
-
});
|
|
21698
|
-
var AnalyticsGroupDetailSchema = AnalyticsGroupRecordSchema.extend({ members: array(AnalyticsGroupMemberSchema).readonly() });
|
|
21699
|
-
var ListGroupsQueryInput = object({
|
|
21700
|
-
/** Devices to merge. An empty array yields `{ groups: [], nextCursor: null }`. */
|
|
21701
|
-
deviceIds: array(number()),
|
|
21702
|
-
/** Window lower bound on `closedAt` (inclusive). */
|
|
21703
|
-
since: number().optional(),
|
|
21704
|
-
/** Window upper bound on `openedAt` (inclusive). */
|
|
21705
|
-
until: number().optional(),
|
|
21706
|
-
limit: number().int().min(1).max(LIST_GROUPS_MAX_LIMIT).default(LIST_GROUPS_DEFAULT_LIMIT),
|
|
21707
|
-
/** Opaque continuation cursor from a previous page's `nextCursor`. */
|
|
21708
|
-
cursor: string().optional()
|
|
21709
|
-
});
|
|
21710
|
-
var ListGroupsPageSchema = object({
|
|
21711
|
-
groups: array(AnalyticsGroupRecordSchema).readonly(),
|
|
21712
|
-
nextCursor: string().nullable()
|
|
21713
|
-
});
|
|
21714
21767
|
var KEY_EVENTS_DEFAULT_LIMIT = 50;
|
|
21715
21768
|
var KEY_EVENTS_MAX_LIMIT = 200;
|
|
21716
21769
|
var KeyEventQueryInput = object({
|
|
@@ -21814,9 +21867,7 @@ var TrackCascadeCountsSchema = object({
|
|
|
21814
21867
|
/** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
|
|
21815
21868
|
plates: number().int(),
|
|
21816
21869
|
/** Per-track CLIP search vectors removed (best-effort). */
|
|
21817
|
-
embeddings: number().int()
|
|
21818
|
-
/** Group membership + group rows removed with their last member (best-effort). */
|
|
21819
|
-
groups: number().int()
|
|
21870
|
+
embeddings: number().int()
|
|
21820
21871
|
});
|
|
21821
21872
|
/** Disk-wins reconcile: media rows whose blobs are gone, then empty tracks. */
|
|
21822
21873
|
var DiskReconcileCountsSchema = object({
|
|
@@ -21986,6 +22037,47 @@ var RebuildStatusSchema = object({
|
|
|
21986
22037
|
/** Present when the pass ended by throwing. */
|
|
21987
22038
|
error: string().nullable()
|
|
21988
22039
|
});
|
|
22040
|
+
/**
|
|
22041
|
+
* Acknowledgement that a debug-media reclaim STARTED.
|
|
22042
|
+
*
|
|
22043
|
+
* The pass is paced at ~2 MB/s over a standing 100 GB — tens of minutes — so
|
|
22044
|
+
* it runs detached and this returns immediately. Awaiting it is how the
|
|
22045
|
+
* `addons.custom` door hit the 60 s UDS deadline while the walk carried on
|
|
22046
|
+
* with no status. Poll {@link pipelineAnalyticsCapability.methods.getMediaReclaimStatus}.
|
|
22047
|
+
*/
|
|
22048
|
+
var MediaReclaimStartResultSchema = object({
|
|
22049
|
+
started: boolean(),
|
|
22050
|
+
/** True when a pass was already running; the new request is ignored. */
|
|
22051
|
+
alreadyRunning: boolean()
|
|
22052
|
+
});
|
|
22053
|
+
var MediaReclaimInputSchema = object({
|
|
22054
|
+
mode: _enum(["report", "reclaim"]).default("report"),
|
|
22055
|
+
scopes: array(_enum(["motion-still", "track-filmstrip"])).min(1).optional(),
|
|
22056
|
+
deviceIds: array(number().int()).min(1).optional(),
|
|
22057
|
+
restart: boolean().optional(),
|
|
22058
|
+
pageSize: number().int().min(50).max(5e3).optional(),
|
|
22059
|
+
maxRowsPerDevice: number().int().min(1).max(5e5).optional(),
|
|
22060
|
+
maxReclaimPerDevice: number().int().min(1).max(5e5).optional(),
|
|
22061
|
+
maxBytesPerRun: number().int().min(1).optional(),
|
|
22062
|
+
budgetMinutes: number().int().min(1).max(720).optional(),
|
|
22063
|
+
throttleBytesPerSec: number().int().min(64 * 1024).optional(),
|
|
22064
|
+
graceMinutes: number().int().min(1).max(10080).optional()
|
|
22065
|
+
});
|
|
22066
|
+
var MediaReclaimStatusSchema = object({
|
|
22067
|
+
running: boolean(),
|
|
22068
|
+
mode: _enum(["report", "reclaim"]).nullable(),
|
|
22069
|
+
totalExamined: number(),
|
|
22070
|
+
totalEligible: number(),
|
|
22071
|
+
totalReclaimed: number(),
|
|
22072
|
+
totalBytesReclaimed: number(),
|
|
22073
|
+
totalRefused: number(),
|
|
22074
|
+
/** Device+scope windows finished in this pass. */
|
|
22075
|
+
devicesDone: number(),
|
|
22076
|
+
complete: boolean().nullable(),
|
|
22077
|
+
startedAtMs: number().nullable(),
|
|
22078
|
+
finishedAtMs: number().nullable(),
|
|
22079
|
+
error: string().nullable()
|
|
22080
|
+
});
|
|
21989
22081
|
var ReplayFrameInputSchema = object({
|
|
21990
22082
|
timestamp: number(),
|
|
21991
22083
|
frame: PipelineRunResultBridge
|
|
@@ -22050,16 +22142,6 @@ var pipelineAnalyticsCapability = {
|
|
|
22050
22142
|
* are not included (same contract as `listTracks`).
|
|
22051
22143
|
*/
|
|
22052
22144
|
listRecentTracks: method(RecentTracksQueryInput, RecentTracksPageSchema),
|
|
22053
|
-
/**
|
|
22054
|
-
* Batched co-moving group listing — the Groups feed. Same merge/cursor
|
|
22055
|
-
* contract as {@link listRecentTracks}. A group is a sealed partition of
|
|
22056
|
-
* one session; `getGroup` is the detail with members.
|
|
22057
|
-
*/
|
|
22058
|
-
listGroups: method(ListGroupsQueryInput, ListGroupsPageSchema),
|
|
22059
|
-
getGroup: method(object({
|
|
22060
|
-
deviceId: number(),
|
|
22061
|
-
groupId: string().min(1)
|
|
22062
|
-
}), AnalyticsGroupDetailSchema.nullable()),
|
|
22063
22145
|
clearTracks: method(object({ deviceId: number() }), _void(), {
|
|
22064
22146
|
kind: "mutation",
|
|
22065
22147
|
auth: "admin"
|
|
@@ -22408,6 +22490,20 @@ var pipelineAnalyticsCapability = {
|
|
|
22408
22490
|
auth: "admin"
|
|
22409
22491
|
}),
|
|
22410
22492
|
/**
|
|
22493
|
+
* Reclaim the standing debug-media backlog (motion-visit stills + track
|
|
22494
|
+
* filmstrips). DETACHED: returns `{ started }` immediately. The pass is
|
|
22495
|
+
* tens of minutes; awaiting it is a timeout, not a verdict. Dry-run unless
|
|
22496
|
+
* `mode: 'reclaim'`. Poll `getMediaReclaimStatus`.
|
|
22497
|
+
*/
|
|
22498
|
+
reclaimDebugMedia: method(MediaReclaimInputSchema, MediaReclaimStartResultSchema, {
|
|
22499
|
+
kind: "mutation",
|
|
22500
|
+
auth: "admin"
|
|
22501
|
+
}),
|
|
22502
|
+
getMediaReclaimStatus: method(object({}), MediaReclaimStatusSchema, {
|
|
22503
|
+
kind: "query",
|
|
22504
|
+
auth: "admin"
|
|
22505
|
+
}),
|
|
22506
|
+
/**
|
|
22411
22507
|
* The CHEAP QUESTION, asked before any media moves: how big is the dataset
|
|
22412
22508
|
* the marked (`markForTrain`) tracks would produce?
|
|
22413
22509
|
*
|
|
@@ -25360,7 +25456,23 @@ var storageMigrationCapability = {
|
|
|
25360
25456
|
drain: method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
|
|
25361
25457
|
kind: "mutation",
|
|
25362
25458
|
auth: "admin"
|
|
25363
|
-
})
|
|
25459
|
+
}),
|
|
25460
|
+
/**
|
|
25461
|
+
* One operator cleanup of leftover analytics (DB + blobs) and ghost
|
|
25462
|
+
* ledger rows on frozen footage locations. Optional debug-media sweep.
|
|
25463
|
+
* Returns immediately; poll {@link cleanupStatus}.
|
|
25464
|
+
*/
|
|
25465
|
+
cleanupStart: method(StorageCleanupInputSchema, object({ jobId: string() }), {
|
|
25466
|
+
kind: "mutation",
|
|
25467
|
+
auth: "admin"
|
|
25468
|
+
}),
|
|
25469
|
+
cleanupStatus: method(StorageCleanupStatusInputSchema, StorageCleanupJobSchema.nullable(), { auth: "admin" }),
|
|
25470
|
+
cleanupCancel: method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
25471
|
+
kind: "mutation",
|
|
25472
|
+
auth: "admin"
|
|
25473
|
+
}),
|
|
25474
|
+
/** Recent finished migration jobs, newest first. The live job is `status`. */
|
|
25475
|
+
history: method(object({}), array(StorageMigrationJobSchema).readonly(), { auth: "admin" })
|
|
25364
25476
|
}
|
|
25365
25477
|
};
|
|
25366
25478
|
var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
@@ -33513,6 +33625,33 @@ var RecordingRebalanceInputSchema = object({
|
|
|
33513
33625
|
minMoveGb: number().min(0).optional()
|
|
33514
33626
|
});
|
|
33515
33627
|
/**
|
|
33628
|
+
* Operator-facing placement of one camera onto a recordings location.
|
|
33629
|
+
*
|
|
33630
|
+
* `pinLocationId` is the operator instruction: a location id, or `null` for
|
|
33631
|
+
* Auto (the planner may move this camera). `locationId` is where high/mid
|
|
33632
|
+
* currently write — the plan, which may disagree with the pin when Auto.
|
|
33633
|
+
*/
|
|
33634
|
+
var RecordingDevicePlacementSchema = object({
|
|
33635
|
+
deviceId: number().int(),
|
|
33636
|
+
profile: string(),
|
|
33637
|
+
locationId: string()
|
|
33638
|
+
});
|
|
33639
|
+
var RecordingDevicePinSchema = object({
|
|
33640
|
+
deviceId: number().int(),
|
|
33641
|
+
/** Recordings-class location this camera is pinned to. */
|
|
33642
|
+
locationId: string()
|
|
33643
|
+
});
|
|
33644
|
+
var RecordingPlacementViewSchema = object({
|
|
33645
|
+
assignments: array(RecordingDevicePlacementSchema),
|
|
33646
|
+
pins: array(RecordingDevicePinSchema),
|
|
33647
|
+
defaultLocations: record(string(), string())
|
|
33648
|
+
});
|
|
33649
|
+
var RecordingSetDevicePlacementInputSchema = object({
|
|
33650
|
+
deviceId: number().int(),
|
|
33651
|
+
/** `null` = Auto. Otherwise a `recordings:*` location id. */
|
|
33652
|
+
locationId: string().nullable()
|
|
33653
|
+
});
|
|
33654
|
+
/**
|
|
33516
33655
|
* Result of locating footage at a wall-clock instant for one device/profile.
|
|
33517
33656
|
* `segment` carries the covering segment's window; `gap` reports the forward
|
|
33518
33657
|
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
@@ -33865,6 +34004,22 @@ var recordingCapability = {
|
|
|
33865
34004
|
startStorageRebalance: method(RecordingRebalanceInputSchema, RecordingRebalancePlanSchema, {
|
|
33866
34005
|
kind: "mutation",
|
|
33867
34006
|
auth: "admin"
|
|
34007
|
+
}),
|
|
34008
|
+
/**
|
|
34009
|
+
* The placement plan in force plus operator pins. Drives the Locations
|
|
34010
|
+
* admin page: Auto vs a named recordings location, per camera.
|
|
34011
|
+
*/
|
|
34012
|
+
getPlacement: method(object({}), RecordingPlacementViewSchema, {
|
|
34013
|
+
kind: "query",
|
|
34014
|
+
auth: "admin"
|
|
34015
|
+
}),
|
|
34016
|
+
/**
|
|
34017
|
+
* Pin a camera to a recordings location, or clear the pin (Auto). High and
|
|
34018
|
+
* mid follow the pin; low stays with the recordingsLow planner.
|
|
34019
|
+
*/
|
|
34020
|
+
setDevicePlacement: method(RecordingSetDevicePlacementInputSchema, object({ ok: literal(true) }), {
|
|
34021
|
+
kind: "mutation",
|
|
34022
|
+
auth: "admin"
|
|
33868
34023
|
})
|
|
33869
34024
|
}
|
|
33870
34025
|
};
|
|
@@ -38303,6 +38458,12 @@ Object.freeze({
|
|
|
38303
38458
|
addonId: null,
|
|
38304
38459
|
access: "delete"
|
|
38305
38460
|
},
|
|
38461
|
+
"deviceManager.renameLocation": {
|
|
38462
|
+
capName: "device-manager",
|
|
38463
|
+
capScope: "system",
|
|
38464
|
+
addonId: null,
|
|
38465
|
+
access: "create"
|
|
38466
|
+
},
|
|
38306
38467
|
"deviceManager.runDeviceAction": {
|
|
38307
38468
|
capName: "device-manager",
|
|
38308
38469
|
capScope: "system",
|
|
@@ -39995,19 +40156,19 @@ Object.freeze({
|
|
|
39995
40156
|
addonId: null,
|
|
39996
40157
|
access: "view"
|
|
39997
40158
|
},
|
|
39998
|
-
"pipelineAnalytics.
|
|
40159
|
+
"pipelineAnalytics.getKeyEvents": {
|
|
39999
40160
|
capName: "pipeline-analytics",
|
|
40000
40161
|
capScope: "device",
|
|
40001
40162
|
addonId: null,
|
|
40002
40163
|
access: "view"
|
|
40003
40164
|
},
|
|
40004
|
-
"pipelineAnalytics.
|
|
40165
|
+
"pipelineAnalytics.getKeyEventsBatch": {
|
|
40005
40166
|
capName: "pipeline-analytics",
|
|
40006
40167
|
capScope: "device",
|
|
40007
40168
|
addonId: null,
|
|
40008
40169
|
access: "view"
|
|
40009
40170
|
},
|
|
40010
|
-
"pipelineAnalytics.
|
|
40171
|
+
"pipelineAnalytics.getMediaReclaimStatus": {
|
|
40011
40172
|
capName: "pipeline-analytics",
|
|
40012
40173
|
capScope: "device",
|
|
40013
40174
|
addonId: null,
|
|
@@ -40097,12 +40258,6 @@ Object.freeze({
|
|
|
40097
40258
|
addonId: null,
|
|
40098
40259
|
access: "view"
|
|
40099
40260
|
},
|
|
40100
|
-
"pipelineAnalytics.listGroups": {
|
|
40101
|
-
capName: "pipeline-analytics",
|
|
40102
|
-
capScope: "device",
|
|
40103
|
-
addonId: null,
|
|
40104
|
-
access: "view"
|
|
40105
|
-
},
|
|
40106
40261
|
"pipelineAnalytics.listOpsLog": {
|
|
40107
40262
|
capName: "pipeline-analytics",
|
|
40108
40263
|
capScope: "device",
|
|
@@ -40187,6 +40342,12 @@ Object.freeze({
|
|
|
40187
40342
|
addonId: null,
|
|
40188
40343
|
access: "create"
|
|
40189
40344
|
},
|
|
40345
|
+
"pipelineAnalytics.reclaimDebugMedia": {
|
|
40346
|
+
capName: "pipeline-analytics",
|
|
40347
|
+
capScope: "device",
|
|
40348
|
+
addonId: null,
|
|
40349
|
+
access: "create"
|
|
40350
|
+
},
|
|
40190
40351
|
"pipelineAnalytics.reconcileFromDisk": {
|
|
40191
40352
|
capName: "pipeline-analytics",
|
|
40192
40353
|
capScope: "device",
|
|
@@ -41111,6 +41272,12 @@ Object.freeze({
|
|
|
41111
41272
|
addonId: null,
|
|
41112
41273
|
access: "view"
|
|
41113
41274
|
},
|
|
41275
|
+
"recording.getPlacement": {
|
|
41276
|
+
capName: "recording",
|
|
41277
|
+
capScope: "system",
|
|
41278
|
+
addonId: null,
|
|
41279
|
+
access: "view"
|
|
41280
|
+
},
|
|
41114
41281
|
"recording.getPlaybackManifest": {
|
|
41115
41282
|
capName: "recording",
|
|
41116
41283
|
capScope: "system",
|
|
@@ -41237,6 +41404,12 @@ Object.freeze({
|
|
|
41237
41404
|
addonId: null,
|
|
41238
41405
|
access: "create"
|
|
41239
41406
|
},
|
|
41407
|
+
"recording.setDevicePlacement": {
|
|
41408
|
+
capName: "recording",
|
|
41409
|
+
capScope: "system",
|
|
41410
|
+
addonId: null,
|
|
41411
|
+
access: "create"
|
|
41412
|
+
},
|
|
41240
41413
|
"recording.startStorageMigrationMove": {
|
|
41241
41414
|
capName: "recording",
|
|
41242
41415
|
capScope: "system",
|
|
@@ -41681,12 +41854,36 @@ Object.freeze({
|
|
|
41681
41854
|
addonId: null,
|
|
41682
41855
|
access: "create"
|
|
41683
41856
|
},
|
|
41857
|
+
"storageMigration.cleanupCancel": {
|
|
41858
|
+
capName: "storage-migration",
|
|
41859
|
+
capScope: "system",
|
|
41860
|
+
addonId: null,
|
|
41861
|
+
access: "create"
|
|
41862
|
+
},
|
|
41863
|
+
"storageMigration.cleanupStart": {
|
|
41864
|
+
capName: "storage-migration",
|
|
41865
|
+
capScope: "system",
|
|
41866
|
+
addonId: null,
|
|
41867
|
+
access: "create"
|
|
41868
|
+
},
|
|
41869
|
+
"storageMigration.cleanupStatus": {
|
|
41870
|
+
capName: "storage-migration",
|
|
41871
|
+
capScope: "system",
|
|
41872
|
+
addonId: null,
|
|
41873
|
+
access: "view"
|
|
41874
|
+
},
|
|
41684
41875
|
"storageMigration.drain": {
|
|
41685
41876
|
capName: "storage-migration",
|
|
41686
41877
|
capScope: "system",
|
|
41687
41878
|
addonId: null,
|
|
41688
41879
|
access: "create"
|
|
41689
41880
|
},
|
|
41881
|
+
"storageMigration.history": {
|
|
41882
|
+
capName: "storage-migration",
|
|
41883
|
+
capScope: "system",
|
|
41884
|
+
addonId: null,
|
|
41885
|
+
access: "view"
|
|
41886
|
+
},
|
|
41690
41887
|
"storageMigration.movers": {
|
|
41691
41888
|
capName: "storage-migration",
|
|
41692
41889
|
capScope: "system",
|
|
@@ -43683,11 +43880,6 @@ Object.freeze({
|
|
|
43683
43880
|
form: "single",
|
|
43684
43881
|
optional: true
|
|
43685
43882
|
}],
|
|
43686
|
-
"pipelineAnalytics.getGroup": [{
|
|
43687
|
-
name: "deviceId",
|
|
43688
|
-
form: "single",
|
|
43689
|
-
optional: false
|
|
43690
|
-
}],
|
|
43691
43883
|
"pipelineAnalytics.getKeyEvents": [{
|
|
43692
43884
|
name: "deviceId",
|
|
43693
43885
|
form: "single",
|
|
@@ -43753,11 +43945,6 @@ Object.freeze({
|
|
|
43753
43945
|
form: "single",
|
|
43754
43946
|
optional: false
|
|
43755
43947
|
}],
|
|
43756
|
-
"pipelineAnalytics.listGroups": [{
|
|
43757
|
-
name: "deviceIds",
|
|
43758
|
-
form: "array",
|
|
43759
|
-
optional: false
|
|
43760
|
-
}],
|
|
43761
43948
|
"pipelineAnalytics.listOpsLog": [{
|
|
43762
43949
|
name: "deviceId",
|
|
43763
43950
|
form: "single",
|
|
@@ -43803,6 +43990,11 @@ Object.freeze({
|
|
|
43803
43990
|
form: "single",
|
|
43804
43991
|
optional: true
|
|
43805
43992
|
}],
|
|
43993
|
+
"pipelineAnalytics.reclaimDebugMedia": [{
|
|
43994
|
+
name: "deviceIds",
|
|
43995
|
+
form: "array",
|
|
43996
|
+
optional: true
|
|
43997
|
+
}],
|
|
43806
43998
|
"pipelineAnalytics.reconcileFromDisk": [{
|
|
43807
43999
|
name: "deviceId",
|
|
43808
44000
|
form: "single",
|
|
@@ -44168,6 +44360,11 @@ Object.freeze({
|
|
|
44168
44360
|
form: "single",
|
|
44169
44361
|
optional: false
|
|
44170
44362
|
}],
|
|
44363
|
+
"recording.setDevicePlacement": [{
|
|
44364
|
+
name: "deviceId",
|
|
44365
|
+
form: "single",
|
|
44366
|
+
optional: false
|
|
44367
|
+
}],
|
|
44171
44368
|
"recording.startStorageMigrationMove": [{
|
|
44172
44369
|
name: "deviceId",
|
|
44173
44370
|
form: "single",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { h as e, l as t, u as n, y as r } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react__loadShare__.js-Bs1t18EM.mjs";
|
|
2
|
-
import { o as i, s as a } from "./responsive-
|
|
2
|
+
import { o as i, s as a } from "./responsive-Bb0wIt10.mjs";
|
|
3
3
|
import { n as o, r as s, t as c } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-DalfdIDw.mjs";
|
|
4
4
|
var l = a("chevron-down", [["path", {
|
|
5
5
|
d: "m6 9 6 6 6-6",
|
package/dist/remoteEntry.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-
|
|
1
|
+
import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_osd_manager_page__remoteEntry_js-C_N6ECAC.mjs";
|
|
2
2
|
export { t as get, e as init };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { c as e, g as t, h as n, l as r, n as i, p as a, r as o, t as s, u as c, y as l } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react__loadShare__.js-Bs1t18EM.mjs";
|
|
2
2
|
import "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-DalfdIDw.mjs";
|
|
3
|
-
import { n as u } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-
|
|
3
|
+
import { n as u } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-8ErlyuY8.mjs";
|
|
4
4
|
//#region ../ui-library/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
|
|
5
5
|
l();
|
|
6
6
|
var d = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), f = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), p = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), m = (e) => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { c as e, h as t, p as n, y as r } from "./_virtual_mf___mfe_internal__addon_osd_manager_page__loadShare__react__loadShare__.js-Bs1t18EM.mjs";
|
|
2
|
-
import { s as i } from "./responsive-
|
|
2
|
+
import { s as i } from "./responsive-Bb0wIt10.mjs";
|
|
3
3
|
var a = i("camera", [["path", {
|
|
4
4
|
d: "M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z",
|
|
5
5
|
key: "18u6gg"
|
|
@@ -2753,7 +2753,7 @@ async function rr(e) {
|
|
|
2753
2753
|
}
|
|
2754
2754
|
}
|
|
2755
2755
|
async function ir() {
|
|
2756
|
-
return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-
|
|
2756
|
+
return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_osd_manager_page-BKO7P9eF.mjs")).catch((e) => {
|
|
2757
2757
|
throw tr = void 0, e;
|
|
2758
2758
|
}), tr;
|
|
2759
2759
|
}
|