@camstack/addon-provider-dreame 0.2.49 → 0.2.51
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 +236 -73
- package/dist/addon.mjs +236 -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()
|
|
@@ -66319,6 +66397,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
66319
66397
|
"device-offline",
|
|
66320
66398
|
"device-disabled",
|
|
66321
66399
|
"device-enabled",
|
|
66400
|
+
"device-battery-low",
|
|
66401
|
+
"device-battery-normal",
|
|
66322
66402
|
"stream-online",
|
|
66323
66403
|
"stream-offline",
|
|
66324
66404
|
"node-online",
|
|
@@ -69577,46 +69657,6 @@ var RecentTracksPageSchema = object({
|
|
|
69577
69657
|
/** Cursor for the next page, or null when this page is the last. */
|
|
69578
69658
|
nextCursor: string().nullable()
|
|
69579
69659
|
});
|
|
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
69660
|
var KEY_EVENTS_DEFAULT_LIMIT = 50;
|
|
69621
69661
|
var KEY_EVENTS_MAX_LIMIT = 200;
|
|
69622
69662
|
var KeyEventQueryInput = object({
|
|
@@ -69720,9 +69760,7 @@ var TrackCascadeCountsSchema = object({
|
|
|
69720
69760
|
/** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
|
|
69721
69761
|
plates: number().int(),
|
|
69722
69762
|
/** 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()
|
|
69763
|
+
embeddings: number().int()
|
|
69726
69764
|
});
|
|
69727
69765
|
/** Disk-wins reconcile: media rows whose blobs are gone, then empty tracks. */
|
|
69728
69766
|
var DiskReconcileCountsSchema = object({
|
|
@@ -69892,6 +69930,47 @@ var RebuildStatusSchema = object({
|
|
|
69892
69930
|
/** Present when the pass ended by throwing. */
|
|
69893
69931
|
error: string().nullable()
|
|
69894
69932
|
});
|
|
69933
|
+
/**
|
|
69934
|
+
* Acknowledgement that a debug-media reclaim STARTED.
|
|
69935
|
+
*
|
|
69936
|
+
* The pass is paced at ~2 MB/s over a standing 100 GB — tens of minutes — so
|
|
69937
|
+
* it runs detached and this returns immediately. Awaiting it is how the
|
|
69938
|
+
* `addons.custom` door hit the 60 s UDS deadline while the walk carried on
|
|
69939
|
+
* with no status. Poll {@link pipelineAnalyticsCapability.methods.getMediaReclaimStatus}.
|
|
69940
|
+
*/
|
|
69941
|
+
var MediaReclaimStartResultSchema = object({
|
|
69942
|
+
started: boolean(),
|
|
69943
|
+
/** True when a pass was already running; the new request is ignored. */
|
|
69944
|
+
alreadyRunning: boolean()
|
|
69945
|
+
});
|
|
69946
|
+
var MediaReclaimInputSchema = object({
|
|
69947
|
+
mode: _enum(["report", "reclaim"]).default("report"),
|
|
69948
|
+
scopes: array(_enum(["motion-still", "track-filmstrip"])).min(1).optional(),
|
|
69949
|
+
deviceIds: array(number().int()).min(1).optional(),
|
|
69950
|
+
restart: boolean().optional(),
|
|
69951
|
+
pageSize: number().int().min(50).max(5e3).optional(),
|
|
69952
|
+
maxRowsPerDevice: number().int().min(1).max(5e5).optional(),
|
|
69953
|
+
maxReclaimPerDevice: number().int().min(1).max(5e5).optional(),
|
|
69954
|
+
maxBytesPerRun: number().int().min(1).optional(),
|
|
69955
|
+
budgetMinutes: number().int().min(1).max(720).optional(),
|
|
69956
|
+
throttleBytesPerSec: number().int().min(64 * 1024).optional(),
|
|
69957
|
+
graceMinutes: number().int().min(1).max(10080).optional()
|
|
69958
|
+
});
|
|
69959
|
+
var MediaReclaimStatusSchema = object({
|
|
69960
|
+
running: boolean(),
|
|
69961
|
+
mode: _enum(["report", "reclaim"]).nullable(),
|
|
69962
|
+
totalExamined: number(),
|
|
69963
|
+
totalEligible: number(),
|
|
69964
|
+
totalReclaimed: number(),
|
|
69965
|
+
totalBytesReclaimed: number(),
|
|
69966
|
+
totalRefused: number(),
|
|
69967
|
+
/** Device+scope windows finished in this pass. */
|
|
69968
|
+
devicesDone: number(),
|
|
69969
|
+
complete: boolean().nullable(),
|
|
69970
|
+
startedAtMs: number().nullable(),
|
|
69971
|
+
finishedAtMs: number().nullable(),
|
|
69972
|
+
error: string().nullable()
|
|
69973
|
+
});
|
|
69895
69974
|
var ReplayFrameInputSchema = object({
|
|
69896
69975
|
timestamp: number(),
|
|
69897
69976
|
frame: PipelineRunResultBridge
|
|
@@ -69930,10 +70009,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
69930
70009
|
* stationary registry). Default false: the timeline lists passages,
|
|
69931
70010
|
* not parking records (operator decision, 2026-08-15). */
|
|
69932
70011
|
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(), {
|
|
70012
|
+
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
|
|
69937
70013
|
kind: "mutation",
|
|
69938
70014
|
auth: "admin"
|
|
69939
70015
|
}), 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 +70109,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
70033
70109
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
70034
70110
|
kind: "query",
|
|
70035
70111
|
auth: "admin"
|
|
70112
|
+
}), method(MediaReclaimInputSchema, MediaReclaimStartResultSchema, {
|
|
70113
|
+
kind: "mutation",
|
|
70114
|
+
auth: "admin"
|
|
70115
|
+
}), method(object({}), MediaReclaimStatusSchema, {
|
|
70116
|
+
kind: "query",
|
|
70117
|
+
auth: "admin"
|
|
70036
70118
|
}), method(object({ deviceIds: array(number()).optional() }), TrainingExportSummarySchema, {
|
|
70037
70119
|
kind: "query",
|
|
70038
70120
|
auth: "admin"
|
|
@@ -72003,7 +72085,13 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
|
|
|
72003
72085
|
}), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
|
|
72004
72086
|
kind: "mutation",
|
|
72005
72087
|
auth: "admin"
|
|
72006
|
-
})
|
|
72088
|
+
}), method(StorageCleanupInputSchema, object({ jobId: string() }), {
|
|
72089
|
+
kind: "mutation",
|
|
72090
|
+
auth: "admin"
|
|
72091
|
+
}), method(StorageCleanupStatusInputSchema, StorageCleanupJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
72092
|
+
kind: "mutation",
|
|
72093
|
+
auth: "admin"
|
|
72094
|
+
}), method(object({}), array(StorageMigrationJobSchema).readonly(), { auth: "admin" });
|
|
72007
72095
|
var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
72008
72096
|
providerId: string().min(1),
|
|
72009
72097
|
displayName: string().min(1),
|
|
@@ -79121,6 +79209,33 @@ var RecordingRebalanceInputSchema = object({
|
|
|
79121
79209
|
minMoveGb: number().min(0).optional()
|
|
79122
79210
|
});
|
|
79123
79211
|
/**
|
|
79212
|
+
* Operator-facing placement of one camera onto a recordings location.
|
|
79213
|
+
*
|
|
79214
|
+
* `pinLocationId` is the operator instruction: a location id, or `null` for
|
|
79215
|
+
* Auto (the planner may move this camera). `locationId` is where high/mid
|
|
79216
|
+
* currently write — the plan, which may disagree with the pin when Auto.
|
|
79217
|
+
*/
|
|
79218
|
+
var RecordingDevicePlacementSchema = object({
|
|
79219
|
+
deviceId: number().int(),
|
|
79220
|
+
profile: string(),
|
|
79221
|
+
locationId: string()
|
|
79222
|
+
});
|
|
79223
|
+
var RecordingDevicePinSchema = object({
|
|
79224
|
+
deviceId: number().int(),
|
|
79225
|
+
/** Recordings-class location this camera is pinned to. */
|
|
79226
|
+
locationId: string()
|
|
79227
|
+
});
|
|
79228
|
+
var RecordingPlacementViewSchema = object({
|
|
79229
|
+
assignments: array(RecordingDevicePlacementSchema),
|
|
79230
|
+
pins: array(RecordingDevicePinSchema),
|
|
79231
|
+
defaultLocations: record(string(), string())
|
|
79232
|
+
});
|
|
79233
|
+
var RecordingSetDevicePlacementInputSchema = object({
|
|
79234
|
+
deviceId: number().int(),
|
|
79235
|
+
/** `null` = Auto. Otherwise a `recordings:*` location id. */
|
|
79236
|
+
locationId: string().nullable()
|
|
79237
|
+
});
|
|
79238
|
+
/**
|
|
79124
79239
|
* Result of locating footage at a wall-clock instant for one device/profile.
|
|
79125
79240
|
* `segment` carries the covering segment's window; `gap` reports the forward
|
|
79126
79241
|
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
@@ -79346,6 +79461,12 @@ method(object({
|
|
|
79346
79461
|
}), method(RecordingRebalanceInputSchema, RecordingRebalancePlanSchema, {
|
|
79347
79462
|
kind: "mutation",
|
|
79348
79463
|
auth: "admin"
|
|
79464
|
+
}), method(object({}), RecordingPlacementViewSchema, {
|
|
79465
|
+
kind: "query",
|
|
79466
|
+
auth: "admin"
|
|
79467
|
+
}), method(RecordingSetDevicePlacementInputSchema, object({ ok: literal(true) }), {
|
|
79468
|
+
kind: "mutation",
|
|
79469
|
+
auth: "admin"
|
|
79349
79470
|
});
|
|
79350
79471
|
/**
|
|
79351
79472
|
* `recording-export` cap — render a footage time range into a single downloadable
|
|
@@ -84415,6 +84536,12 @@ Object.freeze({
|
|
|
84415
84536
|
addonId: null,
|
|
84416
84537
|
access: "delete"
|
|
84417
84538
|
},
|
|
84539
|
+
"deviceManager.renameLocation": {
|
|
84540
|
+
capName: "device-manager",
|
|
84541
|
+
capScope: "system",
|
|
84542
|
+
addonId: null,
|
|
84543
|
+
access: "create"
|
|
84544
|
+
},
|
|
84418
84545
|
"deviceManager.runDeviceAction": {
|
|
84419
84546
|
capName: "device-manager",
|
|
84420
84547
|
capScope: "system",
|
|
@@ -86107,19 +86234,19 @@ Object.freeze({
|
|
|
86107
86234
|
addonId: null,
|
|
86108
86235
|
access: "view"
|
|
86109
86236
|
},
|
|
86110
|
-
"pipelineAnalytics.
|
|
86237
|
+
"pipelineAnalytics.getKeyEvents": {
|
|
86111
86238
|
capName: "pipeline-analytics",
|
|
86112
86239
|
capScope: "device",
|
|
86113
86240
|
addonId: null,
|
|
86114
86241
|
access: "view"
|
|
86115
86242
|
},
|
|
86116
|
-
"pipelineAnalytics.
|
|
86243
|
+
"pipelineAnalytics.getKeyEventsBatch": {
|
|
86117
86244
|
capName: "pipeline-analytics",
|
|
86118
86245
|
capScope: "device",
|
|
86119
86246
|
addonId: null,
|
|
86120
86247
|
access: "view"
|
|
86121
86248
|
},
|
|
86122
|
-
"pipelineAnalytics.
|
|
86249
|
+
"pipelineAnalytics.getMediaReclaimStatus": {
|
|
86123
86250
|
capName: "pipeline-analytics",
|
|
86124
86251
|
capScope: "device",
|
|
86125
86252
|
addonId: null,
|
|
@@ -86209,12 +86336,6 @@ Object.freeze({
|
|
|
86209
86336
|
addonId: null,
|
|
86210
86337
|
access: "view"
|
|
86211
86338
|
},
|
|
86212
|
-
"pipelineAnalytics.listGroups": {
|
|
86213
|
-
capName: "pipeline-analytics",
|
|
86214
|
-
capScope: "device",
|
|
86215
|
-
addonId: null,
|
|
86216
|
-
access: "view"
|
|
86217
|
-
},
|
|
86218
86339
|
"pipelineAnalytics.listOpsLog": {
|
|
86219
86340
|
capName: "pipeline-analytics",
|
|
86220
86341
|
capScope: "device",
|
|
@@ -86299,6 +86420,12 @@ Object.freeze({
|
|
|
86299
86420
|
addonId: null,
|
|
86300
86421
|
access: "create"
|
|
86301
86422
|
},
|
|
86423
|
+
"pipelineAnalytics.reclaimDebugMedia": {
|
|
86424
|
+
capName: "pipeline-analytics",
|
|
86425
|
+
capScope: "device",
|
|
86426
|
+
addonId: null,
|
|
86427
|
+
access: "create"
|
|
86428
|
+
},
|
|
86302
86429
|
"pipelineAnalytics.reconcileFromDisk": {
|
|
86303
86430
|
capName: "pipeline-analytics",
|
|
86304
86431
|
capScope: "device",
|
|
@@ -87223,6 +87350,12 @@ Object.freeze({
|
|
|
87223
87350
|
addonId: null,
|
|
87224
87351
|
access: "view"
|
|
87225
87352
|
},
|
|
87353
|
+
"recording.getPlacement": {
|
|
87354
|
+
capName: "recording",
|
|
87355
|
+
capScope: "system",
|
|
87356
|
+
addonId: null,
|
|
87357
|
+
access: "view"
|
|
87358
|
+
},
|
|
87226
87359
|
"recording.getPlaybackManifest": {
|
|
87227
87360
|
capName: "recording",
|
|
87228
87361
|
capScope: "system",
|
|
@@ -87349,6 +87482,12 @@ Object.freeze({
|
|
|
87349
87482
|
addonId: null,
|
|
87350
87483
|
access: "create"
|
|
87351
87484
|
},
|
|
87485
|
+
"recording.setDevicePlacement": {
|
|
87486
|
+
capName: "recording",
|
|
87487
|
+
capScope: "system",
|
|
87488
|
+
addonId: null,
|
|
87489
|
+
access: "create"
|
|
87490
|
+
},
|
|
87352
87491
|
"recording.startStorageMigrationMove": {
|
|
87353
87492
|
capName: "recording",
|
|
87354
87493
|
capScope: "system",
|
|
@@ -87793,12 +87932,36 @@ Object.freeze({
|
|
|
87793
87932
|
addonId: null,
|
|
87794
87933
|
access: "create"
|
|
87795
87934
|
},
|
|
87935
|
+
"storageMigration.cleanupCancel": {
|
|
87936
|
+
capName: "storage-migration",
|
|
87937
|
+
capScope: "system",
|
|
87938
|
+
addonId: null,
|
|
87939
|
+
access: "create"
|
|
87940
|
+
},
|
|
87941
|
+
"storageMigration.cleanupStart": {
|
|
87942
|
+
capName: "storage-migration",
|
|
87943
|
+
capScope: "system",
|
|
87944
|
+
addonId: null,
|
|
87945
|
+
access: "create"
|
|
87946
|
+
},
|
|
87947
|
+
"storageMigration.cleanupStatus": {
|
|
87948
|
+
capName: "storage-migration",
|
|
87949
|
+
capScope: "system",
|
|
87950
|
+
addonId: null,
|
|
87951
|
+
access: "view"
|
|
87952
|
+
},
|
|
87796
87953
|
"storageMigration.drain": {
|
|
87797
87954
|
capName: "storage-migration",
|
|
87798
87955
|
capScope: "system",
|
|
87799
87956
|
addonId: null,
|
|
87800
87957
|
access: "create"
|
|
87801
87958
|
},
|
|
87959
|
+
"storageMigration.history": {
|
|
87960
|
+
capName: "storage-migration",
|
|
87961
|
+
capScope: "system",
|
|
87962
|
+
addonId: null,
|
|
87963
|
+
access: "view"
|
|
87964
|
+
},
|
|
87802
87965
|
"storageMigration.movers": {
|
|
87803
87966
|
capName: "storage-migration",
|
|
87804
87967
|
capScope: "system",
|
|
@@ -89795,11 +89958,6 @@ Object.freeze({
|
|
|
89795
89958
|
form: "single",
|
|
89796
89959
|
optional: true
|
|
89797
89960
|
}],
|
|
89798
|
-
"pipelineAnalytics.getGroup": [{
|
|
89799
|
-
name: "deviceId",
|
|
89800
|
-
form: "single",
|
|
89801
|
-
optional: false
|
|
89802
|
-
}],
|
|
89803
89961
|
"pipelineAnalytics.getKeyEvents": [{
|
|
89804
89962
|
name: "deviceId",
|
|
89805
89963
|
form: "single",
|
|
@@ -89865,11 +90023,6 @@ Object.freeze({
|
|
|
89865
90023
|
form: "single",
|
|
89866
90024
|
optional: false
|
|
89867
90025
|
}],
|
|
89868
|
-
"pipelineAnalytics.listGroups": [{
|
|
89869
|
-
name: "deviceIds",
|
|
89870
|
-
form: "array",
|
|
89871
|
-
optional: false
|
|
89872
|
-
}],
|
|
89873
90026
|
"pipelineAnalytics.listOpsLog": [{
|
|
89874
90027
|
name: "deviceId",
|
|
89875
90028
|
form: "single",
|
|
@@ -89915,6 +90068,11 @@ Object.freeze({
|
|
|
89915
90068
|
form: "single",
|
|
89916
90069
|
optional: true
|
|
89917
90070
|
}],
|
|
90071
|
+
"pipelineAnalytics.reclaimDebugMedia": [{
|
|
90072
|
+
name: "deviceIds",
|
|
90073
|
+
form: "array",
|
|
90074
|
+
optional: true
|
|
90075
|
+
}],
|
|
89918
90076
|
"pipelineAnalytics.reconcileFromDisk": [{
|
|
89919
90077
|
name: "deviceId",
|
|
89920
90078
|
form: "single",
|
|
@@ -90280,6 +90438,11 @@ Object.freeze({
|
|
|
90280
90438
|
form: "single",
|
|
90281
90439
|
optional: false
|
|
90282
90440
|
}],
|
|
90441
|
+
"recording.setDevicePlacement": [{
|
|
90442
|
+
name: "deviceId",
|
|
90443
|
+
form: "single",
|
|
90444
|
+
optional: false
|
|
90445
|
+
}],
|
|
90283
90446
|
"recording.startStorageMigrationMove": [{
|
|
90284
90447
|
name: "deviceId",
|
|
90285
90448
|
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()
|
|
@@ -66319,6 +66397,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
66319
66397
|
"device-offline",
|
|
66320
66398
|
"device-disabled",
|
|
66321
66399
|
"device-enabled",
|
|
66400
|
+
"device-battery-low",
|
|
66401
|
+
"device-battery-normal",
|
|
66322
66402
|
"stream-online",
|
|
66323
66403
|
"stream-offline",
|
|
66324
66404
|
"node-online",
|
|
@@ -69577,46 +69657,6 @@ var RecentTracksPageSchema = object({
|
|
|
69577
69657
|
/** Cursor for the next page, or null when this page is the last. */
|
|
69578
69658
|
nextCursor: string().nullable()
|
|
69579
69659
|
});
|
|
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
69660
|
var KEY_EVENTS_DEFAULT_LIMIT = 50;
|
|
69621
69661
|
var KEY_EVENTS_MAX_LIMIT = 200;
|
|
69622
69662
|
var KeyEventQueryInput = object({
|
|
@@ -69720,9 +69760,7 @@ var TrackCascadeCountsSchema = object({
|
|
|
69720
69760
|
/** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
|
|
69721
69761
|
plates: number().int(),
|
|
69722
69762
|
/** 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()
|
|
69763
|
+
embeddings: number().int()
|
|
69726
69764
|
});
|
|
69727
69765
|
/** Disk-wins reconcile: media rows whose blobs are gone, then empty tracks. */
|
|
69728
69766
|
var DiskReconcileCountsSchema = object({
|
|
@@ -69892,6 +69930,47 @@ var RebuildStatusSchema = object({
|
|
|
69892
69930
|
/** Present when the pass ended by throwing. */
|
|
69893
69931
|
error: string().nullable()
|
|
69894
69932
|
});
|
|
69933
|
+
/**
|
|
69934
|
+
* Acknowledgement that a debug-media reclaim STARTED.
|
|
69935
|
+
*
|
|
69936
|
+
* The pass is paced at ~2 MB/s over a standing 100 GB — tens of minutes — so
|
|
69937
|
+
* it runs detached and this returns immediately. Awaiting it is how the
|
|
69938
|
+
* `addons.custom` door hit the 60 s UDS deadline while the walk carried on
|
|
69939
|
+
* with no status. Poll {@link pipelineAnalyticsCapability.methods.getMediaReclaimStatus}.
|
|
69940
|
+
*/
|
|
69941
|
+
var MediaReclaimStartResultSchema = object({
|
|
69942
|
+
started: boolean(),
|
|
69943
|
+
/** True when a pass was already running; the new request is ignored. */
|
|
69944
|
+
alreadyRunning: boolean()
|
|
69945
|
+
});
|
|
69946
|
+
var MediaReclaimInputSchema = object({
|
|
69947
|
+
mode: _enum(["report", "reclaim"]).default("report"),
|
|
69948
|
+
scopes: array(_enum(["motion-still", "track-filmstrip"])).min(1).optional(),
|
|
69949
|
+
deviceIds: array(number().int()).min(1).optional(),
|
|
69950
|
+
restart: boolean().optional(),
|
|
69951
|
+
pageSize: number().int().min(50).max(5e3).optional(),
|
|
69952
|
+
maxRowsPerDevice: number().int().min(1).max(5e5).optional(),
|
|
69953
|
+
maxReclaimPerDevice: number().int().min(1).max(5e5).optional(),
|
|
69954
|
+
maxBytesPerRun: number().int().min(1).optional(),
|
|
69955
|
+
budgetMinutes: number().int().min(1).max(720).optional(),
|
|
69956
|
+
throttleBytesPerSec: number().int().min(64 * 1024).optional(),
|
|
69957
|
+
graceMinutes: number().int().min(1).max(10080).optional()
|
|
69958
|
+
});
|
|
69959
|
+
var MediaReclaimStatusSchema = object({
|
|
69960
|
+
running: boolean(),
|
|
69961
|
+
mode: _enum(["report", "reclaim"]).nullable(),
|
|
69962
|
+
totalExamined: number(),
|
|
69963
|
+
totalEligible: number(),
|
|
69964
|
+
totalReclaimed: number(),
|
|
69965
|
+
totalBytesReclaimed: number(),
|
|
69966
|
+
totalRefused: number(),
|
|
69967
|
+
/** Device+scope windows finished in this pass. */
|
|
69968
|
+
devicesDone: number(),
|
|
69969
|
+
complete: boolean().nullable(),
|
|
69970
|
+
startedAtMs: number().nullable(),
|
|
69971
|
+
finishedAtMs: number().nullable(),
|
|
69972
|
+
error: string().nullable()
|
|
69973
|
+
});
|
|
69895
69974
|
var ReplayFrameInputSchema = object({
|
|
69896
69975
|
timestamp: number(),
|
|
69897
69976
|
frame: PipelineRunResultBridge
|
|
@@ -69930,10 +70009,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
69930
70009
|
* stationary registry). Default false: the timeline lists passages,
|
|
69931
70010
|
* not parking records (operator decision, 2026-08-15). */
|
|
69932
70011
|
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(), {
|
|
70012
|
+
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
|
|
69937
70013
|
kind: "mutation",
|
|
69938
70014
|
auth: "admin"
|
|
69939
70015
|
}), 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 +70109,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
70033
70109
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
70034
70110
|
kind: "query",
|
|
70035
70111
|
auth: "admin"
|
|
70112
|
+
}), method(MediaReclaimInputSchema, MediaReclaimStartResultSchema, {
|
|
70113
|
+
kind: "mutation",
|
|
70114
|
+
auth: "admin"
|
|
70115
|
+
}), method(object({}), MediaReclaimStatusSchema, {
|
|
70116
|
+
kind: "query",
|
|
70117
|
+
auth: "admin"
|
|
70036
70118
|
}), method(object({ deviceIds: array(number()).optional() }), TrainingExportSummarySchema, {
|
|
70037
70119
|
kind: "query",
|
|
70038
70120
|
auth: "admin"
|
|
@@ -72003,7 +72085,13 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
|
|
|
72003
72085
|
}), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
|
|
72004
72086
|
kind: "mutation",
|
|
72005
72087
|
auth: "admin"
|
|
72006
|
-
})
|
|
72088
|
+
}), method(StorageCleanupInputSchema, object({ jobId: string() }), {
|
|
72089
|
+
kind: "mutation",
|
|
72090
|
+
auth: "admin"
|
|
72091
|
+
}), method(StorageCleanupStatusInputSchema, StorageCleanupJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
72092
|
+
kind: "mutation",
|
|
72093
|
+
auth: "admin"
|
|
72094
|
+
}), method(object({}), array(StorageMigrationJobSchema).readonly(), { auth: "admin" });
|
|
72007
72095
|
var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
72008
72096
|
providerId: string().min(1),
|
|
72009
72097
|
displayName: string().min(1),
|
|
@@ -79121,6 +79209,33 @@ var RecordingRebalanceInputSchema = object({
|
|
|
79121
79209
|
minMoveGb: number().min(0).optional()
|
|
79122
79210
|
});
|
|
79123
79211
|
/**
|
|
79212
|
+
* Operator-facing placement of one camera onto a recordings location.
|
|
79213
|
+
*
|
|
79214
|
+
* `pinLocationId` is the operator instruction: a location id, or `null` for
|
|
79215
|
+
* Auto (the planner may move this camera). `locationId` is where high/mid
|
|
79216
|
+
* currently write — the plan, which may disagree with the pin when Auto.
|
|
79217
|
+
*/
|
|
79218
|
+
var RecordingDevicePlacementSchema = object({
|
|
79219
|
+
deviceId: number().int(),
|
|
79220
|
+
profile: string(),
|
|
79221
|
+
locationId: string()
|
|
79222
|
+
});
|
|
79223
|
+
var RecordingDevicePinSchema = object({
|
|
79224
|
+
deviceId: number().int(),
|
|
79225
|
+
/** Recordings-class location this camera is pinned to. */
|
|
79226
|
+
locationId: string()
|
|
79227
|
+
});
|
|
79228
|
+
var RecordingPlacementViewSchema = object({
|
|
79229
|
+
assignments: array(RecordingDevicePlacementSchema),
|
|
79230
|
+
pins: array(RecordingDevicePinSchema),
|
|
79231
|
+
defaultLocations: record(string(), string())
|
|
79232
|
+
});
|
|
79233
|
+
var RecordingSetDevicePlacementInputSchema = object({
|
|
79234
|
+
deviceId: number().int(),
|
|
79235
|
+
/** `null` = Auto. Otherwise a `recordings:*` location id. */
|
|
79236
|
+
locationId: string().nullable()
|
|
79237
|
+
});
|
|
79238
|
+
/**
|
|
79124
79239
|
* Result of locating footage at a wall-clock instant for one device/profile.
|
|
79125
79240
|
* `segment` carries the covering segment's window; `gap` reports the forward
|
|
79126
79241
|
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
@@ -79346,6 +79461,12 @@ method(object({
|
|
|
79346
79461
|
}), method(RecordingRebalanceInputSchema, RecordingRebalancePlanSchema, {
|
|
79347
79462
|
kind: "mutation",
|
|
79348
79463
|
auth: "admin"
|
|
79464
|
+
}), method(object({}), RecordingPlacementViewSchema, {
|
|
79465
|
+
kind: "query",
|
|
79466
|
+
auth: "admin"
|
|
79467
|
+
}), method(RecordingSetDevicePlacementInputSchema, object({ ok: literal(true) }), {
|
|
79468
|
+
kind: "mutation",
|
|
79469
|
+
auth: "admin"
|
|
79349
79470
|
});
|
|
79350
79471
|
/**
|
|
79351
79472
|
* `recording-export` cap — render a footage time range into a single downloadable
|
|
@@ -84415,6 +84536,12 @@ Object.freeze({
|
|
|
84415
84536
|
addonId: null,
|
|
84416
84537
|
access: "delete"
|
|
84417
84538
|
},
|
|
84539
|
+
"deviceManager.renameLocation": {
|
|
84540
|
+
capName: "device-manager",
|
|
84541
|
+
capScope: "system",
|
|
84542
|
+
addonId: null,
|
|
84543
|
+
access: "create"
|
|
84544
|
+
},
|
|
84418
84545
|
"deviceManager.runDeviceAction": {
|
|
84419
84546
|
capName: "device-manager",
|
|
84420
84547
|
capScope: "system",
|
|
@@ -86107,19 +86234,19 @@ Object.freeze({
|
|
|
86107
86234
|
addonId: null,
|
|
86108
86235
|
access: "view"
|
|
86109
86236
|
},
|
|
86110
|
-
"pipelineAnalytics.
|
|
86237
|
+
"pipelineAnalytics.getKeyEvents": {
|
|
86111
86238
|
capName: "pipeline-analytics",
|
|
86112
86239
|
capScope: "device",
|
|
86113
86240
|
addonId: null,
|
|
86114
86241
|
access: "view"
|
|
86115
86242
|
},
|
|
86116
|
-
"pipelineAnalytics.
|
|
86243
|
+
"pipelineAnalytics.getKeyEventsBatch": {
|
|
86117
86244
|
capName: "pipeline-analytics",
|
|
86118
86245
|
capScope: "device",
|
|
86119
86246
|
addonId: null,
|
|
86120
86247
|
access: "view"
|
|
86121
86248
|
},
|
|
86122
|
-
"pipelineAnalytics.
|
|
86249
|
+
"pipelineAnalytics.getMediaReclaimStatus": {
|
|
86123
86250
|
capName: "pipeline-analytics",
|
|
86124
86251
|
capScope: "device",
|
|
86125
86252
|
addonId: null,
|
|
@@ -86209,12 +86336,6 @@ Object.freeze({
|
|
|
86209
86336
|
addonId: null,
|
|
86210
86337
|
access: "view"
|
|
86211
86338
|
},
|
|
86212
|
-
"pipelineAnalytics.listGroups": {
|
|
86213
|
-
capName: "pipeline-analytics",
|
|
86214
|
-
capScope: "device",
|
|
86215
|
-
addonId: null,
|
|
86216
|
-
access: "view"
|
|
86217
|
-
},
|
|
86218
86339
|
"pipelineAnalytics.listOpsLog": {
|
|
86219
86340
|
capName: "pipeline-analytics",
|
|
86220
86341
|
capScope: "device",
|
|
@@ -86299,6 +86420,12 @@ Object.freeze({
|
|
|
86299
86420
|
addonId: null,
|
|
86300
86421
|
access: "create"
|
|
86301
86422
|
},
|
|
86423
|
+
"pipelineAnalytics.reclaimDebugMedia": {
|
|
86424
|
+
capName: "pipeline-analytics",
|
|
86425
|
+
capScope: "device",
|
|
86426
|
+
addonId: null,
|
|
86427
|
+
access: "create"
|
|
86428
|
+
},
|
|
86302
86429
|
"pipelineAnalytics.reconcileFromDisk": {
|
|
86303
86430
|
capName: "pipeline-analytics",
|
|
86304
86431
|
capScope: "device",
|
|
@@ -87223,6 +87350,12 @@ Object.freeze({
|
|
|
87223
87350
|
addonId: null,
|
|
87224
87351
|
access: "view"
|
|
87225
87352
|
},
|
|
87353
|
+
"recording.getPlacement": {
|
|
87354
|
+
capName: "recording",
|
|
87355
|
+
capScope: "system",
|
|
87356
|
+
addonId: null,
|
|
87357
|
+
access: "view"
|
|
87358
|
+
},
|
|
87226
87359
|
"recording.getPlaybackManifest": {
|
|
87227
87360
|
capName: "recording",
|
|
87228
87361
|
capScope: "system",
|
|
@@ -87349,6 +87482,12 @@ Object.freeze({
|
|
|
87349
87482
|
addonId: null,
|
|
87350
87483
|
access: "create"
|
|
87351
87484
|
},
|
|
87485
|
+
"recording.setDevicePlacement": {
|
|
87486
|
+
capName: "recording",
|
|
87487
|
+
capScope: "system",
|
|
87488
|
+
addonId: null,
|
|
87489
|
+
access: "create"
|
|
87490
|
+
},
|
|
87352
87491
|
"recording.startStorageMigrationMove": {
|
|
87353
87492
|
capName: "recording",
|
|
87354
87493
|
capScope: "system",
|
|
@@ -87793,12 +87932,36 @@ Object.freeze({
|
|
|
87793
87932
|
addonId: null,
|
|
87794
87933
|
access: "create"
|
|
87795
87934
|
},
|
|
87935
|
+
"storageMigration.cleanupCancel": {
|
|
87936
|
+
capName: "storage-migration",
|
|
87937
|
+
capScope: "system",
|
|
87938
|
+
addonId: null,
|
|
87939
|
+
access: "create"
|
|
87940
|
+
},
|
|
87941
|
+
"storageMigration.cleanupStart": {
|
|
87942
|
+
capName: "storage-migration",
|
|
87943
|
+
capScope: "system",
|
|
87944
|
+
addonId: null,
|
|
87945
|
+
access: "create"
|
|
87946
|
+
},
|
|
87947
|
+
"storageMigration.cleanupStatus": {
|
|
87948
|
+
capName: "storage-migration",
|
|
87949
|
+
capScope: "system",
|
|
87950
|
+
addonId: null,
|
|
87951
|
+
access: "view"
|
|
87952
|
+
},
|
|
87796
87953
|
"storageMigration.drain": {
|
|
87797
87954
|
capName: "storage-migration",
|
|
87798
87955
|
capScope: "system",
|
|
87799
87956
|
addonId: null,
|
|
87800
87957
|
access: "create"
|
|
87801
87958
|
},
|
|
87959
|
+
"storageMigration.history": {
|
|
87960
|
+
capName: "storage-migration",
|
|
87961
|
+
capScope: "system",
|
|
87962
|
+
addonId: null,
|
|
87963
|
+
access: "view"
|
|
87964
|
+
},
|
|
87802
87965
|
"storageMigration.movers": {
|
|
87803
87966
|
capName: "storage-migration",
|
|
87804
87967
|
capScope: "system",
|
|
@@ -89795,11 +89958,6 @@ Object.freeze({
|
|
|
89795
89958
|
form: "single",
|
|
89796
89959
|
optional: true
|
|
89797
89960
|
}],
|
|
89798
|
-
"pipelineAnalytics.getGroup": [{
|
|
89799
|
-
name: "deviceId",
|
|
89800
|
-
form: "single",
|
|
89801
|
-
optional: false
|
|
89802
|
-
}],
|
|
89803
89961
|
"pipelineAnalytics.getKeyEvents": [{
|
|
89804
89962
|
name: "deviceId",
|
|
89805
89963
|
form: "single",
|
|
@@ -89865,11 +90023,6 @@ Object.freeze({
|
|
|
89865
90023
|
form: "single",
|
|
89866
90024
|
optional: false
|
|
89867
90025
|
}],
|
|
89868
|
-
"pipelineAnalytics.listGroups": [{
|
|
89869
|
-
name: "deviceIds",
|
|
89870
|
-
form: "array",
|
|
89871
|
-
optional: false
|
|
89872
|
-
}],
|
|
89873
90026
|
"pipelineAnalytics.listOpsLog": [{
|
|
89874
90027
|
name: "deviceId",
|
|
89875
90028
|
form: "single",
|
|
@@ -89915,6 +90068,11 @@ Object.freeze({
|
|
|
89915
90068
|
form: "single",
|
|
89916
90069
|
optional: true
|
|
89917
90070
|
}],
|
|
90071
|
+
"pipelineAnalytics.reclaimDebugMedia": [{
|
|
90072
|
+
name: "deviceIds",
|
|
90073
|
+
form: "array",
|
|
90074
|
+
optional: true
|
|
90075
|
+
}],
|
|
89918
90076
|
"pipelineAnalytics.reconcileFromDisk": [{
|
|
89919
90077
|
name: "deviceId",
|
|
89920
90078
|
form: "single",
|
|
@@ -90280,6 +90438,11 @@ Object.freeze({
|
|
|
90280
90438
|
form: "single",
|
|
90281
90439
|
optional: false
|
|
90282
90440
|
}],
|
|
90441
|
+
"recording.setDevicePlacement": [{
|
|
90442
|
+
name: "deviceId",
|
|
90443
|
+
form: "single",
|
|
90444
|
+
optional: false
|
|
90445
|
+
}],
|
|
90283
90446
|
"recording.startStorageMigrationMove": [{
|
|
90284
90447
|
name: "deviceId",
|
|
90285
90448
|
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.51",
|
|
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",
|