@camstack/addon-decoder-ffmpeg 1.2.49 → 1.2.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +236 -73
- package/dist/index.mjs +236 -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()
|
|
@@ -15626,6 +15704,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
15626
15704
|
"device-offline",
|
|
15627
15705
|
"device-disabled",
|
|
15628
15706
|
"device-enabled",
|
|
15707
|
+
"device-battery-low",
|
|
15708
|
+
"device-battery-normal",
|
|
15629
15709
|
"stream-online",
|
|
15630
15710
|
"stream-offline",
|
|
15631
15711
|
"node-online",
|
|
@@ -18844,46 +18924,6 @@ var RecentTracksPageSchema = object({
|
|
|
18844
18924
|
/** Cursor for the next page, or null when this page is the last. */
|
|
18845
18925
|
nextCursor: string().nullable()
|
|
18846
18926
|
});
|
|
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
18927
|
var KEY_EVENTS_DEFAULT_LIMIT = 50;
|
|
18888
18928
|
var KEY_EVENTS_MAX_LIMIT = 200;
|
|
18889
18929
|
var KeyEventQueryInput = object({
|
|
@@ -18987,9 +19027,7 @@ var TrackCascadeCountsSchema = object({
|
|
|
18987
19027
|
/** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
|
|
18988
19028
|
plates: number().int(),
|
|
18989
19029
|
/** 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()
|
|
19030
|
+
embeddings: number().int()
|
|
18993
19031
|
});
|
|
18994
19032
|
/** Disk-wins reconcile: media rows whose blobs are gone, then empty tracks. */
|
|
18995
19033
|
var DiskReconcileCountsSchema = object({
|
|
@@ -19159,6 +19197,47 @@ var RebuildStatusSchema = object({
|
|
|
19159
19197
|
/** Present when the pass ended by throwing. */
|
|
19160
19198
|
error: string().nullable()
|
|
19161
19199
|
});
|
|
19200
|
+
/**
|
|
19201
|
+
* Acknowledgement that a debug-media reclaim STARTED.
|
|
19202
|
+
*
|
|
19203
|
+
* The pass is paced at ~2 MB/s over a standing 100 GB — tens of minutes — so
|
|
19204
|
+
* it runs detached and this returns immediately. Awaiting it is how the
|
|
19205
|
+
* `addons.custom` door hit the 60 s UDS deadline while the walk carried on
|
|
19206
|
+
* with no status. Poll {@link pipelineAnalyticsCapability.methods.getMediaReclaimStatus}.
|
|
19207
|
+
*/
|
|
19208
|
+
var MediaReclaimStartResultSchema = object({
|
|
19209
|
+
started: boolean(),
|
|
19210
|
+
/** True when a pass was already running; the new request is ignored. */
|
|
19211
|
+
alreadyRunning: boolean()
|
|
19212
|
+
});
|
|
19213
|
+
var MediaReclaimInputSchema = object({
|
|
19214
|
+
mode: _enum(["report", "reclaim"]).default("report"),
|
|
19215
|
+
scopes: array(_enum(["motion-still", "track-filmstrip"])).min(1).optional(),
|
|
19216
|
+
deviceIds: array(number().int()).min(1).optional(),
|
|
19217
|
+
restart: boolean().optional(),
|
|
19218
|
+
pageSize: number().int().min(50).max(5e3).optional(),
|
|
19219
|
+
maxRowsPerDevice: number().int().min(1).max(5e5).optional(),
|
|
19220
|
+
maxReclaimPerDevice: number().int().min(1).max(5e5).optional(),
|
|
19221
|
+
maxBytesPerRun: number().int().min(1).optional(),
|
|
19222
|
+
budgetMinutes: number().int().min(1).max(720).optional(),
|
|
19223
|
+
throttleBytesPerSec: number().int().min(64 * 1024).optional(),
|
|
19224
|
+
graceMinutes: number().int().min(1).max(10080).optional()
|
|
19225
|
+
});
|
|
19226
|
+
var MediaReclaimStatusSchema = object({
|
|
19227
|
+
running: boolean(),
|
|
19228
|
+
mode: _enum(["report", "reclaim"]).nullable(),
|
|
19229
|
+
totalExamined: number(),
|
|
19230
|
+
totalEligible: number(),
|
|
19231
|
+
totalReclaimed: number(),
|
|
19232
|
+
totalBytesReclaimed: number(),
|
|
19233
|
+
totalRefused: number(),
|
|
19234
|
+
/** Device+scope windows finished in this pass. */
|
|
19235
|
+
devicesDone: number(),
|
|
19236
|
+
complete: boolean().nullable(),
|
|
19237
|
+
startedAtMs: number().nullable(),
|
|
19238
|
+
finishedAtMs: number().nullable(),
|
|
19239
|
+
error: string().nullable()
|
|
19240
|
+
});
|
|
19162
19241
|
var ReplayFrameInputSchema = object({
|
|
19163
19242
|
timestamp: number(),
|
|
19164
19243
|
frame: PipelineRunResultBridge
|
|
@@ -19197,10 +19276,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19197
19276
|
* stationary registry). Default false: the timeline lists passages,
|
|
19198
19277
|
* not parking records (operator decision, 2026-08-15). */
|
|
19199
19278
|
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(), {
|
|
19279
|
+
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
|
|
19204
19280
|
kind: "mutation",
|
|
19205
19281
|
auth: "admin"
|
|
19206
19282
|
}), 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 +19376,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19300
19376
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
19301
19377
|
kind: "query",
|
|
19302
19378
|
auth: "admin"
|
|
19379
|
+
}), method(MediaReclaimInputSchema, MediaReclaimStartResultSchema, {
|
|
19380
|
+
kind: "mutation",
|
|
19381
|
+
auth: "admin"
|
|
19382
|
+
}), method(object({}), MediaReclaimStatusSchema, {
|
|
19383
|
+
kind: "query",
|
|
19384
|
+
auth: "admin"
|
|
19303
19385
|
}), method(object({ deviceIds: array(number()).optional() }), TrainingExportSummarySchema, {
|
|
19304
19386
|
kind: "query",
|
|
19305
19387
|
auth: "admin"
|
|
@@ -21270,7 +21352,13 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
|
|
|
21270
21352
|
}), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
|
|
21271
21353
|
kind: "mutation",
|
|
21272
21354
|
auth: "admin"
|
|
21273
|
-
})
|
|
21355
|
+
}), method(StorageCleanupInputSchema, object({ jobId: string() }), {
|
|
21356
|
+
kind: "mutation",
|
|
21357
|
+
auth: "admin"
|
|
21358
|
+
}), method(StorageCleanupStatusInputSchema, StorageCleanupJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
21359
|
+
kind: "mutation",
|
|
21360
|
+
auth: "admin"
|
|
21361
|
+
}), method(object({}), array(StorageMigrationJobSchema).readonly(), { auth: "admin" });
|
|
21274
21362
|
var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
21275
21363
|
providerId: string().min(1),
|
|
21276
21364
|
displayName: string().min(1),
|
|
@@ -26648,6 +26736,33 @@ var RecordingRebalanceInputSchema = object({
|
|
|
26648
26736
|
minMoveGb: number().min(0).optional()
|
|
26649
26737
|
});
|
|
26650
26738
|
/**
|
|
26739
|
+
* Operator-facing placement of one camera onto a recordings location.
|
|
26740
|
+
*
|
|
26741
|
+
* `pinLocationId` is the operator instruction: a location id, or `null` for
|
|
26742
|
+
* Auto (the planner may move this camera). `locationId` is where high/mid
|
|
26743
|
+
* currently write — the plan, which may disagree with the pin when Auto.
|
|
26744
|
+
*/
|
|
26745
|
+
var RecordingDevicePlacementSchema = object({
|
|
26746
|
+
deviceId: number().int(),
|
|
26747
|
+
profile: string(),
|
|
26748
|
+
locationId: string()
|
|
26749
|
+
});
|
|
26750
|
+
var RecordingDevicePinSchema = object({
|
|
26751
|
+
deviceId: number().int(),
|
|
26752
|
+
/** Recordings-class location this camera is pinned to. */
|
|
26753
|
+
locationId: string()
|
|
26754
|
+
});
|
|
26755
|
+
var RecordingPlacementViewSchema = object({
|
|
26756
|
+
assignments: array(RecordingDevicePlacementSchema),
|
|
26757
|
+
pins: array(RecordingDevicePinSchema),
|
|
26758
|
+
defaultLocations: record(string(), string())
|
|
26759
|
+
});
|
|
26760
|
+
var RecordingSetDevicePlacementInputSchema = object({
|
|
26761
|
+
deviceId: number().int(),
|
|
26762
|
+
/** `null` = Auto. Otherwise a `recordings:*` location id. */
|
|
26763
|
+
locationId: string().nullable()
|
|
26764
|
+
});
|
|
26765
|
+
/**
|
|
26651
26766
|
* Result of locating footage at a wall-clock instant for one device/profile.
|
|
26652
26767
|
* `segment` carries the covering segment's window; `gap` reports the forward
|
|
26653
26768
|
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
@@ -26873,6 +26988,12 @@ method(object({
|
|
|
26873
26988
|
}), method(RecordingRebalanceInputSchema, RecordingRebalancePlanSchema, {
|
|
26874
26989
|
kind: "mutation",
|
|
26875
26990
|
auth: "admin"
|
|
26991
|
+
}), method(object({}), RecordingPlacementViewSchema, {
|
|
26992
|
+
kind: "query",
|
|
26993
|
+
auth: "admin"
|
|
26994
|
+
}), method(RecordingSetDevicePlacementInputSchema, object({ ok: literal(true) }), {
|
|
26995
|
+
kind: "mutation",
|
|
26996
|
+
auth: "admin"
|
|
26876
26997
|
});
|
|
26877
26998
|
/**
|
|
26878
26999
|
* `recording-export` cap — render a footage time range into a single downloadable
|
|
@@ -30243,6 +30364,12 @@ Object.freeze({
|
|
|
30243
30364
|
addonId: null,
|
|
30244
30365
|
access: "delete"
|
|
30245
30366
|
},
|
|
30367
|
+
"deviceManager.renameLocation": {
|
|
30368
|
+
capName: "device-manager",
|
|
30369
|
+
capScope: "system",
|
|
30370
|
+
addonId: null,
|
|
30371
|
+
access: "create"
|
|
30372
|
+
},
|
|
30246
30373
|
"deviceManager.runDeviceAction": {
|
|
30247
30374
|
capName: "device-manager",
|
|
30248
30375
|
capScope: "system",
|
|
@@ -31935,19 +32062,19 @@ Object.freeze({
|
|
|
31935
32062
|
addonId: null,
|
|
31936
32063
|
access: "view"
|
|
31937
32064
|
},
|
|
31938
|
-
"pipelineAnalytics.
|
|
32065
|
+
"pipelineAnalytics.getKeyEvents": {
|
|
31939
32066
|
capName: "pipeline-analytics",
|
|
31940
32067
|
capScope: "device",
|
|
31941
32068
|
addonId: null,
|
|
31942
32069
|
access: "view"
|
|
31943
32070
|
},
|
|
31944
|
-
"pipelineAnalytics.
|
|
32071
|
+
"pipelineAnalytics.getKeyEventsBatch": {
|
|
31945
32072
|
capName: "pipeline-analytics",
|
|
31946
32073
|
capScope: "device",
|
|
31947
32074
|
addonId: null,
|
|
31948
32075
|
access: "view"
|
|
31949
32076
|
},
|
|
31950
|
-
"pipelineAnalytics.
|
|
32077
|
+
"pipelineAnalytics.getMediaReclaimStatus": {
|
|
31951
32078
|
capName: "pipeline-analytics",
|
|
31952
32079
|
capScope: "device",
|
|
31953
32080
|
addonId: null,
|
|
@@ -32037,12 +32164,6 @@ Object.freeze({
|
|
|
32037
32164
|
addonId: null,
|
|
32038
32165
|
access: "view"
|
|
32039
32166
|
},
|
|
32040
|
-
"pipelineAnalytics.listGroups": {
|
|
32041
|
-
capName: "pipeline-analytics",
|
|
32042
|
-
capScope: "device",
|
|
32043
|
-
addonId: null,
|
|
32044
|
-
access: "view"
|
|
32045
|
-
},
|
|
32046
32167
|
"pipelineAnalytics.listOpsLog": {
|
|
32047
32168
|
capName: "pipeline-analytics",
|
|
32048
32169
|
capScope: "device",
|
|
@@ -32127,6 +32248,12 @@ Object.freeze({
|
|
|
32127
32248
|
addonId: null,
|
|
32128
32249
|
access: "create"
|
|
32129
32250
|
},
|
|
32251
|
+
"pipelineAnalytics.reclaimDebugMedia": {
|
|
32252
|
+
capName: "pipeline-analytics",
|
|
32253
|
+
capScope: "device",
|
|
32254
|
+
addonId: null,
|
|
32255
|
+
access: "create"
|
|
32256
|
+
},
|
|
32130
32257
|
"pipelineAnalytics.reconcileFromDisk": {
|
|
32131
32258
|
capName: "pipeline-analytics",
|
|
32132
32259
|
capScope: "device",
|
|
@@ -33051,6 +33178,12 @@ Object.freeze({
|
|
|
33051
33178
|
addonId: null,
|
|
33052
33179
|
access: "view"
|
|
33053
33180
|
},
|
|
33181
|
+
"recording.getPlacement": {
|
|
33182
|
+
capName: "recording",
|
|
33183
|
+
capScope: "system",
|
|
33184
|
+
addonId: null,
|
|
33185
|
+
access: "view"
|
|
33186
|
+
},
|
|
33054
33187
|
"recording.getPlaybackManifest": {
|
|
33055
33188
|
capName: "recording",
|
|
33056
33189
|
capScope: "system",
|
|
@@ -33177,6 +33310,12 @@ Object.freeze({
|
|
|
33177
33310
|
addonId: null,
|
|
33178
33311
|
access: "create"
|
|
33179
33312
|
},
|
|
33313
|
+
"recording.setDevicePlacement": {
|
|
33314
|
+
capName: "recording",
|
|
33315
|
+
capScope: "system",
|
|
33316
|
+
addonId: null,
|
|
33317
|
+
access: "create"
|
|
33318
|
+
},
|
|
33180
33319
|
"recording.startStorageMigrationMove": {
|
|
33181
33320
|
capName: "recording",
|
|
33182
33321
|
capScope: "system",
|
|
@@ -33621,12 +33760,36 @@ Object.freeze({
|
|
|
33621
33760
|
addonId: null,
|
|
33622
33761
|
access: "create"
|
|
33623
33762
|
},
|
|
33763
|
+
"storageMigration.cleanupCancel": {
|
|
33764
|
+
capName: "storage-migration",
|
|
33765
|
+
capScope: "system",
|
|
33766
|
+
addonId: null,
|
|
33767
|
+
access: "create"
|
|
33768
|
+
},
|
|
33769
|
+
"storageMigration.cleanupStart": {
|
|
33770
|
+
capName: "storage-migration",
|
|
33771
|
+
capScope: "system",
|
|
33772
|
+
addonId: null,
|
|
33773
|
+
access: "create"
|
|
33774
|
+
},
|
|
33775
|
+
"storageMigration.cleanupStatus": {
|
|
33776
|
+
capName: "storage-migration",
|
|
33777
|
+
capScope: "system",
|
|
33778
|
+
addonId: null,
|
|
33779
|
+
access: "view"
|
|
33780
|
+
},
|
|
33624
33781
|
"storageMigration.drain": {
|
|
33625
33782
|
capName: "storage-migration",
|
|
33626
33783
|
capScope: "system",
|
|
33627
33784
|
addonId: null,
|
|
33628
33785
|
access: "create"
|
|
33629
33786
|
},
|
|
33787
|
+
"storageMigration.history": {
|
|
33788
|
+
capName: "storage-migration",
|
|
33789
|
+
capScope: "system",
|
|
33790
|
+
addonId: null,
|
|
33791
|
+
access: "view"
|
|
33792
|
+
},
|
|
33630
33793
|
"storageMigration.movers": {
|
|
33631
33794
|
capName: "storage-migration",
|
|
33632
33795
|
capScope: "system",
|
|
@@ -35623,11 +35786,6 @@ Object.freeze({
|
|
|
35623
35786
|
form: "single",
|
|
35624
35787
|
optional: true
|
|
35625
35788
|
}],
|
|
35626
|
-
"pipelineAnalytics.getGroup": [{
|
|
35627
|
-
name: "deviceId",
|
|
35628
|
-
form: "single",
|
|
35629
|
-
optional: false
|
|
35630
|
-
}],
|
|
35631
35789
|
"pipelineAnalytics.getKeyEvents": [{
|
|
35632
35790
|
name: "deviceId",
|
|
35633
35791
|
form: "single",
|
|
@@ -35693,11 +35851,6 @@ Object.freeze({
|
|
|
35693
35851
|
form: "single",
|
|
35694
35852
|
optional: false
|
|
35695
35853
|
}],
|
|
35696
|
-
"pipelineAnalytics.listGroups": [{
|
|
35697
|
-
name: "deviceIds",
|
|
35698
|
-
form: "array",
|
|
35699
|
-
optional: false
|
|
35700
|
-
}],
|
|
35701
35854
|
"pipelineAnalytics.listOpsLog": [{
|
|
35702
35855
|
name: "deviceId",
|
|
35703
35856
|
form: "single",
|
|
@@ -35743,6 +35896,11 @@ Object.freeze({
|
|
|
35743
35896
|
form: "single",
|
|
35744
35897
|
optional: true
|
|
35745
35898
|
}],
|
|
35899
|
+
"pipelineAnalytics.reclaimDebugMedia": [{
|
|
35900
|
+
name: "deviceIds",
|
|
35901
|
+
form: "array",
|
|
35902
|
+
optional: true
|
|
35903
|
+
}],
|
|
35746
35904
|
"pipelineAnalytics.reconcileFromDisk": [{
|
|
35747
35905
|
name: "deviceId",
|
|
35748
35906
|
form: "single",
|
|
@@ -36108,6 +36266,11 @@ Object.freeze({
|
|
|
36108
36266
|
form: "single",
|
|
36109
36267
|
optional: false
|
|
36110
36268
|
}],
|
|
36269
|
+
"recording.setDevicePlacement": [{
|
|
36270
|
+
name: "deviceId",
|
|
36271
|
+
form: "single",
|
|
36272
|
+
optional: false
|
|
36273
|
+
}],
|
|
36111
36274
|
"recording.startStorageMigrationMove": [{
|
|
36112
36275
|
name: "deviceId",
|
|
36113
36276
|
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()
|
|
@@ -15622,6 +15700,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
15622
15700
|
"device-offline",
|
|
15623
15701
|
"device-disabled",
|
|
15624
15702
|
"device-enabled",
|
|
15703
|
+
"device-battery-low",
|
|
15704
|
+
"device-battery-normal",
|
|
15625
15705
|
"stream-online",
|
|
15626
15706
|
"stream-offline",
|
|
15627
15707
|
"node-online",
|
|
@@ -18840,46 +18920,6 @@ var RecentTracksPageSchema = object({
|
|
|
18840
18920
|
/** Cursor for the next page, or null when this page is the last. */
|
|
18841
18921
|
nextCursor: string().nullable()
|
|
18842
18922
|
});
|
|
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
18923
|
var KEY_EVENTS_DEFAULT_LIMIT = 50;
|
|
18884
18924
|
var KEY_EVENTS_MAX_LIMIT = 200;
|
|
18885
18925
|
var KeyEventQueryInput = object({
|
|
@@ -18983,9 +19023,7 @@ var TrackCascadeCountsSchema = object({
|
|
|
18983
19023
|
/** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
|
|
18984
19024
|
plates: number().int(),
|
|
18985
19025
|
/** 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()
|
|
19026
|
+
embeddings: number().int()
|
|
18989
19027
|
});
|
|
18990
19028
|
/** Disk-wins reconcile: media rows whose blobs are gone, then empty tracks. */
|
|
18991
19029
|
var DiskReconcileCountsSchema = object({
|
|
@@ -19155,6 +19193,47 @@ var RebuildStatusSchema = object({
|
|
|
19155
19193
|
/** Present when the pass ended by throwing. */
|
|
19156
19194
|
error: string().nullable()
|
|
19157
19195
|
});
|
|
19196
|
+
/**
|
|
19197
|
+
* Acknowledgement that a debug-media reclaim STARTED.
|
|
19198
|
+
*
|
|
19199
|
+
* The pass is paced at ~2 MB/s over a standing 100 GB — tens of minutes — so
|
|
19200
|
+
* it runs detached and this returns immediately. Awaiting it is how the
|
|
19201
|
+
* `addons.custom` door hit the 60 s UDS deadline while the walk carried on
|
|
19202
|
+
* with no status. Poll {@link pipelineAnalyticsCapability.methods.getMediaReclaimStatus}.
|
|
19203
|
+
*/
|
|
19204
|
+
var MediaReclaimStartResultSchema = object({
|
|
19205
|
+
started: boolean(),
|
|
19206
|
+
/** True when a pass was already running; the new request is ignored. */
|
|
19207
|
+
alreadyRunning: boolean()
|
|
19208
|
+
});
|
|
19209
|
+
var MediaReclaimInputSchema = object({
|
|
19210
|
+
mode: _enum(["report", "reclaim"]).default("report"),
|
|
19211
|
+
scopes: array(_enum(["motion-still", "track-filmstrip"])).min(1).optional(),
|
|
19212
|
+
deviceIds: array(number().int()).min(1).optional(),
|
|
19213
|
+
restart: boolean().optional(),
|
|
19214
|
+
pageSize: number().int().min(50).max(5e3).optional(),
|
|
19215
|
+
maxRowsPerDevice: number().int().min(1).max(5e5).optional(),
|
|
19216
|
+
maxReclaimPerDevice: number().int().min(1).max(5e5).optional(),
|
|
19217
|
+
maxBytesPerRun: number().int().min(1).optional(),
|
|
19218
|
+
budgetMinutes: number().int().min(1).max(720).optional(),
|
|
19219
|
+
throttleBytesPerSec: number().int().min(64 * 1024).optional(),
|
|
19220
|
+
graceMinutes: number().int().min(1).max(10080).optional()
|
|
19221
|
+
});
|
|
19222
|
+
var MediaReclaimStatusSchema = object({
|
|
19223
|
+
running: boolean(),
|
|
19224
|
+
mode: _enum(["report", "reclaim"]).nullable(),
|
|
19225
|
+
totalExamined: number(),
|
|
19226
|
+
totalEligible: number(),
|
|
19227
|
+
totalReclaimed: number(),
|
|
19228
|
+
totalBytesReclaimed: number(),
|
|
19229
|
+
totalRefused: number(),
|
|
19230
|
+
/** Device+scope windows finished in this pass. */
|
|
19231
|
+
devicesDone: number(),
|
|
19232
|
+
complete: boolean().nullable(),
|
|
19233
|
+
startedAtMs: number().nullable(),
|
|
19234
|
+
finishedAtMs: number().nullable(),
|
|
19235
|
+
error: string().nullable()
|
|
19236
|
+
});
|
|
19158
19237
|
var ReplayFrameInputSchema = object({
|
|
19159
19238
|
timestamp: number(),
|
|
19160
19239
|
frame: PipelineRunResultBridge
|
|
@@ -19193,10 +19272,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19193
19272
|
* stationary registry). Default false: the timeline lists passages,
|
|
19194
19273
|
* not parking records (operator decision, 2026-08-15). */
|
|
19195
19274
|
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(), {
|
|
19275
|
+
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
|
|
19200
19276
|
kind: "mutation",
|
|
19201
19277
|
auth: "admin"
|
|
19202
19278
|
}), 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 +19372,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19296
19372
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
19297
19373
|
kind: "query",
|
|
19298
19374
|
auth: "admin"
|
|
19375
|
+
}), method(MediaReclaimInputSchema, MediaReclaimStartResultSchema, {
|
|
19376
|
+
kind: "mutation",
|
|
19377
|
+
auth: "admin"
|
|
19378
|
+
}), method(object({}), MediaReclaimStatusSchema, {
|
|
19379
|
+
kind: "query",
|
|
19380
|
+
auth: "admin"
|
|
19299
19381
|
}), method(object({ deviceIds: array(number()).optional() }), TrainingExportSummarySchema, {
|
|
19300
19382
|
kind: "query",
|
|
19301
19383
|
auth: "admin"
|
|
@@ -21266,7 +21348,13 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
|
|
|
21266
21348
|
}), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
|
|
21267
21349
|
kind: "mutation",
|
|
21268
21350
|
auth: "admin"
|
|
21269
|
-
})
|
|
21351
|
+
}), method(StorageCleanupInputSchema, object({ jobId: string() }), {
|
|
21352
|
+
kind: "mutation",
|
|
21353
|
+
auth: "admin"
|
|
21354
|
+
}), method(StorageCleanupStatusInputSchema, StorageCleanupJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
21355
|
+
kind: "mutation",
|
|
21356
|
+
auth: "admin"
|
|
21357
|
+
}), method(object({}), array(StorageMigrationJobSchema).readonly(), { auth: "admin" });
|
|
21270
21358
|
var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
21271
21359
|
providerId: string().min(1),
|
|
21272
21360
|
displayName: string().min(1),
|
|
@@ -26644,6 +26732,33 @@ var RecordingRebalanceInputSchema = object({
|
|
|
26644
26732
|
minMoveGb: number().min(0).optional()
|
|
26645
26733
|
});
|
|
26646
26734
|
/**
|
|
26735
|
+
* Operator-facing placement of one camera onto a recordings location.
|
|
26736
|
+
*
|
|
26737
|
+
* `pinLocationId` is the operator instruction: a location id, or `null` for
|
|
26738
|
+
* Auto (the planner may move this camera). `locationId` is where high/mid
|
|
26739
|
+
* currently write — the plan, which may disagree with the pin when Auto.
|
|
26740
|
+
*/
|
|
26741
|
+
var RecordingDevicePlacementSchema = object({
|
|
26742
|
+
deviceId: number().int(),
|
|
26743
|
+
profile: string(),
|
|
26744
|
+
locationId: string()
|
|
26745
|
+
});
|
|
26746
|
+
var RecordingDevicePinSchema = object({
|
|
26747
|
+
deviceId: number().int(),
|
|
26748
|
+
/** Recordings-class location this camera is pinned to. */
|
|
26749
|
+
locationId: string()
|
|
26750
|
+
});
|
|
26751
|
+
var RecordingPlacementViewSchema = object({
|
|
26752
|
+
assignments: array(RecordingDevicePlacementSchema),
|
|
26753
|
+
pins: array(RecordingDevicePinSchema),
|
|
26754
|
+
defaultLocations: record(string(), string())
|
|
26755
|
+
});
|
|
26756
|
+
var RecordingSetDevicePlacementInputSchema = object({
|
|
26757
|
+
deviceId: number().int(),
|
|
26758
|
+
/** `null` = Auto. Otherwise a `recordings:*` location id. */
|
|
26759
|
+
locationId: string().nullable()
|
|
26760
|
+
});
|
|
26761
|
+
/**
|
|
26647
26762
|
* Result of locating footage at a wall-clock instant for one device/profile.
|
|
26648
26763
|
* `segment` carries the covering segment's window; `gap` reports the forward
|
|
26649
26764
|
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
@@ -26869,6 +26984,12 @@ method(object({
|
|
|
26869
26984
|
}), method(RecordingRebalanceInputSchema, RecordingRebalancePlanSchema, {
|
|
26870
26985
|
kind: "mutation",
|
|
26871
26986
|
auth: "admin"
|
|
26987
|
+
}), method(object({}), RecordingPlacementViewSchema, {
|
|
26988
|
+
kind: "query",
|
|
26989
|
+
auth: "admin"
|
|
26990
|
+
}), method(RecordingSetDevicePlacementInputSchema, object({ ok: literal(true) }), {
|
|
26991
|
+
kind: "mutation",
|
|
26992
|
+
auth: "admin"
|
|
26872
26993
|
});
|
|
26873
26994
|
/**
|
|
26874
26995
|
* `recording-export` cap — render a footage time range into a single downloadable
|
|
@@ -30239,6 +30360,12 @@ Object.freeze({
|
|
|
30239
30360
|
addonId: null,
|
|
30240
30361
|
access: "delete"
|
|
30241
30362
|
},
|
|
30363
|
+
"deviceManager.renameLocation": {
|
|
30364
|
+
capName: "device-manager",
|
|
30365
|
+
capScope: "system",
|
|
30366
|
+
addonId: null,
|
|
30367
|
+
access: "create"
|
|
30368
|
+
},
|
|
30242
30369
|
"deviceManager.runDeviceAction": {
|
|
30243
30370
|
capName: "device-manager",
|
|
30244
30371
|
capScope: "system",
|
|
@@ -31931,19 +32058,19 @@ Object.freeze({
|
|
|
31931
32058
|
addonId: null,
|
|
31932
32059
|
access: "view"
|
|
31933
32060
|
},
|
|
31934
|
-
"pipelineAnalytics.
|
|
32061
|
+
"pipelineAnalytics.getKeyEvents": {
|
|
31935
32062
|
capName: "pipeline-analytics",
|
|
31936
32063
|
capScope: "device",
|
|
31937
32064
|
addonId: null,
|
|
31938
32065
|
access: "view"
|
|
31939
32066
|
},
|
|
31940
|
-
"pipelineAnalytics.
|
|
32067
|
+
"pipelineAnalytics.getKeyEventsBatch": {
|
|
31941
32068
|
capName: "pipeline-analytics",
|
|
31942
32069
|
capScope: "device",
|
|
31943
32070
|
addonId: null,
|
|
31944
32071
|
access: "view"
|
|
31945
32072
|
},
|
|
31946
|
-
"pipelineAnalytics.
|
|
32073
|
+
"pipelineAnalytics.getMediaReclaimStatus": {
|
|
31947
32074
|
capName: "pipeline-analytics",
|
|
31948
32075
|
capScope: "device",
|
|
31949
32076
|
addonId: null,
|
|
@@ -32033,12 +32160,6 @@ Object.freeze({
|
|
|
32033
32160
|
addonId: null,
|
|
32034
32161
|
access: "view"
|
|
32035
32162
|
},
|
|
32036
|
-
"pipelineAnalytics.listGroups": {
|
|
32037
|
-
capName: "pipeline-analytics",
|
|
32038
|
-
capScope: "device",
|
|
32039
|
-
addonId: null,
|
|
32040
|
-
access: "view"
|
|
32041
|
-
},
|
|
32042
32163
|
"pipelineAnalytics.listOpsLog": {
|
|
32043
32164
|
capName: "pipeline-analytics",
|
|
32044
32165
|
capScope: "device",
|
|
@@ -32123,6 +32244,12 @@ Object.freeze({
|
|
|
32123
32244
|
addonId: null,
|
|
32124
32245
|
access: "create"
|
|
32125
32246
|
},
|
|
32247
|
+
"pipelineAnalytics.reclaimDebugMedia": {
|
|
32248
|
+
capName: "pipeline-analytics",
|
|
32249
|
+
capScope: "device",
|
|
32250
|
+
addonId: null,
|
|
32251
|
+
access: "create"
|
|
32252
|
+
},
|
|
32126
32253
|
"pipelineAnalytics.reconcileFromDisk": {
|
|
32127
32254
|
capName: "pipeline-analytics",
|
|
32128
32255
|
capScope: "device",
|
|
@@ -33047,6 +33174,12 @@ Object.freeze({
|
|
|
33047
33174
|
addonId: null,
|
|
33048
33175
|
access: "view"
|
|
33049
33176
|
},
|
|
33177
|
+
"recording.getPlacement": {
|
|
33178
|
+
capName: "recording",
|
|
33179
|
+
capScope: "system",
|
|
33180
|
+
addonId: null,
|
|
33181
|
+
access: "view"
|
|
33182
|
+
},
|
|
33050
33183
|
"recording.getPlaybackManifest": {
|
|
33051
33184
|
capName: "recording",
|
|
33052
33185
|
capScope: "system",
|
|
@@ -33173,6 +33306,12 @@ Object.freeze({
|
|
|
33173
33306
|
addonId: null,
|
|
33174
33307
|
access: "create"
|
|
33175
33308
|
},
|
|
33309
|
+
"recording.setDevicePlacement": {
|
|
33310
|
+
capName: "recording",
|
|
33311
|
+
capScope: "system",
|
|
33312
|
+
addonId: null,
|
|
33313
|
+
access: "create"
|
|
33314
|
+
},
|
|
33176
33315
|
"recording.startStorageMigrationMove": {
|
|
33177
33316
|
capName: "recording",
|
|
33178
33317
|
capScope: "system",
|
|
@@ -33617,12 +33756,36 @@ Object.freeze({
|
|
|
33617
33756
|
addonId: null,
|
|
33618
33757
|
access: "create"
|
|
33619
33758
|
},
|
|
33759
|
+
"storageMigration.cleanupCancel": {
|
|
33760
|
+
capName: "storage-migration",
|
|
33761
|
+
capScope: "system",
|
|
33762
|
+
addonId: null,
|
|
33763
|
+
access: "create"
|
|
33764
|
+
},
|
|
33765
|
+
"storageMigration.cleanupStart": {
|
|
33766
|
+
capName: "storage-migration",
|
|
33767
|
+
capScope: "system",
|
|
33768
|
+
addonId: null,
|
|
33769
|
+
access: "create"
|
|
33770
|
+
},
|
|
33771
|
+
"storageMigration.cleanupStatus": {
|
|
33772
|
+
capName: "storage-migration",
|
|
33773
|
+
capScope: "system",
|
|
33774
|
+
addonId: null,
|
|
33775
|
+
access: "view"
|
|
33776
|
+
},
|
|
33620
33777
|
"storageMigration.drain": {
|
|
33621
33778
|
capName: "storage-migration",
|
|
33622
33779
|
capScope: "system",
|
|
33623
33780
|
addonId: null,
|
|
33624
33781
|
access: "create"
|
|
33625
33782
|
},
|
|
33783
|
+
"storageMigration.history": {
|
|
33784
|
+
capName: "storage-migration",
|
|
33785
|
+
capScope: "system",
|
|
33786
|
+
addonId: null,
|
|
33787
|
+
access: "view"
|
|
33788
|
+
},
|
|
33626
33789
|
"storageMigration.movers": {
|
|
33627
33790
|
capName: "storage-migration",
|
|
33628
33791
|
capScope: "system",
|
|
@@ -35619,11 +35782,6 @@ Object.freeze({
|
|
|
35619
35782
|
form: "single",
|
|
35620
35783
|
optional: true
|
|
35621
35784
|
}],
|
|
35622
|
-
"pipelineAnalytics.getGroup": [{
|
|
35623
|
-
name: "deviceId",
|
|
35624
|
-
form: "single",
|
|
35625
|
-
optional: false
|
|
35626
|
-
}],
|
|
35627
35785
|
"pipelineAnalytics.getKeyEvents": [{
|
|
35628
35786
|
name: "deviceId",
|
|
35629
35787
|
form: "single",
|
|
@@ -35689,11 +35847,6 @@ Object.freeze({
|
|
|
35689
35847
|
form: "single",
|
|
35690
35848
|
optional: false
|
|
35691
35849
|
}],
|
|
35692
|
-
"pipelineAnalytics.listGroups": [{
|
|
35693
|
-
name: "deviceIds",
|
|
35694
|
-
form: "array",
|
|
35695
|
-
optional: false
|
|
35696
|
-
}],
|
|
35697
35850
|
"pipelineAnalytics.listOpsLog": [{
|
|
35698
35851
|
name: "deviceId",
|
|
35699
35852
|
form: "single",
|
|
@@ -35739,6 +35892,11 @@ Object.freeze({
|
|
|
35739
35892
|
form: "single",
|
|
35740
35893
|
optional: true
|
|
35741
35894
|
}],
|
|
35895
|
+
"pipelineAnalytics.reclaimDebugMedia": [{
|
|
35896
|
+
name: "deviceIds",
|
|
35897
|
+
form: "array",
|
|
35898
|
+
optional: true
|
|
35899
|
+
}],
|
|
35742
35900
|
"pipelineAnalytics.reconcileFromDisk": [{
|
|
35743
35901
|
name: "deviceId",
|
|
35744
35902
|
form: "single",
|
|
@@ -36104,6 +36262,11 @@ Object.freeze({
|
|
|
36104
36262
|
form: "single",
|
|
36105
36263
|
optional: false
|
|
36106
36264
|
}],
|
|
36265
|
+
"recording.setDevicePlacement": [{
|
|
36266
|
+
name: "deviceId",
|
|
36267
|
+
form: "single",
|
|
36268
|
+
optional: false
|
|
36269
|
+
}],
|
|
36107
36270
|
"recording.startStorageMigrationMove": [{
|
|
36108
36271
|
name: "deviceId",
|
|
36109
36272
|
form: "single",
|