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