@camstack/addon-decoder-ffmpeg 1.2.49 → 1.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/index.js +234 -73
- package/dist/index.mjs +234 -73
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -8097,6 +8097,13 @@ var MediaRelocateModeSchema = _enum([
|
|
|
8097
8097
|
]);
|
|
8098
8098
|
var RelocateMediaInputSchema = object({
|
|
8099
8099
|
toLocationId: string(),
|
|
8100
|
+
/**
|
|
8101
|
+
* Restrict the pass to rows currently on this location. Omitted / `'*'` =
|
|
8102
|
+
* every row that is not already on `toLocationId` (the historical
|
|
8103
|
+
* behaviour). A named source is what a from→to migration needs: without it
|
|
8104
|
+
* "move events off disk 2" also emptied disk 1.
|
|
8105
|
+
*/
|
|
8106
|
+
fromLocationId: string().optional(),
|
|
8100
8107
|
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8101
8108
|
/** Omitted = `move`, the pre-existing behaviour. */
|
|
8102
8109
|
mode: MediaRelocateModeSchema.optional()
|
|
@@ -8164,6 +8171,19 @@ var StorageMigrationDestinationsSchema = object({
|
|
|
8164
8171
|
galleryMedia: string().min(1).optional()
|
|
8165
8172
|
}).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
|
|
8166
8173
|
/**
|
|
8174
|
+
* Optional named source per class. Omitted = the class's current default
|
|
8175
|
+
* (the historical behaviour). A named source that is NOT the default is a
|
|
8176
|
+
* drain of that disk: bytes move, the default stays, and the source is
|
|
8177
|
+
* disabled when the move finishes.
|
|
8178
|
+
*/
|
|
8179
|
+
var StorageMigrationSourcesSchema = object({
|
|
8180
|
+
recordings: string().min(1).optional(),
|
|
8181
|
+
recordingsLow: string().min(1).optional(),
|
|
8182
|
+
eventMedia: string().min(1).optional(),
|
|
8183
|
+
backups: string().min(1).optional(),
|
|
8184
|
+
galleryMedia: string().min(1).optional()
|
|
8185
|
+
}).optional();
|
|
8186
|
+
/**
|
|
8167
8187
|
* How a migration sequences the cutover against the byte move.
|
|
8168
8188
|
*
|
|
8169
8189
|
* - `blocking` — the historical order: pause, move every byte, repoint,
|
|
@@ -8185,6 +8205,8 @@ var StorageMigrationModeSchema = _enum(["blocking", "nonBlocking"]);
|
|
|
8185
8205
|
/** Shared input for planning and starting an orchestrated storage migration. */
|
|
8186
8206
|
var StorageMigrationInputSchema = object({
|
|
8187
8207
|
destinations: StorageMigrationDestinationsSchema,
|
|
8208
|
+
/** Omitted = each class's current default. */
|
|
8209
|
+
sources: StorageMigrationSourcesSchema,
|
|
8188
8210
|
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8189
8211
|
/** Omitted = `blocking`, which stays the default. */
|
|
8190
8212
|
mode: StorageMigrationModeSchema.optional()
|
|
@@ -8264,6 +8286,13 @@ var StorageMigrationMoveSchema = object({
|
|
|
8264
8286
|
storageClass: StorageMigrationClassSchema,
|
|
8265
8287
|
fromLocationId: string(),
|
|
8266
8288
|
toLocationId: string(),
|
|
8289
|
+
/**
|
|
8290
|
+
* True when `from` was NOT the class default at plan time. The move still
|
|
8291
|
+
* copies bytes, but the default is left alone and the source is disabled
|
|
8292
|
+
* once the copy verifies. Absent on jobs planned before this field existed
|
|
8293
|
+
* — those jobs always repointed, which is `false`.
|
|
8294
|
+
*/
|
|
8295
|
+
freezeSource: boolean().optional(),
|
|
8267
8296
|
moverJobId: string().nullable(),
|
|
8268
8297
|
state: RelocateJobStateSchema.nullable(),
|
|
8269
8298
|
error: string().nullable(),
|
|
@@ -8277,6 +8306,7 @@ var StorageMigrationJobSchema = object({
|
|
|
8277
8306
|
* can tell a seconds-long cutover from a thirty-hour one. */
|
|
8278
8307
|
mode: StorageMigrationModeSchema,
|
|
8279
8308
|
destinations: StorageMigrationDestinationsSchema,
|
|
8309
|
+
sources: StorageMigrationSourcesSchema,
|
|
8280
8310
|
throttleMbps: number(),
|
|
8281
8311
|
moves: array(StorageMigrationMoveSchema),
|
|
8282
8312
|
pauseLeaseId: string().nullable(),
|
|
@@ -8302,6 +8332,7 @@ var StorageMigrationFindingSchema = object({
|
|
|
8302
8332
|
});
|
|
8303
8333
|
var StorageMigrationPlanSchema = object({
|
|
8304
8334
|
destinations: StorageMigrationDestinationsSchema,
|
|
8335
|
+
sources: StorageMigrationSourcesSchema,
|
|
8305
8336
|
/** The mode this plan was built for. A plan is only valid for its mode: the
|
|
8306
8337
|
* `eventMedia` seal gate and the single-cardinality refusal both depend on
|
|
8307
8338
|
* it. */
|
|
@@ -8309,7 +8340,8 @@ var StorageMigrationPlanSchema = object({
|
|
|
8309
8340
|
moves: array(object({
|
|
8310
8341
|
storageClass: StorageMigrationClassSchema,
|
|
8311
8342
|
fromLocationId: string(),
|
|
8312
|
-
toLocationId: string()
|
|
8343
|
+
toLocationId: string(),
|
|
8344
|
+
freezeSource: boolean().optional()
|
|
8313
8345
|
})),
|
|
8314
8346
|
findings: array(StorageMigrationFindingSchema)
|
|
8315
8347
|
});
|
|
@@ -8487,10 +8519,51 @@ var LedgerWalkReportSchema = object({
|
|
|
8487
8519
|
var RelocatableMediaCountSchema = object({ rows: number().int().nonnegative() }).nullable();
|
|
8488
8520
|
var RelocatableMediaCountInputSchema = object({
|
|
8489
8521
|
toLocationId: string().min(1),
|
|
8522
|
+
/** Restrict the count to one source; omitted / `'*'` = every non-target row. */
|
|
8523
|
+
fromLocationId: string().optional(),
|
|
8490
8524
|
/** Omitted = `move`. */
|
|
8491
8525
|
mode: MediaRelocateModeSchema.optional()
|
|
8492
8526
|
});
|
|
8493
8527
|
/**
|
|
8528
|
+
* Operator cleanup of leftover analytics rows, optional debug media, and
|
|
8529
|
+
* ghost ledger entries on frozen footage locations.
|
|
8530
|
+
*
|
|
8531
|
+
* A pass is tens of minutes on a standing backlog. The hub method RETURNS
|
|
8532
|
+
* `{ jobId }` immediately; progress is `cleanupStatus`. Awaiting the work
|
|
8533
|
+
* is how `addons.custom` hit the 60 s UDS deadline while reclaim continued
|
|
8534
|
+
* with no operator-visible status.
|
|
8535
|
+
*/
|
|
8536
|
+
var StorageCleanupPhaseSchema = _enum([
|
|
8537
|
+
"orphans",
|
|
8538
|
+
"debug-media",
|
|
8539
|
+
"ghost-ledger",
|
|
8540
|
+
"done",
|
|
8541
|
+
"failed",
|
|
8542
|
+
"cancelled"
|
|
8543
|
+
]);
|
|
8544
|
+
var StorageCleanupInputSchema = object({
|
|
8545
|
+
/** Also walk motion stills / track filmstrips. Off by default. */
|
|
8546
|
+
includeDebugMedia: boolean().optional() });
|
|
8547
|
+
var StorageCleanupJobSchema = object({
|
|
8548
|
+
jobId: string(),
|
|
8549
|
+
phase: StorageCleanupPhaseSchema,
|
|
8550
|
+
includeDebugMedia: boolean(),
|
|
8551
|
+
orphansReclaimed: number().int().nonnegative(),
|
|
8552
|
+
orphanBytesReclaimed: number().int().nonnegative(),
|
|
8553
|
+
debugMediaReclaimed: number().int().nonnegative(),
|
|
8554
|
+
debugMediaBytesReclaimed: number().int().nonnegative(),
|
|
8555
|
+
ghostsForgotten: number().int().nonnegative(),
|
|
8556
|
+
ghostBytesForgotten: number().int().nonnegative(),
|
|
8557
|
+
/** Short operator-facing line: current collection, pass, or location. */
|
|
8558
|
+
detail: string().nullable(),
|
|
8559
|
+
cancelRequested: boolean(),
|
|
8560
|
+
startedAt: number(),
|
|
8561
|
+
updatedAt: number(),
|
|
8562
|
+
finishedAt: number().nullable(),
|
|
8563
|
+
error: string().nullable()
|
|
8564
|
+
});
|
|
8565
|
+
var StorageCleanupStatusInputSchema = object({ jobId: string().optional() });
|
|
8566
|
+
/**
|
|
8494
8567
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
8495
8568
|
* storage a location serves. Defined here (not in `capabilities/storage.cap.ts`)
|
|
8496
8569
|
* so the persisted record schema and the consumer-facing cap can both consume it
|
|
@@ -8518,11 +8591,10 @@ var StorageLocationTypeSchema = string().regex(/^[a-z][a-zA-Z0-9-]*$/);
|
|
|
8518
8591
|
* The default location for a type uses `id === <type>:default` by
|
|
8519
8592
|
* convention (the bare type ref like `'backups'` resolves to it).
|
|
8520
8593
|
*
|
|
8521
|
-
* `isSystem
|
|
8522
|
-
*
|
|
8523
|
-
*
|
|
8524
|
-
*
|
|
8525
|
-
* deleting it is rejected at the cap level.
|
|
8594
|
+
* `isSystem` is a legacy persisted flag. Seed still creates the initial
|
|
8595
|
+
* `<type>:default` locations; the flag is no longer a lock, a badge, or a
|
|
8596
|
+
* prune selector. New writes leave it false. Deletion is gated on uniqueness
|
|
8597
|
+
* / last-enabled, not on this bit.
|
|
8526
8598
|
*/
|
|
8527
8599
|
var StorageLocationSchema = object({
|
|
8528
8600
|
id: string().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/),
|
|
@@ -12914,6 +12986,12 @@ method(object({
|
|
|
12914
12986
|
}), _void(), {
|
|
12915
12987
|
kind: "mutation",
|
|
12916
12988
|
auth: "admin"
|
|
12989
|
+
}), method(object({
|
|
12990
|
+
from: string(),
|
|
12991
|
+
to: string()
|
|
12992
|
+
}), object({ moved: number() }), {
|
|
12993
|
+
kind: "mutation",
|
|
12994
|
+
auth: "admin"
|
|
12917
12995
|
}), method(object({
|
|
12918
12996
|
deviceId: number(),
|
|
12919
12997
|
disabled: boolean()
|
|
@@ -18844,46 +18922,6 @@ var RecentTracksPageSchema = object({
|
|
|
18844
18922
|
/** Cursor for the next page, or null when this page is the last. */
|
|
18845
18923
|
nextCursor: string().nullable()
|
|
18846
18924
|
});
|
|
18847
|
-
var LIST_GROUPS_DEFAULT_LIMIT = 40;
|
|
18848
|
-
var LIST_GROUPS_MAX_LIMIT = 100;
|
|
18849
|
-
var AnalyticsGroupRecordSchema = object({
|
|
18850
|
-
id: string(),
|
|
18851
|
-
deviceId: number().int(),
|
|
18852
|
-
openedAt: number().int(),
|
|
18853
|
-
closedAt: number().int(),
|
|
18854
|
-
timestamp: number().int(),
|
|
18855
|
-
memberCount: number().int(),
|
|
18856
|
-
memberTrackIds: array(string()).readonly(),
|
|
18857
|
-
className: string(),
|
|
18858
|
-
classes: array(string()).readonly(),
|
|
18859
|
-
/** Relative event-media path, or null when the group has no picture yet. */
|
|
18860
|
-
mediaUrl: string().nullable(),
|
|
18861
|
-
singleton: boolean()
|
|
18862
|
-
});
|
|
18863
|
-
var AnalyticsGroupMemberSchema = object({
|
|
18864
|
-
trackId: string(),
|
|
18865
|
-
deviceId: number().int(),
|
|
18866
|
-
className: string(),
|
|
18867
|
-
firstSeen: number().int(),
|
|
18868
|
-
lastSeen: number().int(),
|
|
18869
|
-
mediaUrl: string().nullable()
|
|
18870
|
-
});
|
|
18871
|
-
var AnalyticsGroupDetailSchema = AnalyticsGroupRecordSchema.extend({ members: array(AnalyticsGroupMemberSchema).readonly() });
|
|
18872
|
-
var ListGroupsQueryInput = object({
|
|
18873
|
-
/** Devices to merge. An empty array yields `{ groups: [], nextCursor: null }`. */
|
|
18874
|
-
deviceIds: array(number()),
|
|
18875
|
-
/** Window lower bound on `closedAt` (inclusive). */
|
|
18876
|
-
since: number().optional(),
|
|
18877
|
-
/** Window upper bound on `openedAt` (inclusive). */
|
|
18878
|
-
until: number().optional(),
|
|
18879
|
-
limit: number().int().min(1).max(LIST_GROUPS_MAX_LIMIT).default(LIST_GROUPS_DEFAULT_LIMIT),
|
|
18880
|
-
/** Opaque continuation cursor from a previous page's `nextCursor`. */
|
|
18881
|
-
cursor: string().optional()
|
|
18882
|
-
});
|
|
18883
|
-
var ListGroupsPageSchema = object({
|
|
18884
|
-
groups: array(AnalyticsGroupRecordSchema).readonly(),
|
|
18885
|
-
nextCursor: string().nullable()
|
|
18886
|
-
});
|
|
18887
18925
|
var KEY_EVENTS_DEFAULT_LIMIT = 50;
|
|
18888
18926
|
var KEY_EVENTS_MAX_LIMIT = 200;
|
|
18889
18927
|
var KeyEventQueryInput = object({
|
|
@@ -18987,9 +19025,7 @@ var TrackCascadeCountsSchema = object({
|
|
|
18987
19025
|
/** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
|
|
18988
19026
|
plates: number().int(),
|
|
18989
19027
|
/** Per-track CLIP search vectors removed (best-effort). */
|
|
18990
|
-
embeddings: number().int()
|
|
18991
|
-
/** Group membership + group rows removed with their last member (best-effort). */
|
|
18992
|
-
groups: number().int()
|
|
19028
|
+
embeddings: number().int()
|
|
18993
19029
|
});
|
|
18994
19030
|
/** Disk-wins reconcile: media rows whose blobs are gone, then empty tracks. */
|
|
18995
19031
|
var DiskReconcileCountsSchema = object({
|
|
@@ -19159,6 +19195,47 @@ var RebuildStatusSchema = object({
|
|
|
19159
19195
|
/** Present when the pass ended by throwing. */
|
|
19160
19196
|
error: string().nullable()
|
|
19161
19197
|
});
|
|
19198
|
+
/**
|
|
19199
|
+
* Acknowledgement that a debug-media reclaim STARTED.
|
|
19200
|
+
*
|
|
19201
|
+
* The pass is paced at ~2 MB/s over a standing 100 GB — tens of minutes — so
|
|
19202
|
+
* it runs detached and this returns immediately. Awaiting it is how the
|
|
19203
|
+
* `addons.custom` door hit the 60 s UDS deadline while the walk carried on
|
|
19204
|
+
* with no status. Poll {@link pipelineAnalyticsCapability.methods.getMediaReclaimStatus}.
|
|
19205
|
+
*/
|
|
19206
|
+
var MediaReclaimStartResultSchema = object({
|
|
19207
|
+
started: boolean(),
|
|
19208
|
+
/** True when a pass was already running; the new request is ignored. */
|
|
19209
|
+
alreadyRunning: boolean()
|
|
19210
|
+
});
|
|
19211
|
+
var MediaReclaimInputSchema = object({
|
|
19212
|
+
mode: _enum(["report", "reclaim"]).default("report"),
|
|
19213
|
+
scopes: array(_enum(["motion-still", "track-filmstrip"])).min(1).optional(),
|
|
19214
|
+
deviceIds: array(number().int()).min(1).optional(),
|
|
19215
|
+
restart: boolean().optional(),
|
|
19216
|
+
pageSize: number().int().min(50).max(5e3).optional(),
|
|
19217
|
+
maxRowsPerDevice: number().int().min(1).max(5e5).optional(),
|
|
19218
|
+
maxReclaimPerDevice: number().int().min(1).max(5e5).optional(),
|
|
19219
|
+
maxBytesPerRun: number().int().min(1).optional(),
|
|
19220
|
+
budgetMinutes: number().int().min(1).max(720).optional(),
|
|
19221
|
+
throttleBytesPerSec: number().int().min(64 * 1024).optional(),
|
|
19222
|
+
graceMinutes: number().int().min(1).max(10080).optional()
|
|
19223
|
+
});
|
|
19224
|
+
var MediaReclaimStatusSchema = object({
|
|
19225
|
+
running: boolean(),
|
|
19226
|
+
mode: _enum(["report", "reclaim"]).nullable(),
|
|
19227
|
+
totalExamined: number(),
|
|
19228
|
+
totalEligible: number(),
|
|
19229
|
+
totalReclaimed: number(),
|
|
19230
|
+
totalBytesReclaimed: number(),
|
|
19231
|
+
totalRefused: number(),
|
|
19232
|
+
/** Device+scope windows finished in this pass. */
|
|
19233
|
+
devicesDone: number(),
|
|
19234
|
+
complete: boolean().nullable(),
|
|
19235
|
+
startedAtMs: number().nullable(),
|
|
19236
|
+
finishedAtMs: number().nullable(),
|
|
19237
|
+
error: string().nullable()
|
|
19238
|
+
});
|
|
19162
19239
|
var ReplayFrameInputSchema = object({
|
|
19163
19240
|
timestamp: number(),
|
|
19164
19241
|
frame: PipelineRunResultBridge
|
|
@@ -19197,10 +19274,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19197
19274
|
* stationary registry). Default false: the timeline lists passages,
|
|
19198
19275
|
* not parking records (operator decision, 2026-08-15). */
|
|
19199
19276
|
includeStationary: boolean().optional()
|
|
19200
|
-
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(
|
|
19201
|
-
deviceId: number(),
|
|
19202
|
-
groupId: string().min(1)
|
|
19203
|
-
}), AnalyticsGroupDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
|
|
19277
|
+
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
|
|
19204
19278
|
kind: "mutation",
|
|
19205
19279
|
auth: "admin"
|
|
19206
19280
|
}), 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({
|
|
@@ -19300,6 +19374,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19300
19374
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
19301
19375
|
kind: "query",
|
|
19302
19376
|
auth: "admin"
|
|
19377
|
+
}), method(MediaReclaimInputSchema, MediaReclaimStartResultSchema, {
|
|
19378
|
+
kind: "mutation",
|
|
19379
|
+
auth: "admin"
|
|
19380
|
+
}), method(object({}), MediaReclaimStatusSchema, {
|
|
19381
|
+
kind: "query",
|
|
19382
|
+
auth: "admin"
|
|
19303
19383
|
}), method(object({ deviceIds: array(number()).optional() }), TrainingExportSummarySchema, {
|
|
19304
19384
|
kind: "query",
|
|
19305
19385
|
auth: "admin"
|
|
@@ -21270,7 +21350,13 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
|
|
|
21270
21350
|
}), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
|
|
21271
21351
|
kind: "mutation",
|
|
21272
21352
|
auth: "admin"
|
|
21273
|
-
})
|
|
21353
|
+
}), method(StorageCleanupInputSchema, object({ jobId: string() }), {
|
|
21354
|
+
kind: "mutation",
|
|
21355
|
+
auth: "admin"
|
|
21356
|
+
}), method(StorageCleanupStatusInputSchema, StorageCleanupJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
21357
|
+
kind: "mutation",
|
|
21358
|
+
auth: "admin"
|
|
21359
|
+
}), method(object({}), array(StorageMigrationJobSchema).readonly(), { auth: "admin" });
|
|
21274
21360
|
var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
21275
21361
|
providerId: string().min(1),
|
|
21276
21362
|
displayName: string().min(1),
|
|
@@ -26648,6 +26734,33 @@ var RecordingRebalanceInputSchema = object({
|
|
|
26648
26734
|
minMoveGb: number().min(0).optional()
|
|
26649
26735
|
});
|
|
26650
26736
|
/**
|
|
26737
|
+
* Operator-facing placement of one camera onto a recordings location.
|
|
26738
|
+
*
|
|
26739
|
+
* `pinLocationId` is the operator instruction: a location id, or `null` for
|
|
26740
|
+
* Auto (the planner may move this camera). `locationId` is where high/mid
|
|
26741
|
+
* currently write — the plan, which may disagree with the pin when Auto.
|
|
26742
|
+
*/
|
|
26743
|
+
var RecordingDevicePlacementSchema = object({
|
|
26744
|
+
deviceId: number().int(),
|
|
26745
|
+
profile: string(),
|
|
26746
|
+
locationId: string()
|
|
26747
|
+
});
|
|
26748
|
+
var RecordingDevicePinSchema = object({
|
|
26749
|
+
deviceId: number().int(),
|
|
26750
|
+
/** Recordings-class location this camera is pinned to. */
|
|
26751
|
+
locationId: string()
|
|
26752
|
+
});
|
|
26753
|
+
var RecordingPlacementViewSchema = object({
|
|
26754
|
+
assignments: array(RecordingDevicePlacementSchema),
|
|
26755
|
+
pins: array(RecordingDevicePinSchema),
|
|
26756
|
+
defaultLocations: record(string(), string())
|
|
26757
|
+
});
|
|
26758
|
+
var RecordingSetDevicePlacementInputSchema = object({
|
|
26759
|
+
deviceId: number().int(),
|
|
26760
|
+
/** `null` = Auto. Otherwise a `recordings:*` location id. */
|
|
26761
|
+
locationId: string().nullable()
|
|
26762
|
+
});
|
|
26763
|
+
/**
|
|
26651
26764
|
* Result of locating footage at a wall-clock instant for one device/profile.
|
|
26652
26765
|
* `segment` carries the covering segment's window; `gap` reports the forward
|
|
26653
26766
|
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
@@ -26873,6 +26986,12 @@ method(object({
|
|
|
26873
26986
|
}), method(RecordingRebalanceInputSchema, RecordingRebalancePlanSchema, {
|
|
26874
26987
|
kind: "mutation",
|
|
26875
26988
|
auth: "admin"
|
|
26989
|
+
}), method(object({}), RecordingPlacementViewSchema, {
|
|
26990
|
+
kind: "query",
|
|
26991
|
+
auth: "admin"
|
|
26992
|
+
}), method(RecordingSetDevicePlacementInputSchema, object({ ok: literal(true) }), {
|
|
26993
|
+
kind: "mutation",
|
|
26994
|
+
auth: "admin"
|
|
26876
26995
|
});
|
|
26877
26996
|
/**
|
|
26878
26997
|
* `recording-export` cap — render a footage time range into a single downloadable
|
|
@@ -30243,6 +30362,12 @@ Object.freeze({
|
|
|
30243
30362
|
addonId: null,
|
|
30244
30363
|
access: "delete"
|
|
30245
30364
|
},
|
|
30365
|
+
"deviceManager.renameLocation": {
|
|
30366
|
+
capName: "device-manager",
|
|
30367
|
+
capScope: "system",
|
|
30368
|
+
addonId: null,
|
|
30369
|
+
access: "create"
|
|
30370
|
+
},
|
|
30246
30371
|
"deviceManager.runDeviceAction": {
|
|
30247
30372
|
capName: "device-manager",
|
|
30248
30373
|
capScope: "system",
|
|
@@ -31935,19 +32060,19 @@ Object.freeze({
|
|
|
31935
32060
|
addonId: null,
|
|
31936
32061
|
access: "view"
|
|
31937
32062
|
},
|
|
31938
|
-
"pipelineAnalytics.
|
|
32063
|
+
"pipelineAnalytics.getKeyEvents": {
|
|
31939
32064
|
capName: "pipeline-analytics",
|
|
31940
32065
|
capScope: "device",
|
|
31941
32066
|
addonId: null,
|
|
31942
32067
|
access: "view"
|
|
31943
32068
|
},
|
|
31944
|
-
"pipelineAnalytics.
|
|
32069
|
+
"pipelineAnalytics.getKeyEventsBatch": {
|
|
31945
32070
|
capName: "pipeline-analytics",
|
|
31946
32071
|
capScope: "device",
|
|
31947
32072
|
addonId: null,
|
|
31948
32073
|
access: "view"
|
|
31949
32074
|
},
|
|
31950
|
-
"pipelineAnalytics.
|
|
32075
|
+
"pipelineAnalytics.getMediaReclaimStatus": {
|
|
31951
32076
|
capName: "pipeline-analytics",
|
|
31952
32077
|
capScope: "device",
|
|
31953
32078
|
addonId: null,
|
|
@@ -32037,12 +32162,6 @@ Object.freeze({
|
|
|
32037
32162
|
addonId: null,
|
|
32038
32163
|
access: "view"
|
|
32039
32164
|
},
|
|
32040
|
-
"pipelineAnalytics.listGroups": {
|
|
32041
|
-
capName: "pipeline-analytics",
|
|
32042
|
-
capScope: "device",
|
|
32043
|
-
addonId: null,
|
|
32044
|
-
access: "view"
|
|
32045
|
-
},
|
|
32046
32165
|
"pipelineAnalytics.listOpsLog": {
|
|
32047
32166
|
capName: "pipeline-analytics",
|
|
32048
32167
|
capScope: "device",
|
|
@@ -32127,6 +32246,12 @@ Object.freeze({
|
|
|
32127
32246
|
addonId: null,
|
|
32128
32247
|
access: "create"
|
|
32129
32248
|
},
|
|
32249
|
+
"pipelineAnalytics.reclaimDebugMedia": {
|
|
32250
|
+
capName: "pipeline-analytics",
|
|
32251
|
+
capScope: "device",
|
|
32252
|
+
addonId: null,
|
|
32253
|
+
access: "create"
|
|
32254
|
+
},
|
|
32130
32255
|
"pipelineAnalytics.reconcileFromDisk": {
|
|
32131
32256
|
capName: "pipeline-analytics",
|
|
32132
32257
|
capScope: "device",
|
|
@@ -33051,6 +33176,12 @@ Object.freeze({
|
|
|
33051
33176
|
addonId: null,
|
|
33052
33177
|
access: "view"
|
|
33053
33178
|
},
|
|
33179
|
+
"recording.getPlacement": {
|
|
33180
|
+
capName: "recording",
|
|
33181
|
+
capScope: "system",
|
|
33182
|
+
addonId: null,
|
|
33183
|
+
access: "view"
|
|
33184
|
+
},
|
|
33054
33185
|
"recording.getPlaybackManifest": {
|
|
33055
33186
|
capName: "recording",
|
|
33056
33187
|
capScope: "system",
|
|
@@ -33177,6 +33308,12 @@ Object.freeze({
|
|
|
33177
33308
|
addonId: null,
|
|
33178
33309
|
access: "create"
|
|
33179
33310
|
},
|
|
33311
|
+
"recording.setDevicePlacement": {
|
|
33312
|
+
capName: "recording",
|
|
33313
|
+
capScope: "system",
|
|
33314
|
+
addonId: null,
|
|
33315
|
+
access: "create"
|
|
33316
|
+
},
|
|
33180
33317
|
"recording.startStorageMigrationMove": {
|
|
33181
33318
|
capName: "recording",
|
|
33182
33319
|
capScope: "system",
|
|
@@ -33621,12 +33758,36 @@ Object.freeze({
|
|
|
33621
33758
|
addonId: null,
|
|
33622
33759
|
access: "create"
|
|
33623
33760
|
},
|
|
33761
|
+
"storageMigration.cleanupCancel": {
|
|
33762
|
+
capName: "storage-migration",
|
|
33763
|
+
capScope: "system",
|
|
33764
|
+
addonId: null,
|
|
33765
|
+
access: "create"
|
|
33766
|
+
},
|
|
33767
|
+
"storageMigration.cleanupStart": {
|
|
33768
|
+
capName: "storage-migration",
|
|
33769
|
+
capScope: "system",
|
|
33770
|
+
addonId: null,
|
|
33771
|
+
access: "create"
|
|
33772
|
+
},
|
|
33773
|
+
"storageMigration.cleanupStatus": {
|
|
33774
|
+
capName: "storage-migration",
|
|
33775
|
+
capScope: "system",
|
|
33776
|
+
addonId: null,
|
|
33777
|
+
access: "view"
|
|
33778
|
+
},
|
|
33624
33779
|
"storageMigration.drain": {
|
|
33625
33780
|
capName: "storage-migration",
|
|
33626
33781
|
capScope: "system",
|
|
33627
33782
|
addonId: null,
|
|
33628
33783
|
access: "create"
|
|
33629
33784
|
},
|
|
33785
|
+
"storageMigration.history": {
|
|
33786
|
+
capName: "storage-migration",
|
|
33787
|
+
capScope: "system",
|
|
33788
|
+
addonId: null,
|
|
33789
|
+
access: "view"
|
|
33790
|
+
},
|
|
33630
33791
|
"storageMigration.movers": {
|
|
33631
33792
|
capName: "storage-migration",
|
|
33632
33793
|
capScope: "system",
|
|
@@ -35623,11 +35784,6 @@ Object.freeze({
|
|
|
35623
35784
|
form: "single",
|
|
35624
35785
|
optional: true
|
|
35625
35786
|
}],
|
|
35626
|
-
"pipelineAnalytics.getGroup": [{
|
|
35627
|
-
name: "deviceId",
|
|
35628
|
-
form: "single",
|
|
35629
|
-
optional: false
|
|
35630
|
-
}],
|
|
35631
35787
|
"pipelineAnalytics.getKeyEvents": [{
|
|
35632
35788
|
name: "deviceId",
|
|
35633
35789
|
form: "single",
|
|
@@ -35693,11 +35849,6 @@ Object.freeze({
|
|
|
35693
35849
|
form: "single",
|
|
35694
35850
|
optional: false
|
|
35695
35851
|
}],
|
|
35696
|
-
"pipelineAnalytics.listGroups": [{
|
|
35697
|
-
name: "deviceIds",
|
|
35698
|
-
form: "array",
|
|
35699
|
-
optional: false
|
|
35700
|
-
}],
|
|
35701
35852
|
"pipelineAnalytics.listOpsLog": [{
|
|
35702
35853
|
name: "deviceId",
|
|
35703
35854
|
form: "single",
|
|
@@ -35743,6 +35894,11 @@ Object.freeze({
|
|
|
35743
35894
|
form: "single",
|
|
35744
35895
|
optional: true
|
|
35745
35896
|
}],
|
|
35897
|
+
"pipelineAnalytics.reclaimDebugMedia": [{
|
|
35898
|
+
name: "deviceIds",
|
|
35899
|
+
form: "array",
|
|
35900
|
+
optional: true
|
|
35901
|
+
}],
|
|
35746
35902
|
"pipelineAnalytics.reconcileFromDisk": [{
|
|
35747
35903
|
name: "deviceId",
|
|
35748
35904
|
form: "single",
|
|
@@ -36108,6 +36264,11 @@ Object.freeze({
|
|
|
36108
36264
|
form: "single",
|
|
36109
36265
|
optional: false
|
|
36110
36266
|
}],
|
|
36267
|
+
"recording.setDevicePlacement": [{
|
|
36268
|
+
name: "deviceId",
|
|
36269
|
+
form: "single",
|
|
36270
|
+
optional: false
|
|
36271
|
+
}],
|
|
36111
36272
|
"recording.startStorageMigrationMove": [{
|
|
36112
36273
|
name: "deviceId",
|
|
36113
36274
|
form: "single",
|
package/dist/index.mjs
CHANGED
|
@@ -8093,6 +8093,13 @@ var MediaRelocateModeSchema = _enum([
|
|
|
8093
8093
|
]);
|
|
8094
8094
|
var RelocateMediaInputSchema = object({
|
|
8095
8095
|
toLocationId: string(),
|
|
8096
|
+
/**
|
|
8097
|
+
* Restrict the pass to rows currently on this location. Omitted / `'*'` =
|
|
8098
|
+
* every row that is not already on `toLocationId` (the historical
|
|
8099
|
+
* behaviour). A named source is what a from→to migration needs: without it
|
|
8100
|
+
* "move events off disk 2" also emptied disk 1.
|
|
8101
|
+
*/
|
|
8102
|
+
fromLocationId: string().optional(),
|
|
8096
8103
|
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8097
8104
|
/** Omitted = `move`, the pre-existing behaviour. */
|
|
8098
8105
|
mode: MediaRelocateModeSchema.optional()
|
|
@@ -8160,6 +8167,19 @@ var StorageMigrationDestinationsSchema = object({
|
|
|
8160
8167
|
galleryMedia: string().min(1).optional()
|
|
8161
8168
|
}).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
|
|
8162
8169
|
/**
|
|
8170
|
+
* Optional named source per class. Omitted = the class's current default
|
|
8171
|
+
* (the historical behaviour). A named source that is NOT the default is a
|
|
8172
|
+
* drain of that disk: bytes move, the default stays, and the source is
|
|
8173
|
+
* disabled when the move finishes.
|
|
8174
|
+
*/
|
|
8175
|
+
var StorageMigrationSourcesSchema = object({
|
|
8176
|
+
recordings: string().min(1).optional(),
|
|
8177
|
+
recordingsLow: string().min(1).optional(),
|
|
8178
|
+
eventMedia: string().min(1).optional(),
|
|
8179
|
+
backups: string().min(1).optional(),
|
|
8180
|
+
galleryMedia: string().min(1).optional()
|
|
8181
|
+
}).optional();
|
|
8182
|
+
/**
|
|
8163
8183
|
* How a migration sequences the cutover against the byte move.
|
|
8164
8184
|
*
|
|
8165
8185
|
* - `blocking` — the historical order: pause, move every byte, repoint,
|
|
@@ -8181,6 +8201,8 @@ var StorageMigrationModeSchema = _enum(["blocking", "nonBlocking"]);
|
|
|
8181
8201
|
/** Shared input for planning and starting an orchestrated storage migration. */
|
|
8182
8202
|
var StorageMigrationInputSchema = object({
|
|
8183
8203
|
destinations: StorageMigrationDestinationsSchema,
|
|
8204
|
+
/** Omitted = each class's current default. */
|
|
8205
|
+
sources: StorageMigrationSourcesSchema,
|
|
8184
8206
|
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8185
8207
|
/** Omitted = `blocking`, which stays the default. */
|
|
8186
8208
|
mode: StorageMigrationModeSchema.optional()
|
|
@@ -8260,6 +8282,13 @@ var StorageMigrationMoveSchema = object({
|
|
|
8260
8282
|
storageClass: StorageMigrationClassSchema,
|
|
8261
8283
|
fromLocationId: string(),
|
|
8262
8284
|
toLocationId: string(),
|
|
8285
|
+
/**
|
|
8286
|
+
* True when `from` was NOT the class default at plan time. The move still
|
|
8287
|
+
* copies bytes, but the default is left alone and the source is disabled
|
|
8288
|
+
* once the copy verifies. Absent on jobs planned before this field existed
|
|
8289
|
+
* — those jobs always repointed, which is `false`.
|
|
8290
|
+
*/
|
|
8291
|
+
freezeSource: boolean().optional(),
|
|
8263
8292
|
moverJobId: string().nullable(),
|
|
8264
8293
|
state: RelocateJobStateSchema.nullable(),
|
|
8265
8294
|
error: string().nullable(),
|
|
@@ -8273,6 +8302,7 @@ var StorageMigrationJobSchema = object({
|
|
|
8273
8302
|
* can tell a seconds-long cutover from a thirty-hour one. */
|
|
8274
8303
|
mode: StorageMigrationModeSchema,
|
|
8275
8304
|
destinations: StorageMigrationDestinationsSchema,
|
|
8305
|
+
sources: StorageMigrationSourcesSchema,
|
|
8276
8306
|
throttleMbps: number(),
|
|
8277
8307
|
moves: array(StorageMigrationMoveSchema),
|
|
8278
8308
|
pauseLeaseId: string().nullable(),
|
|
@@ -8298,6 +8328,7 @@ var StorageMigrationFindingSchema = object({
|
|
|
8298
8328
|
});
|
|
8299
8329
|
var StorageMigrationPlanSchema = object({
|
|
8300
8330
|
destinations: StorageMigrationDestinationsSchema,
|
|
8331
|
+
sources: StorageMigrationSourcesSchema,
|
|
8301
8332
|
/** The mode this plan was built for. A plan is only valid for its mode: the
|
|
8302
8333
|
* `eventMedia` seal gate and the single-cardinality refusal both depend on
|
|
8303
8334
|
* it. */
|
|
@@ -8305,7 +8336,8 @@ var StorageMigrationPlanSchema = object({
|
|
|
8305
8336
|
moves: array(object({
|
|
8306
8337
|
storageClass: StorageMigrationClassSchema,
|
|
8307
8338
|
fromLocationId: string(),
|
|
8308
|
-
toLocationId: string()
|
|
8339
|
+
toLocationId: string(),
|
|
8340
|
+
freezeSource: boolean().optional()
|
|
8309
8341
|
})),
|
|
8310
8342
|
findings: array(StorageMigrationFindingSchema)
|
|
8311
8343
|
});
|
|
@@ -8483,10 +8515,51 @@ var LedgerWalkReportSchema = object({
|
|
|
8483
8515
|
var RelocatableMediaCountSchema = object({ rows: number().int().nonnegative() }).nullable();
|
|
8484
8516
|
var RelocatableMediaCountInputSchema = object({
|
|
8485
8517
|
toLocationId: string().min(1),
|
|
8518
|
+
/** Restrict the count to one source; omitted / `'*'` = every non-target row. */
|
|
8519
|
+
fromLocationId: string().optional(),
|
|
8486
8520
|
/** Omitted = `move`. */
|
|
8487
8521
|
mode: MediaRelocateModeSchema.optional()
|
|
8488
8522
|
});
|
|
8489
8523
|
/**
|
|
8524
|
+
* Operator cleanup of leftover analytics rows, optional debug media, and
|
|
8525
|
+
* ghost ledger entries on frozen footage locations.
|
|
8526
|
+
*
|
|
8527
|
+
* A pass is tens of minutes on a standing backlog. The hub method RETURNS
|
|
8528
|
+
* `{ jobId }` immediately; progress is `cleanupStatus`. Awaiting the work
|
|
8529
|
+
* is how `addons.custom` hit the 60 s UDS deadline while reclaim continued
|
|
8530
|
+
* with no operator-visible status.
|
|
8531
|
+
*/
|
|
8532
|
+
var StorageCleanupPhaseSchema = _enum([
|
|
8533
|
+
"orphans",
|
|
8534
|
+
"debug-media",
|
|
8535
|
+
"ghost-ledger",
|
|
8536
|
+
"done",
|
|
8537
|
+
"failed",
|
|
8538
|
+
"cancelled"
|
|
8539
|
+
]);
|
|
8540
|
+
var StorageCleanupInputSchema = object({
|
|
8541
|
+
/** Also walk motion stills / track filmstrips. Off by default. */
|
|
8542
|
+
includeDebugMedia: boolean().optional() });
|
|
8543
|
+
var StorageCleanupJobSchema = object({
|
|
8544
|
+
jobId: string(),
|
|
8545
|
+
phase: StorageCleanupPhaseSchema,
|
|
8546
|
+
includeDebugMedia: boolean(),
|
|
8547
|
+
orphansReclaimed: number().int().nonnegative(),
|
|
8548
|
+
orphanBytesReclaimed: number().int().nonnegative(),
|
|
8549
|
+
debugMediaReclaimed: number().int().nonnegative(),
|
|
8550
|
+
debugMediaBytesReclaimed: number().int().nonnegative(),
|
|
8551
|
+
ghostsForgotten: number().int().nonnegative(),
|
|
8552
|
+
ghostBytesForgotten: number().int().nonnegative(),
|
|
8553
|
+
/** Short operator-facing line: current collection, pass, or location. */
|
|
8554
|
+
detail: string().nullable(),
|
|
8555
|
+
cancelRequested: boolean(),
|
|
8556
|
+
startedAt: number(),
|
|
8557
|
+
updatedAt: number(),
|
|
8558
|
+
finishedAt: number().nullable(),
|
|
8559
|
+
error: string().nullable()
|
|
8560
|
+
});
|
|
8561
|
+
var StorageCleanupStatusInputSchema = object({ jobId: string().optional() });
|
|
8562
|
+
/**
|
|
8490
8563
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
8491
8564
|
* storage a location serves. Defined here (not in `capabilities/storage.cap.ts`)
|
|
8492
8565
|
* so the persisted record schema and the consumer-facing cap can both consume it
|
|
@@ -8514,11 +8587,10 @@ var StorageLocationTypeSchema = string().regex(/^[a-z][a-zA-Z0-9-]*$/);
|
|
|
8514
8587
|
* The default location for a type uses `id === <type>:default` by
|
|
8515
8588
|
* convention (the bare type ref like `'backups'` resolves to it).
|
|
8516
8589
|
*
|
|
8517
|
-
* `isSystem
|
|
8518
|
-
*
|
|
8519
|
-
*
|
|
8520
|
-
*
|
|
8521
|
-
* deleting it is rejected at the cap level.
|
|
8590
|
+
* `isSystem` is a legacy persisted flag. Seed still creates the initial
|
|
8591
|
+
* `<type>:default` locations; the flag is no longer a lock, a badge, or a
|
|
8592
|
+
* prune selector. New writes leave it false. Deletion is gated on uniqueness
|
|
8593
|
+
* / last-enabled, not on this bit.
|
|
8522
8594
|
*/
|
|
8523
8595
|
var StorageLocationSchema = object({
|
|
8524
8596
|
id: string().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/),
|
|
@@ -12910,6 +12982,12 @@ method(object({
|
|
|
12910
12982
|
}), _void(), {
|
|
12911
12983
|
kind: "mutation",
|
|
12912
12984
|
auth: "admin"
|
|
12985
|
+
}), method(object({
|
|
12986
|
+
from: string(),
|
|
12987
|
+
to: string()
|
|
12988
|
+
}), object({ moved: number() }), {
|
|
12989
|
+
kind: "mutation",
|
|
12990
|
+
auth: "admin"
|
|
12913
12991
|
}), method(object({
|
|
12914
12992
|
deviceId: number(),
|
|
12915
12993
|
disabled: boolean()
|
|
@@ -18840,46 +18918,6 @@ var RecentTracksPageSchema = object({
|
|
|
18840
18918
|
/** Cursor for the next page, or null when this page is the last. */
|
|
18841
18919
|
nextCursor: string().nullable()
|
|
18842
18920
|
});
|
|
18843
|
-
var LIST_GROUPS_DEFAULT_LIMIT = 40;
|
|
18844
|
-
var LIST_GROUPS_MAX_LIMIT = 100;
|
|
18845
|
-
var AnalyticsGroupRecordSchema = object({
|
|
18846
|
-
id: string(),
|
|
18847
|
-
deviceId: number().int(),
|
|
18848
|
-
openedAt: number().int(),
|
|
18849
|
-
closedAt: number().int(),
|
|
18850
|
-
timestamp: number().int(),
|
|
18851
|
-
memberCount: number().int(),
|
|
18852
|
-
memberTrackIds: array(string()).readonly(),
|
|
18853
|
-
className: string(),
|
|
18854
|
-
classes: array(string()).readonly(),
|
|
18855
|
-
/** Relative event-media path, or null when the group has no picture yet. */
|
|
18856
|
-
mediaUrl: string().nullable(),
|
|
18857
|
-
singleton: boolean()
|
|
18858
|
-
});
|
|
18859
|
-
var AnalyticsGroupMemberSchema = object({
|
|
18860
|
-
trackId: string(),
|
|
18861
|
-
deviceId: number().int(),
|
|
18862
|
-
className: string(),
|
|
18863
|
-
firstSeen: number().int(),
|
|
18864
|
-
lastSeen: number().int(),
|
|
18865
|
-
mediaUrl: string().nullable()
|
|
18866
|
-
});
|
|
18867
|
-
var AnalyticsGroupDetailSchema = AnalyticsGroupRecordSchema.extend({ members: array(AnalyticsGroupMemberSchema).readonly() });
|
|
18868
|
-
var ListGroupsQueryInput = object({
|
|
18869
|
-
/** Devices to merge. An empty array yields `{ groups: [], nextCursor: null }`. */
|
|
18870
|
-
deviceIds: array(number()),
|
|
18871
|
-
/** Window lower bound on `closedAt` (inclusive). */
|
|
18872
|
-
since: number().optional(),
|
|
18873
|
-
/** Window upper bound on `openedAt` (inclusive). */
|
|
18874
|
-
until: number().optional(),
|
|
18875
|
-
limit: number().int().min(1).max(LIST_GROUPS_MAX_LIMIT).default(LIST_GROUPS_DEFAULT_LIMIT),
|
|
18876
|
-
/** Opaque continuation cursor from a previous page's `nextCursor`. */
|
|
18877
|
-
cursor: string().optional()
|
|
18878
|
-
});
|
|
18879
|
-
var ListGroupsPageSchema = object({
|
|
18880
|
-
groups: array(AnalyticsGroupRecordSchema).readonly(),
|
|
18881
|
-
nextCursor: string().nullable()
|
|
18882
|
-
});
|
|
18883
18921
|
var KEY_EVENTS_DEFAULT_LIMIT = 50;
|
|
18884
18922
|
var KEY_EVENTS_MAX_LIMIT = 200;
|
|
18885
18923
|
var KeyEventQueryInput = object({
|
|
@@ -18983,9 +19021,7 @@ var TrackCascadeCountsSchema = object({
|
|
|
18983
19021
|
/** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
|
|
18984
19022
|
plates: number().int(),
|
|
18985
19023
|
/** Per-track CLIP search vectors removed (best-effort). */
|
|
18986
|
-
embeddings: number().int()
|
|
18987
|
-
/** Group membership + group rows removed with their last member (best-effort). */
|
|
18988
|
-
groups: number().int()
|
|
19024
|
+
embeddings: number().int()
|
|
18989
19025
|
});
|
|
18990
19026
|
/** Disk-wins reconcile: media rows whose blobs are gone, then empty tracks. */
|
|
18991
19027
|
var DiskReconcileCountsSchema = object({
|
|
@@ -19155,6 +19191,47 @@ var RebuildStatusSchema = object({
|
|
|
19155
19191
|
/** Present when the pass ended by throwing. */
|
|
19156
19192
|
error: string().nullable()
|
|
19157
19193
|
});
|
|
19194
|
+
/**
|
|
19195
|
+
* Acknowledgement that a debug-media reclaim STARTED.
|
|
19196
|
+
*
|
|
19197
|
+
* The pass is paced at ~2 MB/s over a standing 100 GB — tens of minutes — so
|
|
19198
|
+
* it runs detached and this returns immediately. Awaiting it is how the
|
|
19199
|
+
* `addons.custom` door hit the 60 s UDS deadline while the walk carried on
|
|
19200
|
+
* with no status. Poll {@link pipelineAnalyticsCapability.methods.getMediaReclaimStatus}.
|
|
19201
|
+
*/
|
|
19202
|
+
var MediaReclaimStartResultSchema = object({
|
|
19203
|
+
started: boolean(),
|
|
19204
|
+
/** True when a pass was already running; the new request is ignored. */
|
|
19205
|
+
alreadyRunning: boolean()
|
|
19206
|
+
});
|
|
19207
|
+
var MediaReclaimInputSchema = object({
|
|
19208
|
+
mode: _enum(["report", "reclaim"]).default("report"),
|
|
19209
|
+
scopes: array(_enum(["motion-still", "track-filmstrip"])).min(1).optional(),
|
|
19210
|
+
deviceIds: array(number().int()).min(1).optional(),
|
|
19211
|
+
restart: boolean().optional(),
|
|
19212
|
+
pageSize: number().int().min(50).max(5e3).optional(),
|
|
19213
|
+
maxRowsPerDevice: number().int().min(1).max(5e5).optional(),
|
|
19214
|
+
maxReclaimPerDevice: number().int().min(1).max(5e5).optional(),
|
|
19215
|
+
maxBytesPerRun: number().int().min(1).optional(),
|
|
19216
|
+
budgetMinutes: number().int().min(1).max(720).optional(),
|
|
19217
|
+
throttleBytesPerSec: number().int().min(64 * 1024).optional(),
|
|
19218
|
+
graceMinutes: number().int().min(1).max(10080).optional()
|
|
19219
|
+
});
|
|
19220
|
+
var MediaReclaimStatusSchema = object({
|
|
19221
|
+
running: boolean(),
|
|
19222
|
+
mode: _enum(["report", "reclaim"]).nullable(),
|
|
19223
|
+
totalExamined: number(),
|
|
19224
|
+
totalEligible: number(),
|
|
19225
|
+
totalReclaimed: number(),
|
|
19226
|
+
totalBytesReclaimed: number(),
|
|
19227
|
+
totalRefused: number(),
|
|
19228
|
+
/** Device+scope windows finished in this pass. */
|
|
19229
|
+
devicesDone: number(),
|
|
19230
|
+
complete: boolean().nullable(),
|
|
19231
|
+
startedAtMs: number().nullable(),
|
|
19232
|
+
finishedAtMs: number().nullable(),
|
|
19233
|
+
error: string().nullable()
|
|
19234
|
+
});
|
|
19158
19235
|
var ReplayFrameInputSchema = object({
|
|
19159
19236
|
timestamp: number(),
|
|
19160
19237
|
frame: PipelineRunResultBridge
|
|
@@ -19193,10 +19270,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19193
19270
|
* stationary registry). Default false: the timeline lists passages,
|
|
19194
19271
|
* not parking records (operator decision, 2026-08-15). */
|
|
19195
19272
|
includeStationary: boolean().optional()
|
|
19196
|
-
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(
|
|
19197
|
-
deviceId: number(),
|
|
19198
|
-
groupId: string().min(1)
|
|
19199
|
-
}), AnalyticsGroupDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
|
|
19273
|
+
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
|
|
19200
19274
|
kind: "mutation",
|
|
19201
19275
|
auth: "admin"
|
|
19202
19276
|
}), 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({
|
|
@@ -19296,6 +19370,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19296
19370
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
19297
19371
|
kind: "query",
|
|
19298
19372
|
auth: "admin"
|
|
19373
|
+
}), method(MediaReclaimInputSchema, MediaReclaimStartResultSchema, {
|
|
19374
|
+
kind: "mutation",
|
|
19375
|
+
auth: "admin"
|
|
19376
|
+
}), method(object({}), MediaReclaimStatusSchema, {
|
|
19377
|
+
kind: "query",
|
|
19378
|
+
auth: "admin"
|
|
19299
19379
|
}), method(object({ deviceIds: array(number()).optional() }), TrainingExportSummarySchema, {
|
|
19300
19380
|
kind: "query",
|
|
19301
19381
|
auth: "admin"
|
|
@@ -21266,7 +21346,13 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
|
|
|
21266
21346
|
}), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
|
|
21267
21347
|
kind: "mutation",
|
|
21268
21348
|
auth: "admin"
|
|
21269
|
-
})
|
|
21349
|
+
}), method(StorageCleanupInputSchema, object({ jobId: string() }), {
|
|
21350
|
+
kind: "mutation",
|
|
21351
|
+
auth: "admin"
|
|
21352
|
+
}), method(StorageCleanupStatusInputSchema, StorageCleanupJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
21353
|
+
kind: "mutation",
|
|
21354
|
+
auth: "admin"
|
|
21355
|
+
}), method(object({}), array(StorageMigrationJobSchema).readonly(), { auth: "admin" });
|
|
21270
21356
|
var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
21271
21357
|
providerId: string().min(1),
|
|
21272
21358
|
displayName: string().min(1),
|
|
@@ -26644,6 +26730,33 @@ var RecordingRebalanceInputSchema = object({
|
|
|
26644
26730
|
minMoveGb: number().min(0).optional()
|
|
26645
26731
|
});
|
|
26646
26732
|
/**
|
|
26733
|
+
* Operator-facing placement of one camera onto a recordings location.
|
|
26734
|
+
*
|
|
26735
|
+
* `pinLocationId` is the operator instruction: a location id, or `null` for
|
|
26736
|
+
* Auto (the planner may move this camera). `locationId` is where high/mid
|
|
26737
|
+
* currently write — the plan, which may disagree with the pin when Auto.
|
|
26738
|
+
*/
|
|
26739
|
+
var RecordingDevicePlacementSchema = object({
|
|
26740
|
+
deviceId: number().int(),
|
|
26741
|
+
profile: string(),
|
|
26742
|
+
locationId: string()
|
|
26743
|
+
});
|
|
26744
|
+
var RecordingDevicePinSchema = object({
|
|
26745
|
+
deviceId: number().int(),
|
|
26746
|
+
/** Recordings-class location this camera is pinned to. */
|
|
26747
|
+
locationId: string()
|
|
26748
|
+
});
|
|
26749
|
+
var RecordingPlacementViewSchema = object({
|
|
26750
|
+
assignments: array(RecordingDevicePlacementSchema),
|
|
26751
|
+
pins: array(RecordingDevicePinSchema),
|
|
26752
|
+
defaultLocations: record(string(), string())
|
|
26753
|
+
});
|
|
26754
|
+
var RecordingSetDevicePlacementInputSchema = object({
|
|
26755
|
+
deviceId: number().int(),
|
|
26756
|
+
/** `null` = Auto. Otherwise a `recordings:*` location id. */
|
|
26757
|
+
locationId: string().nullable()
|
|
26758
|
+
});
|
|
26759
|
+
/**
|
|
26647
26760
|
* Result of locating footage at a wall-clock instant for one device/profile.
|
|
26648
26761
|
* `segment` carries the covering segment's window; `gap` reports the forward
|
|
26649
26762
|
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
@@ -26869,6 +26982,12 @@ method(object({
|
|
|
26869
26982
|
}), method(RecordingRebalanceInputSchema, RecordingRebalancePlanSchema, {
|
|
26870
26983
|
kind: "mutation",
|
|
26871
26984
|
auth: "admin"
|
|
26985
|
+
}), method(object({}), RecordingPlacementViewSchema, {
|
|
26986
|
+
kind: "query",
|
|
26987
|
+
auth: "admin"
|
|
26988
|
+
}), method(RecordingSetDevicePlacementInputSchema, object({ ok: literal(true) }), {
|
|
26989
|
+
kind: "mutation",
|
|
26990
|
+
auth: "admin"
|
|
26872
26991
|
});
|
|
26873
26992
|
/**
|
|
26874
26993
|
* `recording-export` cap — render a footage time range into a single downloadable
|
|
@@ -30239,6 +30358,12 @@ Object.freeze({
|
|
|
30239
30358
|
addonId: null,
|
|
30240
30359
|
access: "delete"
|
|
30241
30360
|
},
|
|
30361
|
+
"deviceManager.renameLocation": {
|
|
30362
|
+
capName: "device-manager",
|
|
30363
|
+
capScope: "system",
|
|
30364
|
+
addonId: null,
|
|
30365
|
+
access: "create"
|
|
30366
|
+
},
|
|
30242
30367
|
"deviceManager.runDeviceAction": {
|
|
30243
30368
|
capName: "device-manager",
|
|
30244
30369
|
capScope: "system",
|
|
@@ -31931,19 +32056,19 @@ Object.freeze({
|
|
|
31931
32056
|
addonId: null,
|
|
31932
32057
|
access: "view"
|
|
31933
32058
|
},
|
|
31934
|
-
"pipelineAnalytics.
|
|
32059
|
+
"pipelineAnalytics.getKeyEvents": {
|
|
31935
32060
|
capName: "pipeline-analytics",
|
|
31936
32061
|
capScope: "device",
|
|
31937
32062
|
addonId: null,
|
|
31938
32063
|
access: "view"
|
|
31939
32064
|
},
|
|
31940
|
-
"pipelineAnalytics.
|
|
32065
|
+
"pipelineAnalytics.getKeyEventsBatch": {
|
|
31941
32066
|
capName: "pipeline-analytics",
|
|
31942
32067
|
capScope: "device",
|
|
31943
32068
|
addonId: null,
|
|
31944
32069
|
access: "view"
|
|
31945
32070
|
},
|
|
31946
|
-
"pipelineAnalytics.
|
|
32071
|
+
"pipelineAnalytics.getMediaReclaimStatus": {
|
|
31947
32072
|
capName: "pipeline-analytics",
|
|
31948
32073
|
capScope: "device",
|
|
31949
32074
|
addonId: null,
|
|
@@ -32033,12 +32158,6 @@ Object.freeze({
|
|
|
32033
32158
|
addonId: null,
|
|
32034
32159
|
access: "view"
|
|
32035
32160
|
},
|
|
32036
|
-
"pipelineAnalytics.listGroups": {
|
|
32037
|
-
capName: "pipeline-analytics",
|
|
32038
|
-
capScope: "device",
|
|
32039
|
-
addonId: null,
|
|
32040
|
-
access: "view"
|
|
32041
|
-
},
|
|
32042
32161
|
"pipelineAnalytics.listOpsLog": {
|
|
32043
32162
|
capName: "pipeline-analytics",
|
|
32044
32163
|
capScope: "device",
|
|
@@ -32123,6 +32242,12 @@ Object.freeze({
|
|
|
32123
32242
|
addonId: null,
|
|
32124
32243
|
access: "create"
|
|
32125
32244
|
},
|
|
32245
|
+
"pipelineAnalytics.reclaimDebugMedia": {
|
|
32246
|
+
capName: "pipeline-analytics",
|
|
32247
|
+
capScope: "device",
|
|
32248
|
+
addonId: null,
|
|
32249
|
+
access: "create"
|
|
32250
|
+
},
|
|
32126
32251
|
"pipelineAnalytics.reconcileFromDisk": {
|
|
32127
32252
|
capName: "pipeline-analytics",
|
|
32128
32253
|
capScope: "device",
|
|
@@ -33047,6 +33172,12 @@ Object.freeze({
|
|
|
33047
33172
|
addonId: null,
|
|
33048
33173
|
access: "view"
|
|
33049
33174
|
},
|
|
33175
|
+
"recording.getPlacement": {
|
|
33176
|
+
capName: "recording",
|
|
33177
|
+
capScope: "system",
|
|
33178
|
+
addonId: null,
|
|
33179
|
+
access: "view"
|
|
33180
|
+
},
|
|
33050
33181
|
"recording.getPlaybackManifest": {
|
|
33051
33182
|
capName: "recording",
|
|
33052
33183
|
capScope: "system",
|
|
@@ -33173,6 +33304,12 @@ Object.freeze({
|
|
|
33173
33304
|
addonId: null,
|
|
33174
33305
|
access: "create"
|
|
33175
33306
|
},
|
|
33307
|
+
"recording.setDevicePlacement": {
|
|
33308
|
+
capName: "recording",
|
|
33309
|
+
capScope: "system",
|
|
33310
|
+
addonId: null,
|
|
33311
|
+
access: "create"
|
|
33312
|
+
},
|
|
33176
33313
|
"recording.startStorageMigrationMove": {
|
|
33177
33314
|
capName: "recording",
|
|
33178
33315
|
capScope: "system",
|
|
@@ -33617,12 +33754,36 @@ Object.freeze({
|
|
|
33617
33754
|
addonId: null,
|
|
33618
33755
|
access: "create"
|
|
33619
33756
|
},
|
|
33757
|
+
"storageMigration.cleanupCancel": {
|
|
33758
|
+
capName: "storage-migration",
|
|
33759
|
+
capScope: "system",
|
|
33760
|
+
addonId: null,
|
|
33761
|
+
access: "create"
|
|
33762
|
+
},
|
|
33763
|
+
"storageMigration.cleanupStart": {
|
|
33764
|
+
capName: "storage-migration",
|
|
33765
|
+
capScope: "system",
|
|
33766
|
+
addonId: null,
|
|
33767
|
+
access: "create"
|
|
33768
|
+
},
|
|
33769
|
+
"storageMigration.cleanupStatus": {
|
|
33770
|
+
capName: "storage-migration",
|
|
33771
|
+
capScope: "system",
|
|
33772
|
+
addonId: null,
|
|
33773
|
+
access: "view"
|
|
33774
|
+
},
|
|
33620
33775
|
"storageMigration.drain": {
|
|
33621
33776
|
capName: "storage-migration",
|
|
33622
33777
|
capScope: "system",
|
|
33623
33778
|
addonId: null,
|
|
33624
33779
|
access: "create"
|
|
33625
33780
|
},
|
|
33781
|
+
"storageMigration.history": {
|
|
33782
|
+
capName: "storage-migration",
|
|
33783
|
+
capScope: "system",
|
|
33784
|
+
addonId: null,
|
|
33785
|
+
access: "view"
|
|
33786
|
+
},
|
|
33626
33787
|
"storageMigration.movers": {
|
|
33627
33788
|
capName: "storage-migration",
|
|
33628
33789
|
capScope: "system",
|
|
@@ -35619,11 +35780,6 @@ Object.freeze({
|
|
|
35619
35780
|
form: "single",
|
|
35620
35781
|
optional: true
|
|
35621
35782
|
}],
|
|
35622
|
-
"pipelineAnalytics.getGroup": [{
|
|
35623
|
-
name: "deviceId",
|
|
35624
|
-
form: "single",
|
|
35625
|
-
optional: false
|
|
35626
|
-
}],
|
|
35627
35783
|
"pipelineAnalytics.getKeyEvents": [{
|
|
35628
35784
|
name: "deviceId",
|
|
35629
35785
|
form: "single",
|
|
@@ -35689,11 +35845,6 @@ Object.freeze({
|
|
|
35689
35845
|
form: "single",
|
|
35690
35846
|
optional: false
|
|
35691
35847
|
}],
|
|
35692
|
-
"pipelineAnalytics.listGroups": [{
|
|
35693
|
-
name: "deviceIds",
|
|
35694
|
-
form: "array",
|
|
35695
|
-
optional: false
|
|
35696
|
-
}],
|
|
35697
35848
|
"pipelineAnalytics.listOpsLog": [{
|
|
35698
35849
|
name: "deviceId",
|
|
35699
35850
|
form: "single",
|
|
@@ -35739,6 +35890,11 @@ Object.freeze({
|
|
|
35739
35890
|
form: "single",
|
|
35740
35891
|
optional: true
|
|
35741
35892
|
}],
|
|
35893
|
+
"pipelineAnalytics.reclaimDebugMedia": [{
|
|
35894
|
+
name: "deviceIds",
|
|
35895
|
+
form: "array",
|
|
35896
|
+
optional: true
|
|
35897
|
+
}],
|
|
35742
35898
|
"pipelineAnalytics.reconcileFromDisk": [{
|
|
35743
35899
|
name: "deviceId",
|
|
35744
35900
|
form: "single",
|
|
@@ -36104,6 +36260,11 @@ Object.freeze({
|
|
|
36104
36260
|
form: "single",
|
|
36105
36261
|
optional: false
|
|
36106
36262
|
}],
|
|
36263
|
+
"recording.setDevicePlacement": [{
|
|
36264
|
+
name: "deviceId",
|
|
36265
|
+
form: "single",
|
|
36266
|
+
optional: false
|
|
36267
|
+
}],
|
|
36107
36268
|
"recording.startStorageMigrationMove": [{
|
|
36108
36269
|
name: "deviceId",
|
|
36109
36270
|
form: "single",
|