@camstack/addon-export-hap 1.2.19 → 1.2.20

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.
@@ -8207,12 +8207,11 @@ var RecordingConfigSchema = object({
8207
8207
  /**
8208
8208
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
8209
8209
  *
8210
- * One shape shared by the recorder's `relocateFootage` (segments) and
8211
- * pipeline-analytics' `relocateMedia` (event media blobs) so the admin Data
8212
- * page renders both movers with one component. Jobs are in-RAM (a restart
8213
- * forgets them re-running is safe by construction: copy-if-absent, delete
8214
- * after verify) and each completed/failed run also lands one durable ops-log
8215
- * row on the owning addon's surface.
8210
+ * One shape shared by the recorder and pipeline-analytics internal movers.
8211
+ * The public admin surface is `storage-migration`; child jobs remain in RAM
8212
+ * because copy-if-absent, verify, delete and index/row repoint are resumable.
8213
+ * Each completed/failed run also lands one durable ops-log row on its owning
8214
+ * addon surface.
8216
8215
  */
8217
8216
  var RelocateJobStateSchema = _enum([
8218
8217
  "running",
@@ -8239,19 +8238,100 @@ var RelocateJobSchema = object({
8239
8238
  finishedAt: number().nullable(),
8240
8239
  error: string().nullable()
8241
8240
  });
8241
+ /** Profile-derived footage selection used only by the migration coordinator:
8242
+ * `recordings` owns high+mid; `recordingsLow` owns low. */
8243
+ var RelocateFootageClassSchema = _enum(["recordings", "recordingsLow"]);
8242
8244
  var RelocateFootageInputSchema = object({
8243
- deviceId: number().optional(),
8244
8245
  fromLocationId: string(),
8245
8246
  toLocationId: string(),
8246
8247
  entities: array(_enum(["segments"])).optional(),
8248
+ /** Limits relocation to the logical profile class. Omit only for the
8249
+ * pre-orchestration compatibility path. */
8250
+ footageClass: RelocateFootageClassSchema.optional(),
8247
8251
  /** Copy throttle in MB/s (default 40) — the drain is a background chore,
8248
8252
  * never allowed to starve live writers. */
8249
8253
  throttleMbps: number().min(1).max(1e3).optional()
8250
8254
  });
8251
- var RelocateMediaInputSchema = object({
8252
- deviceId: number().optional(),
8255
+ /** Internal, lease-scoped participant operation. It is intentionally separate
8256
+ * from persistent recording settings: a migration never changes
8257
+ * `RecordingConfig.enabled` or camera wrapper bindings. */
8258
+ var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
8259
+ var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
8260
+ var StorageMigrationMediaMoveInputSchema = object({
8253
8261
  toLocationId: string(),
8254
8262
  throttleMbps: number().min(1).max(1e3).optional()
8263
+ }).extend({ leaseId: string().min(1) });
8264
+ /** The independently selectable logical storage classes. `recordings`
8265
+ * encompasses the high and mid segment profiles; `recordingsLow` is low
8266
+ * segments; `eventMedia` is post-analysis blobs. */
8267
+ var StorageMigrationClassSchema = _enum([
8268
+ "recordings",
8269
+ "recordingsLow",
8270
+ "eventMedia"
8271
+ ]);
8272
+ /** A destination is always an existing, fully-qualified location id. The
8273
+ * migration API intentionally never changes a source location's `basePath`:
8274
+ * callers create a new `<type>:<slug>` location, then select it here. */
8275
+ var StorageMigrationDestinationsSchema = object({
8276
+ recordings: string().min(1).optional(),
8277
+ recordingsLow: string().min(1).optional(),
8278
+ eventMedia: string().min(1).optional()
8279
+ }).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
8280
+ /** Shared input for planning and starting an orchestrated storage migration. */
8281
+ var StorageMigrationInputSchema = object({
8282
+ destinations: StorageMigrationDestinationsSchema,
8283
+ throttleMbps: number().min(1).max(1e3).optional()
8284
+ });
8285
+ /** The durable coordinator state machine. The only phase that changes default
8286
+ * locations is `repointing`, after every selected mover has completed and been
8287
+ * verified. */
8288
+ var StorageMigrationPhaseSchema = _enum([
8289
+ "planning",
8290
+ "pausing",
8291
+ "moving",
8292
+ "verifying",
8293
+ "repointing",
8294
+ "refreshing",
8295
+ "resuming",
8296
+ "done",
8297
+ "failed",
8298
+ "cancelled"
8299
+ ]);
8300
+ var StorageMigrationParticipantSchema = _enum([
8301
+ "pipeline",
8302
+ "recorder",
8303
+ "analytics"
8304
+ ]);
8305
+ var StorageMigrationMoveSchema = object({
8306
+ storageClass: StorageMigrationClassSchema,
8307
+ fromLocationId: string(),
8308
+ toLocationId: string(),
8309
+ moverJobId: string().nullable(),
8310
+ state: RelocateJobStateSchema.nullable(),
8311
+ error: string().nullable()
8312
+ });
8313
+ var StorageMigrationJobSchema = object({
8314
+ jobId: string(),
8315
+ phase: StorageMigrationPhaseSchema,
8316
+ destinations: StorageMigrationDestinationsSchema,
8317
+ throttleMbps: number(),
8318
+ moves: array(StorageMigrationMoveSchema),
8319
+ pauseLeaseId: string().nullable(),
8320
+ pausedParticipants: array(StorageMigrationParticipantSchema),
8321
+ repointed: boolean(),
8322
+ cancelRequested: boolean(),
8323
+ startedAt: number(),
8324
+ updatedAt: number(),
8325
+ finishedAt: number().nullable(),
8326
+ error: string().nullable()
8327
+ });
8328
+ var StorageMigrationPlanSchema = object({
8329
+ destinations: StorageMigrationDestinationsSchema,
8330
+ moves: array(object({
8331
+ storageClass: StorageMigrationClassSchema,
8332
+ fromLocationId: string(),
8333
+ toLocationId: string()
8334
+ }))
8255
8335
  });
8256
8336
  /**
8257
8337
  * `StorageLocationType` — an addon-declared id that identifies the *kind* of
@@ -16762,13 +16842,19 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
16762
16842
  }), method(object({ deviceId: number() }), EventPruneCountsSchema, {
16763
16843
  kind: "mutation",
16764
16844
  auth: "admin"
16765
- }), method(RelocateMediaInputSchema, object({ jobId: string() }), {
16845
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
16766
16846
  kind: "mutation",
16767
16847
  auth: "admin"
16768
- }), method(object({}), array(RelocateJobSchema).readonly(), {
16769
- kind: "query",
16848
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
16849
+ kind: "mutation",
16850
+ auth: "admin"
16851
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
16852
+ kind: "mutation",
16853
+ auth: "admin"
16854
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
16855
+ kind: "mutation",
16770
16856
  auth: "admin"
16771
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16857
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16772
16858
  kind: "mutation",
16773
16859
  auth: "admin"
16774
16860
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
@@ -18265,7 +18351,13 @@ var NodeInferenceDevicesSchema = object({
18265
18351
  reachable: boolean(),
18266
18352
  devices: array(NodeInferenceDeviceSchema).readonly()
18267
18353
  });
18268
- method(object({
18354
+ method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
18355
+ kind: "mutation",
18356
+ auth: "admin"
18357
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
18358
+ kind: "mutation",
18359
+ auth: "admin"
18360
+ }), method(object({
18269
18361
  deviceId: number(),
18270
18362
  agentNodeId: string()
18271
18363
  }), object({ success: literal(true) }), {
@@ -18939,6 +19031,13 @@ method(object({ locationId: string() }), EvictableUsageSchema), method(object({
18939
19031
  locationId: string(),
18940
19032
  targetBytes: number().int().positive()
18941
19033
  }), EvictResultSchema, { kind: "mutation" });
19034
+ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
19035
+ kind: "mutation",
19036
+ auth: "admin"
19037
+ }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
19038
+ kind: "mutation",
19039
+ auth: "admin"
19040
+ });
18942
19041
  var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
18943
19042
  providerId: string().min(1),
18944
19043
  displayName: string().min(1),
@@ -19042,6 +19141,28 @@ var TerminalProfileInfoSchema = object({
19042
19141
  label: string(),
19043
19142
  description: string().optional()
19044
19143
  });
19144
+ /**
19145
+ * A durable operator-created Terminal instance. Profiles are templates; only
19146
+ * an instance declares a camera.
19147
+ */
19148
+ var TerminalInstanceInfoSchema = object({
19149
+ instanceId: string(),
19150
+ cameraStableId: string(),
19151
+ nodeId: string(),
19152
+ profileId: string(),
19153
+ profileLabel: string(),
19154
+ name: string(),
19155
+ enabled: boolean()
19156
+ });
19157
+ var TerminalLegacyCameraSchema = object({
19158
+ stableId: string(),
19159
+ nodeId: string(),
19160
+ profileId: string(),
19161
+ profileLabel: string(),
19162
+ name: string(),
19163
+ /** Only legacy monitor cameras can retain their historic stable identity. */
19164
+ adoptable: boolean()
19165
+ });
19045
19166
  var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
19046
19167
  seq: number().int().positive(),
19047
19168
  kind: literal("data"),
@@ -19058,7 +19179,29 @@ var TerminalOutputBatchSchema = object({
19058
19179
  snapshot: string().optional(),
19059
19180
  events: array(TerminalOutputEventSchema).readonly()
19060
19181
  });
19061
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
19182
+ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
19183
+ targetNodeId: string().min(1),
19184
+ profileId: string().min(1),
19185
+ name: string().trim().min(1).max(160).optional()
19186
+ }), TerminalInstanceInfoSchema, {
19187
+ kind: "mutation",
19188
+ auth: "admin"
19189
+ }), method(object({ instanceId: string().min(1) }), _void(), {
19190
+ kind: "mutation",
19191
+ auth: "admin"
19192
+ }), method(object({
19193
+ instanceId: string().min(1),
19194
+ enabled: boolean()
19195
+ }), TerminalInstanceInfoSchema, {
19196
+ kind: "mutation",
19197
+ auth: "admin"
19198
+ }), method(_void(), array(TerminalLegacyCameraSchema).readonly(), { auth: "admin" }), method(object({
19199
+ stableId: string().min(1),
19200
+ name: string().trim().min(1).max(160).optional()
19201
+ }), TerminalInstanceInfoSchema, {
19202
+ kind: "mutation",
19203
+ auth: "admin"
19204
+ }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
19062
19205
  profileId: string(),
19063
19206
  cols: number().int().positive(),
19064
19207
  rows: number().int().positive()
@@ -19075,7 +19218,13 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
19075
19218
  }), method(object({
19076
19219
  sessionId: string(),
19077
19220
  afterSeq: number().int().nonnegative(),
19078
- waitMs: number().int().min(0).max(2e3).default(0)
19221
+ waitMs: number().int().min(0).max(2e3).default(0),
19222
+ /**
19223
+ * Wait when a just-opened session has no output yet. Kept opt-in so a
19224
+ * browser's initial repaint remains immediate; the camera snapshot
19225
+ * relay uses it to avoid encoding a blank startup frame.
19226
+ */
19227
+ waitForOutput: boolean().optional()
19079
19228
  }), TerminalOutputBatchSchema, {
19080
19229
  kind: "mutation",
19081
19230
  auth: "admin",
@@ -21016,6 +21165,7 @@ var FaceInfoSchema = object({
21016
21165
  var FaceFilterEnum = _enum([
21017
21166
  "unassigned",
21018
21167
  "recognized",
21168
+ "identified",
21019
21169
  "all"
21020
21170
  ]);
21021
21171
  var MediaFileLiteSchema$1 = object({
@@ -21044,6 +21194,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
21044
21194
  kind: "mutation",
21045
21195
  auth: "admin"
21046
21196
  }), method(object({
21197
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
21198
+ deviceId: number().int().optional(),
21047
21199
  limit: number().int().positive().optional(),
21048
21200
  filter: FaceFilterEnum.optional(),
21049
21201
  /**
@@ -22809,6 +22961,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
22809
22961
  capName: string().min(1).max(64),
22810
22962
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
22811
22963
  valuePath: string().min(1).max(64)
22964
+ }),
22965
+ object({
22966
+ kind: literal("latest-recognition"),
22967
+ recognition: _enum(["person", "plate"])
22812
22968
  })
22813
22969
  ]);
22814
22970
  var OsdSlotBindingSchema = object({
@@ -22914,6 +23070,15 @@ method(object({ deviceId: number().int() }), object({
22914
23070
  }), object({ success: literal(true) }), {
22915
23071
  kind: "mutation",
22916
23072
  auth: "admin"
23073
+ }), method(object({
23074
+ sourceDeviceId: number().int(),
23075
+ targetDeviceId: number().int()
23076
+ }), object({
23077
+ copied: number().int().nonnegative(),
23078
+ skipped: number().int().nonnegative()
23079
+ }), {
23080
+ kind: "mutation",
23081
+ auth: "admin"
22917
23082
  }), method(object({
22918
23083
  deviceId: number().int(),
22919
23084
  slotId: string().min(1),
@@ -23799,13 +23964,19 @@ method(object({
23799
23964
  }), {
23800
23965
  kind: "mutation",
23801
23966
  auth: "admin"
23802
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
23967
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
23803
23968
  kind: "mutation",
23804
23969
  auth: "admin"
23805
- }), method(object({}), array(RelocateJobSchema).readonly(), {
23806
- kind: "query",
23970
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
23971
+ kind: "mutation",
23807
23972
  auth: "admin"
23808
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23973
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
23974
+ kind: "mutation",
23975
+ auth: "admin"
23976
+ }), method(StorageMigrationFootageMoveInputSchema, object({ jobId: string() }), {
23977
+ kind: "mutation",
23978
+ auth: "admin"
23979
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23809
23980
  kind: "mutation",
23810
23981
  auth: "admin"
23811
23982
  });
@@ -27927,6 +28098,12 @@ Object.freeze({
27927
28098
  addonId: null,
27928
28099
  access: "delete"
27929
28100
  },
28101
+ "osdManager.copyDeviceConfiguration": {
28102
+ capName: "osd-manager",
28103
+ capScope: "system",
28104
+ addonId: null,
28105
+ access: "create"
28106
+ },
27930
28107
  "osdManager.getConditionSupport": {
27931
28108
  capName: "osd-manager",
27932
28109
  capScope: "system",
@@ -28023,7 +28200,7 @@ Object.freeze({
28023
28200
  addonId: null,
28024
28201
  access: "create"
28025
28202
  },
28026
- "pipelineAnalytics.cancelMediaRelocate": {
28203
+ "pipelineAnalytics.cancelStorageMigrationMove": {
28027
28204
  capName: "pipeline-analytics",
28028
28205
  capScope: "device",
28029
28206
  addonId: null,
@@ -28095,12 +28272,6 @@ Object.freeze({
28095
28272
  addonId: null,
28096
28273
  access: "view"
28097
28274
  },
28098
- "pipelineAnalytics.getMediaRelocateStatus": {
28099
- capName: "pipeline-analytics",
28100
- capScope: "device",
28101
- addonId: null,
28102
- access: "view"
28103
- },
28104
28275
  "pipelineAnalytics.getMotionEvents": {
28105
28276
  capName: "pipeline-analytics",
28106
28277
  capScope: "device",
@@ -28137,6 +28308,12 @@ Object.freeze({
28137
28308
  addonId: null,
28138
28309
  access: "view"
28139
28310
  },
28311
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
28312
+ capName: "pipeline-analytics",
28313
+ capScope: "device",
28314
+ addonId: null,
28315
+ access: "view"
28316
+ },
28140
28317
  "pipelineAnalytics.getTrack": {
28141
28318
  capName: "pipeline-analytics",
28142
28319
  capScope: "device",
@@ -28215,6 +28392,12 @@ Object.freeze({
28215
28392
  addonId: null,
28216
28393
  access: "view"
28217
28394
  },
28395
+ "pipelineAnalytics.pauseForStorageMigration": {
28396
+ capName: "pipeline-analytics",
28397
+ capScope: "device",
28398
+ addonId: null,
28399
+ access: "create"
28400
+ },
28218
28401
  "pipelineAnalytics.proposeRetrainAnnotations": {
28219
28402
  capName: "pipeline-analytics",
28220
28403
  capScope: "device",
@@ -28245,7 +28428,7 @@ Object.freeze({
28245
28428
  addonId: null,
28246
28429
  access: "create"
28247
28430
  },
28248
- "pipelineAnalytics.relocateMedia": {
28431
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
28249
28432
  capName: "pipeline-analytics",
28250
28433
  capScope: "device",
28251
28434
  addonId: null,
@@ -28257,6 +28440,12 @@ Object.freeze({
28257
28440
  addonId: null,
28258
28441
  access: "create"
28259
28442
  },
28443
+ "pipelineAnalytics.resumeForStorageMigration": {
28444
+ capName: "pipeline-analytics",
28445
+ capScope: "device",
28446
+ addonId: null,
28447
+ access: "create"
28448
+ },
28260
28449
  "pipelineAnalytics.saveRetrainAnnotations": {
28261
28450
  capName: "pipeline-analytics",
28262
28451
  capScope: "device",
@@ -28281,6 +28470,12 @@ Object.freeze({
28281
28470
  addonId: null,
28282
28471
  access: "create"
28283
28472
  },
28473
+ "pipelineAnalytics.startStorageMigrationMove": {
28474
+ capName: "pipeline-analytics",
28475
+ capScope: "device",
28476
+ addonId: null,
28477
+ access: "create"
28478
+ },
28284
28479
  "pipelineAnalytics.wipeAllAnalytics": {
28285
28480
  capName: "pipeline-analytics",
28286
28481
  capScope: "device",
@@ -28647,6 +28842,12 @@ Object.freeze({
28647
28842
  addonId: null,
28648
28843
  access: "view"
28649
28844
  },
28845
+ "pipelineOrchestrator.pauseForStorageMigration": {
28846
+ capName: "pipeline-orchestrator",
28847
+ capScope: "system",
28848
+ addonId: null,
28849
+ access: "create"
28850
+ },
28650
28851
  "pipelineOrchestrator.rebalance": {
28651
28852
  capName: "pipeline-orchestrator",
28652
28853
  capScope: "system",
@@ -28671,6 +28872,12 @@ Object.freeze({
28671
28872
  addonId: null,
28672
28873
  access: "view"
28673
28874
  },
28875
+ "pipelineOrchestrator.resumeForStorageMigration": {
28876
+ capName: "pipeline-orchestrator",
28877
+ capScope: "system",
28878
+ addonId: null,
28879
+ access: "create"
28880
+ },
28674
28881
  "pipelineOrchestrator.saveTemplate": {
28675
28882
  capName: "pipeline-orchestrator",
28676
28883
  capScope: "system",
@@ -29067,7 +29274,7 @@ Object.freeze({
29067
29274
  addonId: null,
29068
29275
  access: "create"
29069
29276
  },
29070
- "recording.cancelRelocate": {
29277
+ "recording.cancelStorageMigrationMove": {
29071
29278
  capName: "recording",
29072
29279
  capScope: "system",
29073
29280
  addonId: null,
@@ -29103,7 +29310,7 @@ Object.freeze({
29103
29310
  addonId: null,
29104
29311
  access: "view"
29105
29312
  },
29106
- "recording.getRelocateStatus": {
29313
+ "recording.getStorageMigrationMoveStatus": {
29107
29314
  capName: "recording",
29108
29315
  capScope: "system",
29109
29316
  addonId: null,
@@ -29127,6 +29334,12 @@ Object.freeze({
29127
29334
  addonId: null,
29128
29335
  access: "view"
29129
29336
  },
29337
+ "recording.pauseForStorageMigration": {
29338
+ capName: "recording",
29339
+ capScope: "system",
29340
+ addonId: null,
29341
+ access: "create"
29342
+ },
29130
29343
  "recording.pruneFootage": {
29131
29344
  capName: "recording",
29132
29345
  capScope: "system",
@@ -29145,7 +29358,7 @@ Object.freeze({
29145
29358
  addonId: null,
29146
29359
  access: "view"
29147
29360
  },
29148
- "recording.relocateFootage": {
29361
+ "recording.refreshStorageLocationsForMigration": {
29149
29362
  capName: "recording",
29150
29363
  capScope: "system",
29151
29364
  addonId: null,
@@ -29169,12 +29382,24 @@ Object.freeze({
29169
29382
  addonId: null,
29170
29383
  access: "create"
29171
29384
  },
29385
+ "recording.resumeForStorageMigration": {
29386
+ capName: "recording",
29387
+ capScope: "system",
29388
+ addonId: null,
29389
+ access: "create"
29390
+ },
29172
29391
  "recording.setDeviceConfig": {
29173
29392
  capName: "recording",
29174
29393
  capScope: "system",
29175
29394
  addonId: null,
29176
29395
  access: "create"
29177
29396
  },
29397
+ "recording.startStorageMigrationMove": {
29398
+ capName: "recording",
29399
+ capScope: "system",
29400
+ addonId: null,
29401
+ access: "create"
29402
+ },
29178
29403
  "recordingExport.cancelExport": {
29179
29404
  capName: "recordingExport",
29180
29405
  capScope: "system",
@@ -29565,6 +29790,30 @@ Object.freeze({
29565
29790
  addonId: null,
29566
29791
  access: "view"
29567
29792
  },
29793
+ "storageMigration.cancel": {
29794
+ capName: "storage-migration",
29795
+ capScope: "system",
29796
+ addonId: null,
29797
+ access: "create"
29798
+ },
29799
+ "storageMigration.plan": {
29800
+ capName: "storage-migration",
29801
+ capScope: "system",
29802
+ addonId: null,
29803
+ access: "view"
29804
+ },
29805
+ "storageMigration.start": {
29806
+ capName: "storage-migration",
29807
+ capScope: "system",
29808
+ addonId: null,
29809
+ access: "create"
29810
+ },
29811
+ "storageMigration.status": {
29812
+ capName: "storage-migration",
29813
+ capScope: "system",
29814
+ addonId: null,
29815
+ access: "view"
29816
+ },
29568
29817
  "storageProvider.abortUpload": {
29569
29818
  capName: "storage-provider",
29570
29819
  capScope: "system",
@@ -29943,12 +30192,42 @@ Object.freeze({
29943
30192
  addonId: null,
29944
30193
  access: "create"
29945
30194
  },
30195
+ "terminalSession.adoptLegacyMonitor": {
30196
+ capName: "terminal-session",
30197
+ capScope: "system",
30198
+ addonId: null,
30199
+ access: "create"
30200
+ },
29946
30201
  "terminalSession.close": {
29947
30202
  capName: "terminal-session",
29948
30203
  capScope: "system",
29949
30204
  addonId: null,
29950
30205
  access: "create"
29951
30206
  },
30207
+ "terminalSession.createInstance": {
30208
+ capName: "terminal-session",
30209
+ capScope: "system",
30210
+ addonId: null,
30211
+ access: "create"
30212
+ },
30213
+ "terminalSession.deleteInstance": {
30214
+ capName: "terminal-session",
30215
+ capScope: "system",
30216
+ addonId: null,
30217
+ access: "delete"
30218
+ },
30219
+ "terminalSession.listInstances": {
30220
+ capName: "terminal-session",
30221
+ capScope: "system",
30222
+ addonId: null,
30223
+ access: "view"
30224
+ },
30225
+ "terminalSession.listLegacyCameras": {
30226
+ capName: "terminal-session",
30227
+ capScope: "system",
30228
+ addonId: null,
30229
+ access: "view"
30230
+ },
29952
30231
  "terminalSession.listProfiles": {
29953
30232
  capName: "terminal-session",
29954
30233
  capScope: "system",
@@ -29979,6 +30258,12 @@ Object.freeze({
29979
30258
  addonId: null,
29980
30259
  access: "create"
29981
30260
  },
30261
+ "terminalSession.setInstanceEnabled": {
30262
+ capName: "terminal-session",
30263
+ capScope: "system",
30264
+ addonId: null,
30265
+ access: "create"
30266
+ },
29982
30267
  "terminalSession.writeInput": {
29983
30268
  capName: "terminal-session",
29984
30269
  capScope: "system",
@@ -8181,12 +8181,11 @@ var RecordingConfigSchema = object({
8181
8181
  /**
8182
8182
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
8183
8183
  *
8184
- * One shape shared by the recorder's `relocateFootage` (segments) and
8185
- * pipeline-analytics' `relocateMedia` (event media blobs) so the admin Data
8186
- * page renders both movers with one component. Jobs are in-RAM (a restart
8187
- * forgets them re-running is safe by construction: copy-if-absent, delete
8188
- * after verify) and each completed/failed run also lands one durable ops-log
8189
- * row on the owning addon's surface.
8184
+ * One shape shared by the recorder and pipeline-analytics internal movers.
8185
+ * The public admin surface is `storage-migration`; child jobs remain in RAM
8186
+ * because copy-if-absent, verify, delete and index/row repoint are resumable.
8187
+ * Each completed/failed run also lands one durable ops-log row on its owning
8188
+ * addon surface.
8190
8189
  */
8191
8190
  var RelocateJobStateSchema = _enum([
8192
8191
  "running",
@@ -8213,19 +8212,100 @@ var RelocateJobSchema = object({
8213
8212
  finishedAt: number().nullable(),
8214
8213
  error: string().nullable()
8215
8214
  });
8215
+ /** Profile-derived footage selection used only by the migration coordinator:
8216
+ * `recordings` owns high+mid; `recordingsLow` owns low. */
8217
+ var RelocateFootageClassSchema = _enum(["recordings", "recordingsLow"]);
8216
8218
  var RelocateFootageInputSchema = object({
8217
- deviceId: number().optional(),
8218
8219
  fromLocationId: string(),
8219
8220
  toLocationId: string(),
8220
8221
  entities: array(_enum(["segments"])).optional(),
8222
+ /** Limits relocation to the logical profile class. Omit only for the
8223
+ * pre-orchestration compatibility path. */
8224
+ footageClass: RelocateFootageClassSchema.optional(),
8221
8225
  /** Copy throttle in MB/s (default 40) — the drain is a background chore,
8222
8226
  * never allowed to starve live writers. */
8223
8227
  throttleMbps: number().min(1).max(1e3).optional()
8224
8228
  });
8225
- var RelocateMediaInputSchema = object({
8226
- deviceId: number().optional(),
8229
+ /** Internal, lease-scoped participant operation. It is intentionally separate
8230
+ * from persistent recording settings: a migration never changes
8231
+ * `RecordingConfig.enabled` or camera wrapper bindings. */
8232
+ var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
8233
+ var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
8234
+ var StorageMigrationMediaMoveInputSchema = object({
8227
8235
  toLocationId: string(),
8228
8236
  throttleMbps: number().min(1).max(1e3).optional()
8237
+ }).extend({ leaseId: string().min(1) });
8238
+ /** The independently selectable logical storage classes. `recordings`
8239
+ * encompasses the high and mid segment profiles; `recordingsLow` is low
8240
+ * segments; `eventMedia` is post-analysis blobs. */
8241
+ var StorageMigrationClassSchema = _enum([
8242
+ "recordings",
8243
+ "recordingsLow",
8244
+ "eventMedia"
8245
+ ]);
8246
+ /** A destination is always an existing, fully-qualified location id. The
8247
+ * migration API intentionally never changes a source location's `basePath`:
8248
+ * callers create a new `<type>:<slug>` location, then select it here. */
8249
+ var StorageMigrationDestinationsSchema = object({
8250
+ recordings: string().min(1).optional(),
8251
+ recordingsLow: string().min(1).optional(),
8252
+ eventMedia: string().min(1).optional()
8253
+ }).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
8254
+ /** Shared input for planning and starting an orchestrated storage migration. */
8255
+ var StorageMigrationInputSchema = object({
8256
+ destinations: StorageMigrationDestinationsSchema,
8257
+ throttleMbps: number().min(1).max(1e3).optional()
8258
+ });
8259
+ /** The durable coordinator state machine. The only phase that changes default
8260
+ * locations is `repointing`, after every selected mover has completed and been
8261
+ * verified. */
8262
+ var StorageMigrationPhaseSchema = _enum([
8263
+ "planning",
8264
+ "pausing",
8265
+ "moving",
8266
+ "verifying",
8267
+ "repointing",
8268
+ "refreshing",
8269
+ "resuming",
8270
+ "done",
8271
+ "failed",
8272
+ "cancelled"
8273
+ ]);
8274
+ var StorageMigrationParticipantSchema = _enum([
8275
+ "pipeline",
8276
+ "recorder",
8277
+ "analytics"
8278
+ ]);
8279
+ var StorageMigrationMoveSchema = object({
8280
+ storageClass: StorageMigrationClassSchema,
8281
+ fromLocationId: string(),
8282
+ toLocationId: string(),
8283
+ moverJobId: string().nullable(),
8284
+ state: RelocateJobStateSchema.nullable(),
8285
+ error: string().nullable()
8286
+ });
8287
+ var StorageMigrationJobSchema = object({
8288
+ jobId: string(),
8289
+ phase: StorageMigrationPhaseSchema,
8290
+ destinations: StorageMigrationDestinationsSchema,
8291
+ throttleMbps: number(),
8292
+ moves: array(StorageMigrationMoveSchema),
8293
+ pauseLeaseId: string().nullable(),
8294
+ pausedParticipants: array(StorageMigrationParticipantSchema),
8295
+ repointed: boolean(),
8296
+ cancelRequested: boolean(),
8297
+ startedAt: number(),
8298
+ updatedAt: number(),
8299
+ finishedAt: number().nullable(),
8300
+ error: string().nullable()
8301
+ });
8302
+ var StorageMigrationPlanSchema = object({
8303
+ destinations: StorageMigrationDestinationsSchema,
8304
+ moves: array(object({
8305
+ storageClass: StorageMigrationClassSchema,
8306
+ fromLocationId: string(),
8307
+ toLocationId: string()
8308
+ }))
8229
8309
  });
8230
8310
  /**
8231
8311
  * `StorageLocationType` — an addon-declared id that identifies the *kind* of
@@ -16736,13 +16816,19 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
16736
16816
  }), method(object({ deviceId: number() }), EventPruneCountsSchema, {
16737
16817
  kind: "mutation",
16738
16818
  auth: "admin"
16739
- }), method(RelocateMediaInputSchema, object({ jobId: string() }), {
16819
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
16740
16820
  kind: "mutation",
16741
16821
  auth: "admin"
16742
- }), method(object({}), array(RelocateJobSchema).readonly(), {
16743
- kind: "query",
16822
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
16823
+ kind: "mutation",
16824
+ auth: "admin"
16825
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
16826
+ kind: "mutation",
16827
+ auth: "admin"
16828
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
16829
+ kind: "mutation",
16744
16830
  auth: "admin"
16745
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16831
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16746
16832
  kind: "mutation",
16747
16833
  auth: "admin"
16748
16834
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
@@ -18239,7 +18325,13 @@ var NodeInferenceDevicesSchema = object({
18239
18325
  reachable: boolean(),
18240
18326
  devices: array(NodeInferenceDeviceSchema).readonly()
18241
18327
  });
18242
- method(object({
18328
+ method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
18329
+ kind: "mutation",
18330
+ auth: "admin"
18331
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
18332
+ kind: "mutation",
18333
+ auth: "admin"
18334
+ }), method(object({
18243
18335
  deviceId: number(),
18244
18336
  agentNodeId: string()
18245
18337
  }), object({ success: literal(true) }), {
@@ -18913,6 +19005,13 @@ method(object({ locationId: string() }), EvictableUsageSchema), method(object({
18913
19005
  locationId: string(),
18914
19006
  targetBytes: number().int().positive()
18915
19007
  }), EvictResultSchema, { kind: "mutation" });
19008
+ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
19009
+ kind: "mutation",
19010
+ auth: "admin"
19011
+ }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
19012
+ kind: "mutation",
19013
+ auth: "admin"
19014
+ });
18916
19015
  var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
18917
19016
  providerId: string().min(1),
18918
19017
  displayName: string().min(1),
@@ -19016,6 +19115,28 @@ var TerminalProfileInfoSchema = object({
19016
19115
  label: string(),
19017
19116
  description: string().optional()
19018
19117
  });
19118
+ /**
19119
+ * A durable operator-created Terminal instance. Profiles are templates; only
19120
+ * an instance declares a camera.
19121
+ */
19122
+ var TerminalInstanceInfoSchema = object({
19123
+ instanceId: string(),
19124
+ cameraStableId: string(),
19125
+ nodeId: string(),
19126
+ profileId: string(),
19127
+ profileLabel: string(),
19128
+ name: string(),
19129
+ enabled: boolean()
19130
+ });
19131
+ var TerminalLegacyCameraSchema = object({
19132
+ stableId: string(),
19133
+ nodeId: string(),
19134
+ profileId: string(),
19135
+ profileLabel: string(),
19136
+ name: string(),
19137
+ /** Only legacy monitor cameras can retain their historic stable identity. */
19138
+ adoptable: boolean()
19139
+ });
19019
19140
  var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
19020
19141
  seq: number().int().positive(),
19021
19142
  kind: literal("data"),
@@ -19032,7 +19153,29 @@ var TerminalOutputBatchSchema = object({
19032
19153
  snapshot: string().optional(),
19033
19154
  events: array(TerminalOutputEventSchema).readonly()
19034
19155
  });
19035
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
19156
+ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
19157
+ targetNodeId: string().min(1),
19158
+ profileId: string().min(1),
19159
+ name: string().trim().min(1).max(160).optional()
19160
+ }), TerminalInstanceInfoSchema, {
19161
+ kind: "mutation",
19162
+ auth: "admin"
19163
+ }), method(object({ instanceId: string().min(1) }), _void(), {
19164
+ kind: "mutation",
19165
+ auth: "admin"
19166
+ }), method(object({
19167
+ instanceId: string().min(1),
19168
+ enabled: boolean()
19169
+ }), TerminalInstanceInfoSchema, {
19170
+ kind: "mutation",
19171
+ auth: "admin"
19172
+ }), method(_void(), array(TerminalLegacyCameraSchema).readonly(), { auth: "admin" }), method(object({
19173
+ stableId: string().min(1),
19174
+ name: string().trim().min(1).max(160).optional()
19175
+ }), TerminalInstanceInfoSchema, {
19176
+ kind: "mutation",
19177
+ auth: "admin"
19178
+ }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
19036
19179
  profileId: string(),
19037
19180
  cols: number().int().positive(),
19038
19181
  rows: number().int().positive()
@@ -19049,7 +19192,13 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
19049
19192
  }), method(object({
19050
19193
  sessionId: string(),
19051
19194
  afterSeq: number().int().nonnegative(),
19052
- waitMs: number().int().min(0).max(2e3).default(0)
19195
+ waitMs: number().int().min(0).max(2e3).default(0),
19196
+ /**
19197
+ * Wait when a just-opened session has no output yet. Kept opt-in so a
19198
+ * browser's initial repaint remains immediate; the camera snapshot
19199
+ * relay uses it to avoid encoding a blank startup frame.
19200
+ */
19201
+ waitForOutput: boolean().optional()
19053
19202
  }), TerminalOutputBatchSchema, {
19054
19203
  kind: "mutation",
19055
19204
  auth: "admin",
@@ -20990,6 +21139,7 @@ var FaceInfoSchema = object({
20990
21139
  var FaceFilterEnum = _enum([
20991
21140
  "unassigned",
20992
21141
  "recognized",
21142
+ "identified",
20993
21143
  "all"
20994
21144
  ]);
20995
21145
  var MediaFileLiteSchema$1 = object({
@@ -21018,6 +21168,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
21018
21168
  kind: "mutation",
21019
21169
  auth: "admin"
21020
21170
  }), method(object({
21171
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
21172
+ deviceId: number().int().optional(),
21021
21173
  limit: number().int().positive().optional(),
21022
21174
  filter: FaceFilterEnum.optional(),
21023
21175
  /**
@@ -22783,6 +22935,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
22783
22935
  capName: string().min(1).max(64),
22784
22936
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
22785
22937
  valuePath: string().min(1).max(64)
22938
+ }),
22939
+ object({
22940
+ kind: literal("latest-recognition"),
22941
+ recognition: _enum(["person", "plate"])
22786
22942
  })
22787
22943
  ]);
22788
22944
  var OsdSlotBindingSchema = object({
@@ -22888,6 +23044,15 @@ method(object({ deviceId: number().int() }), object({
22888
23044
  }), object({ success: literal(true) }), {
22889
23045
  kind: "mutation",
22890
23046
  auth: "admin"
23047
+ }), method(object({
23048
+ sourceDeviceId: number().int(),
23049
+ targetDeviceId: number().int()
23050
+ }), object({
23051
+ copied: number().int().nonnegative(),
23052
+ skipped: number().int().nonnegative()
23053
+ }), {
23054
+ kind: "mutation",
23055
+ auth: "admin"
22891
23056
  }), method(object({
22892
23057
  deviceId: number().int(),
22893
23058
  slotId: string().min(1),
@@ -23773,13 +23938,19 @@ method(object({
23773
23938
  }), {
23774
23939
  kind: "mutation",
23775
23940
  auth: "admin"
23776
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
23941
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
23777
23942
  kind: "mutation",
23778
23943
  auth: "admin"
23779
- }), method(object({}), array(RelocateJobSchema).readonly(), {
23780
- kind: "query",
23944
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
23945
+ kind: "mutation",
23781
23946
  auth: "admin"
23782
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23947
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
23948
+ kind: "mutation",
23949
+ auth: "admin"
23950
+ }), method(StorageMigrationFootageMoveInputSchema, object({ jobId: string() }), {
23951
+ kind: "mutation",
23952
+ auth: "admin"
23953
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23783
23954
  kind: "mutation",
23784
23955
  auth: "admin"
23785
23956
  });
@@ -27901,6 +28072,12 @@ Object.freeze({
27901
28072
  addonId: null,
27902
28073
  access: "delete"
27903
28074
  },
28075
+ "osdManager.copyDeviceConfiguration": {
28076
+ capName: "osd-manager",
28077
+ capScope: "system",
28078
+ addonId: null,
28079
+ access: "create"
28080
+ },
27904
28081
  "osdManager.getConditionSupport": {
27905
28082
  capName: "osd-manager",
27906
28083
  capScope: "system",
@@ -27997,7 +28174,7 @@ Object.freeze({
27997
28174
  addonId: null,
27998
28175
  access: "create"
27999
28176
  },
28000
- "pipelineAnalytics.cancelMediaRelocate": {
28177
+ "pipelineAnalytics.cancelStorageMigrationMove": {
28001
28178
  capName: "pipeline-analytics",
28002
28179
  capScope: "device",
28003
28180
  addonId: null,
@@ -28069,12 +28246,6 @@ Object.freeze({
28069
28246
  addonId: null,
28070
28247
  access: "view"
28071
28248
  },
28072
- "pipelineAnalytics.getMediaRelocateStatus": {
28073
- capName: "pipeline-analytics",
28074
- capScope: "device",
28075
- addonId: null,
28076
- access: "view"
28077
- },
28078
28249
  "pipelineAnalytics.getMotionEvents": {
28079
28250
  capName: "pipeline-analytics",
28080
28251
  capScope: "device",
@@ -28111,6 +28282,12 @@ Object.freeze({
28111
28282
  addonId: null,
28112
28283
  access: "view"
28113
28284
  },
28285
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
28286
+ capName: "pipeline-analytics",
28287
+ capScope: "device",
28288
+ addonId: null,
28289
+ access: "view"
28290
+ },
28114
28291
  "pipelineAnalytics.getTrack": {
28115
28292
  capName: "pipeline-analytics",
28116
28293
  capScope: "device",
@@ -28189,6 +28366,12 @@ Object.freeze({
28189
28366
  addonId: null,
28190
28367
  access: "view"
28191
28368
  },
28369
+ "pipelineAnalytics.pauseForStorageMigration": {
28370
+ capName: "pipeline-analytics",
28371
+ capScope: "device",
28372
+ addonId: null,
28373
+ access: "create"
28374
+ },
28192
28375
  "pipelineAnalytics.proposeRetrainAnnotations": {
28193
28376
  capName: "pipeline-analytics",
28194
28377
  capScope: "device",
@@ -28219,7 +28402,7 @@ Object.freeze({
28219
28402
  addonId: null,
28220
28403
  access: "create"
28221
28404
  },
28222
- "pipelineAnalytics.relocateMedia": {
28405
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
28223
28406
  capName: "pipeline-analytics",
28224
28407
  capScope: "device",
28225
28408
  addonId: null,
@@ -28231,6 +28414,12 @@ Object.freeze({
28231
28414
  addonId: null,
28232
28415
  access: "create"
28233
28416
  },
28417
+ "pipelineAnalytics.resumeForStorageMigration": {
28418
+ capName: "pipeline-analytics",
28419
+ capScope: "device",
28420
+ addonId: null,
28421
+ access: "create"
28422
+ },
28234
28423
  "pipelineAnalytics.saveRetrainAnnotations": {
28235
28424
  capName: "pipeline-analytics",
28236
28425
  capScope: "device",
@@ -28255,6 +28444,12 @@ Object.freeze({
28255
28444
  addonId: null,
28256
28445
  access: "create"
28257
28446
  },
28447
+ "pipelineAnalytics.startStorageMigrationMove": {
28448
+ capName: "pipeline-analytics",
28449
+ capScope: "device",
28450
+ addonId: null,
28451
+ access: "create"
28452
+ },
28258
28453
  "pipelineAnalytics.wipeAllAnalytics": {
28259
28454
  capName: "pipeline-analytics",
28260
28455
  capScope: "device",
@@ -28621,6 +28816,12 @@ Object.freeze({
28621
28816
  addonId: null,
28622
28817
  access: "view"
28623
28818
  },
28819
+ "pipelineOrchestrator.pauseForStorageMigration": {
28820
+ capName: "pipeline-orchestrator",
28821
+ capScope: "system",
28822
+ addonId: null,
28823
+ access: "create"
28824
+ },
28624
28825
  "pipelineOrchestrator.rebalance": {
28625
28826
  capName: "pipeline-orchestrator",
28626
28827
  capScope: "system",
@@ -28645,6 +28846,12 @@ Object.freeze({
28645
28846
  addonId: null,
28646
28847
  access: "view"
28647
28848
  },
28849
+ "pipelineOrchestrator.resumeForStorageMigration": {
28850
+ capName: "pipeline-orchestrator",
28851
+ capScope: "system",
28852
+ addonId: null,
28853
+ access: "create"
28854
+ },
28648
28855
  "pipelineOrchestrator.saveTemplate": {
28649
28856
  capName: "pipeline-orchestrator",
28650
28857
  capScope: "system",
@@ -29041,7 +29248,7 @@ Object.freeze({
29041
29248
  addonId: null,
29042
29249
  access: "create"
29043
29250
  },
29044
- "recording.cancelRelocate": {
29251
+ "recording.cancelStorageMigrationMove": {
29045
29252
  capName: "recording",
29046
29253
  capScope: "system",
29047
29254
  addonId: null,
@@ -29077,7 +29284,7 @@ Object.freeze({
29077
29284
  addonId: null,
29078
29285
  access: "view"
29079
29286
  },
29080
- "recording.getRelocateStatus": {
29287
+ "recording.getStorageMigrationMoveStatus": {
29081
29288
  capName: "recording",
29082
29289
  capScope: "system",
29083
29290
  addonId: null,
@@ -29101,6 +29308,12 @@ Object.freeze({
29101
29308
  addonId: null,
29102
29309
  access: "view"
29103
29310
  },
29311
+ "recording.pauseForStorageMigration": {
29312
+ capName: "recording",
29313
+ capScope: "system",
29314
+ addonId: null,
29315
+ access: "create"
29316
+ },
29104
29317
  "recording.pruneFootage": {
29105
29318
  capName: "recording",
29106
29319
  capScope: "system",
@@ -29119,7 +29332,7 @@ Object.freeze({
29119
29332
  addonId: null,
29120
29333
  access: "view"
29121
29334
  },
29122
- "recording.relocateFootage": {
29335
+ "recording.refreshStorageLocationsForMigration": {
29123
29336
  capName: "recording",
29124
29337
  capScope: "system",
29125
29338
  addonId: null,
@@ -29143,12 +29356,24 @@ Object.freeze({
29143
29356
  addonId: null,
29144
29357
  access: "create"
29145
29358
  },
29359
+ "recording.resumeForStorageMigration": {
29360
+ capName: "recording",
29361
+ capScope: "system",
29362
+ addonId: null,
29363
+ access: "create"
29364
+ },
29146
29365
  "recording.setDeviceConfig": {
29147
29366
  capName: "recording",
29148
29367
  capScope: "system",
29149
29368
  addonId: null,
29150
29369
  access: "create"
29151
29370
  },
29371
+ "recording.startStorageMigrationMove": {
29372
+ capName: "recording",
29373
+ capScope: "system",
29374
+ addonId: null,
29375
+ access: "create"
29376
+ },
29152
29377
  "recordingExport.cancelExport": {
29153
29378
  capName: "recordingExport",
29154
29379
  capScope: "system",
@@ -29539,6 +29764,30 @@ Object.freeze({
29539
29764
  addonId: null,
29540
29765
  access: "view"
29541
29766
  },
29767
+ "storageMigration.cancel": {
29768
+ capName: "storage-migration",
29769
+ capScope: "system",
29770
+ addonId: null,
29771
+ access: "create"
29772
+ },
29773
+ "storageMigration.plan": {
29774
+ capName: "storage-migration",
29775
+ capScope: "system",
29776
+ addonId: null,
29777
+ access: "view"
29778
+ },
29779
+ "storageMigration.start": {
29780
+ capName: "storage-migration",
29781
+ capScope: "system",
29782
+ addonId: null,
29783
+ access: "create"
29784
+ },
29785
+ "storageMigration.status": {
29786
+ capName: "storage-migration",
29787
+ capScope: "system",
29788
+ addonId: null,
29789
+ access: "view"
29790
+ },
29542
29791
  "storageProvider.abortUpload": {
29543
29792
  capName: "storage-provider",
29544
29793
  capScope: "system",
@@ -29917,12 +30166,42 @@ Object.freeze({
29917
30166
  addonId: null,
29918
30167
  access: "create"
29919
30168
  },
30169
+ "terminalSession.adoptLegacyMonitor": {
30170
+ capName: "terminal-session",
30171
+ capScope: "system",
30172
+ addonId: null,
30173
+ access: "create"
30174
+ },
29920
30175
  "terminalSession.close": {
29921
30176
  capName: "terminal-session",
29922
30177
  capScope: "system",
29923
30178
  addonId: null,
29924
30179
  access: "create"
29925
30180
  },
30181
+ "terminalSession.createInstance": {
30182
+ capName: "terminal-session",
30183
+ capScope: "system",
30184
+ addonId: null,
30185
+ access: "create"
30186
+ },
30187
+ "terminalSession.deleteInstance": {
30188
+ capName: "terminal-session",
30189
+ capScope: "system",
30190
+ addonId: null,
30191
+ access: "delete"
30192
+ },
30193
+ "terminalSession.listInstances": {
30194
+ capName: "terminal-session",
30195
+ capScope: "system",
30196
+ addonId: null,
30197
+ access: "view"
30198
+ },
30199
+ "terminalSession.listLegacyCameras": {
30200
+ capName: "terminal-session",
30201
+ capScope: "system",
30202
+ addonId: null,
30203
+ access: "view"
30204
+ },
29926
30205
  "terminalSession.listProfiles": {
29927
30206
  capName: "terminal-session",
29928
30207
  capScope: "system",
@@ -29953,6 +30232,12 @@ Object.freeze({
29953
30232
  addonId: null,
29954
30233
  access: "create"
29955
30234
  },
30235
+ "terminalSession.setInstanceEnabled": {
30236
+ capName: "terminal-session",
30237
+ capScope: "system",
30238
+ addonId: null,
30239
+ access: "create"
30240
+ },
29956
30241
  "terminalSession.writeInput": {
29957
30242
  capName: "terminal-session",
29958
30243
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-export-hap",
3
- "version": "1.2.19",
3
+ "version": "1.2.20",
4
4
  "description": "HomeKit (HAP) bridge exporter for CamStack devices. Publishes a bridged accessory per exposed device — MotionSensor in this MVP; Camera/Doorbell/Switch/Light follow.",
5
5
  "keywords": [
6
6
  "camstack",