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