@camstack/addon-provider-wyze 0.2.53 → 0.2.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/addon.js +234 -73
- package/dist/addon.mjs +234 -73
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -8128,6 +8128,13 @@ var MediaRelocateModeSchema = _enum([
|
|
|
8128
8128
|
]);
|
|
8129
8129
|
var RelocateMediaInputSchema = object({
|
|
8130
8130
|
toLocationId: string(),
|
|
8131
|
+
/**
|
|
8132
|
+
* Restrict the pass to rows currently on this location. Omitted / `'*'` =
|
|
8133
|
+
* every row that is not already on `toLocationId` (the historical
|
|
8134
|
+
* behaviour). A named source is what a from→to migration needs: without it
|
|
8135
|
+
* "move events off disk 2" also emptied disk 1.
|
|
8136
|
+
*/
|
|
8137
|
+
fromLocationId: string().optional(),
|
|
8131
8138
|
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8132
8139
|
/** Omitted = `move`, the pre-existing behaviour. */
|
|
8133
8140
|
mode: MediaRelocateModeSchema.optional()
|
|
@@ -8195,6 +8202,19 @@ var StorageMigrationDestinationsSchema = object({
|
|
|
8195
8202
|
galleryMedia: string().min(1).optional()
|
|
8196
8203
|
}).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
|
|
8197
8204
|
/**
|
|
8205
|
+
* Optional named source per class. Omitted = the class's current default
|
|
8206
|
+
* (the historical behaviour). A named source that is NOT the default is a
|
|
8207
|
+
* drain of that disk: bytes move, the default stays, and the source is
|
|
8208
|
+
* disabled when the move finishes.
|
|
8209
|
+
*/
|
|
8210
|
+
var StorageMigrationSourcesSchema = object({
|
|
8211
|
+
recordings: string().min(1).optional(),
|
|
8212
|
+
recordingsLow: string().min(1).optional(),
|
|
8213
|
+
eventMedia: string().min(1).optional(),
|
|
8214
|
+
backups: string().min(1).optional(),
|
|
8215
|
+
galleryMedia: string().min(1).optional()
|
|
8216
|
+
}).optional();
|
|
8217
|
+
/**
|
|
8198
8218
|
* How a migration sequences the cutover against the byte move.
|
|
8199
8219
|
*
|
|
8200
8220
|
* - `blocking` — the historical order: pause, move every byte, repoint,
|
|
@@ -8216,6 +8236,8 @@ var StorageMigrationModeSchema = _enum(["blocking", "nonBlocking"]);
|
|
|
8216
8236
|
/** Shared input for planning and starting an orchestrated storage migration. */
|
|
8217
8237
|
var StorageMigrationInputSchema = object({
|
|
8218
8238
|
destinations: StorageMigrationDestinationsSchema,
|
|
8239
|
+
/** Omitted = each class's current default. */
|
|
8240
|
+
sources: StorageMigrationSourcesSchema,
|
|
8219
8241
|
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8220
8242
|
/** Omitted = `blocking`, which stays the default. */
|
|
8221
8243
|
mode: StorageMigrationModeSchema.optional()
|
|
@@ -8295,6 +8317,13 @@ var StorageMigrationMoveSchema = object({
|
|
|
8295
8317
|
storageClass: StorageMigrationClassSchema,
|
|
8296
8318
|
fromLocationId: string(),
|
|
8297
8319
|
toLocationId: string(),
|
|
8320
|
+
/**
|
|
8321
|
+
* True when `from` was NOT the class default at plan time. The move still
|
|
8322
|
+
* copies bytes, but the default is left alone and the source is disabled
|
|
8323
|
+
* once the copy verifies. Absent on jobs planned before this field existed
|
|
8324
|
+
* — those jobs always repointed, which is `false`.
|
|
8325
|
+
*/
|
|
8326
|
+
freezeSource: boolean().optional(),
|
|
8298
8327
|
moverJobId: string().nullable(),
|
|
8299
8328
|
state: RelocateJobStateSchema.nullable(),
|
|
8300
8329
|
error: string().nullable(),
|
|
@@ -8308,6 +8337,7 @@ var StorageMigrationJobSchema = object({
|
|
|
8308
8337
|
* can tell a seconds-long cutover from a thirty-hour one. */
|
|
8309
8338
|
mode: StorageMigrationModeSchema,
|
|
8310
8339
|
destinations: StorageMigrationDestinationsSchema,
|
|
8340
|
+
sources: StorageMigrationSourcesSchema,
|
|
8311
8341
|
throttleMbps: number(),
|
|
8312
8342
|
moves: array(StorageMigrationMoveSchema),
|
|
8313
8343
|
pauseLeaseId: string().nullable(),
|
|
@@ -8333,6 +8363,7 @@ var StorageMigrationFindingSchema = object({
|
|
|
8333
8363
|
});
|
|
8334
8364
|
var StorageMigrationPlanSchema = object({
|
|
8335
8365
|
destinations: StorageMigrationDestinationsSchema,
|
|
8366
|
+
sources: StorageMigrationSourcesSchema,
|
|
8336
8367
|
/** The mode this plan was built for. A plan is only valid for its mode: the
|
|
8337
8368
|
* `eventMedia` seal gate and the single-cardinality refusal both depend on
|
|
8338
8369
|
* it. */
|
|
@@ -8340,7 +8371,8 @@ var StorageMigrationPlanSchema = object({
|
|
|
8340
8371
|
moves: array(object({
|
|
8341
8372
|
storageClass: StorageMigrationClassSchema,
|
|
8342
8373
|
fromLocationId: string(),
|
|
8343
|
-
toLocationId: string()
|
|
8374
|
+
toLocationId: string(),
|
|
8375
|
+
freezeSource: boolean().optional()
|
|
8344
8376
|
})),
|
|
8345
8377
|
findings: array(StorageMigrationFindingSchema)
|
|
8346
8378
|
});
|
|
@@ -8518,10 +8550,51 @@ var LedgerWalkReportSchema = object({
|
|
|
8518
8550
|
var RelocatableMediaCountSchema = object({ rows: number().int().nonnegative() }).nullable();
|
|
8519
8551
|
var RelocatableMediaCountInputSchema = object({
|
|
8520
8552
|
toLocationId: string().min(1),
|
|
8553
|
+
/** Restrict the count to one source; omitted / `'*'` = every non-target row. */
|
|
8554
|
+
fromLocationId: string().optional(),
|
|
8521
8555
|
/** Omitted = `move`. */
|
|
8522
8556
|
mode: MediaRelocateModeSchema.optional()
|
|
8523
8557
|
});
|
|
8524
8558
|
/**
|
|
8559
|
+
* Operator cleanup of leftover analytics rows, optional debug media, and
|
|
8560
|
+
* ghost ledger entries on frozen footage locations.
|
|
8561
|
+
*
|
|
8562
|
+
* A pass is tens of minutes on a standing backlog. The hub method RETURNS
|
|
8563
|
+
* `{ jobId }` immediately; progress is `cleanupStatus`. Awaiting the work
|
|
8564
|
+
* is how `addons.custom` hit the 60 s UDS deadline while reclaim continued
|
|
8565
|
+
* with no operator-visible status.
|
|
8566
|
+
*/
|
|
8567
|
+
var StorageCleanupPhaseSchema = _enum([
|
|
8568
|
+
"orphans",
|
|
8569
|
+
"debug-media",
|
|
8570
|
+
"ghost-ledger",
|
|
8571
|
+
"done",
|
|
8572
|
+
"failed",
|
|
8573
|
+
"cancelled"
|
|
8574
|
+
]);
|
|
8575
|
+
var StorageCleanupInputSchema = object({
|
|
8576
|
+
/** Also walk motion stills / track filmstrips. Off by default. */
|
|
8577
|
+
includeDebugMedia: boolean().optional() });
|
|
8578
|
+
var StorageCleanupJobSchema = object({
|
|
8579
|
+
jobId: string(),
|
|
8580
|
+
phase: StorageCleanupPhaseSchema,
|
|
8581
|
+
includeDebugMedia: boolean(),
|
|
8582
|
+
orphansReclaimed: number().int().nonnegative(),
|
|
8583
|
+
orphanBytesReclaimed: number().int().nonnegative(),
|
|
8584
|
+
debugMediaReclaimed: number().int().nonnegative(),
|
|
8585
|
+
debugMediaBytesReclaimed: number().int().nonnegative(),
|
|
8586
|
+
ghostsForgotten: number().int().nonnegative(),
|
|
8587
|
+
ghostBytesForgotten: number().int().nonnegative(),
|
|
8588
|
+
/** Short operator-facing line: current collection, pass, or location. */
|
|
8589
|
+
detail: string().nullable(),
|
|
8590
|
+
cancelRequested: boolean(),
|
|
8591
|
+
startedAt: number(),
|
|
8592
|
+
updatedAt: number(),
|
|
8593
|
+
finishedAt: number().nullable(),
|
|
8594
|
+
error: string().nullable()
|
|
8595
|
+
});
|
|
8596
|
+
var StorageCleanupStatusInputSchema = object({ jobId: string().optional() });
|
|
8597
|
+
/**
|
|
8525
8598
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
8526
8599
|
* storage a location serves. Defined here (not in `capabilities/storage.cap.ts`)
|
|
8527
8600
|
* so the persisted record schema and the consumer-facing cap can both consume it
|
|
@@ -8549,11 +8622,10 @@ var StorageLocationTypeSchema = string().regex(/^[a-z][a-zA-Z0-9-]*$/);
|
|
|
8549
8622
|
* The default location for a type uses `id === <type>:default` by
|
|
8550
8623
|
* convention (the bare type ref like `'backups'` resolves to it).
|
|
8551
8624
|
*
|
|
8552
|
-
* `isSystem
|
|
8553
|
-
*
|
|
8554
|
-
*
|
|
8555
|
-
*
|
|
8556
|
-
* deleting it is rejected at the cap level.
|
|
8625
|
+
* `isSystem` is a legacy persisted flag. Seed still creates the initial
|
|
8626
|
+
* `<type>:default` locations; the flag is no longer a lock, a badge, or a
|
|
8627
|
+
* prune selector. New writes leave it false. Deletion is gated on uniqueness
|
|
8628
|
+
* / last-enabled, not on this bit.
|
|
8557
8629
|
*/
|
|
8558
8630
|
var StorageLocationSchema = object({
|
|
8559
8631
|
id: string().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/),
|
|
@@ -13096,6 +13168,12 @@ method(object({
|
|
|
13096
13168
|
}), _void(), {
|
|
13097
13169
|
kind: "mutation",
|
|
13098
13170
|
auth: "admin"
|
|
13171
|
+
}), method(object({
|
|
13172
|
+
from: string(),
|
|
13173
|
+
to: string()
|
|
13174
|
+
}), object({ moved: number() }), {
|
|
13175
|
+
kind: "mutation",
|
|
13176
|
+
auth: "admin"
|
|
13099
13177
|
}), method(object({
|
|
13100
13178
|
deviceId: number(),
|
|
13101
13179
|
disabled: boolean()
|
|
@@ -19104,46 +19182,6 @@ var RecentTracksPageSchema = object({
|
|
|
19104
19182
|
/** Cursor for the next page, or null when this page is the last. */
|
|
19105
19183
|
nextCursor: string().nullable()
|
|
19106
19184
|
});
|
|
19107
|
-
var LIST_GROUPS_DEFAULT_LIMIT = 40;
|
|
19108
|
-
var LIST_GROUPS_MAX_LIMIT = 100;
|
|
19109
|
-
var AnalyticsGroupRecordSchema = object({
|
|
19110
|
-
id: string(),
|
|
19111
|
-
deviceId: number().int(),
|
|
19112
|
-
openedAt: number().int(),
|
|
19113
|
-
closedAt: number().int(),
|
|
19114
|
-
timestamp: number().int(),
|
|
19115
|
-
memberCount: number().int(),
|
|
19116
|
-
memberTrackIds: array(string()).readonly(),
|
|
19117
|
-
className: string(),
|
|
19118
|
-
classes: array(string()).readonly(),
|
|
19119
|
-
/** Relative event-media path, or null when the group has no picture yet. */
|
|
19120
|
-
mediaUrl: string().nullable(),
|
|
19121
|
-
singleton: boolean()
|
|
19122
|
-
});
|
|
19123
|
-
var AnalyticsGroupMemberSchema = object({
|
|
19124
|
-
trackId: string(),
|
|
19125
|
-
deviceId: number().int(),
|
|
19126
|
-
className: string(),
|
|
19127
|
-
firstSeen: number().int(),
|
|
19128
|
-
lastSeen: number().int(),
|
|
19129
|
-
mediaUrl: string().nullable()
|
|
19130
|
-
});
|
|
19131
|
-
var AnalyticsGroupDetailSchema = AnalyticsGroupRecordSchema.extend({ members: array(AnalyticsGroupMemberSchema).readonly() });
|
|
19132
|
-
var ListGroupsQueryInput = object({
|
|
19133
|
-
/** Devices to merge. An empty array yields `{ groups: [], nextCursor: null }`. */
|
|
19134
|
-
deviceIds: array(number()),
|
|
19135
|
-
/** Window lower bound on `closedAt` (inclusive). */
|
|
19136
|
-
since: number().optional(),
|
|
19137
|
-
/** Window upper bound on `openedAt` (inclusive). */
|
|
19138
|
-
until: number().optional(),
|
|
19139
|
-
limit: number().int().min(1).max(LIST_GROUPS_MAX_LIMIT).default(LIST_GROUPS_DEFAULT_LIMIT),
|
|
19140
|
-
/** Opaque continuation cursor from a previous page's `nextCursor`. */
|
|
19141
|
-
cursor: string().optional()
|
|
19142
|
-
});
|
|
19143
|
-
var ListGroupsPageSchema = object({
|
|
19144
|
-
groups: array(AnalyticsGroupRecordSchema).readonly(),
|
|
19145
|
-
nextCursor: string().nullable()
|
|
19146
|
-
});
|
|
19147
19185
|
var KEY_EVENTS_DEFAULT_LIMIT = 50;
|
|
19148
19186
|
var KEY_EVENTS_MAX_LIMIT = 200;
|
|
19149
19187
|
var KeyEventQueryInput = object({
|
|
@@ -19247,9 +19285,7 @@ var TrackCascadeCountsSchema = object({
|
|
|
19247
19285
|
/** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
|
|
19248
19286
|
plates: number().int(),
|
|
19249
19287
|
/** Per-track CLIP search vectors removed (best-effort). */
|
|
19250
|
-
embeddings: number().int()
|
|
19251
|
-
/** Group membership + group rows removed with their last member (best-effort). */
|
|
19252
|
-
groups: number().int()
|
|
19288
|
+
embeddings: number().int()
|
|
19253
19289
|
});
|
|
19254
19290
|
/** Disk-wins reconcile: media rows whose blobs are gone, then empty tracks. */
|
|
19255
19291
|
var DiskReconcileCountsSchema = object({
|
|
@@ -19419,6 +19455,47 @@ var RebuildStatusSchema = object({
|
|
|
19419
19455
|
/** Present when the pass ended by throwing. */
|
|
19420
19456
|
error: string().nullable()
|
|
19421
19457
|
});
|
|
19458
|
+
/**
|
|
19459
|
+
* Acknowledgement that a debug-media reclaim STARTED.
|
|
19460
|
+
*
|
|
19461
|
+
* The pass is paced at ~2 MB/s over a standing 100 GB — tens of minutes — so
|
|
19462
|
+
* it runs detached and this returns immediately. Awaiting it is how the
|
|
19463
|
+
* `addons.custom` door hit the 60 s UDS deadline while the walk carried on
|
|
19464
|
+
* with no status. Poll {@link pipelineAnalyticsCapability.methods.getMediaReclaimStatus}.
|
|
19465
|
+
*/
|
|
19466
|
+
var MediaReclaimStartResultSchema = object({
|
|
19467
|
+
started: boolean(),
|
|
19468
|
+
/** True when a pass was already running; the new request is ignored. */
|
|
19469
|
+
alreadyRunning: boolean()
|
|
19470
|
+
});
|
|
19471
|
+
var MediaReclaimInputSchema = object({
|
|
19472
|
+
mode: _enum(["report", "reclaim"]).default("report"),
|
|
19473
|
+
scopes: array(_enum(["motion-still", "track-filmstrip"])).min(1).optional(),
|
|
19474
|
+
deviceIds: array(number().int()).min(1).optional(),
|
|
19475
|
+
restart: boolean().optional(),
|
|
19476
|
+
pageSize: number().int().min(50).max(5e3).optional(),
|
|
19477
|
+
maxRowsPerDevice: number().int().min(1).max(5e5).optional(),
|
|
19478
|
+
maxReclaimPerDevice: number().int().min(1).max(5e5).optional(),
|
|
19479
|
+
maxBytesPerRun: number().int().min(1).optional(),
|
|
19480
|
+
budgetMinutes: number().int().min(1).max(720).optional(),
|
|
19481
|
+
throttleBytesPerSec: number().int().min(64 * 1024).optional(),
|
|
19482
|
+
graceMinutes: number().int().min(1).max(10080).optional()
|
|
19483
|
+
});
|
|
19484
|
+
var MediaReclaimStatusSchema = object({
|
|
19485
|
+
running: boolean(),
|
|
19486
|
+
mode: _enum(["report", "reclaim"]).nullable(),
|
|
19487
|
+
totalExamined: number(),
|
|
19488
|
+
totalEligible: number(),
|
|
19489
|
+
totalReclaimed: number(),
|
|
19490
|
+
totalBytesReclaimed: number(),
|
|
19491
|
+
totalRefused: number(),
|
|
19492
|
+
/** Device+scope windows finished in this pass. */
|
|
19493
|
+
devicesDone: number(),
|
|
19494
|
+
complete: boolean().nullable(),
|
|
19495
|
+
startedAtMs: number().nullable(),
|
|
19496
|
+
finishedAtMs: number().nullable(),
|
|
19497
|
+
error: string().nullable()
|
|
19498
|
+
});
|
|
19422
19499
|
var ReplayFrameInputSchema = object({
|
|
19423
19500
|
timestamp: number(),
|
|
19424
19501
|
frame: PipelineRunResultBridge
|
|
@@ -19457,10 +19534,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19457
19534
|
* stationary registry). Default false: the timeline lists passages,
|
|
19458
19535
|
* not parking records (operator decision, 2026-08-15). */
|
|
19459
19536
|
includeStationary: boolean().optional()
|
|
19460
|
-
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(
|
|
19461
|
-
deviceId: number(),
|
|
19462
|
-
groupId: string().min(1)
|
|
19463
|
-
}), AnalyticsGroupDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
|
|
19537
|
+
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
|
|
19464
19538
|
kind: "mutation",
|
|
19465
19539
|
auth: "admin"
|
|
19466
19540
|
}), 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({
|
|
@@ -19560,6 +19634,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19560
19634
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
19561
19635
|
kind: "query",
|
|
19562
19636
|
auth: "admin"
|
|
19637
|
+
}), method(MediaReclaimInputSchema, MediaReclaimStartResultSchema, {
|
|
19638
|
+
kind: "mutation",
|
|
19639
|
+
auth: "admin"
|
|
19640
|
+
}), method(object({}), MediaReclaimStatusSchema, {
|
|
19641
|
+
kind: "query",
|
|
19642
|
+
auth: "admin"
|
|
19563
19643
|
}), method(object({ deviceIds: array(number()).optional() }), TrainingExportSummarySchema, {
|
|
19564
19644
|
kind: "query",
|
|
19565
19645
|
auth: "admin"
|
|
@@ -21634,7 +21714,13 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
|
|
|
21634
21714
|
}), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
|
|
21635
21715
|
kind: "mutation",
|
|
21636
21716
|
auth: "admin"
|
|
21637
|
-
})
|
|
21717
|
+
}), method(StorageCleanupInputSchema, object({ jobId: string() }), {
|
|
21718
|
+
kind: "mutation",
|
|
21719
|
+
auth: "admin"
|
|
21720
|
+
}), method(StorageCleanupStatusInputSchema, StorageCleanupJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
21721
|
+
kind: "mutation",
|
|
21722
|
+
auth: "admin"
|
|
21723
|
+
}), method(object({}), array(StorageMigrationJobSchema).readonly(), { auth: "admin" });
|
|
21638
21724
|
var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
21639
21725
|
providerId: string().min(1),
|
|
21640
21726
|
displayName: string().min(1),
|
|
@@ -28735,6 +28821,33 @@ var RecordingRebalanceInputSchema = object({
|
|
|
28735
28821
|
minMoveGb: number().min(0).optional()
|
|
28736
28822
|
});
|
|
28737
28823
|
/**
|
|
28824
|
+
* Operator-facing placement of one camera onto a recordings location.
|
|
28825
|
+
*
|
|
28826
|
+
* `pinLocationId` is the operator instruction: a location id, or `null` for
|
|
28827
|
+
* Auto (the planner may move this camera). `locationId` is where high/mid
|
|
28828
|
+
* currently write — the plan, which may disagree with the pin when Auto.
|
|
28829
|
+
*/
|
|
28830
|
+
var RecordingDevicePlacementSchema = object({
|
|
28831
|
+
deviceId: number().int(),
|
|
28832
|
+
profile: string(),
|
|
28833
|
+
locationId: string()
|
|
28834
|
+
});
|
|
28835
|
+
var RecordingDevicePinSchema = object({
|
|
28836
|
+
deviceId: number().int(),
|
|
28837
|
+
/** Recordings-class location this camera is pinned to. */
|
|
28838
|
+
locationId: string()
|
|
28839
|
+
});
|
|
28840
|
+
var RecordingPlacementViewSchema = object({
|
|
28841
|
+
assignments: array(RecordingDevicePlacementSchema),
|
|
28842
|
+
pins: array(RecordingDevicePinSchema),
|
|
28843
|
+
defaultLocations: record(string(), string())
|
|
28844
|
+
});
|
|
28845
|
+
var RecordingSetDevicePlacementInputSchema = object({
|
|
28846
|
+
deviceId: number().int(),
|
|
28847
|
+
/** `null` = Auto. Otherwise a `recordings:*` location id. */
|
|
28848
|
+
locationId: string().nullable()
|
|
28849
|
+
});
|
|
28850
|
+
/**
|
|
28738
28851
|
* Result of locating footage at a wall-clock instant for one device/profile.
|
|
28739
28852
|
* `segment` carries the covering segment's window; `gap` reports the forward
|
|
28740
28853
|
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
@@ -28960,6 +29073,12 @@ method(object({
|
|
|
28960
29073
|
}), method(RecordingRebalanceInputSchema, RecordingRebalancePlanSchema, {
|
|
28961
29074
|
kind: "mutation",
|
|
28962
29075
|
auth: "admin"
|
|
29076
|
+
}), method(object({}), RecordingPlacementViewSchema, {
|
|
29077
|
+
kind: "query",
|
|
29078
|
+
auth: "admin"
|
|
29079
|
+
}), method(RecordingSetDevicePlacementInputSchema, object({ ok: literal(true) }), {
|
|
29080
|
+
kind: "mutation",
|
|
29081
|
+
auth: "admin"
|
|
28963
29082
|
});
|
|
28964
29083
|
/**
|
|
28965
29084
|
* `recording-export` cap — render a footage time range into a single downloadable
|
|
@@ -34029,6 +34148,12 @@ Object.freeze({
|
|
|
34029
34148
|
addonId: null,
|
|
34030
34149
|
access: "delete"
|
|
34031
34150
|
},
|
|
34151
|
+
"deviceManager.renameLocation": {
|
|
34152
|
+
capName: "device-manager",
|
|
34153
|
+
capScope: "system",
|
|
34154
|
+
addonId: null,
|
|
34155
|
+
access: "create"
|
|
34156
|
+
},
|
|
34032
34157
|
"deviceManager.runDeviceAction": {
|
|
34033
34158
|
capName: "device-manager",
|
|
34034
34159
|
capScope: "system",
|
|
@@ -35721,19 +35846,19 @@ Object.freeze({
|
|
|
35721
35846
|
addonId: null,
|
|
35722
35847
|
access: "view"
|
|
35723
35848
|
},
|
|
35724
|
-
"pipelineAnalytics.
|
|
35849
|
+
"pipelineAnalytics.getKeyEvents": {
|
|
35725
35850
|
capName: "pipeline-analytics",
|
|
35726
35851
|
capScope: "device",
|
|
35727
35852
|
addonId: null,
|
|
35728
35853
|
access: "view"
|
|
35729
35854
|
},
|
|
35730
|
-
"pipelineAnalytics.
|
|
35855
|
+
"pipelineAnalytics.getKeyEventsBatch": {
|
|
35731
35856
|
capName: "pipeline-analytics",
|
|
35732
35857
|
capScope: "device",
|
|
35733
35858
|
addonId: null,
|
|
35734
35859
|
access: "view"
|
|
35735
35860
|
},
|
|
35736
|
-
"pipelineAnalytics.
|
|
35861
|
+
"pipelineAnalytics.getMediaReclaimStatus": {
|
|
35737
35862
|
capName: "pipeline-analytics",
|
|
35738
35863
|
capScope: "device",
|
|
35739
35864
|
addonId: null,
|
|
@@ -35823,12 +35948,6 @@ Object.freeze({
|
|
|
35823
35948
|
addonId: null,
|
|
35824
35949
|
access: "view"
|
|
35825
35950
|
},
|
|
35826
|
-
"pipelineAnalytics.listGroups": {
|
|
35827
|
-
capName: "pipeline-analytics",
|
|
35828
|
-
capScope: "device",
|
|
35829
|
-
addonId: null,
|
|
35830
|
-
access: "view"
|
|
35831
|
-
},
|
|
35832
35951
|
"pipelineAnalytics.listOpsLog": {
|
|
35833
35952
|
capName: "pipeline-analytics",
|
|
35834
35953
|
capScope: "device",
|
|
@@ -35913,6 +36032,12 @@ Object.freeze({
|
|
|
35913
36032
|
addonId: null,
|
|
35914
36033
|
access: "create"
|
|
35915
36034
|
},
|
|
36035
|
+
"pipelineAnalytics.reclaimDebugMedia": {
|
|
36036
|
+
capName: "pipeline-analytics",
|
|
36037
|
+
capScope: "device",
|
|
36038
|
+
addonId: null,
|
|
36039
|
+
access: "create"
|
|
36040
|
+
},
|
|
35916
36041
|
"pipelineAnalytics.reconcileFromDisk": {
|
|
35917
36042
|
capName: "pipeline-analytics",
|
|
35918
36043
|
capScope: "device",
|
|
@@ -36837,6 +36962,12 @@ Object.freeze({
|
|
|
36837
36962
|
addonId: null,
|
|
36838
36963
|
access: "view"
|
|
36839
36964
|
},
|
|
36965
|
+
"recording.getPlacement": {
|
|
36966
|
+
capName: "recording",
|
|
36967
|
+
capScope: "system",
|
|
36968
|
+
addonId: null,
|
|
36969
|
+
access: "view"
|
|
36970
|
+
},
|
|
36840
36971
|
"recording.getPlaybackManifest": {
|
|
36841
36972
|
capName: "recording",
|
|
36842
36973
|
capScope: "system",
|
|
@@ -36963,6 +37094,12 @@ Object.freeze({
|
|
|
36963
37094
|
addonId: null,
|
|
36964
37095
|
access: "create"
|
|
36965
37096
|
},
|
|
37097
|
+
"recording.setDevicePlacement": {
|
|
37098
|
+
capName: "recording",
|
|
37099
|
+
capScope: "system",
|
|
37100
|
+
addonId: null,
|
|
37101
|
+
access: "create"
|
|
37102
|
+
},
|
|
36966
37103
|
"recording.startStorageMigrationMove": {
|
|
36967
37104
|
capName: "recording",
|
|
36968
37105
|
capScope: "system",
|
|
@@ -37407,12 +37544,36 @@ Object.freeze({
|
|
|
37407
37544
|
addonId: null,
|
|
37408
37545
|
access: "create"
|
|
37409
37546
|
},
|
|
37547
|
+
"storageMigration.cleanupCancel": {
|
|
37548
|
+
capName: "storage-migration",
|
|
37549
|
+
capScope: "system",
|
|
37550
|
+
addonId: null,
|
|
37551
|
+
access: "create"
|
|
37552
|
+
},
|
|
37553
|
+
"storageMigration.cleanupStart": {
|
|
37554
|
+
capName: "storage-migration",
|
|
37555
|
+
capScope: "system",
|
|
37556
|
+
addonId: null,
|
|
37557
|
+
access: "create"
|
|
37558
|
+
},
|
|
37559
|
+
"storageMigration.cleanupStatus": {
|
|
37560
|
+
capName: "storage-migration",
|
|
37561
|
+
capScope: "system",
|
|
37562
|
+
addonId: null,
|
|
37563
|
+
access: "view"
|
|
37564
|
+
},
|
|
37410
37565
|
"storageMigration.drain": {
|
|
37411
37566
|
capName: "storage-migration",
|
|
37412
37567
|
capScope: "system",
|
|
37413
37568
|
addonId: null,
|
|
37414
37569
|
access: "create"
|
|
37415
37570
|
},
|
|
37571
|
+
"storageMigration.history": {
|
|
37572
|
+
capName: "storage-migration",
|
|
37573
|
+
capScope: "system",
|
|
37574
|
+
addonId: null,
|
|
37575
|
+
access: "view"
|
|
37576
|
+
},
|
|
37416
37577
|
"storageMigration.movers": {
|
|
37417
37578
|
capName: "storage-migration",
|
|
37418
37579
|
capScope: "system",
|
|
@@ -39409,11 +39570,6 @@ Object.freeze({
|
|
|
39409
39570
|
form: "single",
|
|
39410
39571
|
optional: true
|
|
39411
39572
|
}],
|
|
39412
|
-
"pipelineAnalytics.getGroup": [{
|
|
39413
|
-
name: "deviceId",
|
|
39414
|
-
form: "single",
|
|
39415
|
-
optional: false
|
|
39416
|
-
}],
|
|
39417
39573
|
"pipelineAnalytics.getKeyEvents": [{
|
|
39418
39574
|
name: "deviceId",
|
|
39419
39575
|
form: "single",
|
|
@@ -39479,11 +39635,6 @@ Object.freeze({
|
|
|
39479
39635
|
form: "single",
|
|
39480
39636
|
optional: false
|
|
39481
39637
|
}],
|
|
39482
|
-
"pipelineAnalytics.listGroups": [{
|
|
39483
|
-
name: "deviceIds",
|
|
39484
|
-
form: "array",
|
|
39485
|
-
optional: false
|
|
39486
|
-
}],
|
|
39487
39638
|
"pipelineAnalytics.listOpsLog": [{
|
|
39488
39639
|
name: "deviceId",
|
|
39489
39640
|
form: "single",
|
|
@@ -39529,6 +39680,11 @@ Object.freeze({
|
|
|
39529
39680
|
form: "single",
|
|
39530
39681
|
optional: true
|
|
39531
39682
|
}],
|
|
39683
|
+
"pipelineAnalytics.reclaimDebugMedia": [{
|
|
39684
|
+
name: "deviceIds",
|
|
39685
|
+
form: "array",
|
|
39686
|
+
optional: true
|
|
39687
|
+
}],
|
|
39532
39688
|
"pipelineAnalytics.reconcileFromDisk": [{
|
|
39533
39689
|
name: "deviceId",
|
|
39534
39690
|
form: "single",
|
|
@@ -39894,6 +40050,11 @@ Object.freeze({
|
|
|
39894
40050
|
form: "single",
|
|
39895
40051
|
optional: false
|
|
39896
40052
|
}],
|
|
40053
|
+
"recording.setDevicePlacement": [{
|
|
40054
|
+
name: "deviceId",
|
|
40055
|
+
form: "single",
|
|
40056
|
+
optional: false
|
|
40057
|
+
}],
|
|
39897
40058
|
"recording.startStorageMigrationMove": [{
|
|
39898
40059
|
name: "deviceId",
|
|
39899
40060
|
form: "single",
|
package/dist/addon.mjs
CHANGED
|
@@ -8107,6 +8107,13 @@ var MediaRelocateModeSchema = _enum([
|
|
|
8107
8107
|
]);
|
|
8108
8108
|
var RelocateMediaInputSchema = object({
|
|
8109
8109
|
toLocationId: string(),
|
|
8110
|
+
/**
|
|
8111
|
+
* Restrict the pass to rows currently on this location. Omitted / `'*'` =
|
|
8112
|
+
* every row that is not already on `toLocationId` (the historical
|
|
8113
|
+
* behaviour). A named source is what a from→to migration needs: without it
|
|
8114
|
+
* "move events off disk 2" also emptied disk 1.
|
|
8115
|
+
*/
|
|
8116
|
+
fromLocationId: string().optional(),
|
|
8110
8117
|
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8111
8118
|
/** Omitted = `move`, the pre-existing behaviour. */
|
|
8112
8119
|
mode: MediaRelocateModeSchema.optional()
|
|
@@ -8174,6 +8181,19 @@ var StorageMigrationDestinationsSchema = object({
|
|
|
8174
8181
|
galleryMedia: string().min(1).optional()
|
|
8175
8182
|
}).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
|
|
8176
8183
|
/**
|
|
8184
|
+
* Optional named source per class. Omitted = the class's current default
|
|
8185
|
+
* (the historical behaviour). A named source that is NOT the default is a
|
|
8186
|
+
* drain of that disk: bytes move, the default stays, and the source is
|
|
8187
|
+
* disabled when the move finishes.
|
|
8188
|
+
*/
|
|
8189
|
+
var StorageMigrationSourcesSchema = object({
|
|
8190
|
+
recordings: string().min(1).optional(),
|
|
8191
|
+
recordingsLow: string().min(1).optional(),
|
|
8192
|
+
eventMedia: string().min(1).optional(),
|
|
8193
|
+
backups: string().min(1).optional(),
|
|
8194
|
+
galleryMedia: string().min(1).optional()
|
|
8195
|
+
}).optional();
|
|
8196
|
+
/**
|
|
8177
8197
|
* How a migration sequences the cutover against the byte move.
|
|
8178
8198
|
*
|
|
8179
8199
|
* - `blocking` — the historical order: pause, move every byte, repoint,
|
|
@@ -8195,6 +8215,8 @@ var StorageMigrationModeSchema = _enum(["blocking", "nonBlocking"]);
|
|
|
8195
8215
|
/** Shared input for planning and starting an orchestrated storage migration. */
|
|
8196
8216
|
var StorageMigrationInputSchema = object({
|
|
8197
8217
|
destinations: StorageMigrationDestinationsSchema,
|
|
8218
|
+
/** Omitted = each class's current default. */
|
|
8219
|
+
sources: StorageMigrationSourcesSchema,
|
|
8198
8220
|
throttleMbps: number().min(1).max(1e3).optional(),
|
|
8199
8221
|
/** Omitted = `blocking`, which stays the default. */
|
|
8200
8222
|
mode: StorageMigrationModeSchema.optional()
|
|
@@ -8274,6 +8296,13 @@ var StorageMigrationMoveSchema = object({
|
|
|
8274
8296
|
storageClass: StorageMigrationClassSchema,
|
|
8275
8297
|
fromLocationId: string(),
|
|
8276
8298
|
toLocationId: string(),
|
|
8299
|
+
/**
|
|
8300
|
+
* True when `from` was NOT the class default at plan time. The move still
|
|
8301
|
+
* copies bytes, but the default is left alone and the source is disabled
|
|
8302
|
+
* once the copy verifies. Absent on jobs planned before this field existed
|
|
8303
|
+
* — those jobs always repointed, which is `false`.
|
|
8304
|
+
*/
|
|
8305
|
+
freezeSource: boolean().optional(),
|
|
8277
8306
|
moverJobId: string().nullable(),
|
|
8278
8307
|
state: RelocateJobStateSchema.nullable(),
|
|
8279
8308
|
error: string().nullable(),
|
|
@@ -8287,6 +8316,7 @@ var StorageMigrationJobSchema = object({
|
|
|
8287
8316
|
* can tell a seconds-long cutover from a thirty-hour one. */
|
|
8288
8317
|
mode: StorageMigrationModeSchema,
|
|
8289
8318
|
destinations: StorageMigrationDestinationsSchema,
|
|
8319
|
+
sources: StorageMigrationSourcesSchema,
|
|
8290
8320
|
throttleMbps: number(),
|
|
8291
8321
|
moves: array(StorageMigrationMoveSchema),
|
|
8292
8322
|
pauseLeaseId: string().nullable(),
|
|
@@ -8312,6 +8342,7 @@ var StorageMigrationFindingSchema = object({
|
|
|
8312
8342
|
});
|
|
8313
8343
|
var StorageMigrationPlanSchema = object({
|
|
8314
8344
|
destinations: StorageMigrationDestinationsSchema,
|
|
8345
|
+
sources: StorageMigrationSourcesSchema,
|
|
8315
8346
|
/** The mode this plan was built for. A plan is only valid for its mode: the
|
|
8316
8347
|
* `eventMedia` seal gate and the single-cardinality refusal both depend on
|
|
8317
8348
|
* it. */
|
|
@@ -8319,7 +8350,8 @@ var StorageMigrationPlanSchema = object({
|
|
|
8319
8350
|
moves: array(object({
|
|
8320
8351
|
storageClass: StorageMigrationClassSchema,
|
|
8321
8352
|
fromLocationId: string(),
|
|
8322
|
-
toLocationId: string()
|
|
8353
|
+
toLocationId: string(),
|
|
8354
|
+
freezeSource: boolean().optional()
|
|
8323
8355
|
})),
|
|
8324
8356
|
findings: array(StorageMigrationFindingSchema)
|
|
8325
8357
|
});
|
|
@@ -8497,10 +8529,51 @@ var LedgerWalkReportSchema = object({
|
|
|
8497
8529
|
var RelocatableMediaCountSchema = object({ rows: number().int().nonnegative() }).nullable();
|
|
8498
8530
|
var RelocatableMediaCountInputSchema = object({
|
|
8499
8531
|
toLocationId: string().min(1),
|
|
8532
|
+
/** Restrict the count to one source; omitted / `'*'` = every non-target row. */
|
|
8533
|
+
fromLocationId: string().optional(),
|
|
8500
8534
|
/** Omitted = `move`. */
|
|
8501
8535
|
mode: MediaRelocateModeSchema.optional()
|
|
8502
8536
|
});
|
|
8503
8537
|
/**
|
|
8538
|
+
* Operator cleanup of leftover analytics rows, optional debug media, and
|
|
8539
|
+
* ghost ledger entries on frozen footage locations.
|
|
8540
|
+
*
|
|
8541
|
+
* A pass is tens of minutes on a standing backlog. The hub method RETURNS
|
|
8542
|
+
* `{ jobId }` immediately; progress is `cleanupStatus`. Awaiting the work
|
|
8543
|
+
* is how `addons.custom` hit the 60 s UDS deadline while reclaim continued
|
|
8544
|
+
* with no operator-visible status.
|
|
8545
|
+
*/
|
|
8546
|
+
var StorageCleanupPhaseSchema = _enum([
|
|
8547
|
+
"orphans",
|
|
8548
|
+
"debug-media",
|
|
8549
|
+
"ghost-ledger",
|
|
8550
|
+
"done",
|
|
8551
|
+
"failed",
|
|
8552
|
+
"cancelled"
|
|
8553
|
+
]);
|
|
8554
|
+
var StorageCleanupInputSchema = object({
|
|
8555
|
+
/** Also walk motion stills / track filmstrips. Off by default. */
|
|
8556
|
+
includeDebugMedia: boolean().optional() });
|
|
8557
|
+
var StorageCleanupJobSchema = object({
|
|
8558
|
+
jobId: string(),
|
|
8559
|
+
phase: StorageCleanupPhaseSchema,
|
|
8560
|
+
includeDebugMedia: boolean(),
|
|
8561
|
+
orphansReclaimed: number().int().nonnegative(),
|
|
8562
|
+
orphanBytesReclaimed: number().int().nonnegative(),
|
|
8563
|
+
debugMediaReclaimed: number().int().nonnegative(),
|
|
8564
|
+
debugMediaBytesReclaimed: number().int().nonnegative(),
|
|
8565
|
+
ghostsForgotten: number().int().nonnegative(),
|
|
8566
|
+
ghostBytesForgotten: number().int().nonnegative(),
|
|
8567
|
+
/** Short operator-facing line: current collection, pass, or location. */
|
|
8568
|
+
detail: string().nullable(),
|
|
8569
|
+
cancelRequested: boolean(),
|
|
8570
|
+
startedAt: number(),
|
|
8571
|
+
updatedAt: number(),
|
|
8572
|
+
finishedAt: number().nullable(),
|
|
8573
|
+
error: string().nullable()
|
|
8574
|
+
});
|
|
8575
|
+
var StorageCleanupStatusInputSchema = object({ jobId: string().optional() });
|
|
8576
|
+
/**
|
|
8504
8577
|
* `StorageLocationType` — an addon-declared id that identifies the *kind* of
|
|
8505
8578
|
* storage a location serves. Defined here (not in `capabilities/storage.cap.ts`)
|
|
8506
8579
|
* so the persisted record schema and the consumer-facing cap can both consume it
|
|
@@ -8528,11 +8601,10 @@ var StorageLocationTypeSchema = string().regex(/^[a-z][a-zA-Z0-9-]*$/);
|
|
|
8528
8601
|
* The default location for a type uses `id === <type>:default` by
|
|
8529
8602
|
* convention (the bare type ref like `'backups'` resolves to it).
|
|
8530
8603
|
*
|
|
8531
|
-
* `isSystem
|
|
8532
|
-
*
|
|
8533
|
-
*
|
|
8534
|
-
*
|
|
8535
|
-
* deleting it is rejected at the cap level.
|
|
8604
|
+
* `isSystem` is a legacy persisted flag. Seed still creates the initial
|
|
8605
|
+
* `<type>:default` locations; the flag is no longer a lock, a badge, or a
|
|
8606
|
+
* prune selector. New writes leave it false. Deletion is gated on uniqueness
|
|
8607
|
+
* / last-enabled, not on this bit.
|
|
8536
8608
|
*/
|
|
8537
8609
|
var StorageLocationSchema = object({
|
|
8538
8610
|
id: string().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/),
|
|
@@ -13075,6 +13147,12 @@ method(object({
|
|
|
13075
13147
|
}), _void(), {
|
|
13076
13148
|
kind: "mutation",
|
|
13077
13149
|
auth: "admin"
|
|
13150
|
+
}), method(object({
|
|
13151
|
+
from: string(),
|
|
13152
|
+
to: string()
|
|
13153
|
+
}), object({ moved: number() }), {
|
|
13154
|
+
kind: "mutation",
|
|
13155
|
+
auth: "admin"
|
|
13078
13156
|
}), method(object({
|
|
13079
13157
|
deviceId: number(),
|
|
13080
13158
|
disabled: boolean()
|
|
@@ -19083,46 +19161,6 @@ var RecentTracksPageSchema = object({
|
|
|
19083
19161
|
/** Cursor for the next page, or null when this page is the last. */
|
|
19084
19162
|
nextCursor: string().nullable()
|
|
19085
19163
|
});
|
|
19086
|
-
var LIST_GROUPS_DEFAULT_LIMIT = 40;
|
|
19087
|
-
var LIST_GROUPS_MAX_LIMIT = 100;
|
|
19088
|
-
var AnalyticsGroupRecordSchema = object({
|
|
19089
|
-
id: string(),
|
|
19090
|
-
deviceId: number().int(),
|
|
19091
|
-
openedAt: number().int(),
|
|
19092
|
-
closedAt: number().int(),
|
|
19093
|
-
timestamp: number().int(),
|
|
19094
|
-
memberCount: number().int(),
|
|
19095
|
-
memberTrackIds: array(string()).readonly(),
|
|
19096
|
-
className: string(),
|
|
19097
|
-
classes: array(string()).readonly(),
|
|
19098
|
-
/** Relative event-media path, or null when the group has no picture yet. */
|
|
19099
|
-
mediaUrl: string().nullable(),
|
|
19100
|
-
singleton: boolean()
|
|
19101
|
-
});
|
|
19102
|
-
var AnalyticsGroupMemberSchema = object({
|
|
19103
|
-
trackId: string(),
|
|
19104
|
-
deviceId: number().int(),
|
|
19105
|
-
className: string(),
|
|
19106
|
-
firstSeen: number().int(),
|
|
19107
|
-
lastSeen: number().int(),
|
|
19108
|
-
mediaUrl: string().nullable()
|
|
19109
|
-
});
|
|
19110
|
-
var AnalyticsGroupDetailSchema = AnalyticsGroupRecordSchema.extend({ members: array(AnalyticsGroupMemberSchema).readonly() });
|
|
19111
|
-
var ListGroupsQueryInput = object({
|
|
19112
|
-
/** Devices to merge. An empty array yields `{ groups: [], nextCursor: null }`. */
|
|
19113
|
-
deviceIds: array(number()),
|
|
19114
|
-
/** Window lower bound on `closedAt` (inclusive). */
|
|
19115
|
-
since: number().optional(),
|
|
19116
|
-
/** Window upper bound on `openedAt` (inclusive). */
|
|
19117
|
-
until: number().optional(),
|
|
19118
|
-
limit: number().int().min(1).max(LIST_GROUPS_MAX_LIMIT).default(LIST_GROUPS_DEFAULT_LIMIT),
|
|
19119
|
-
/** Opaque continuation cursor from a previous page's `nextCursor`. */
|
|
19120
|
-
cursor: string().optional()
|
|
19121
|
-
});
|
|
19122
|
-
var ListGroupsPageSchema = object({
|
|
19123
|
-
groups: array(AnalyticsGroupRecordSchema).readonly(),
|
|
19124
|
-
nextCursor: string().nullable()
|
|
19125
|
-
});
|
|
19126
19164
|
var KEY_EVENTS_DEFAULT_LIMIT = 50;
|
|
19127
19165
|
var KEY_EVENTS_MAX_LIMIT = 200;
|
|
19128
19166
|
var KeyEventQueryInput = object({
|
|
@@ -19226,9 +19264,7 @@ var TrackCascadeCountsSchema = object({
|
|
|
19226
19264
|
/** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
|
|
19227
19265
|
plates: number().int(),
|
|
19228
19266
|
/** Per-track CLIP search vectors removed (best-effort). */
|
|
19229
|
-
embeddings: number().int()
|
|
19230
|
-
/** Group membership + group rows removed with their last member (best-effort). */
|
|
19231
|
-
groups: number().int()
|
|
19267
|
+
embeddings: number().int()
|
|
19232
19268
|
});
|
|
19233
19269
|
/** Disk-wins reconcile: media rows whose blobs are gone, then empty tracks. */
|
|
19234
19270
|
var DiskReconcileCountsSchema = object({
|
|
@@ -19398,6 +19434,47 @@ var RebuildStatusSchema = object({
|
|
|
19398
19434
|
/** Present when the pass ended by throwing. */
|
|
19399
19435
|
error: string().nullable()
|
|
19400
19436
|
});
|
|
19437
|
+
/**
|
|
19438
|
+
* Acknowledgement that a debug-media reclaim STARTED.
|
|
19439
|
+
*
|
|
19440
|
+
* The pass is paced at ~2 MB/s over a standing 100 GB — tens of minutes — so
|
|
19441
|
+
* it runs detached and this returns immediately. Awaiting it is how the
|
|
19442
|
+
* `addons.custom` door hit the 60 s UDS deadline while the walk carried on
|
|
19443
|
+
* with no status. Poll {@link pipelineAnalyticsCapability.methods.getMediaReclaimStatus}.
|
|
19444
|
+
*/
|
|
19445
|
+
var MediaReclaimStartResultSchema = object({
|
|
19446
|
+
started: boolean(),
|
|
19447
|
+
/** True when a pass was already running; the new request is ignored. */
|
|
19448
|
+
alreadyRunning: boolean()
|
|
19449
|
+
});
|
|
19450
|
+
var MediaReclaimInputSchema = object({
|
|
19451
|
+
mode: _enum(["report", "reclaim"]).default("report"),
|
|
19452
|
+
scopes: array(_enum(["motion-still", "track-filmstrip"])).min(1).optional(),
|
|
19453
|
+
deviceIds: array(number().int()).min(1).optional(),
|
|
19454
|
+
restart: boolean().optional(),
|
|
19455
|
+
pageSize: number().int().min(50).max(5e3).optional(),
|
|
19456
|
+
maxRowsPerDevice: number().int().min(1).max(5e5).optional(),
|
|
19457
|
+
maxReclaimPerDevice: number().int().min(1).max(5e5).optional(),
|
|
19458
|
+
maxBytesPerRun: number().int().min(1).optional(),
|
|
19459
|
+
budgetMinutes: number().int().min(1).max(720).optional(),
|
|
19460
|
+
throttleBytesPerSec: number().int().min(64 * 1024).optional(),
|
|
19461
|
+
graceMinutes: number().int().min(1).max(10080).optional()
|
|
19462
|
+
});
|
|
19463
|
+
var MediaReclaimStatusSchema = object({
|
|
19464
|
+
running: boolean(),
|
|
19465
|
+
mode: _enum(["report", "reclaim"]).nullable(),
|
|
19466
|
+
totalExamined: number(),
|
|
19467
|
+
totalEligible: number(),
|
|
19468
|
+
totalReclaimed: number(),
|
|
19469
|
+
totalBytesReclaimed: number(),
|
|
19470
|
+
totalRefused: number(),
|
|
19471
|
+
/** Device+scope windows finished in this pass. */
|
|
19472
|
+
devicesDone: number(),
|
|
19473
|
+
complete: boolean().nullable(),
|
|
19474
|
+
startedAtMs: number().nullable(),
|
|
19475
|
+
finishedAtMs: number().nullable(),
|
|
19476
|
+
error: string().nullable()
|
|
19477
|
+
});
|
|
19401
19478
|
var ReplayFrameInputSchema = object({
|
|
19402
19479
|
timestamp: number(),
|
|
19403
19480
|
frame: PipelineRunResultBridge
|
|
@@ -19436,10 +19513,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19436
19513
|
* stationary registry). Default false: the timeline lists passages,
|
|
19437
19514
|
* not parking records (operator decision, 2026-08-15). */
|
|
19438
19515
|
includeStationary: boolean().optional()
|
|
19439
|
-
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(
|
|
19440
|
-
deviceId: number(),
|
|
19441
|
-
groupId: string().min(1)
|
|
19442
|
-
}), AnalyticsGroupDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
|
|
19516
|
+
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
|
|
19443
19517
|
kind: "mutation",
|
|
19444
19518
|
auth: "admin"
|
|
19445
19519
|
}), 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({
|
|
@@ -19539,6 +19613,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19539
19613
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
19540
19614
|
kind: "query",
|
|
19541
19615
|
auth: "admin"
|
|
19616
|
+
}), method(MediaReclaimInputSchema, MediaReclaimStartResultSchema, {
|
|
19617
|
+
kind: "mutation",
|
|
19618
|
+
auth: "admin"
|
|
19619
|
+
}), method(object({}), MediaReclaimStatusSchema, {
|
|
19620
|
+
kind: "query",
|
|
19621
|
+
auth: "admin"
|
|
19542
19622
|
}), method(object({ deviceIds: array(number()).optional() }), TrainingExportSummarySchema, {
|
|
19543
19623
|
kind: "query",
|
|
19544
19624
|
auth: "admin"
|
|
@@ -21613,7 +21693,13 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
|
|
|
21613
21693
|
}), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
|
|
21614
21694
|
kind: "mutation",
|
|
21615
21695
|
auth: "admin"
|
|
21616
|
-
})
|
|
21696
|
+
}), method(StorageCleanupInputSchema, object({ jobId: string() }), {
|
|
21697
|
+
kind: "mutation",
|
|
21698
|
+
auth: "admin"
|
|
21699
|
+
}), method(StorageCleanupStatusInputSchema, StorageCleanupJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
21700
|
+
kind: "mutation",
|
|
21701
|
+
auth: "admin"
|
|
21702
|
+
}), method(object({}), array(StorageMigrationJobSchema).readonly(), { auth: "admin" });
|
|
21617
21703
|
var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
21618
21704
|
providerId: string().min(1),
|
|
21619
21705
|
displayName: string().min(1),
|
|
@@ -28714,6 +28800,33 @@ var RecordingRebalanceInputSchema = object({
|
|
|
28714
28800
|
minMoveGb: number().min(0).optional()
|
|
28715
28801
|
});
|
|
28716
28802
|
/**
|
|
28803
|
+
* Operator-facing placement of one camera onto a recordings location.
|
|
28804
|
+
*
|
|
28805
|
+
* `pinLocationId` is the operator instruction: a location id, or `null` for
|
|
28806
|
+
* Auto (the planner may move this camera). `locationId` is where high/mid
|
|
28807
|
+
* currently write — the plan, which may disagree with the pin when Auto.
|
|
28808
|
+
*/
|
|
28809
|
+
var RecordingDevicePlacementSchema = object({
|
|
28810
|
+
deviceId: number().int(),
|
|
28811
|
+
profile: string(),
|
|
28812
|
+
locationId: string()
|
|
28813
|
+
});
|
|
28814
|
+
var RecordingDevicePinSchema = object({
|
|
28815
|
+
deviceId: number().int(),
|
|
28816
|
+
/** Recordings-class location this camera is pinned to. */
|
|
28817
|
+
locationId: string()
|
|
28818
|
+
});
|
|
28819
|
+
var RecordingPlacementViewSchema = object({
|
|
28820
|
+
assignments: array(RecordingDevicePlacementSchema),
|
|
28821
|
+
pins: array(RecordingDevicePinSchema),
|
|
28822
|
+
defaultLocations: record(string(), string())
|
|
28823
|
+
});
|
|
28824
|
+
var RecordingSetDevicePlacementInputSchema = object({
|
|
28825
|
+
deviceId: number().int(),
|
|
28826
|
+
/** `null` = Auto. Otherwise a `recordings:*` location id. */
|
|
28827
|
+
locationId: string().nullable()
|
|
28828
|
+
});
|
|
28829
|
+
/**
|
|
28717
28830
|
* Result of locating footage at a wall-clock instant for one device/profile.
|
|
28718
28831
|
* `segment` carries the covering segment's window; `gap` reports the forward
|
|
28719
28832
|
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
@@ -28939,6 +29052,12 @@ method(object({
|
|
|
28939
29052
|
}), method(RecordingRebalanceInputSchema, RecordingRebalancePlanSchema, {
|
|
28940
29053
|
kind: "mutation",
|
|
28941
29054
|
auth: "admin"
|
|
29055
|
+
}), method(object({}), RecordingPlacementViewSchema, {
|
|
29056
|
+
kind: "query",
|
|
29057
|
+
auth: "admin"
|
|
29058
|
+
}), method(RecordingSetDevicePlacementInputSchema, object({ ok: literal(true) }), {
|
|
29059
|
+
kind: "mutation",
|
|
29060
|
+
auth: "admin"
|
|
28942
29061
|
});
|
|
28943
29062
|
/**
|
|
28944
29063
|
* `recording-export` cap — render a footage time range into a single downloadable
|
|
@@ -34008,6 +34127,12 @@ Object.freeze({
|
|
|
34008
34127
|
addonId: null,
|
|
34009
34128
|
access: "delete"
|
|
34010
34129
|
},
|
|
34130
|
+
"deviceManager.renameLocation": {
|
|
34131
|
+
capName: "device-manager",
|
|
34132
|
+
capScope: "system",
|
|
34133
|
+
addonId: null,
|
|
34134
|
+
access: "create"
|
|
34135
|
+
},
|
|
34011
34136
|
"deviceManager.runDeviceAction": {
|
|
34012
34137
|
capName: "device-manager",
|
|
34013
34138
|
capScope: "system",
|
|
@@ -35700,19 +35825,19 @@ Object.freeze({
|
|
|
35700
35825
|
addonId: null,
|
|
35701
35826
|
access: "view"
|
|
35702
35827
|
},
|
|
35703
|
-
"pipelineAnalytics.
|
|
35828
|
+
"pipelineAnalytics.getKeyEvents": {
|
|
35704
35829
|
capName: "pipeline-analytics",
|
|
35705
35830
|
capScope: "device",
|
|
35706
35831
|
addonId: null,
|
|
35707
35832
|
access: "view"
|
|
35708
35833
|
},
|
|
35709
|
-
"pipelineAnalytics.
|
|
35834
|
+
"pipelineAnalytics.getKeyEventsBatch": {
|
|
35710
35835
|
capName: "pipeline-analytics",
|
|
35711
35836
|
capScope: "device",
|
|
35712
35837
|
addonId: null,
|
|
35713
35838
|
access: "view"
|
|
35714
35839
|
},
|
|
35715
|
-
"pipelineAnalytics.
|
|
35840
|
+
"pipelineAnalytics.getMediaReclaimStatus": {
|
|
35716
35841
|
capName: "pipeline-analytics",
|
|
35717
35842
|
capScope: "device",
|
|
35718
35843
|
addonId: null,
|
|
@@ -35802,12 +35927,6 @@ Object.freeze({
|
|
|
35802
35927
|
addonId: null,
|
|
35803
35928
|
access: "view"
|
|
35804
35929
|
},
|
|
35805
|
-
"pipelineAnalytics.listGroups": {
|
|
35806
|
-
capName: "pipeline-analytics",
|
|
35807
|
-
capScope: "device",
|
|
35808
|
-
addonId: null,
|
|
35809
|
-
access: "view"
|
|
35810
|
-
},
|
|
35811
35930
|
"pipelineAnalytics.listOpsLog": {
|
|
35812
35931
|
capName: "pipeline-analytics",
|
|
35813
35932
|
capScope: "device",
|
|
@@ -35892,6 +36011,12 @@ Object.freeze({
|
|
|
35892
36011
|
addonId: null,
|
|
35893
36012
|
access: "create"
|
|
35894
36013
|
},
|
|
36014
|
+
"pipelineAnalytics.reclaimDebugMedia": {
|
|
36015
|
+
capName: "pipeline-analytics",
|
|
36016
|
+
capScope: "device",
|
|
36017
|
+
addonId: null,
|
|
36018
|
+
access: "create"
|
|
36019
|
+
},
|
|
35895
36020
|
"pipelineAnalytics.reconcileFromDisk": {
|
|
35896
36021
|
capName: "pipeline-analytics",
|
|
35897
36022
|
capScope: "device",
|
|
@@ -36816,6 +36941,12 @@ Object.freeze({
|
|
|
36816
36941
|
addonId: null,
|
|
36817
36942
|
access: "view"
|
|
36818
36943
|
},
|
|
36944
|
+
"recording.getPlacement": {
|
|
36945
|
+
capName: "recording",
|
|
36946
|
+
capScope: "system",
|
|
36947
|
+
addonId: null,
|
|
36948
|
+
access: "view"
|
|
36949
|
+
},
|
|
36819
36950
|
"recording.getPlaybackManifest": {
|
|
36820
36951
|
capName: "recording",
|
|
36821
36952
|
capScope: "system",
|
|
@@ -36942,6 +37073,12 @@ Object.freeze({
|
|
|
36942
37073
|
addonId: null,
|
|
36943
37074
|
access: "create"
|
|
36944
37075
|
},
|
|
37076
|
+
"recording.setDevicePlacement": {
|
|
37077
|
+
capName: "recording",
|
|
37078
|
+
capScope: "system",
|
|
37079
|
+
addonId: null,
|
|
37080
|
+
access: "create"
|
|
37081
|
+
},
|
|
36945
37082
|
"recording.startStorageMigrationMove": {
|
|
36946
37083
|
capName: "recording",
|
|
36947
37084
|
capScope: "system",
|
|
@@ -37386,12 +37523,36 @@ Object.freeze({
|
|
|
37386
37523
|
addonId: null,
|
|
37387
37524
|
access: "create"
|
|
37388
37525
|
},
|
|
37526
|
+
"storageMigration.cleanupCancel": {
|
|
37527
|
+
capName: "storage-migration",
|
|
37528
|
+
capScope: "system",
|
|
37529
|
+
addonId: null,
|
|
37530
|
+
access: "create"
|
|
37531
|
+
},
|
|
37532
|
+
"storageMigration.cleanupStart": {
|
|
37533
|
+
capName: "storage-migration",
|
|
37534
|
+
capScope: "system",
|
|
37535
|
+
addonId: null,
|
|
37536
|
+
access: "create"
|
|
37537
|
+
},
|
|
37538
|
+
"storageMigration.cleanupStatus": {
|
|
37539
|
+
capName: "storage-migration",
|
|
37540
|
+
capScope: "system",
|
|
37541
|
+
addonId: null,
|
|
37542
|
+
access: "view"
|
|
37543
|
+
},
|
|
37389
37544
|
"storageMigration.drain": {
|
|
37390
37545
|
capName: "storage-migration",
|
|
37391
37546
|
capScope: "system",
|
|
37392
37547
|
addonId: null,
|
|
37393
37548
|
access: "create"
|
|
37394
37549
|
},
|
|
37550
|
+
"storageMigration.history": {
|
|
37551
|
+
capName: "storage-migration",
|
|
37552
|
+
capScope: "system",
|
|
37553
|
+
addonId: null,
|
|
37554
|
+
access: "view"
|
|
37555
|
+
},
|
|
37395
37556
|
"storageMigration.movers": {
|
|
37396
37557
|
capName: "storage-migration",
|
|
37397
37558
|
capScope: "system",
|
|
@@ -39388,11 +39549,6 @@ Object.freeze({
|
|
|
39388
39549
|
form: "single",
|
|
39389
39550
|
optional: true
|
|
39390
39551
|
}],
|
|
39391
|
-
"pipelineAnalytics.getGroup": [{
|
|
39392
|
-
name: "deviceId",
|
|
39393
|
-
form: "single",
|
|
39394
|
-
optional: false
|
|
39395
|
-
}],
|
|
39396
39552
|
"pipelineAnalytics.getKeyEvents": [{
|
|
39397
39553
|
name: "deviceId",
|
|
39398
39554
|
form: "single",
|
|
@@ -39458,11 +39614,6 @@ Object.freeze({
|
|
|
39458
39614
|
form: "single",
|
|
39459
39615
|
optional: false
|
|
39460
39616
|
}],
|
|
39461
|
-
"pipelineAnalytics.listGroups": [{
|
|
39462
|
-
name: "deviceIds",
|
|
39463
|
-
form: "array",
|
|
39464
|
-
optional: false
|
|
39465
|
-
}],
|
|
39466
39617
|
"pipelineAnalytics.listOpsLog": [{
|
|
39467
39618
|
name: "deviceId",
|
|
39468
39619
|
form: "single",
|
|
@@ -39508,6 +39659,11 @@ Object.freeze({
|
|
|
39508
39659
|
form: "single",
|
|
39509
39660
|
optional: true
|
|
39510
39661
|
}],
|
|
39662
|
+
"pipelineAnalytics.reclaimDebugMedia": [{
|
|
39663
|
+
name: "deviceIds",
|
|
39664
|
+
form: "array",
|
|
39665
|
+
optional: true
|
|
39666
|
+
}],
|
|
39511
39667
|
"pipelineAnalytics.reconcileFromDisk": [{
|
|
39512
39668
|
name: "deviceId",
|
|
39513
39669
|
form: "single",
|
|
@@ -39873,6 +40029,11 @@ Object.freeze({
|
|
|
39873
40029
|
form: "single",
|
|
39874
40030
|
optional: false
|
|
39875
40031
|
}],
|
|
40032
|
+
"recording.setDevicePlacement": [{
|
|
40033
|
+
name: "deviceId",
|
|
40034
|
+
form: "single",
|
|
40035
|
+
optional: false
|
|
40036
|
+
}],
|
|
39876
40037
|
"recording.startStorageMigrationMove": [{
|
|
39877
40038
|
name: "deviceId",
|
|
39878
40039
|
form: "single",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-wyze",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.54",
|
|
4
4
|
"description": "Wyze camera device-provider addon for CamStack — wraps the @apocaliss92/wyze-bridge-js P2P/DTLS client, feeding the stream-broker via the pull-rfc4571 lazy-publish path (a structural twin of addon-provider-reolink)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|