@camstack/addon-provider-wyze 0.2.53 → 0.2.55
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 +236 -73
- package/dist/addon.mjs +236 -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()
|
|
@@ -15846,6 +15924,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
15846
15924
|
"device-offline",
|
|
15847
15925
|
"device-disabled",
|
|
15848
15926
|
"device-enabled",
|
|
15927
|
+
"device-battery-low",
|
|
15928
|
+
"device-battery-normal",
|
|
15849
15929
|
"stream-online",
|
|
15850
15930
|
"stream-offline",
|
|
15851
15931
|
"node-online",
|
|
@@ -19104,46 +19184,6 @@ var RecentTracksPageSchema = object({
|
|
|
19104
19184
|
/** Cursor for the next page, or null when this page is the last. */
|
|
19105
19185
|
nextCursor: string().nullable()
|
|
19106
19186
|
});
|
|
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
19187
|
var KEY_EVENTS_DEFAULT_LIMIT = 50;
|
|
19148
19188
|
var KEY_EVENTS_MAX_LIMIT = 200;
|
|
19149
19189
|
var KeyEventQueryInput = object({
|
|
@@ -19247,9 +19287,7 @@ var TrackCascadeCountsSchema = object({
|
|
|
19247
19287
|
/** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
|
|
19248
19288
|
plates: number().int(),
|
|
19249
19289
|
/** 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()
|
|
19290
|
+
embeddings: number().int()
|
|
19253
19291
|
});
|
|
19254
19292
|
/** Disk-wins reconcile: media rows whose blobs are gone, then empty tracks. */
|
|
19255
19293
|
var DiskReconcileCountsSchema = object({
|
|
@@ -19419,6 +19457,47 @@ var RebuildStatusSchema = object({
|
|
|
19419
19457
|
/** Present when the pass ended by throwing. */
|
|
19420
19458
|
error: string().nullable()
|
|
19421
19459
|
});
|
|
19460
|
+
/**
|
|
19461
|
+
* Acknowledgement that a debug-media reclaim STARTED.
|
|
19462
|
+
*
|
|
19463
|
+
* The pass is paced at ~2 MB/s over a standing 100 GB — tens of minutes — so
|
|
19464
|
+
* it runs detached and this returns immediately. Awaiting it is how the
|
|
19465
|
+
* `addons.custom` door hit the 60 s UDS deadline while the walk carried on
|
|
19466
|
+
* with no status. Poll {@link pipelineAnalyticsCapability.methods.getMediaReclaimStatus}.
|
|
19467
|
+
*/
|
|
19468
|
+
var MediaReclaimStartResultSchema = object({
|
|
19469
|
+
started: boolean(),
|
|
19470
|
+
/** True when a pass was already running; the new request is ignored. */
|
|
19471
|
+
alreadyRunning: boolean()
|
|
19472
|
+
});
|
|
19473
|
+
var MediaReclaimInputSchema = object({
|
|
19474
|
+
mode: _enum(["report", "reclaim"]).default("report"),
|
|
19475
|
+
scopes: array(_enum(["motion-still", "track-filmstrip"])).min(1).optional(),
|
|
19476
|
+
deviceIds: array(number().int()).min(1).optional(),
|
|
19477
|
+
restart: boolean().optional(),
|
|
19478
|
+
pageSize: number().int().min(50).max(5e3).optional(),
|
|
19479
|
+
maxRowsPerDevice: number().int().min(1).max(5e5).optional(),
|
|
19480
|
+
maxReclaimPerDevice: number().int().min(1).max(5e5).optional(),
|
|
19481
|
+
maxBytesPerRun: number().int().min(1).optional(),
|
|
19482
|
+
budgetMinutes: number().int().min(1).max(720).optional(),
|
|
19483
|
+
throttleBytesPerSec: number().int().min(64 * 1024).optional(),
|
|
19484
|
+
graceMinutes: number().int().min(1).max(10080).optional()
|
|
19485
|
+
});
|
|
19486
|
+
var MediaReclaimStatusSchema = object({
|
|
19487
|
+
running: boolean(),
|
|
19488
|
+
mode: _enum(["report", "reclaim"]).nullable(),
|
|
19489
|
+
totalExamined: number(),
|
|
19490
|
+
totalEligible: number(),
|
|
19491
|
+
totalReclaimed: number(),
|
|
19492
|
+
totalBytesReclaimed: number(),
|
|
19493
|
+
totalRefused: number(),
|
|
19494
|
+
/** Device+scope windows finished in this pass. */
|
|
19495
|
+
devicesDone: number(),
|
|
19496
|
+
complete: boolean().nullable(),
|
|
19497
|
+
startedAtMs: number().nullable(),
|
|
19498
|
+
finishedAtMs: number().nullable(),
|
|
19499
|
+
error: string().nullable()
|
|
19500
|
+
});
|
|
19422
19501
|
var ReplayFrameInputSchema = object({
|
|
19423
19502
|
timestamp: number(),
|
|
19424
19503
|
frame: PipelineRunResultBridge
|
|
@@ -19457,10 +19536,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19457
19536
|
* stationary registry). Default false: the timeline lists passages,
|
|
19458
19537
|
* not parking records (operator decision, 2026-08-15). */
|
|
19459
19538
|
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(), {
|
|
19539
|
+
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
|
|
19464
19540
|
kind: "mutation",
|
|
19465
19541
|
auth: "admin"
|
|
19466
19542
|
}), 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 +19636,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19560
19636
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
19561
19637
|
kind: "query",
|
|
19562
19638
|
auth: "admin"
|
|
19639
|
+
}), method(MediaReclaimInputSchema, MediaReclaimStartResultSchema, {
|
|
19640
|
+
kind: "mutation",
|
|
19641
|
+
auth: "admin"
|
|
19642
|
+
}), method(object({}), MediaReclaimStatusSchema, {
|
|
19643
|
+
kind: "query",
|
|
19644
|
+
auth: "admin"
|
|
19563
19645
|
}), method(object({ deviceIds: array(number()).optional() }), TrainingExportSummarySchema, {
|
|
19564
19646
|
kind: "query",
|
|
19565
19647
|
auth: "admin"
|
|
@@ -21634,7 +21716,13 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
|
|
|
21634
21716
|
}), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
|
|
21635
21717
|
kind: "mutation",
|
|
21636
21718
|
auth: "admin"
|
|
21637
|
-
})
|
|
21719
|
+
}), method(StorageCleanupInputSchema, object({ jobId: string() }), {
|
|
21720
|
+
kind: "mutation",
|
|
21721
|
+
auth: "admin"
|
|
21722
|
+
}), method(StorageCleanupStatusInputSchema, StorageCleanupJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
21723
|
+
kind: "mutation",
|
|
21724
|
+
auth: "admin"
|
|
21725
|
+
}), method(object({}), array(StorageMigrationJobSchema).readonly(), { auth: "admin" });
|
|
21638
21726
|
var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
21639
21727
|
providerId: string().min(1),
|
|
21640
21728
|
displayName: string().min(1),
|
|
@@ -28735,6 +28823,33 @@ var RecordingRebalanceInputSchema = object({
|
|
|
28735
28823
|
minMoveGb: number().min(0).optional()
|
|
28736
28824
|
});
|
|
28737
28825
|
/**
|
|
28826
|
+
* Operator-facing placement of one camera onto a recordings location.
|
|
28827
|
+
*
|
|
28828
|
+
* `pinLocationId` is the operator instruction: a location id, or `null` for
|
|
28829
|
+
* Auto (the planner may move this camera). `locationId` is where high/mid
|
|
28830
|
+
* currently write — the plan, which may disagree with the pin when Auto.
|
|
28831
|
+
*/
|
|
28832
|
+
var RecordingDevicePlacementSchema = object({
|
|
28833
|
+
deviceId: number().int(),
|
|
28834
|
+
profile: string(),
|
|
28835
|
+
locationId: string()
|
|
28836
|
+
});
|
|
28837
|
+
var RecordingDevicePinSchema = object({
|
|
28838
|
+
deviceId: number().int(),
|
|
28839
|
+
/** Recordings-class location this camera is pinned to. */
|
|
28840
|
+
locationId: string()
|
|
28841
|
+
});
|
|
28842
|
+
var RecordingPlacementViewSchema = object({
|
|
28843
|
+
assignments: array(RecordingDevicePlacementSchema),
|
|
28844
|
+
pins: array(RecordingDevicePinSchema),
|
|
28845
|
+
defaultLocations: record(string(), string())
|
|
28846
|
+
});
|
|
28847
|
+
var RecordingSetDevicePlacementInputSchema = object({
|
|
28848
|
+
deviceId: number().int(),
|
|
28849
|
+
/** `null` = Auto. Otherwise a `recordings:*` location id. */
|
|
28850
|
+
locationId: string().nullable()
|
|
28851
|
+
});
|
|
28852
|
+
/**
|
|
28738
28853
|
* Result of locating footage at a wall-clock instant for one device/profile.
|
|
28739
28854
|
* `segment` carries the covering segment's window; `gap` reports the forward
|
|
28740
28855
|
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
@@ -28960,6 +29075,12 @@ method(object({
|
|
|
28960
29075
|
}), method(RecordingRebalanceInputSchema, RecordingRebalancePlanSchema, {
|
|
28961
29076
|
kind: "mutation",
|
|
28962
29077
|
auth: "admin"
|
|
29078
|
+
}), method(object({}), RecordingPlacementViewSchema, {
|
|
29079
|
+
kind: "query",
|
|
29080
|
+
auth: "admin"
|
|
29081
|
+
}), method(RecordingSetDevicePlacementInputSchema, object({ ok: literal(true) }), {
|
|
29082
|
+
kind: "mutation",
|
|
29083
|
+
auth: "admin"
|
|
28963
29084
|
});
|
|
28964
29085
|
/**
|
|
28965
29086
|
* `recording-export` cap — render a footage time range into a single downloadable
|
|
@@ -34029,6 +34150,12 @@ Object.freeze({
|
|
|
34029
34150
|
addonId: null,
|
|
34030
34151
|
access: "delete"
|
|
34031
34152
|
},
|
|
34153
|
+
"deviceManager.renameLocation": {
|
|
34154
|
+
capName: "device-manager",
|
|
34155
|
+
capScope: "system",
|
|
34156
|
+
addonId: null,
|
|
34157
|
+
access: "create"
|
|
34158
|
+
},
|
|
34032
34159
|
"deviceManager.runDeviceAction": {
|
|
34033
34160
|
capName: "device-manager",
|
|
34034
34161
|
capScope: "system",
|
|
@@ -35721,19 +35848,19 @@ Object.freeze({
|
|
|
35721
35848
|
addonId: null,
|
|
35722
35849
|
access: "view"
|
|
35723
35850
|
},
|
|
35724
|
-
"pipelineAnalytics.
|
|
35851
|
+
"pipelineAnalytics.getKeyEvents": {
|
|
35725
35852
|
capName: "pipeline-analytics",
|
|
35726
35853
|
capScope: "device",
|
|
35727
35854
|
addonId: null,
|
|
35728
35855
|
access: "view"
|
|
35729
35856
|
},
|
|
35730
|
-
"pipelineAnalytics.
|
|
35857
|
+
"pipelineAnalytics.getKeyEventsBatch": {
|
|
35731
35858
|
capName: "pipeline-analytics",
|
|
35732
35859
|
capScope: "device",
|
|
35733
35860
|
addonId: null,
|
|
35734
35861
|
access: "view"
|
|
35735
35862
|
},
|
|
35736
|
-
"pipelineAnalytics.
|
|
35863
|
+
"pipelineAnalytics.getMediaReclaimStatus": {
|
|
35737
35864
|
capName: "pipeline-analytics",
|
|
35738
35865
|
capScope: "device",
|
|
35739
35866
|
addonId: null,
|
|
@@ -35823,12 +35950,6 @@ Object.freeze({
|
|
|
35823
35950
|
addonId: null,
|
|
35824
35951
|
access: "view"
|
|
35825
35952
|
},
|
|
35826
|
-
"pipelineAnalytics.listGroups": {
|
|
35827
|
-
capName: "pipeline-analytics",
|
|
35828
|
-
capScope: "device",
|
|
35829
|
-
addonId: null,
|
|
35830
|
-
access: "view"
|
|
35831
|
-
},
|
|
35832
35953
|
"pipelineAnalytics.listOpsLog": {
|
|
35833
35954
|
capName: "pipeline-analytics",
|
|
35834
35955
|
capScope: "device",
|
|
@@ -35913,6 +36034,12 @@ Object.freeze({
|
|
|
35913
36034
|
addonId: null,
|
|
35914
36035
|
access: "create"
|
|
35915
36036
|
},
|
|
36037
|
+
"pipelineAnalytics.reclaimDebugMedia": {
|
|
36038
|
+
capName: "pipeline-analytics",
|
|
36039
|
+
capScope: "device",
|
|
36040
|
+
addonId: null,
|
|
36041
|
+
access: "create"
|
|
36042
|
+
},
|
|
35916
36043
|
"pipelineAnalytics.reconcileFromDisk": {
|
|
35917
36044
|
capName: "pipeline-analytics",
|
|
35918
36045
|
capScope: "device",
|
|
@@ -36837,6 +36964,12 @@ Object.freeze({
|
|
|
36837
36964
|
addonId: null,
|
|
36838
36965
|
access: "view"
|
|
36839
36966
|
},
|
|
36967
|
+
"recording.getPlacement": {
|
|
36968
|
+
capName: "recording",
|
|
36969
|
+
capScope: "system",
|
|
36970
|
+
addonId: null,
|
|
36971
|
+
access: "view"
|
|
36972
|
+
},
|
|
36840
36973
|
"recording.getPlaybackManifest": {
|
|
36841
36974
|
capName: "recording",
|
|
36842
36975
|
capScope: "system",
|
|
@@ -36963,6 +37096,12 @@ Object.freeze({
|
|
|
36963
37096
|
addonId: null,
|
|
36964
37097
|
access: "create"
|
|
36965
37098
|
},
|
|
37099
|
+
"recording.setDevicePlacement": {
|
|
37100
|
+
capName: "recording",
|
|
37101
|
+
capScope: "system",
|
|
37102
|
+
addonId: null,
|
|
37103
|
+
access: "create"
|
|
37104
|
+
},
|
|
36966
37105
|
"recording.startStorageMigrationMove": {
|
|
36967
37106
|
capName: "recording",
|
|
36968
37107
|
capScope: "system",
|
|
@@ -37407,12 +37546,36 @@ Object.freeze({
|
|
|
37407
37546
|
addonId: null,
|
|
37408
37547
|
access: "create"
|
|
37409
37548
|
},
|
|
37549
|
+
"storageMigration.cleanupCancel": {
|
|
37550
|
+
capName: "storage-migration",
|
|
37551
|
+
capScope: "system",
|
|
37552
|
+
addonId: null,
|
|
37553
|
+
access: "create"
|
|
37554
|
+
},
|
|
37555
|
+
"storageMigration.cleanupStart": {
|
|
37556
|
+
capName: "storage-migration",
|
|
37557
|
+
capScope: "system",
|
|
37558
|
+
addonId: null,
|
|
37559
|
+
access: "create"
|
|
37560
|
+
},
|
|
37561
|
+
"storageMigration.cleanupStatus": {
|
|
37562
|
+
capName: "storage-migration",
|
|
37563
|
+
capScope: "system",
|
|
37564
|
+
addonId: null,
|
|
37565
|
+
access: "view"
|
|
37566
|
+
},
|
|
37410
37567
|
"storageMigration.drain": {
|
|
37411
37568
|
capName: "storage-migration",
|
|
37412
37569
|
capScope: "system",
|
|
37413
37570
|
addonId: null,
|
|
37414
37571
|
access: "create"
|
|
37415
37572
|
},
|
|
37573
|
+
"storageMigration.history": {
|
|
37574
|
+
capName: "storage-migration",
|
|
37575
|
+
capScope: "system",
|
|
37576
|
+
addonId: null,
|
|
37577
|
+
access: "view"
|
|
37578
|
+
},
|
|
37416
37579
|
"storageMigration.movers": {
|
|
37417
37580
|
capName: "storage-migration",
|
|
37418
37581
|
capScope: "system",
|
|
@@ -39409,11 +39572,6 @@ Object.freeze({
|
|
|
39409
39572
|
form: "single",
|
|
39410
39573
|
optional: true
|
|
39411
39574
|
}],
|
|
39412
|
-
"pipelineAnalytics.getGroup": [{
|
|
39413
|
-
name: "deviceId",
|
|
39414
|
-
form: "single",
|
|
39415
|
-
optional: false
|
|
39416
|
-
}],
|
|
39417
39575
|
"pipelineAnalytics.getKeyEvents": [{
|
|
39418
39576
|
name: "deviceId",
|
|
39419
39577
|
form: "single",
|
|
@@ -39479,11 +39637,6 @@ Object.freeze({
|
|
|
39479
39637
|
form: "single",
|
|
39480
39638
|
optional: false
|
|
39481
39639
|
}],
|
|
39482
|
-
"pipelineAnalytics.listGroups": [{
|
|
39483
|
-
name: "deviceIds",
|
|
39484
|
-
form: "array",
|
|
39485
|
-
optional: false
|
|
39486
|
-
}],
|
|
39487
39640
|
"pipelineAnalytics.listOpsLog": [{
|
|
39488
39641
|
name: "deviceId",
|
|
39489
39642
|
form: "single",
|
|
@@ -39529,6 +39682,11 @@ Object.freeze({
|
|
|
39529
39682
|
form: "single",
|
|
39530
39683
|
optional: true
|
|
39531
39684
|
}],
|
|
39685
|
+
"pipelineAnalytics.reclaimDebugMedia": [{
|
|
39686
|
+
name: "deviceIds",
|
|
39687
|
+
form: "array",
|
|
39688
|
+
optional: true
|
|
39689
|
+
}],
|
|
39532
39690
|
"pipelineAnalytics.reconcileFromDisk": [{
|
|
39533
39691
|
name: "deviceId",
|
|
39534
39692
|
form: "single",
|
|
@@ -39894,6 +40052,11 @@ Object.freeze({
|
|
|
39894
40052
|
form: "single",
|
|
39895
40053
|
optional: false
|
|
39896
40054
|
}],
|
|
40055
|
+
"recording.setDevicePlacement": [{
|
|
40056
|
+
name: "deviceId",
|
|
40057
|
+
form: "single",
|
|
40058
|
+
optional: false
|
|
40059
|
+
}],
|
|
39897
40060
|
"recording.startStorageMigrationMove": [{
|
|
39898
40061
|
name: "deviceId",
|
|
39899
40062
|
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()
|
|
@@ -15825,6 +15903,8 @@ var NcSystemEventKindSchema = _enum([
|
|
|
15825
15903
|
"device-offline",
|
|
15826
15904
|
"device-disabled",
|
|
15827
15905
|
"device-enabled",
|
|
15906
|
+
"device-battery-low",
|
|
15907
|
+
"device-battery-normal",
|
|
15828
15908
|
"stream-online",
|
|
15829
15909
|
"stream-offline",
|
|
15830
15910
|
"node-online",
|
|
@@ -19083,46 +19163,6 @@ var RecentTracksPageSchema = object({
|
|
|
19083
19163
|
/** Cursor for the next page, or null when this page is the last. */
|
|
19084
19164
|
nextCursor: string().nullable()
|
|
19085
19165
|
});
|
|
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
19166
|
var KEY_EVENTS_DEFAULT_LIMIT = 50;
|
|
19127
19167
|
var KEY_EVENTS_MAX_LIMIT = 200;
|
|
19128
19168
|
var KeyEventQueryInput = object({
|
|
@@ -19226,9 +19266,7 @@ var TrackCascadeCountsSchema = object({
|
|
|
19226
19266
|
/** Unassigned plate reads removed (best-effort; plate leg deferred to plate-intelligence). */
|
|
19227
19267
|
plates: number().int(),
|
|
19228
19268
|
/** 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()
|
|
19269
|
+
embeddings: number().int()
|
|
19232
19270
|
});
|
|
19233
19271
|
/** Disk-wins reconcile: media rows whose blobs are gone, then empty tracks. */
|
|
19234
19272
|
var DiskReconcileCountsSchema = object({
|
|
@@ -19398,6 +19436,47 @@ var RebuildStatusSchema = object({
|
|
|
19398
19436
|
/** Present when the pass ended by throwing. */
|
|
19399
19437
|
error: string().nullable()
|
|
19400
19438
|
});
|
|
19439
|
+
/**
|
|
19440
|
+
* Acknowledgement that a debug-media reclaim STARTED.
|
|
19441
|
+
*
|
|
19442
|
+
* The pass is paced at ~2 MB/s over a standing 100 GB — tens of minutes — so
|
|
19443
|
+
* it runs detached and this returns immediately. Awaiting it is how the
|
|
19444
|
+
* `addons.custom` door hit the 60 s UDS deadline while the walk carried on
|
|
19445
|
+
* with no status. Poll {@link pipelineAnalyticsCapability.methods.getMediaReclaimStatus}.
|
|
19446
|
+
*/
|
|
19447
|
+
var MediaReclaimStartResultSchema = object({
|
|
19448
|
+
started: boolean(),
|
|
19449
|
+
/** True when a pass was already running; the new request is ignored. */
|
|
19450
|
+
alreadyRunning: boolean()
|
|
19451
|
+
});
|
|
19452
|
+
var MediaReclaimInputSchema = object({
|
|
19453
|
+
mode: _enum(["report", "reclaim"]).default("report"),
|
|
19454
|
+
scopes: array(_enum(["motion-still", "track-filmstrip"])).min(1).optional(),
|
|
19455
|
+
deviceIds: array(number().int()).min(1).optional(),
|
|
19456
|
+
restart: boolean().optional(),
|
|
19457
|
+
pageSize: number().int().min(50).max(5e3).optional(),
|
|
19458
|
+
maxRowsPerDevice: number().int().min(1).max(5e5).optional(),
|
|
19459
|
+
maxReclaimPerDevice: number().int().min(1).max(5e5).optional(),
|
|
19460
|
+
maxBytesPerRun: number().int().min(1).optional(),
|
|
19461
|
+
budgetMinutes: number().int().min(1).max(720).optional(),
|
|
19462
|
+
throttleBytesPerSec: number().int().min(64 * 1024).optional(),
|
|
19463
|
+
graceMinutes: number().int().min(1).max(10080).optional()
|
|
19464
|
+
});
|
|
19465
|
+
var MediaReclaimStatusSchema = object({
|
|
19466
|
+
running: boolean(),
|
|
19467
|
+
mode: _enum(["report", "reclaim"]).nullable(),
|
|
19468
|
+
totalExamined: number(),
|
|
19469
|
+
totalEligible: number(),
|
|
19470
|
+
totalReclaimed: number(),
|
|
19471
|
+
totalBytesReclaimed: number(),
|
|
19472
|
+
totalRefused: number(),
|
|
19473
|
+
/** Device+scope windows finished in this pass. */
|
|
19474
|
+
devicesDone: number(),
|
|
19475
|
+
complete: boolean().nullable(),
|
|
19476
|
+
startedAtMs: number().nullable(),
|
|
19477
|
+
finishedAtMs: number().nullable(),
|
|
19478
|
+
error: string().nullable()
|
|
19479
|
+
});
|
|
19401
19480
|
var ReplayFrameInputSchema = object({
|
|
19402
19481
|
timestamp: number(),
|
|
19403
19482
|
frame: PipelineRunResultBridge
|
|
@@ -19436,10 +19515,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19436
19515
|
* stationary registry). Default false: the timeline lists passages,
|
|
19437
19516
|
* not parking records (operator decision, 2026-08-15). */
|
|
19438
19517
|
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(), {
|
|
19518
|
+
}), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
|
|
19443
19519
|
kind: "mutation",
|
|
19444
19520
|
auth: "admin"
|
|
19445
19521
|
}), 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 +19615,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
19539
19615
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
19540
19616
|
kind: "query",
|
|
19541
19617
|
auth: "admin"
|
|
19618
|
+
}), method(MediaReclaimInputSchema, MediaReclaimStartResultSchema, {
|
|
19619
|
+
kind: "mutation",
|
|
19620
|
+
auth: "admin"
|
|
19621
|
+
}), method(object({}), MediaReclaimStatusSchema, {
|
|
19622
|
+
kind: "query",
|
|
19623
|
+
auth: "admin"
|
|
19542
19624
|
}), method(object({ deviceIds: array(number()).optional() }), TrainingExportSummarySchema, {
|
|
19543
19625
|
kind: "query",
|
|
19544
19626
|
auth: "admin"
|
|
@@ -21613,7 +21695,13 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
|
|
|
21613
21695
|
}), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
|
|
21614
21696
|
kind: "mutation",
|
|
21615
21697
|
auth: "admin"
|
|
21616
|
-
})
|
|
21698
|
+
}), method(StorageCleanupInputSchema, object({ jobId: string() }), {
|
|
21699
|
+
kind: "mutation",
|
|
21700
|
+
auth: "admin"
|
|
21701
|
+
}), method(StorageCleanupStatusInputSchema, StorageCleanupJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
21702
|
+
kind: "mutation",
|
|
21703
|
+
auth: "admin"
|
|
21704
|
+
}), method(object({}), array(StorageMigrationJobSchema).readonly(), { auth: "admin" });
|
|
21617
21705
|
var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
21618
21706
|
providerId: string().min(1),
|
|
21619
21707
|
displayName: string().min(1),
|
|
@@ -28714,6 +28802,33 @@ var RecordingRebalanceInputSchema = object({
|
|
|
28714
28802
|
minMoveGb: number().min(0).optional()
|
|
28715
28803
|
});
|
|
28716
28804
|
/**
|
|
28805
|
+
* Operator-facing placement of one camera onto a recordings location.
|
|
28806
|
+
*
|
|
28807
|
+
* `pinLocationId` is the operator instruction: a location id, or `null` for
|
|
28808
|
+
* Auto (the planner may move this camera). `locationId` is where high/mid
|
|
28809
|
+
* currently write — the plan, which may disagree with the pin when Auto.
|
|
28810
|
+
*/
|
|
28811
|
+
var RecordingDevicePlacementSchema = object({
|
|
28812
|
+
deviceId: number().int(),
|
|
28813
|
+
profile: string(),
|
|
28814
|
+
locationId: string()
|
|
28815
|
+
});
|
|
28816
|
+
var RecordingDevicePinSchema = object({
|
|
28817
|
+
deviceId: number().int(),
|
|
28818
|
+
/** Recordings-class location this camera is pinned to. */
|
|
28819
|
+
locationId: string()
|
|
28820
|
+
});
|
|
28821
|
+
var RecordingPlacementViewSchema = object({
|
|
28822
|
+
assignments: array(RecordingDevicePlacementSchema),
|
|
28823
|
+
pins: array(RecordingDevicePinSchema),
|
|
28824
|
+
defaultLocations: record(string(), string())
|
|
28825
|
+
});
|
|
28826
|
+
var RecordingSetDevicePlacementInputSchema = object({
|
|
28827
|
+
deviceId: number().int(),
|
|
28828
|
+
/** `null` = Auto. Otherwise a `recordings:*` location id. */
|
|
28829
|
+
locationId: string().nullable()
|
|
28830
|
+
});
|
|
28831
|
+
/**
|
|
28717
28832
|
* Result of locating footage at a wall-clock instant for one device/profile.
|
|
28718
28833
|
* `segment` carries the covering segment's window; `gap` reports the forward
|
|
28719
28834
|
* nearest covered edge (`null` past the end of footage / when none exists)
|
|
@@ -28939,6 +29054,12 @@ method(object({
|
|
|
28939
29054
|
}), method(RecordingRebalanceInputSchema, RecordingRebalancePlanSchema, {
|
|
28940
29055
|
kind: "mutation",
|
|
28941
29056
|
auth: "admin"
|
|
29057
|
+
}), method(object({}), RecordingPlacementViewSchema, {
|
|
29058
|
+
kind: "query",
|
|
29059
|
+
auth: "admin"
|
|
29060
|
+
}), method(RecordingSetDevicePlacementInputSchema, object({ ok: literal(true) }), {
|
|
29061
|
+
kind: "mutation",
|
|
29062
|
+
auth: "admin"
|
|
28942
29063
|
});
|
|
28943
29064
|
/**
|
|
28944
29065
|
* `recording-export` cap — render a footage time range into a single downloadable
|
|
@@ -34008,6 +34129,12 @@ Object.freeze({
|
|
|
34008
34129
|
addonId: null,
|
|
34009
34130
|
access: "delete"
|
|
34010
34131
|
},
|
|
34132
|
+
"deviceManager.renameLocation": {
|
|
34133
|
+
capName: "device-manager",
|
|
34134
|
+
capScope: "system",
|
|
34135
|
+
addonId: null,
|
|
34136
|
+
access: "create"
|
|
34137
|
+
},
|
|
34011
34138
|
"deviceManager.runDeviceAction": {
|
|
34012
34139
|
capName: "device-manager",
|
|
34013
34140
|
capScope: "system",
|
|
@@ -35700,19 +35827,19 @@ Object.freeze({
|
|
|
35700
35827
|
addonId: null,
|
|
35701
35828
|
access: "view"
|
|
35702
35829
|
},
|
|
35703
|
-
"pipelineAnalytics.
|
|
35830
|
+
"pipelineAnalytics.getKeyEvents": {
|
|
35704
35831
|
capName: "pipeline-analytics",
|
|
35705
35832
|
capScope: "device",
|
|
35706
35833
|
addonId: null,
|
|
35707
35834
|
access: "view"
|
|
35708
35835
|
},
|
|
35709
|
-
"pipelineAnalytics.
|
|
35836
|
+
"pipelineAnalytics.getKeyEventsBatch": {
|
|
35710
35837
|
capName: "pipeline-analytics",
|
|
35711
35838
|
capScope: "device",
|
|
35712
35839
|
addonId: null,
|
|
35713
35840
|
access: "view"
|
|
35714
35841
|
},
|
|
35715
|
-
"pipelineAnalytics.
|
|
35842
|
+
"pipelineAnalytics.getMediaReclaimStatus": {
|
|
35716
35843
|
capName: "pipeline-analytics",
|
|
35717
35844
|
capScope: "device",
|
|
35718
35845
|
addonId: null,
|
|
@@ -35802,12 +35929,6 @@ Object.freeze({
|
|
|
35802
35929
|
addonId: null,
|
|
35803
35930
|
access: "view"
|
|
35804
35931
|
},
|
|
35805
|
-
"pipelineAnalytics.listGroups": {
|
|
35806
|
-
capName: "pipeline-analytics",
|
|
35807
|
-
capScope: "device",
|
|
35808
|
-
addonId: null,
|
|
35809
|
-
access: "view"
|
|
35810
|
-
},
|
|
35811
35932
|
"pipelineAnalytics.listOpsLog": {
|
|
35812
35933
|
capName: "pipeline-analytics",
|
|
35813
35934
|
capScope: "device",
|
|
@@ -35892,6 +36013,12 @@ Object.freeze({
|
|
|
35892
36013
|
addonId: null,
|
|
35893
36014
|
access: "create"
|
|
35894
36015
|
},
|
|
36016
|
+
"pipelineAnalytics.reclaimDebugMedia": {
|
|
36017
|
+
capName: "pipeline-analytics",
|
|
36018
|
+
capScope: "device",
|
|
36019
|
+
addonId: null,
|
|
36020
|
+
access: "create"
|
|
36021
|
+
},
|
|
35895
36022
|
"pipelineAnalytics.reconcileFromDisk": {
|
|
35896
36023
|
capName: "pipeline-analytics",
|
|
35897
36024
|
capScope: "device",
|
|
@@ -36816,6 +36943,12 @@ Object.freeze({
|
|
|
36816
36943
|
addonId: null,
|
|
36817
36944
|
access: "view"
|
|
36818
36945
|
},
|
|
36946
|
+
"recording.getPlacement": {
|
|
36947
|
+
capName: "recording",
|
|
36948
|
+
capScope: "system",
|
|
36949
|
+
addonId: null,
|
|
36950
|
+
access: "view"
|
|
36951
|
+
},
|
|
36819
36952
|
"recording.getPlaybackManifest": {
|
|
36820
36953
|
capName: "recording",
|
|
36821
36954
|
capScope: "system",
|
|
@@ -36942,6 +37075,12 @@ Object.freeze({
|
|
|
36942
37075
|
addonId: null,
|
|
36943
37076
|
access: "create"
|
|
36944
37077
|
},
|
|
37078
|
+
"recording.setDevicePlacement": {
|
|
37079
|
+
capName: "recording",
|
|
37080
|
+
capScope: "system",
|
|
37081
|
+
addonId: null,
|
|
37082
|
+
access: "create"
|
|
37083
|
+
},
|
|
36945
37084
|
"recording.startStorageMigrationMove": {
|
|
36946
37085
|
capName: "recording",
|
|
36947
37086
|
capScope: "system",
|
|
@@ -37386,12 +37525,36 @@ Object.freeze({
|
|
|
37386
37525
|
addonId: null,
|
|
37387
37526
|
access: "create"
|
|
37388
37527
|
},
|
|
37528
|
+
"storageMigration.cleanupCancel": {
|
|
37529
|
+
capName: "storage-migration",
|
|
37530
|
+
capScope: "system",
|
|
37531
|
+
addonId: null,
|
|
37532
|
+
access: "create"
|
|
37533
|
+
},
|
|
37534
|
+
"storageMigration.cleanupStart": {
|
|
37535
|
+
capName: "storage-migration",
|
|
37536
|
+
capScope: "system",
|
|
37537
|
+
addonId: null,
|
|
37538
|
+
access: "create"
|
|
37539
|
+
},
|
|
37540
|
+
"storageMigration.cleanupStatus": {
|
|
37541
|
+
capName: "storage-migration",
|
|
37542
|
+
capScope: "system",
|
|
37543
|
+
addonId: null,
|
|
37544
|
+
access: "view"
|
|
37545
|
+
},
|
|
37389
37546
|
"storageMigration.drain": {
|
|
37390
37547
|
capName: "storage-migration",
|
|
37391
37548
|
capScope: "system",
|
|
37392
37549
|
addonId: null,
|
|
37393
37550
|
access: "create"
|
|
37394
37551
|
},
|
|
37552
|
+
"storageMigration.history": {
|
|
37553
|
+
capName: "storage-migration",
|
|
37554
|
+
capScope: "system",
|
|
37555
|
+
addonId: null,
|
|
37556
|
+
access: "view"
|
|
37557
|
+
},
|
|
37395
37558
|
"storageMigration.movers": {
|
|
37396
37559
|
capName: "storage-migration",
|
|
37397
37560
|
capScope: "system",
|
|
@@ -39388,11 +39551,6 @@ Object.freeze({
|
|
|
39388
39551
|
form: "single",
|
|
39389
39552
|
optional: true
|
|
39390
39553
|
}],
|
|
39391
|
-
"pipelineAnalytics.getGroup": [{
|
|
39392
|
-
name: "deviceId",
|
|
39393
|
-
form: "single",
|
|
39394
|
-
optional: false
|
|
39395
|
-
}],
|
|
39396
39554
|
"pipelineAnalytics.getKeyEvents": [{
|
|
39397
39555
|
name: "deviceId",
|
|
39398
39556
|
form: "single",
|
|
@@ -39458,11 +39616,6 @@ Object.freeze({
|
|
|
39458
39616
|
form: "single",
|
|
39459
39617
|
optional: false
|
|
39460
39618
|
}],
|
|
39461
|
-
"pipelineAnalytics.listGroups": [{
|
|
39462
|
-
name: "deviceIds",
|
|
39463
|
-
form: "array",
|
|
39464
|
-
optional: false
|
|
39465
|
-
}],
|
|
39466
39619
|
"pipelineAnalytics.listOpsLog": [{
|
|
39467
39620
|
name: "deviceId",
|
|
39468
39621
|
form: "single",
|
|
@@ -39508,6 +39661,11 @@ Object.freeze({
|
|
|
39508
39661
|
form: "single",
|
|
39509
39662
|
optional: true
|
|
39510
39663
|
}],
|
|
39664
|
+
"pipelineAnalytics.reclaimDebugMedia": [{
|
|
39665
|
+
name: "deviceIds",
|
|
39666
|
+
form: "array",
|
|
39667
|
+
optional: true
|
|
39668
|
+
}],
|
|
39511
39669
|
"pipelineAnalytics.reconcileFromDisk": [{
|
|
39512
39670
|
name: "deviceId",
|
|
39513
39671
|
form: "single",
|
|
@@ -39873,6 +40031,11 @@ Object.freeze({
|
|
|
39873
40031
|
form: "single",
|
|
39874
40032
|
optional: false
|
|
39875
40033
|
}],
|
|
40034
|
+
"recording.setDevicePlacement": [{
|
|
40035
|
+
name: "deviceId",
|
|
40036
|
+
form: "single",
|
|
40037
|
+
optional: false
|
|
40038
|
+
}],
|
|
39876
40039
|
"recording.startStorageMigrationMove": [{
|
|
39877
40040
|
name: "deviceId",
|
|
39878
40041
|
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.55",
|
|
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",
|