@camstack/addon-provider-dreame 0.2.49 → 0.2.50
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
|
@@ -58601,6 +58601,13 @@ var MediaRelocateModeSchema = _enum([
|
|
|
58601
58601
|
]);
|
|
58602
58602
|
var RelocateMediaInputSchema = object({
|
|
58603
58603
|
toLocationId: string(),
|
|
58604
|
+
/**
|
|
58605
|
+
* Restrict the pass to rows currently on this location. Omitted / `'*'` =
|
|
58606
|
+
* every row that is not already on `toLocationId` (the historical
|
|
58607
|
+
* behaviour). A named source is what a from→to migration needs: without it
|
|
58608
|
+
* "move events off disk 2" also emptied disk 1.
|
|
58609
|
+
*/
|
|
58610
|
+
fromLocationId: string().optional(),
|
|
58604
58611
|
throttleMbps: number().min(1).max(1e3).optional(),
|
|
58605
58612
|
/** Omitted = `move`, the pre-existing behaviour. */
|
|
58606
58613
|
mode: MediaRelocateModeSchema.optional()
|
|
@@ -58668,6 +58675,19 @@ var StorageMigrationDestinationsSchema = object({
|
|
|
58668
58675
|
galleryMedia: string().min(1).optional()
|
|
58669
58676
|
}).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
|
|
58670
58677
|
/**
|
|
58678
|
+
* Optional named source per class. Omitted = the class's current default
|
|
58679
|
+
* (the historical behaviour). A named source that is NOT the default is a
|
|
58680
|
+
* drain of that disk: bytes move, the default stays, and the source is
|
|
58681
|
+
* disabled when the move finishes.
|
|
58682
|
+
*/
|
|
58683
|
+
var StorageMigrationSourcesSchema = object({
|
|
58684
|
+
recordings: string().min(1).optional(),
|
|
58685
|
+
recordingsLow: string().min(1).optional(),
|
|
58686
|
+
eventMedia: string().min(1).optional(),
|
|
58687
|
+
backups: string().min(1).optional(),
|
|
58688
|
+
galleryMedia: string().min(1).optional()
|
|
58689
|
+
}).optional();
|
|
58690
|
+
/**
|
|
58671
58691
|
* How a migration sequences the cutover against the byte move.
|
|
58672
58692
|
*
|
|
58673
58693
|
* - `blocking` — the historical order: pause, move every byte, repoint,
|
|
@@ -58689,6 +58709,8 @@ var StorageMigrationModeSchema = _enum(["blocking", "nonBlocking"]);
|
|
|
58689
58709
|
/** Shared input for planning and starting an orchestrated storage migration. */
|
|
58690
58710
|
var StorageMigrationInputSchema = object({
|
|
58691
58711
|
destinations: StorageMigrationDestinationsSchema,
|
|
58712
|
+
/** Omitted = each class's current default. */
|
|
58713
|
+
sources: StorageMigrationSourcesSchema,
|
|
58692
58714
|
throttleMbps: number().min(1).max(1e3).optional(),
|
|
58693
58715
|
/** Omitted = `blocking`, which stays the default. */
|
|
58694
58716
|
mode: StorageMigrationModeSchema.optional()
|
|
@@ -58768,6 +58790,13 @@ var StorageMigrationMoveSchema = object({
|
|
|
58768
58790
|
storageClass: StorageMigrationClassSchema,
|
|
58769
58791
|
fromLocationId: string(),
|
|
58770
58792
|
toLocationId: string(),
|
|
58793
|
+
/**
|
|
58794
|
+
* True when `from` was NOT the class default at plan time. The move still
|
|
58795
|
+
* copies bytes, but the default is left alone and the source is disabled
|
|
58796
|
+
* once the copy verifies. Absent on jobs planned before this field existed
|
|
58797
|
+
* — those jobs always repointed, which is `false`.
|
|
58798
|
+
*/
|
|
58799
|
+
freezeSource: boolean().optional(),
|
|
58771
58800
|
moverJobId: string().nullable(),
|
|
58772
58801
|
state: RelocateJobStateSchema.nullable(),
|
|
58773
58802
|
error: string().nullable(),
|
|
@@ -58781,6 +58810,7 @@ var StorageMigrationJobSchema = object({
|
|
|
58781
58810
|
* can tell a seconds-long cutover from a thirty-hour one. */
|
|
58782
58811
|
mode: StorageMigrationModeSchema,
|
|
58783
58812
|
destinations: StorageMigrationDestinationsSchema,
|
|
58813
|
+
sources: StorageMigrationSourcesSchema,
|
|
58784
58814
|
throttleMbps: number(),
|
|
58785
58815
|
moves: array(StorageMigrationMoveSchema),
|
|
58786
58816
|
pauseLeaseId: string().nullable(),
|
|
@@ -58806,6 +58836,7 @@ var StorageMigrationFindingSchema = object({
|
|
|
58806
58836
|
});
|
|
58807
58837
|
var StorageMigrationPlanSchema = object({
|
|
58808
58838
|
destinations: StorageMigrationDestinationsSchema,
|
|
58839
|
+
sources: StorageMigrationSourcesSchema,
|
|
58809
58840
|
/** The mode this plan was built for. A plan is only valid for its mode: the
|
|
58810
58841
|
* `eventMedia` seal gate and the single-cardinality refusal both depend on
|
|
58811
58842
|
* it. */
|
|
@@ -58813,7 +58844,8 @@ var StorageMigrationPlanSchema = object({
|
|
|
58813
58844
|
moves: array(object({
|
|
58814
58845
|
storageClass: StorageMigrationClassSchema,
|
|
58815
58846
|
fromLocationId: string(),
|
|
58816
|
-
toLocationId: string()
|
|
58847
|
+
toLocationId: string(),
|
|
58848
|
+
freezeSource: boolean().optional()
|
|
58817
58849
|
})),
|
|
58818
58850
|
findings: array(StorageMigrationFindingSchema)
|
|
58819
58851
|
});
|
|
@@ -58991,10 +59023,51 @@ var LedgerWalkReportSchema = object({
|
|
|
58991
59023
|
var RelocatableMediaCountSchema = object({ rows: number().int().nonnegative() }).nullable();
|
|
58992
59024
|
var RelocatableMediaCountInputSchema = object({
|
|
58993
59025
|
toLocationId: string().min(1),
|
|
59026
|
+
/** Restrict the count to one source; omitted / `'*'` = every non-target row. */
|
|
59027
|
+
fromLocationId: string().optional(),
|
|
58994
59028
|
/** Omitted = `move`. */
|
|
58995
59029
|
mode: MediaRelocateModeSchema.optional()
|
|
58996
59030
|
});
|
|
58997
59031
|
/**
|
|
59032
|
+
* Operator cleanup of leftover analytics rows, optional debug media, and
|
|
59033
|
+
* ghost ledger entries on frozen footage locations.
|
|
59034
|
+
*
|
|
59035
|
+
* A pass is tens of minutes on a standing backlog. The hub method RETURNS
|
|
59036
|
+
* `{ jobId }` immediately; progress is `cleanupStatus`. Awaiting the work
|
|
59037
|
+
* is how `addons.custom` hit the 60 s UDS deadline while reclaim continued
|
|
59038
|
+
* with no operator-visible status.
|
|
59039
|
+
*/
|
|
59040
|
+
var StorageCleanupPhaseSchema = _enum([
|
|
59041
|
+
"orphans",
|
|
59042
|
+
"debug-media",
|
|
59043
|
+
"ghost-ledger",
|
|
59044
|
+
"done",
|
|
59045
|
+
"failed",
|
|
59046
|
+
"cancelled"
|
|
59047
|
+
]);
|
|
59048
|
+
var StorageCleanupInputSchema = object({
|
|
59049
|
+
/** Also walk motion stills / track filmstrips. Off by default. */
|
|
59050
|
+
includeDebugMedia: boolean().optional() });
|
|
59051
|
+
var StorageCleanupJobSchema = object({
|
|
59052
|
+
jobId: string(),
|
|
59053
|
+
phase: StorageCleanupPhaseSchema,
|
|
59054
|
+
includeDebugMedia: boolean(),
|
|
59055
|
+
orphansReclaimed: number().int().nonnegative(),
|
|
59056
|
+
orphanBytesReclaimed: number().int().nonnegative(),
|
|
59057
|
+
debugMediaReclaimed: number().int().nonnegative(),
|
|
59058
|
+
debugMediaBytesReclaimed: number().int().nonnegative(),
|
|
59059
|
+
ghostsForgotten: number().int().nonnegative(),
|
|
59060
|
+
ghostBytesForgotten: number().int().nonnegative(),
|
|
59061
|
+
/** Short operator-facing line: current collection, pass, or location. */
|
|
59062
|
+
detail: string().nullable(),
|
|
59063
|
+
cancelRequested: boolean(),
|
|
59064
|
+
startedAt: number(),
|
|
59065
|
+
updatedAt: number(),
|
|
59066
|
+
finishedAt: number().nullable(),
|
|
59067
|
+
error: string().nullable()
|
|
59068
|
+
});
|
|
59069
|
+
var StorageCleanupStatusInputSchema = object({ jobId: string().optional() });
|
|
59070
|
+
/**
|
|
58998
59071
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
58999
59072
|
* storage a location serves. Defined here (not in `capabilities/storage.cap.ts`)
|
|
59000
59073
|
* so the persisted record schema and the consumer-facing cap can both consume it
|
|
@@ -59022,11 +59095,10 @@ var StorageLocationTypeSchema = string().regex(/^[a-z][a-zA-Z0-9-]*$/);
|
|
|
59022
59095
|
* The default location for a type uses `id === <type>:default` by
|
|
59023
59096
|
* convention (the bare type ref like `'backups'` resolves to it).
|
|
59024
59097
|
*
|
|
59025
|
-
* `isSystem
|
|
59026
|
-
*
|
|
59027
|
-
*
|
|
59028
|
-
*
|
|
59029
|
-
* deleting it is rejected at the cap level.
|
|
59098
|
+
* `isSystem` is a legacy persisted flag. Seed still creates the initial
|
|
59099
|
+
* `<type>:default` locations; the flag is no longer a lock, a badge, or a
|
|
59100
|
+
* prune selector. New writes leave it false. Deletion is gated on uniqueness
|
|
59101
|
+
* / last-enabled, not on this bit.
|
|
59030
59102
|
*/
|
|
59031
59103
|
var StorageLocationSchema = object({
|
|
59032
59104
|
id: string().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/),
|
|
@@ -63569,6 +63641,12 @@ method(object({
|
|
|
63569
63641
|
}), _void(), {
|
|
63570
63642
|
kind: "mutation",
|
|
63571
63643
|
auth: "admin"
|
|
63644
|
+
}), method(object({
|
|
63645
|
+
from: string(),
|
|
63646
|
+
to: string()
|
|
63647
|
+
}), object({ moved: number() }), {
|
|
63648
|
+
kind: "mutation",
|
|
63649
|
+
auth: "admin"
|
|
63572
63650
|
}), method(object({
|
|
63573
63651
|
deviceId: number(),
|
|
63574
63652
|
disabled: boolean()
|
|
@@ -69577,46 +69655,6 @@ var RecentTracksPageSchema = object({
|
|
|
69577
69655
|
/** Cursor for the next page, or null when this page is the last. */
|
|
69578
69656
|
nextCursor: string().nullable()
|
|
69579
69657
|
});
|
|
69580
|
-
var LIST_GROUPS_DEFAULT_LIMIT = 40;
|
|
69581
|
-
var LIST_GROUPS_MAX_LIMIT = 100;
|
|
69582
|
-
var AnalyticsGroupRecordSchema = object({
|
|
69583
|
-
id: string(),
|
|
69584
|
-
deviceId: number().int(),
|
|
69585
|
-
openedAt: number().int(),
|
|
69586
|
-
closedAt: number().int(),
|
|
69587
|
-
timestamp: number().int(),
|
|
69588
|
-
memberCount: number().int(),
|
|
69589
|
-
memberTrackIds: array(string()).readonly(),
|
|
69590
|
-
className: string(),
|
|
69591
|
-
classes: array(string()).readonly(),
|
|
69592
|
-
/** Relative event-media path, or null when the group has no picture yet. */
|
|
69593
|
-
mediaUrl: string().nullable(),
|
|
69594
|
-
singleton: boolean()
|
|
69595
|
-
});
|
|
69596
|
-
var AnalyticsGroupMemberSchema = object({
|
|
69597
|
-
trackId: string(),
|
|
69598
|
-
deviceId: number().int(),
|
|
69599
|
-
className: string(),
|
|
69600
|
-
firstSeen: number().int(),
|
|
69601
|
-
lastSeen: number().int(),
|
|
69602
|
-
mediaUrl: string().nullable()
|
|
69603
|
-
});
|
|
69604
|
-
var AnalyticsGroupDetailSchema = AnalyticsGroupRecordSchema.extend({ members: array(AnalyticsGroupMemberSchema).readonly() });
|
|
69605
|
-
var ListGroupsQueryInput = object({
|
|
69606
|
-
/** Devices to merge. An empty array yields `{ groups: [], nextCursor: null }`. */
|
|
69607
|
-
deviceIds: array(number()),
|
|
69608
|
-
/** Window lower bound on `closedAt` (inclusive). */
|
|
69609
|
-
since: number().optional(),
|
|
69610
|
-
/** Window upper bound on `openedAt` (inclusive). */
|
|
69611
|
-
until: number().optional(),
|
|
69612
|
-
limit: number().int().min(1).max(LIST_GROUPS_MAX_LIMIT).default(LIST_GROUPS_DEFAULT_LIMIT),
|
|
69613
|
-
/** Opaque continuation cursor from a previous page's `nextCursor`. */
|
|
69614
|
-
cursor: string().optional()
|
|
69615
|
-
});
|
|
69616
|
-
var ListGroupsPageSchema = object({
|
|
69617
|
-
groups: array(AnalyticsGroupRecordSchema).readonly(),
|
|
69618
|
-
nextCursor: string().nullable()
|
|
69619
|
-
});
|
|
69620
69658
|
var KEY_EVENTS_DEFAULT_LIMIT = 50;
|
|
69621
69659
|
var KEY_EVENTS_MAX_LIMIT = 200;
|
|
69622
69660
|
var KeyEventQueryInput = object({
|
|
@@ -69720,9 +69758,7 @@ var TrackCascadeCountsSchema = object({
|
|
|
69720
69758
|
/** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
|
|
69721
69759
|
plates: number().int(),
|
|
69722
69760
|
/** Per-track CLIP search vectors removed (best-effort). */
|
|
69723
|
-
embeddings: number().int()
|
|
69724
|
-
/** Group membership + group rows removed with their last member (best-effort). */
|
|
69725
|
-
groups: number().int()
|
|
69761
|
+
embeddings: number().int()
|
|
69726
69762
|
});
|
|
69727
69763
|
/** Disk-wins reconcile: media rows whose blobs are gone, then empty tracks. */
|
|
69728
69764
|
var DiskReconcileCountsSchema = object({
|
|
@@ -69892,6 +69928,47 @@ var RebuildStatusSchema = object({
|
|
|
69892
69928
|
/** Present when the pass ended by throwing. */
|
|
69893
69929
|
error: string().nullable()
|
|
69894
69930
|
});
|
|
69931
|
+
/**
|
|
69932
|
+
* Acknowledgement that a debug-media reclaim STARTED.
|
|
69933
|
+
*
|
|
69934
|
+
* The pass is paced at ~2 MB/s over a standing 100 GB — tens of minutes — so
|
|
69935
|
+
* it runs detached and this returns immediately. Awaiting it is how the
|
|
69936
|
+
* `addons.custom` door hit the 60 s UDS deadline while the walk carried on
|
|
69937
|
+
* with no status. Poll {@link pipelineAnalyticsCapability.methods.getMediaReclaimStatus}.
|
|
69938
|
+
*/
|
|
69939
|
+
var MediaReclaimStartResultSchema = object({
|
|
69940
|
+
started: boolean(),
|
|
69941
|
+
/** True when a pass was already running; the new request is ignored. */
|
|
69942
|
+
alreadyRunning: boolean()
|
|
69943
|
+
});
|
|
69944
|
+
var MediaReclaimInputSchema = object({
|
|
69945
|
+
mode: _enum(["report", "reclaim"]).default("report"),
|
|
69946
|
+
scopes: array(_enum(["motion-still", "track-filmstrip"])).min(1).optional(),
|
|
69947
|
+
deviceIds: array(number().int()).min(1).optional(),
|
|
69948
|
+
restart: boolean().optional(),
|
|
69949
|
+
pageSize: number().int().min(50).max(5e3).optional(),
|
|
69950
|
+
maxRowsPerDevice: number().int().min(1).max(5e5).optional(),
|
|
69951
|
+
maxReclaimPerDevice: number().int().min(1).max(5e5).optional(),
|
|
69952
|
+
maxBytesPerRun: number().int().min(1).optional(),
|
|
69953
|
+
budgetMinutes: number().int().min(1).max(720).optional(),
|
|
69954
|
+
throttleBytesPerSec: number().int().min(64 * 1024).optional(),
|
|
69955
|
+
graceMinutes: number().int().min(1).max(10080).optional()
|
|
69956
|
+
});
|
|
69957
|
+
var MediaReclaimStatusSchema = object({
|
|
69958
|
+
running: boolean(),
|
|
69959
|
+
mode: _enum(["report", "reclaim"]).nullable(),
|
|
69960
|
+
totalExamined: number(),
|
|
69961
|
+
totalEligible: number(),
|
|
69962
|
+
totalReclaimed: number(),
|
|
69963
|
+
totalBytesReclaimed: number(),
|
|
69964
|
+
totalRefused: number(),
|
|
69965
|
+
/** Device+scope windows finished in this pass. */
|
|
69966
|
+
devicesDone: number(),
|
|
69967
|
+
complete: boolean().nullable(),
|
|
69968
|
+
startedAtMs: number().nullable(),
|
|
69969
|
+
finishedAtMs: number().nullable(),
|
|
69970
|
+
error: string().nullable()
|
|
69971
|
+
});
|
|
69895
69972
|
var ReplayFrameInputSchema = object({
|
|
69896
69973
|
timestamp: number(),
|
|
69897
69974
|
frame: PipelineRunResultBridge
|
|
@@ -69930,10 +70007,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
69930
70007
|
* stationary registry). Default false: the timeline lists passages,
|
|
69931
70008
|
* not parking records (operator decision, 2026-08-15). */
|
|
69932
70009
|
includeStationary: boolean().optional()
|
|
69933
|
-
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(
|
|
69934
|
-
deviceId: number(),
|
|
69935
|
-
groupId: string().min(1)
|
|
69936
|
-
}), AnalyticsGroupDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
|
|
70010
|
+
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
|
|
69937
70011
|
kind: "mutation",
|
|
69938
70012
|
auth: "admin"
|
|
69939
70013
|
}), 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({
|
|
@@ -70033,6 +70107,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
70033
70107
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
70034
70108
|
kind: "query",
|
|
70035
70109
|
auth: "admin"
|
|
70110
|
+
}), method(MediaReclaimInputSchema, MediaReclaimStartResultSchema, {
|
|
70111
|
+
kind: "mutation",
|
|
70112
|
+
auth: "admin"
|
|
70113
|
+
}), method(object({}), MediaReclaimStatusSchema, {
|
|
70114
|
+
kind: "query",
|
|
70115
|
+
auth: "admin"
|
|
70036
70116
|
}), method(object({ deviceIds: array(number()).optional() }), TrainingExportSummarySchema, {
|
|
70037
70117
|
kind: "query",
|
|
70038
70118
|
auth: "admin"
|
|
@@ -72003,7 +72083,13 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
|
|
|
72003
72083
|
}), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
|
|
72004
72084
|
kind: "mutation",
|
|
72005
72085
|
auth: "admin"
|
|
72006
|
-
})
|
|
72086
|
+
}), method(StorageCleanupInputSchema, object({ jobId: string() }), {
|
|
72087
|
+
kind: "mutation",
|
|
72088
|
+
auth: "admin"
|
|
72089
|
+
}), method(StorageCleanupStatusInputSchema, StorageCleanupJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
72090
|
+
kind: "mutation",
|
|
72091
|
+
auth: "admin"
|
|
72092
|
+
}), method(object({}), array(StorageMigrationJobSchema).readonly(), { auth: "admin" });
|
|
72007
72093
|
var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
72008
72094
|
providerId: string().min(1),
|
|
72009
72095
|
displayName: string().min(1),
|
|
@@ -79121,6 +79207,33 @@ var RecordingRebalanceInputSchema = object({
|
|
|
79121
79207
|
minMoveGb: number().min(0).optional()
|
|
79122
79208
|
});
|
|
79123
79209
|
/**
|
|
79210
|
+
* Operator-facing placement of one camera onto a recordings location.
|
|
79211
|
+
*
|
|
79212
|
+
* `pinLocationId` is the operator instruction: a location id, or `null` for
|
|
79213
|
+
* Auto (the planner may move this camera). `locationId` is where high/mid
|
|
79214
|
+
* currently write — the plan, which may disagree with the pin when Auto.
|
|
79215
|
+
*/
|
|
79216
|
+
var RecordingDevicePlacementSchema = object({
|
|
79217
|
+
deviceId: number().int(),
|
|
79218
|
+
profile: string(),
|
|
79219
|
+
locationId: string()
|
|
79220
|
+
});
|
|
79221
|
+
var RecordingDevicePinSchema = object({
|
|
79222
|
+
deviceId: number().int(),
|
|
79223
|
+
/** Recordings-class location this camera is pinned to. */
|
|
79224
|
+
locationId: string()
|
|
79225
|
+
});
|
|
79226
|
+
var RecordingPlacementViewSchema = object({
|
|
79227
|
+
assignments: array(RecordingDevicePlacementSchema),
|
|
79228
|
+
pins: array(RecordingDevicePinSchema),
|
|
79229
|
+
defaultLocations: record(string(), string())
|
|
79230
|
+
});
|
|
79231
|
+
var RecordingSetDevicePlacementInputSchema = object({
|
|
79232
|
+
deviceId: number().int(),
|
|
79233
|
+
/** `null` = Auto. Otherwise a `recordings:*` location id. */
|
|
79234
|
+
locationId: string().nullable()
|
|
79235
|
+
});
|
|
79236
|
+
/**
|
|
79124
79237
|
* Result of locating footage at a wall-clock instant for one device/profile.
|
|
79125
79238
|
* `segment` carries the covering segment's window; `gap` reports the forward
|
|
79126
79239
|
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
@@ -79346,6 +79459,12 @@ method(object({
|
|
|
79346
79459
|
}), method(RecordingRebalanceInputSchema, RecordingRebalancePlanSchema, {
|
|
79347
79460
|
kind: "mutation",
|
|
79348
79461
|
auth: "admin"
|
|
79462
|
+
}), method(object({}), RecordingPlacementViewSchema, {
|
|
79463
|
+
kind: "query",
|
|
79464
|
+
auth: "admin"
|
|
79465
|
+
}), method(RecordingSetDevicePlacementInputSchema, object({ ok: literal(true) }), {
|
|
79466
|
+
kind: "mutation",
|
|
79467
|
+
auth: "admin"
|
|
79349
79468
|
});
|
|
79350
79469
|
/**
|
|
79351
79470
|
* `recording-export` cap — render a footage time range into a single downloadable
|
|
@@ -84415,6 +84534,12 @@ Object.freeze({
|
|
|
84415
84534
|
addonId: null,
|
|
84416
84535
|
access: "delete"
|
|
84417
84536
|
},
|
|
84537
|
+
"deviceManager.renameLocation": {
|
|
84538
|
+
capName: "device-manager",
|
|
84539
|
+
capScope: "system",
|
|
84540
|
+
addonId: null,
|
|
84541
|
+
access: "create"
|
|
84542
|
+
},
|
|
84418
84543
|
"deviceManager.runDeviceAction": {
|
|
84419
84544
|
capName: "device-manager",
|
|
84420
84545
|
capScope: "system",
|
|
@@ -86107,19 +86232,19 @@ Object.freeze({
|
|
|
86107
86232
|
addonId: null,
|
|
86108
86233
|
access: "view"
|
|
86109
86234
|
},
|
|
86110
|
-
"pipelineAnalytics.
|
|
86235
|
+
"pipelineAnalytics.getKeyEvents": {
|
|
86111
86236
|
capName: "pipeline-analytics",
|
|
86112
86237
|
capScope: "device",
|
|
86113
86238
|
addonId: null,
|
|
86114
86239
|
access: "view"
|
|
86115
86240
|
},
|
|
86116
|
-
"pipelineAnalytics.
|
|
86241
|
+
"pipelineAnalytics.getKeyEventsBatch": {
|
|
86117
86242
|
capName: "pipeline-analytics",
|
|
86118
86243
|
capScope: "device",
|
|
86119
86244
|
addonId: null,
|
|
86120
86245
|
access: "view"
|
|
86121
86246
|
},
|
|
86122
|
-
"pipelineAnalytics.
|
|
86247
|
+
"pipelineAnalytics.getMediaReclaimStatus": {
|
|
86123
86248
|
capName: "pipeline-analytics",
|
|
86124
86249
|
capScope: "device",
|
|
86125
86250
|
addonId: null,
|
|
@@ -86209,12 +86334,6 @@ Object.freeze({
|
|
|
86209
86334
|
addonId: null,
|
|
86210
86335
|
access: "view"
|
|
86211
86336
|
},
|
|
86212
|
-
"pipelineAnalytics.listGroups": {
|
|
86213
|
-
capName: "pipeline-analytics",
|
|
86214
|
-
capScope: "device",
|
|
86215
|
-
addonId: null,
|
|
86216
|
-
access: "view"
|
|
86217
|
-
},
|
|
86218
86337
|
"pipelineAnalytics.listOpsLog": {
|
|
86219
86338
|
capName: "pipeline-analytics",
|
|
86220
86339
|
capScope: "device",
|
|
@@ -86299,6 +86418,12 @@ Object.freeze({
|
|
|
86299
86418
|
addonId: null,
|
|
86300
86419
|
access: "create"
|
|
86301
86420
|
},
|
|
86421
|
+
"pipelineAnalytics.reclaimDebugMedia": {
|
|
86422
|
+
capName: "pipeline-analytics",
|
|
86423
|
+
capScope: "device",
|
|
86424
|
+
addonId: null,
|
|
86425
|
+
access: "create"
|
|
86426
|
+
},
|
|
86302
86427
|
"pipelineAnalytics.reconcileFromDisk": {
|
|
86303
86428
|
capName: "pipeline-analytics",
|
|
86304
86429
|
capScope: "device",
|
|
@@ -87223,6 +87348,12 @@ Object.freeze({
|
|
|
87223
87348
|
addonId: null,
|
|
87224
87349
|
access: "view"
|
|
87225
87350
|
},
|
|
87351
|
+
"recording.getPlacement": {
|
|
87352
|
+
capName: "recording",
|
|
87353
|
+
capScope: "system",
|
|
87354
|
+
addonId: null,
|
|
87355
|
+
access: "view"
|
|
87356
|
+
},
|
|
87226
87357
|
"recording.getPlaybackManifest": {
|
|
87227
87358
|
capName: "recording",
|
|
87228
87359
|
capScope: "system",
|
|
@@ -87349,6 +87480,12 @@ Object.freeze({
|
|
|
87349
87480
|
addonId: null,
|
|
87350
87481
|
access: "create"
|
|
87351
87482
|
},
|
|
87483
|
+
"recording.setDevicePlacement": {
|
|
87484
|
+
capName: "recording",
|
|
87485
|
+
capScope: "system",
|
|
87486
|
+
addonId: null,
|
|
87487
|
+
access: "create"
|
|
87488
|
+
},
|
|
87352
87489
|
"recording.startStorageMigrationMove": {
|
|
87353
87490
|
capName: "recording",
|
|
87354
87491
|
capScope: "system",
|
|
@@ -87793,12 +87930,36 @@ Object.freeze({
|
|
|
87793
87930
|
addonId: null,
|
|
87794
87931
|
access: "create"
|
|
87795
87932
|
},
|
|
87933
|
+
"storageMigration.cleanupCancel": {
|
|
87934
|
+
capName: "storage-migration",
|
|
87935
|
+
capScope: "system",
|
|
87936
|
+
addonId: null,
|
|
87937
|
+
access: "create"
|
|
87938
|
+
},
|
|
87939
|
+
"storageMigration.cleanupStart": {
|
|
87940
|
+
capName: "storage-migration",
|
|
87941
|
+
capScope: "system",
|
|
87942
|
+
addonId: null,
|
|
87943
|
+
access: "create"
|
|
87944
|
+
},
|
|
87945
|
+
"storageMigration.cleanupStatus": {
|
|
87946
|
+
capName: "storage-migration",
|
|
87947
|
+
capScope: "system",
|
|
87948
|
+
addonId: null,
|
|
87949
|
+
access: "view"
|
|
87950
|
+
},
|
|
87796
87951
|
"storageMigration.drain": {
|
|
87797
87952
|
capName: "storage-migration",
|
|
87798
87953
|
capScope: "system",
|
|
87799
87954
|
addonId: null,
|
|
87800
87955
|
access: "create"
|
|
87801
87956
|
},
|
|
87957
|
+
"storageMigration.history": {
|
|
87958
|
+
capName: "storage-migration",
|
|
87959
|
+
capScope: "system",
|
|
87960
|
+
addonId: null,
|
|
87961
|
+
access: "view"
|
|
87962
|
+
},
|
|
87802
87963
|
"storageMigration.movers": {
|
|
87803
87964
|
capName: "storage-migration",
|
|
87804
87965
|
capScope: "system",
|
|
@@ -89795,11 +89956,6 @@ Object.freeze({
|
|
|
89795
89956
|
form: "single",
|
|
89796
89957
|
optional: true
|
|
89797
89958
|
}],
|
|
89798
|
-
"pipelineAnalytics.getGroup": [{
|
|
89799
|
-
name: "deviceId",
|
|
89800
|
-
form: "single",
|
|
89801
|
-
optional: false
|
|
89802
|
-
}],
|
|
89803
89959
|
"pipelineAnalytics.getKeyEvents": [{
|
|
89804
89960
|
name: "deviceId",
|
|
89805
89961
|
form: "single",
|
|
@@ -89865,11 +90021,6 @@ Object.freeze({
|
|
|
89865
90021
|
form: "single",
|
|
89866
90022
|
optional: false
|
|
89867
90023
|
}],
|
|
89868
|
-
"pipelineAnalytics.listGroups": [{
|
|
89869
|
-
name: "deviceIds",
|
|
89870
|
-
form: "array",
|
|
89871
|
-
optional: false
|
|
89872
|
-
}],
|
|
89873
90024
|
"pipelineAnalytics.listOpsLog": [{
|
|
89874
90025
|
name: "deviceId",
|
|
89875
90026
|
form: "single",
|
|
@@ -89915,6 +90066,11 @@ Object.freeze({
|
|
|
89915
90066
|
form: "single",
|
|
89916
90067
|
optional: true
|
|
89917
90068
|
}],
|
|
90069
|
+
"pipelineAnalytics.reclaimDebugMedia": [{
|
|
90070
|
+
name: "deviceIds",
|
|
90071
|
+
form: "array",
|
|
90072
|
+
optional: true
|
|
90073
|
+
}],
|
|
89918
90074
|
"pipelineAnalytics.reconcileFromDisk": [{
|
|
89919
90075
|
name: "deviceId",
|
|
89920
90076
|
form: "single",
|
|
@@ -90280,6 +90436,11 @@ Object.freeze({
|
|
|
90280
90436
|
form: "single",
|
|
90281
90437
|
optional: false
|
|
90282
90438
|
}],
|
|
90439
|
+
"recording.setDevicePlacement": [{
|
|
90440
|
+
name: "deviceId",
|
|
90441
|
+
form: "single",
|
|
90442
|
+
optional: false
|
|
90443
|
+
}],
|
|
90283
90444
|
"recording.startStorageMigrationMove": [{
|
|
90284
90445
|
name: "deviceId",
|
|
90285
90446
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -58601,6 +58601,13 @@ var MediaRelocateModeSchema = _enum([
|
|
|
58601
58601
|
]);
|
|
58602
58602
|
var RelocateMediaInputSchema = object({
|
|
58603
58603
|
toLocationId: string(),
|
|
58604
|
+
/**
|
|
58605
|
+
* Restrict the pass to rows currently on this location. Omitted / `'*'` =
|
|
58606
|
+
* every row that is not already on `toLocationId` (the historical
|
|
58607
|
+
* behaviour). A named source is what a from→to migration needs: without it
|
|
58608
|
+
* "move events off disk 2" also emptied disk 1.
|
|
58609
|
+
*/
|
|
58610
|
+
fromLocationId: string().optional(),
|
|
58604
58611
|
throttleMbps: number().min(1).max(1e3).optional(),
|
|
58605
58612
|
/** Omitted = `move`, the pre-existing behaviour. */
|
|
58606
58613
|
mode: MediaRelocateModeSchema.optional()
|
|
@@ -58668,6 +58675,19 @@ var StorageMigrationDestinationsSchema = object({
|
|
|
58668
58675
|
galleryMedia: string().min(1).optional()
|
|
58669
58676
|
}).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
|
|
58670
58677
|
/**
|
|
58678
|
+
* Optional named source per class. Omitted = the class's current default
|
|
58679
|
+
* (the historical behaviour). A named source that is NOT the default is a
|
|
58680
|
+
* drain of that disk: bytes move, the default stays, and the source is
|
|
58681
|
+
* disabled when the move finishes.
|
|
58682
|
+
*/
|
|
58683
|
+
var StorageMigrationSourcesSchema = object({
|
|
58684
|
+
recordings: string().min(1).optional(),
|
|
58685
|
+
recordingsLow: string().min(1).optional(),
|
|
58686
|
+
eventMedia: string().min(1).optional(),
|
|
58687
|
+
backups: string().min(1).optional(),
|
|
58688
|
+
galleryMedia: string().min(1).optional()
|
|
58689
|
+
}).optional();
|
|
58690
|
+
/**
|
|
58671
58691
|
* How a migration sequences the cutover against the byte move.
|
|
58672
58692
|
*
|
|
58673
58693
|
* - `blocking` — the historical order: pause, move every byte, repoint,
|
|
@@ -58689,6 +58709,8 @@ var StorageMigrationModeSchema = _enum(["blocking", "nonBlocking"]);
|
|
|
58689
58709
|
/** Shared input for planning and starting an orchestrated storage migration. */
|
|
58690
58710
|
var StorageMigrationInputSchema = object({
|
|
58691
58711
|
destinations: StorageMigrationDestinationsSchema,
|
|
58712
|
+
/** Omitted = each class's current default. */
|
|
58713
|
+
sources: StorageMigrationSourcesSchema,
|
|
58692
58714
|
throttleMbps: number().min(1).max(1e3).optional(),
|
|
58693
58715
|
/** Omitted = `blocking`, which stays the default. */
|
|
58694
58716
|
mode: StorageMigrationModeSchema.optional()
|
|
@@ -58768,6 +58790,13 @@ var StorageMigrationMoveSchema = object({
|
|
|
58768
58790
|
storageClass: StorageMigrationClassSchema,
|
|
58769
58791
|
fromLocationId: string(),
|
|
58770
58792
|
toLocationId: string(),
|
|
58793
|
+
/**
|
|
58794
|
+
* True when `from` was NOT the class default at plan time. The move still
|
|
58795
|
+
* copies bytes, but the default is left alone and the source is disabled
|
|
58796
|
+
* once the copy verifies. Absent on jobs planned before this field existed
|
|
58797
|
+
* — those jobs always repointed, which is `false`.
|
|
58798
|
+
*/
|
|
58799
|
+
freezeSource: boolean().optional(),
|
|
58771
58800
|
moverJobId: string().nullable(),
|
|
58772
58801
|
state: RelocateJobStateSchema.nullable(),
|
|
58773
58802
|
error: string().nullable(),
|
|
@@ -58781,6 +58810,7 @@ var StorageMigrationJobSchema = object({
|
|
|
58781
58810
|
* can tell a seconds-long cutover from a thirty-hour one. */
|
|
58782
58811
|
mode: StorageMigrationModeSchema,
|
|
58783
58812
|
destinations: StorageMigrationDestinationsSchema,
|
|
58813
|
+
sources: StorageMigrationSourcesSchema,
|
|
58784
58814
|
throttleMbps: number(),
|
|
58785
58815
|
moves: array(StorageMigrationMoveSchema),
|
|
58786
58816
|
pauseLeaseId: string().nullable(),
|
|
@@ -58806,6 +58836,7 @@ var StorageMigrationFindingSchema = object({
|
|
|
58806
58836
|
});
|
|
58807
58837
|
var StorageMigrationPlanSchema = object({
|
|
58808
58838
|
destinations: StorageMigrationDestinationsSchema,
|
|
58839
|
+
sources: StorageMigrationSourcesSchema,
|
|
58809
58840
|
/** The mode this plan was built for. A plan is only valid for its mode: the
|
|
58810
58841
|
* `eventMedia` seal gate and the single-cardinality refusal both depend on
|
|
58811
58842
|
* it. */
|
|
@@ -58813,7 +58844,8 @@ var StorageMigrationPlanSchema = object({
|
|
|
58813
58844
|
moves: array(object({
|
|
58814
58845
|
storageClass: StorageMigrationClassSchema,
|
|
58815
58846
|
fromLocationId: string(),
|
|
58816
|
-
toLocationId: string()
|
|
58847
|
+
toLocationId: string(),
|
|
58848
|
+
freezeSource: boolean().optional()
|
|
58817
58849
|
})),
|
|
58818
58850
|
findings: array(StorageMigrationFindingSchema)
|
|
58819
58851
|
});
|
|
@@ -58991,10 +59023,51 @@ var LedgerWalkReportSchema = object({
|
|
|
58991
59023
|
var RelocatableMediaCountSchema = object({ rows: number().int().nonnegative() }).nullable();
|
|
58992
59024
|
var RelocatableMediaCountInputSchema = object({
|
|
58993
59025
|
toLocationId: string().min(1),
|
|
59026
|
+
/** Restrict the count to one source; omitted / `'*'` = every non-target row. */
|
|
59027
|
+
fromLocationId: string().optional(),
|
|
58994
59028
|
/** Omitted = `move`. */
|
|
58995
59029
|
mode: MediaRelocateModeSchema.optional()
|
|
58996
59030
|
});
|
|
58997
59031
|
/**
|
|
59032
|
+
* Operator cleanup of leftover analytics rows, optional debug media, and
|
|
59033
|
+
* ghost ledger entries on frozen footage locations.
|
|
59034
|
+
*
|
|
59035
|
+
* A pass is tens of minutes on a standing backlog. The hub method RETURNS
|
|
59036
|
+
* `{ jobId }` immediately; progress is `cleanupStatus`. Awaiting the work
|
|
59037
|
+
* is how `addons.custom` hit the 60 s UDS deadline while reclaim continued
|
|
59038
|
+
* with no operator-visible status.
|
|
59039
|
+
*/
|
|
59040
|
+
var StorageCleanupPhaseSchema = _enum([
|
|
59041
|
+
"orphans",
|
|
59042
|
+
"debug-media",
|
|
59043
|
+
"ghost-ledger",
|
|
59044
|
+
"done",
|
|
59045
|
+
"failed",
|
|
59046
|
+
"cancelled"
|
|
59047
|
+
]);
|
|
59048
|
+
var StorageCleanupInputSchema = object({
|
|
59049
|
+
/** Also walk motion stills / track filmstrips. Off by default. */
|
|
59050
|
+
includeDebugMedia: boolean().optional() });
|
|
59051
|
+
var StorageCleanupJobSchema = object({
|
|
59052
|
+
jobId: string(),
|
|
59053
|
+
phase: StorageCleanupPhaseSchema,
|
|
59054
|
+
includeDebugMedia: boolean(),
|
|
59055
|
+
orphansReclaimed: number().int().nonnegative(),
|
|
59056
|
+
orphanBytesReclaimed: number().int().nonnegative(),
|
|
59057
|
+
debugMediaReclaimed: number().int().nonnegative(),
|
|
59058
|
+
debugMediaBytesReclaimed: number().int().nonnegative(),
|
|
59059
|
+
ghostsForgotten: number().int().nonnegative(),
|
|
59060
|
+
ghostBytesForgotten: number().int().nonnegative(),
|
|
59061
|
+
/** Short operator-facing line: current collection, pass, or location. */
|
|
59062
|
+
detail: string().nullable(),
|
|
59063
|
+
cancelRequested: boolean(),
|
|
59064
|
+
startedAt: number(),
|
|
59065
|
+
updatedAt: number(),
|
|
59066
|
+
finishedAt: number().nullable(),
|
|
59067
|
+
error: string().nullable()
|
|
59068
|
+
});
|
|
59069
|
+
var StorageCleanupStatusInputSchema = object({ jobId: string().optional() });
|
|
59070
|
+
/**
|
|
58998
59071
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
58999
59072
|
* storage a location serves. Defined here (not in `capabilities/storage.cap.ts`)
|
|
59000
59073
|
* so the persisted record schema and the consumer-facing cap can both consume it
|
|
@@ -59022,11 +59095,10 @@ var StorageLocationTypeSchema = string().regex(/^[a-z][a-zA-Z0-9-]*$/);
|
|
|
59022
59095
|
* The default location for a type uses `id === <type>:default` by
|
|
59023
59096
|
* convention (the bare type ref like `'backups'` resolves to it).
|
|
59024
59097
|
*
|
|
59025
|
-
* `isSystem
|
|
59026
|
-
*
|
|
59027
|
-
*
|
|
59028
|
-
*
|
|
59029
|
-
* deleting it is rejected at the cap level.
|
|
59098
|
+
* `isSystem` is a legacy persisted flag. Seed still creates the initial
|
|
59099
|
+
* `<type>:default` locations; the flag is no longer a lock, a badge, or a
|
|
59100
|
+
* prune selector. New writes leave it false. Deletion is gated on uniqueness
|
|
59101
|
+
* / last-enabled, not on this bit.
|
|
59030
59102
|
*/
|
|
59031
59103
|
var StorageLocationSchema = object({
|
|
59032
59104
|
id: string().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/),
|
|
@@ -63569,6 +63641,12 @@ method(object({
|
|
|
63569
63641
|
}), _void(), {
|
|
63570
63642
|
kind: "mutation",
|
|
63571
63643
|
auth: "admin"
|
|
63644
|
+
}), method(object({
|
|
63645
|
+
from: string(),
|
|
63646
|
+
to: string()
|
|
63647
|
+
}), object({ moved: number() }), {
|
|
63648
|
+
kind: "mutation",
|
|
63649
|
+
auth: "admin"
|
|
63572
63650
|
}), method(object({
|
|
63573
63651
|
deviceId: number(),
|
|
63574
63652
|
disabled: boolean()
|
|
@@ -69577,46 +69655,6 @@ var RecentTracksPageSchema = object({
|
|
|
69577
69655
|
/** Cursor for the next page, or null when this page is the last. */
|
|
69578
69656
|
nextCursor: string().nullable()
|
|
69579
69657
|
});
|
|
69580
|
-
var LIST_GROUPS_DEFAULT_LIMIT = 40;
|
|
69581
|
-
var LIST_GROUPS_MAX_LIMIT = 100;
|
|
69582
|
-
var AnalyticsGroupRecordSchema = object({
|
|
69583
|
-
id: string(),
|
|
69584
|
-
deviceId: number().int(),
|
|
69585
|
-
openedAt: number().int(),
|
|
69586
|
-
closedAt: number().int(),
|
|
69587
|
-
timestamp: number().int(),
|
|
69588
|
-
memberCount: number().int(),
|
|
69589
|
-
memberTrackIds: array(string()).readonly(),
|
|
69590
|
-
className: string(),
|
|
69591
|
-
classes: array(string()).readonly(),
|
|
69592
|
-
/** Relative event-media path, or null when the group has no picture yet. */
|
|
69593
|
-
mediaUrl: string().nullable(),
|
|
69594
|
-
singleton: boolean()
|
|
69595
|
-
});
|
|
69596
|
-
var AnalyticsGroupMemberSchema = object({
|
|
69597
|
-
trackId: string(),
|
|
69598
|
-
deviceId: number().int(),
|
|
69599
|
-
className: string(),
|
|
69600
|
-
firstSeen: number().int(),
|
|
69601
|
-
lastSeen: number().int(),
|
|
69602
|
-
mediaUrl: string().nullable()
|
|
69603
|
-
});
|
|
69604
|
-
var AnalyticsGroupDetailSchema = AnalyticsGroupRecordSchema.extend({ members: array(AnalyticsGroupMemberSchema).readonly() });
|
|
69605
|
-
var ListGroupsQueryInput = object({
|
|
69606
|
-
/** Devices to merge. An empty array yields `{ groups: [], nextCursor: null }`. */
|
|
69607
|
-
deviceIds: array(number()),
|
|
69608
|
-
/** Window lower bound on `closedAt` (inclusive). */
|
|
69609
|
-
since: number().optional(),
|
|
69610
|
-
/** Window upper bound on `openedAt` (inclusive). */
|
|
69611
|
-
until: number().optional(),
|
|
69612
|
-
limit: number().int().min(1).max(LIST_GROUPS_MAX_LIMIT).default(LIST_GROUPS_DEFAULT_LIMIT),
|
|
69613
|
-
/** Opaque continuation cursor from a previous page's `nextCursor`. */
|
|
69614
|
-
cursor: string().optional()
|
|
69615
|
-
});
|
|
69616
|
-
var ListGroupsPageSchema = object({
|
|
69617
|
-
groups: array(AnalyticsGroupRecordSchema).readonly(),
|
|
69618
|
-
nextCursor: string().nullable()
|
|
69619
|
-
});
|
|
69620
69658
|
var KEY_EVENTS_DEFAULT_LIMIT = 50;
|
|
69621
69659
|
var KEY_EVENTS_MAX_LIMIT = 200;
|
|
69622
69660
|
var KeyEventQueryInput = object({
|
|
@@ -69720,9 +69758,7 @@ var TrackCascadeCountsSchema = object({
|
|
|
69720
69758
|
/** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
|
|
69721
69759
|
plates: number().int(),
|
|
69722
69760
|
/** Per-track CLIP search vectors removed (best-effort). */
|
|
69723
|
-
embeddings: number().int()
|
|
69724
|
-
/** Group membership + group rows removed with their last member (best-effort). */
|
|
69725
|
-
groups: number().int()
|
|
69761
|
+
embeddings: number().int()
|
|
69726
69762
|
});
|
|
69727
69763
|
/** Disk-wins reconcile: media rows whose blobs are gone, then empty tracks. */
|
|
69728
69764
|
var DiskReconcileCountsSchema = object({
|
|
@@ -69892,6 +69928,47 @@ var RebuildStatusSchema = object({
|
|
|
69892
69928
|
/** Present when the pass ended by throwing. */
|
|
69893
69929
|
error: string().nullable()
|
|
69894
69930
|
});
|
|
69931
|
+
/**
|
|
69932
|
+
* Acknowledgement that a debug-media reclaim STARTED.
|
|
69933
|
+
*
|
|
69934
|
+
* The pass is paced at ~2 MB/s over a standing 100 GB — tens of minutes — so
|
|
69935
|
+
* it runs detached and this returns immediately. Awaiting it is how the
|
|
69936
|
+
* `addons.custom` door hit the 60 s UDS deadline while the walk carried on
|
|
69937
|
+
* with no status. Poll {@link pipelineAnalyticsCapability.methods.getMediaReclaimStatus}.
|
|
69938
|
+
*/
|
|
69939
|
+
var MediaReclaimStartResultSchema = object({
|
|
69940
|
+
started: boolean(),
|
|
69941
|
+
/** True when a pass was already running; the new request is ignored. */
|
|
69942
|
+
alreadyRunning: boolean()
|
|
69943
|
+
});
|
|
69944
|
+
var MediaReclaimInputSchema = object({
|
|
69945
|
+
mode: _enum(["report", "reclaim"]).default("report"),
|
|
69946
|
+
scopes: array(_enum(["motion-still", "track-filmstrip"])).min(1).optional(),
|
|
69947
|
+
deviceIds: array(number().int()).min(1).optional(),
|
|
69948
|
+
restart: boolean().optional(),
|
|
69949
|
+
pageSize: number().int().min(50).max(5e3).optional(),
|
|
69950
|
+
maxRowsPerDevice: number().int().min(1).max(5e5).optional(),
|
|
69951
|
+
maxReclaimPerDevice: number().int().min(1).max(5e5).optional(),
|
|
69952
|
+
maxBytesPerRun: number().int().min(1).optional(),
|
|
69953
|
+
budgetMinutes: number().int().min(1).max(720).optional(),
|
|
69954
|
+
throttleBytesPerSec: number().int().min(64 * 1024).optional(),
|
|
69955
|
+
graceMinutes: number().int().min(1).max(10080).optional()
|
|
69956
|
+
});
|
|
69957
|
+
var MediaReclaimStatusSchema = object({
|
|
69958
|
+
running: boolean(),
|
|
69959
|
+
mode: _enum(["report", "reclaim"]).nullable(),
|
|
69960
|
+
totalExamined: number(),
|
|
69961
|
+
totalEligible: number(),
|
|
69962
|
+
totalReclaimed: number(),
|
|
69963
|
+
totalBytesReclaimed: number(),
|
|
69964
|
+
totalRefused: number(),
|
|
69965
|
+
/** Device+scope windows finished in this pass. */
|
|
69966
|
+
devicesDone: number(),
|
|
69967
|
+
complete: boolean().nullable(),
|
|
69968
|
+
startedAtMs: number().nullable(),
|
|
69969
|
+
finishedAtMs: number().nullable(),
|
|
69970
|
+
error: string().nullable()
|
|
69971
|
+
});
|
|
69895
69972
|
var ReplayFrameInputSchema = object({
|
|
69896
69973
|
timestamp: number(),
|
|
69897
69974
|
frame: PipelineRunResultBridge
|
|
@@ -69930,10 +70007,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
69930
70007
|
* stationary registry). Default false: the timeline lists passages,
|
|
69931
70008
|
* not parking records (operator decision, 2026-08-15). */
|
|
69932
70009
|
includeStationary: boolean().optional()
|
|
69933
|
-
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(
|
|
69934
|
-
deviceId: number(),
|
|
69935
|
-
groupId: string().min(1)
|
|
69936
|
-
}), AnalyticsGroupDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
|
|
70010
|
+
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
|
|
69937
70011
|
kind: "mutation",
|
|
69938
70012
|
auth: "admin"
|
|
69939
70013
|
}), 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({
|
|
@@ -70033,6 +70107,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
70033
70107
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
70034
70108
|
kind: "query",
|
|
70035
70109
|
auth: "admin"
|
|
70110
|
+
}), method(MediaReclaimInputSchema, MediaReclaimStartResultSchema, {
|
|
70111
|
+
kind: "mutation",
|
|
70112
|
+
auth: "admin"
|
|
70113
|
+
}), method(object({}), MediaReclaimStatusSchema, {
|
|
70114
|
+
kind: "query",
|
|
70115
|
+
auth: "admin"
|
|
70036
70116
|
}), method(object({ deviceIds: array(number()).optional() }), TrainingExportSummarySchema, {
|
|
70037
70117
|
kind: "query",
|
|
70038
70118
|
auth: "admin"
|
|
@@ -72003,7 +72083,13 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
|
|
|
72003
72083
|
}), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
|
|
72004
72084
|
kind: "mutation",
|
|
72005
72085
|
auth: "admin"
|
|
72006
|
-
})
|
|
72086
|
+
}), method(StorageCleanupInputSchema, object({ jobId: string() }), {
|
|
72087
|
+
kind: "mutation",
|
|
72088
|
+
auth: "admin"
|
|
72089
|
+
}), method(StorageCleanupStatusInputSchema, StorageCleanupJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
72090
|
+
kind: "mutation",
|
|
72091
|
+
auth: "admin"
|
|
72092
|
+
}), method(object({}), array(StorageMigrationJobSchema).readonly(), { auth: "admin" });
|
|
72007
72093
|
var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
72008
72094
|
providerId: string().min(1),
|
|
72009
72095
|
displayName: string().min(1),
|
|
@@ -79121,6 +79207,33 @@ var RecordingRebalanceInputSchema = object({
|
|
|
79121
79207
|
minMoveGb: number().min(0).optional()
|
|
79122
79208
|
});
|
|
79123
79209
|
/**
|
|
79210
|
+
* Operator-facing placement of one camera onto a recordings location.
|
|
79211
|
+
*
|
|
79212
|
+
* `pinLocationId` is the operator instruction: a location id, or `null` for
|
|
79213
|
+
* Auto (the planner may move this camera). `locationId` is where high/mid
|
|
79214
|
+
* currently write — the plan, which may disagree with the pin when Auto.
|
|
79215
|
+
*/
|
|
79216
|
+
var RecordingDevicePlacementSchema = object({
|
|
79217
|
+
deviceId: number().int(),
|
|
79218
|
+
profile: string(),
|
|
79219
|
+
locationId: string()
|
|
79220
|
+
});
|
|
79221
|
+
var RecordingDevicePinSchema = object({
|
|
79222
|
+
deviceId: number().int(),
|
|
79223
|
+
/** Recordings-class location this camera is pinned to. */
|
|
79224
|
+
locationId: string()
|
|
79225
|
+
});
|
|
79226
|
+
var RecordingPlacementViewSchema = object({
|
|
79227
|
+
assignments: array(RecordingDevicePlacementSchema),
|
|
79228
|
+
pins: array(RecordingDevicePinSchema),
|
|
79229
|
+
defaultLocations: record(string(), string())
|
|
79230
|
+
});
|
|
79231
|
+
var RecordingSetDevicePlacementInputSchema = object({
|
|
79232
|
+
deviceId: number().int(),
|
|
79233
|
+
/** `null` = Auto. Otherwise a `recordings:*` location id. */
|
|
79234
|
+
locationId: string().nullable()
|
|
79235
|
+
});
|
|
79236
|
+
/**
|
|
79124
79237
|
* Result of locating footage at a wall-clock instant for one device/profile.
|
|
79125
79238
|
* `segment` carries the covering segment's window; `gap` reports the forward
|
|
79126
79239
|
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
@@ -79346,6 +79459,12 @@ method(object({
|
|
|
79346
79459
|
}), method(RecordingRebalanceInputSchema, RecordingRebalancePlanSchema, {
|
|
79347
79460
|
kind: "mutation",
|
|
79348
79461
|
auth: "admin"
|
|
79462
|
+
}), method(object({}), RecordingPlacementViewSchema, {
|
|
79463
|
+
kind: "query",
|
|
79464
|
+
auth: "admin"
|
|
79465
|
+
}), method(RecordingSetDevicePlacementInputSchema, object({ ok: literal(true) }), {
|
|
79466
|
+
kind: "mutation",
|
|
79467
|
+
auth: "admin"
|
|
79349
79468
|
});
|
|
79350
79469
|
/**
|
|
79351
79470
|
* `recording-export` cap — render a footage time range into a single downloadable
|
|
@@ -84415,6 +84534,12 @@ Object.freeze({
|
|
|
84415
84534
|
addonId: null,
|
|
84416
84535
|
access: "delete"
|
|
84417
84536
|
},
|
|
84537
|
+
"deviceManager.renameLocation": {
|
|
84538
|
+
capName: "device-manager",
|
|
84539
|
+
capScope: "system",
|
|
84540
|
+
addonId: null,
|
|
84541
|
+
access: "create"
|
|
84542
|
+
},
|
|
84418
84543
|
"deviceManager.runDeviceAction": {
|
|
84419
84544
|
capName: "device-manager",
|
|
84420
84545
|
capScope: "system",
|
|
@@ -86107,19 +86232,19 @@ Object.freeze({
|
|
|
86107
86232
|
addonId: null,
|
|
86108
86233
|
access: "view"
|
|
86109
86234
|
},
|
|
86110
|
-
"pipelineAnalytics.
|
|
86235
|
+
"pipelineAnalytics.getKeyEvents": {
|
|
86111
86236
|
capName: "pipeline-analytics",
|
|
86112
86237
|
capScope: "device",
|
|
86113
86238
|
addonId: null,
|
|
86114
86239
|
access: "view"
|
|
86115
86240
|
},
|
|
86116
|
-
"pipelineAnalytics.
|
|
86241
|
+
"pipelineAnalytics.getKeyEventsBatch": {
|
|
86117
86242
|
capName: "pipeline-analytics",
|
|
86118
86243
|
capScope: "device",
|
|
86119
86244
|
addonId: null,
|
|
86120
86245
|
access: "view"
|
|
86121
86246
|
},
|
|
86122
|
-
"pipelineAnalytics.
|
|
86247
|
+
"pipelineAnalytics.getMediaReclaimStatus": {
|
|
86123
86248
|
capName: "pipeline-analytics",
|
|
86124
86249
|
capScope: "device",
|
|
86125
86250
|
addonId: null,
|
|
@@ -86209,12 +86334,6 @@ Object.freeze({
|
|
|
86209
86334
|
addonId: null,
|
|
86210
86335
|
access: "view"
|
|
86211
86336
|
},
|
|
86212
|
-
"pipelineAnalytics.listGroups": {
|
|
86213
|
-
capName: "pipeline-analytics",
|
|
86214
|
-
capScope: "device",
|
|
86215
|
-
addonId: null,
|
|
86216
|
-
access: "view"
|
|
86217
|
-
},
|
|
86218
86337
|
"pipelineAnalytics.listOpsLog": {
|
|
86219
86338
|
capName: "pipeline-analytics",
|
|
86220
86339
|
capScope: "device",
|
|
@@ -86299,6 +86418,12 @@ Object.freeze({
|
|
|
86299
86418
|
addonId: null,
|
|
86300
86419
|
access: "create"
|
|
86301
86420
|
},
|
|
86421
|
+
"pipelineAnalytics.reclaimDebugMedia": {
|
|
86422
|
+
capName: "pipeline-analytics",
|
|
86423
|
+
capScope: "device",
|
|
86424
|
+
addonId: null,
|
|
86425
|
+
access: "create"
|
|
86426
|
+
},
|
|
86302
86427
|
"pipelineAnalytics.reconcileFromDisk": {
|
|
86303
86428
|
capName: "pipeline-analytics",
|
|
86304
86429
|
capScope: "device",
|
|
@@ -87223,6 +87348,12 @@ Object.freeze({
|
|
|
87223
87348
|
addonId: null,
|
|
87224
87349
|
access: "view"
|
|
87225
87350
|
},
|
|
87351
|
+
"recording.getPlacement": {
|
|
87352
|
+
capName: "recording",
|
|
87353
|
+
capScope: "system",
|
|
87354
|
+
addonId: null,
|
|
87355
|
+
access: "view"
|
|
87356
|
+
},
|
|
87226
87357
|
"recording.getPlaybackManifest": {
|
|
87227
87358
|
capName: "recording",
|
|
87228
87359
|
capScope: "system",
|
|
@@ -87349,6 +87480,12 @@ Object.freeze({
|
|
|
87349
87480
|
addonId: null,
|
|
87350
87481
|
access: "create"
|
|
87351
87482
|
},
|
|
87483
|
+
"recording.setDevicePlacement": {
|
|
87484
|
+
capName: "recording",
|
|
87485
|
+
capScope: "system",
|
|
87486
|
+
addonId: null,
|
|
87487
|
+
access: "create"
|
|
87488
|
+
},
|
|
87352
87489
|
"recording.startStorageMigrationMove": {
|
|
87353
87490
|
capName: "recording",
|
|
87354
87491
|
capScope: "system",
|
|
@@ -87793,12 +87930,36 @@ Object.freeze({
|
|
|
87793
87930
|
addonId: null,
|
|
87794
87931
|
access: "create"
|
|
87795
87932
|
},
|
|
87933
|
+
"storageMigration.cleanupCancel": {
|
|
87934
|
+
capName: "storage-migration",
|
|
87935
|
+
capScope: "system",
|
|
87936
|
+
addonId: null,
|
|
87937
|
+
access: "create"
|
|
87938
|
+
},
|
|
87939
|
+
"storageMigration.cleanupStart": {
|
|
87940
|
+
capName: "storage-migration",
|
|
87941
|
+
capScope: "system",
|
|
87942
|
+
addonId: null,
|
|
87943
|
+
access: "create"
|
|
87944
|
+
},
|
|
87945
|
+
"storageMigration.cleanupStatus": {
|
|
87946
|
+
capName: "storage-migration",
|
|
87947
|
+
capScope: "system",
|
|
87948
|
+
addonId: null,
|
|
87949
|
+
access: "view"
|
|
87950
|
+
},
|
|
87796
87951
|
"storageMigration.drain": {
|
|
87797
87952
|
capName: "storage-migration",
|
|
87798
87953
|
capScope: "system",
|
|
87799
87954
|
addonId: null,
|
|
87800
87955
|
access: "create"
|
|
87801
87956
|
},
|
|
87957
|
+
"storageMigration.history": {
|
|
87958
|
+
capName: "storage-migration",
|
|
87959
|
+
capScope: "system",
|
|
87960
|
+
addonId: null,
|
|
87961
|
+
access: "view"
|
|
87962
|
+
},
|
|
87802
87963
|
"storageMigration.movers": {
|
|
87803
87964
|
capName: "storage-migration",
|
|
87804
87965
|
capScope: "system",
|
|
@@ -89795,11 +89956,6 @@ Object.freeze({
|
|
|
89795
89956
|
form: "single",
|
|
89796
89957
|
optional: true
|
|
89797
89958
|
}],
|
|
89798
|
-
"pipelineAnalytics.getGroup": [{
|
|
89799
|
-
name: "deviceId",
|
|
89800
|
-
form: "single",
|
|
89801
|
-
optional: false
|
|
89802
|
-
}],
|
|
89803
89959
|
"pipelineAnalytics.getKeyEvents": [{
|
|
89804
89960
|
name: "deviceId",
|
|
89805
89961
|
form: "single",
|
|
@@ -89865,11 +90021,6 @@ Object.freeze({
|
|
|
89865
90021
|
form: "single",
|
|
89866
90022
|
optional: false
|
|
89867
90023
|
}],
|
|
89868
|
-
"pipelineAnalytics.listGroups": [{
|
|
89869
|
-
name: "deviceIds",
|
|
89870
|
-
form: "array",
|
|
89871
|
-
optional: false
|
|
89872
|
-
}],
|
|
89873
90024
|
"pipelineAnalytics.listOpsLog": [{
|
|
89874
90025
|
name: "deviceId",
|
|
89875
90026
|
form: "single",
|
|
@@ -89915,6 +90066,11 @@ Object.freeze({
|
|
|
89915
90066
|
form: "single",
|
|
89916
90067
|
optional: true
|
|
89917
90068
|
}],
|
|
90069
|
+
"pipelineAnalytics.reclaimDebugMedia": [{
|
|
90070
|
+
name: "deviceIds",
|
|
90071
|
+
form: "array",
|
|
90072
|
+
optional: true
|
|
90073
|
+
}],
|
|
89918
90074
|
"pipelineAnalytics.reconcileFromDisk": [{
|
|
89919
90075
|
name: "deviceId",
|
|
89920
90076
|
form: "single",
|
|
@@ -90280,6 +90436,11 @@ Object.freeze({
|
|
|
90280
90436
|
form: "single",
|
|
90281
90437
|
optional: false
|
|
90282
90438
|
}],
|
|
90439
|
+
"recording.setDevicePlacement": [{
|
|
90440
|
+
name: "deviceId",
|
|
90441
|
+
form: "single",
|
|
90442
|
+
optional: false
|
|
90443
|
+
}],
|
|
90283
90444
|
"recording.startStorageMigrationMove": [{
|
|
90284
90445
|
name: "deviceId",
|
|
90285
90446
|
form: "single",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-dreame",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.50",
|
|
4
4
|
"description": "Dreame robot-vacuum / lawn-mower device-provider addon for CamStack — wraps the @apocaliss92/nodedreame Dreamehome cloud client",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|