@camstack/addon-export-alexa 1.2.16 → 1.2.17

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.
@@ -7719,12 +7719,11 @@ var RecordingConfigSchema = object({
7719
7719
  /**
7720
7720
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
7721
7721
  *
7722
- * One shape shared by the recorder's `relocateFootage` (segments) and
7723
- * pipeline-analytics' `relocateMedia` (event media blobs) so the admin Data
7724
- * page renders both movers with one component. Jobs are in-RAM (a restart
7725
- * forgets them — re-running is safe by construction: copy-if-absent, delete
7726
- * after verify) and each completed/failed run also lands one durable ops-log
7727
- * row on the owning addon's surface.
7722
+ * One shape shared by the recorder and pipeline-analytics internal movers.
7723
+ * The public admin surface is `storage-migration`; child jobs remain in RAM
7724
+ * because copy-if-absent, verify, delete and index/row repoint are resumable.
7725
+ * Each completed/failed run also lands one durable ops-log row on its owning
7726
+ * addon surface.
7728
7727
  */
7729
7728
  var RelocateJobStateSchema = _enum([
7730
7729
  "running",
@@ -7751,19 +7750,100 @@ var RelocateJobSchema = object({
7751
7750
  finishedAt: number().nullable(),
7752
7751
  error: string().nullable()
7753
7752
  });
7753
+ /** Profile-derived footage selection used only by the migration coordinator:
7754
+ * `recordings` owns high+mid; `recordingsLow` owns low. */
7755
+ var RelocateFootageClassSchema = _enum(["recordings", "recordingsLow"]);
7754
7756
  var RelocateFootageInputSchema = object({
7755
- deviceId: number().optional(),
7756
7757
  fromLocationId: string(),
7757
7758
  toLocationId: string(),
7758
7759
  entities: array(_enum(["segments"])).optional(),
7760
+ /** Limits relocation to the logical profile class. Omit only for the
7761
+ * pre-orchestration compatibility path. */
7762
+ footageClass: RelocateFootageClassSchema.optional(),
7759
7763
  /** Copy throttle in MB/s (default 40) — the drain is a background chore,
7760
7764
  * never allowed to starve live writers. */
7761
7765
  throttleMbps: number().min(1).max(1e3).optional()
7762
7766
  });
7763
- var RelocateMediaInputSchema = object({
7764
- deviceId: number().optional(),
7767
+ /** Internal, lease-scoped participant operation. It is intentionally separate
7768
+ * from persistent recording settings: a migration never changes
7769
+ * `RecordingConfig.enabled` or camera wrapper bindings. */
7770
+ var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
7771
+ var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
7772
+ var StorageMigrationMediaMoveInputSchema = object({
7765
7773
  toLocationId: string(),
7766
7774
  throttleMbps: number().min(1).max(1e3).optional()
7775
+ }).extend({ leaseId: string().min(1) });
7776
+ /** The independently selectable logical storage classes. `recordings`
7777
+ * encompasses the high and mid segment profiles; `recordingsLow` is low
7778
+ * segments; `eventMedia` is post-analysis blobs. */
7779
+ var StorageMigrationClassSchema = _enum([
7780
+ "recordings",
7781
+ "recordingsLow",
7782
+ "eventMedia"
7783
+ ]);
7784
+ /** A destination is always an existing, fully-qualified location id. The
7785
+ * migration API intentionally never changes a source location's `basePath`:
7786
+ * callers create a new `<type>:<slug>` location, then select it here. */
7787
+ var StorageMigrationDestinationsSchema = object({
7788
+ recordings: string().min(1).optional(),
7789
+ recordingsLow: string().min(1).optional(),
7790
+ eventMedia: string().min(1).optional()
7791
+ }).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
7792
+ /** Shared input for planning and starting an orchestrated storage migration. */
7793
+ var StorageMigrationInputSchema = object({
7794
+ destinations: StorageMigrationDestinationsSchema,
7795
+ throttleMbps: number().min(1).max(1e3).optional()
7796
+ });
7797
+ /** The durable coordinator state machine. The only phase that changes default
7798
+ * locations is `repointing`, after every selected mover has completed and been
7799
+ * verified. */
7800
+ var StorageMigrationPhaseSchema = _enum([
7801
+ "planning",
7802
+ "pausing",
7803
+ "moving",
7804
+ "verifying",
7805
+ "repointing",
7806
+ "refreshing",
7807
+ "resuming",
7808
+ "done",
7809
+ "failed",
7810
+ "cancelled"
7811
+ ]);
7812
+ var StorageMigrationParticipantSchema = _enum([
7813
+ "pipeline",
7814
+ "recorder",
7815
+ "analytics"
7816
+ ]);
7817
+ var StorageMigrationMoveSchema = object({
7818
+ storageClass: StorageMigrationClassSchema,
7819
+ fromLocationId: string(),
7820
+ toLocationId: string(),
7821
+ moverJobId: string().nullable(),
7822
+ state: RelocateJobStateSchema.nullable(),
7823
+ error: string().nullable()
7824
+ });
7825
+ var StorageMigrationJobSchema = object({
7826
+ jobId: string(),
7827
+ phase: StorageMigrationPhaseSchema,
7828
+ destinations: StorageMigrationDestinationsSchema,
7829
+ throttleMbps: number(),
7830
+ moves: array(StorageMigrationMoveSchema),
7831
+ pauseLeaseId: string().nullable(),
7832
+ pausedParticipants: array(StorageMigrationParticipantSchema),
7833
+ repointed: boolean(),
7834
+ cancelRequested: boolean(),
7835
+ startedAt: number(),
7836
+ updatedAt: number(),
7837
+ finishedAt: number().nullable(),
7838
+ error: string().nullable()
7839
+ });
7840
+ var StorageMigrationPlanSchema = object({
7841
+ destinations: StorageMigrationDestinationsSchema,
7842
+ moves: array(object({
7843
+ storageClass: StorageMigrationClassSchema,
7844
+ fromLocationId: string(),
7845
+ toLocationId: string()
7846
+ }))
7767
7847
  });
7768
7848
  /**
7769
7849
  * `StorageLocationType` — an addon-declared id that identifies the *kind* of
@@ -16272,13 +16352,19 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
16272
16352
  }), method(object({ deviceId: number() }), EventPruneCountsSchema, {
16273
16353
  kind: "mutation",
16274
16354
  auth: "admin"
16275
- }), method(RelocateMediaInputSchema, object({ jobId: string() }), {
16355
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
16276
16356
  kind: "mutation",
16277
16357
  auth: "admin"
16278
- }), method(object({}), array(RelocateJobSchema).readonly(), {
16279
- kind: "query",
16358
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
16359
+ kind: "mutation",
16360
+ auth: "admin"
16361
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
16362
+ kind: "mutation",
16363
+ auth: "admin"
16364
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
16365
+ kind: "mutation",
16280
16366
  auth: "admin"
16281
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16367
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16282
16368
  kind: "mutation",
16283
16369
  auth: "admin"
16284
16370
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
@@ -17775,7 +17861,13 @@ var NodeInferenceDevicesSchema = object({
17775
17861
  reachable: boolean(),
17776
17862
  devices: array(NodeInferenceDeviceSchema).readonly()
17777
17863
  });
17778
- method(object({
17864
+ method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
17865
+ kind: "mutation",
17866
+ auth: "admin"
17867
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
17868
+ kind: "mutation",
17869
+ auth: "admin"
17870
+ }), method(object({
17779
17871
  deviceId: number(),
17780
17872
  agentNodeId: string()
17781
17873
  }), object({ success: literal(true) }), {
@@ -18449,6 +18541,13 @@ method(object({ locationId: string() }), EvictableUsageSchema), method(object({
18449
18541
  locationId: string(),
18450
18542
  targetBytes: number().int().positive()
18451
18543
  }), EvictResultSchema, { kind: "mutation" });
18544
+ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
18545
+ kind: "mutation",
18546
+ auth: "admin"
18547
+ }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
18548
+ kind: "mutation",
18549
+ auth: "admin"
18550
+ });
18452
18551
  var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
18453
18552
  providerId: string().min(1),
18454
18553
  displayName: string().min(1),
@@ -18552,6 +18651,28 @@ var TerminalProfileInfoSchema = object({
18552
18651
  label: string(),
18553
18652
  description: string().optional()
18554
18653
  });
18654
+ /**
18655
+ * A durable operator-created Terminal instance. Profiles are templates; only
18656
+ * an instance declares a camera.
18657
+ */
18658
+ var TerminalInstanceInfoSchema = object({
18659
+ instanceId: string(),
18660
+ cameraStableId: string(),
18661
+ nodeId: string(),
18662
+ profileId: string(),
18663
+ profileLabel: string(),
18664
+ name: string(),
18665
+ enabled: boolean()
18666
+ });
18667
+ var TerminalLegacyCameraSchema = object({
18668
+ stableId: string(),
18669
+ nodeId: string(),
18670
+ profileId: string(),
18671
+ profileLabel: string(),
18672
+ name: string(),
18673
+ /** Only legacy monitor cameras can retain their historic stable identity. */
18674
+ adoptable: boolean()
18675
+ });
18555
18676
  var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
18556
18677
  seq: number().int().positive(),
18557
18678
  kind: literal("data"),
@@ -18568,7 +18689,29 @@ var TerminalOutputBatchSchema = object({
18568
18689
  snapshot: string().optional(),
18569
18690
  events: array(TerminalOutputEventSchema).readonly()
18570
18691
  });
18571
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18692
+ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
18693
+ targetNodeId: string().min(1),
18694
+ profileId: string().min(1),
18695
+ name: string().trim().min(1).max(160).optional()
18696
+ }), TerminalInstanceInfoSchema, {
18697
+ kind: "mutation",
18698
+ auth: "admin"
18699
+ }), method(object({ instanceId: string().min(1) }), _void(), {
18700
+ kind: "mutation",
18701
+ auth: "admin"
18702
+ }), method(object({
18703
+ instanceId: string().min(1),
18704
+ enabled: boolean()
18705
+ }), TerminalInstanceInfoSchema, {
18706
+ kind: "mutation",
18707
+ auth: "admin"
18708
+ }), method(_void(), array(TerminalLegacyCameraSchema).readonly(), { auth: "admin" }), method(object({
18709
+ stableId: string().min(1),
18710
+ name: string().trim().min(1).max(160).optional()
18711
+ }), TerminalInstanceInfoSchema, {
18712
+ kind: "mutation",
18713
+ auth: "admin"
18714
+ }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18572
18715
  profileId: string(),
18573
18716
  cols: number().int().positive(),
18574
18717
  rows: number().int().positive()
@@ -18585,7 +18728,13 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
18585
18728
  }), method(object({
18586
18729
  sessionId: string(),
18587
18730
  afterSeq: number().int().nonnegative(),
18588
- waitMs: number().int().min(0).max(2e3).default(0)
18731
+ waitMs: number().int().min(0).max(2e3).default(0),
18732
+ /**
18733
+ * Wait when a just-opened session has no output yet. Kept opt-in so a
18734
+ * browser's initial repaint remains immediate; the camera snapshot
18735
+ * relay uses it to avoid encoding a blank startup frame.
18736
+ */
18737
+ waitForOutput: boolean().optional()
18589
18738
  }), TerminalOutputBatchSchema, {
18590
18739
  kind: "mutation",
18591
18740
  auth: "admin",
@@ -20526,6 +20675,7 @@ var FaceInfoSchema = object({
20526
20675
  var FaceFilterEnum = _enum([
20527
20676
  "unassigned",
20528
20677
  "recognized",
20678
+ "identified",
20529
20679
  "all"
20530
20680
  ]);
20531
20681
  var MediaFileLiteSchema$1 = object({
@@ -20554,6 +20704,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
20554
20704
  kind: "mutation",
20555
20705
  auth: "admin"
20556
20706
  }), method(object({
20707
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
20708
+ deviceId: number().int().optional(),
20557
20709
  limit: number().int().positive().optional(),
20558
20710
  filter: FaceFilterEnum.optional(),
20559
20711
  /**
@@ -22319,6 +22471,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
22319
22471
  capName: string().min(1).max(64),
22320
22472
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
22321
22473
  valuePath: string().min(1).max(64)
22474
+ }),
22475
+ object({
22476
+ kind: literal("latest-recognition"),
22477
+ recognition: _enum(["person", "plate"])
22322
22478
  })
22323
22479
  ]);
22324
22480
  var OsdSlotBindingSchema = object({
@@ -22424,6 +22580,15 @@ method(object({ deviceId: number().int() }), object({
22424
22580
  }), object({ success: literal(true) }), {
22425
22581
  kind: "mutation",
22426
22582
  auth: "admin"
22583
+ }), method(object({
22584
+ sourceDeviceId: number().int(),
22585
+ targetDeviceId: number().int()
22586
+ }), object({
22587
+ copied: number().int().nonnegative(),
22588
+ skipped: number().int().nonnegative()
22589
+ }), {
22590
+ kind: "mutation",
22591
+ auth: "admin"
22427
22592
  }), method(object({
22428
22593
  deviceId: number().int(),
22429
22594
  slotId: string().min(1),
@@ -23309,13 +23474,19 @@ method(object({
23309
23474
  }), {
23310
23475
  kind: "mutation",
23311
23476
  auth: "admin"
23312
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
23477
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
23313
23478
  kind: "mutation",
23314
23479
  auth: "admin"
23315
- }), method(object({}), array(RelocateJobSchema).readonly(), {
23316
- kind: "query",
23480
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
23481
+ kind: "mutation",
23317
23482
  auth: "admin"
23318
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23483
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
23484
+ kind: "mutation",
23485
+ auth: "admin"
23486
+ }), method(StorageMigrationFootageMoveInputSchema, object({ jobId: string() }), {
23487
+ kind: "mutation",
23488
+ auth: "admin"
23489
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23319
23490
  kind: "mutation",
23320
23491
  auth: "admin"
23321
23492
  });
@@ -27437,6 +27608,12 @@ Object.freeze({
27437
27608
  addonId: null,
27438
27609
  access: "delete"
27439
27610
  },
27611
+ "osdManager.copyDeviceConfiguration": {
27612
+ capName: "osd-manager",
27613
+ capScope: "system",
27614
+ addonId: null,
27615
+ access: "create"
27616
+ },
27440
27617
  "osdManager.getConditionSupport": {
27441
27618
  capName: "osd-manager",
27442
27619
  capScope: "system",
@@ -27533,7 +27710,7 @@ Object.freeze({
27533
27710
  addonId: null,
27534
27711
  access: "create"
27535
27712
  },
27536
- "pipelineAnalytics.cancelMediaRelocate": {
27713
+ "pipelineAnalytics.cancelStorageMigrationMove": {
27537
27714
  capName: "pipeline-analytics",
27538
27715
  capScope: "device",
27539
27716
  addonId: null,
@@ -27605,12 +27782,6 @@ Object.freeze({
27605
27782
  addonId: null,
27606
27783
  access: "view"
27607
27784
  },
27608
- "pipelineAnalytics.getMediaRelocateStatus": {
27609
- capName: "pipeline-analytics",
27610
- capScope: "device",
27611
- addonId: null,
27612
- access: "view"
27613
- },
27614
27785
  "pipelineAnalytics.getMotionEvents": {
27615
27786
  capName: "pipeline-analytics",
27616
27787
  capScope: "device",
@@ -27647,6 +27818,12 @@ Object.freeze({
27647
27818
  addonId: null,
27648
27819
  access: "view"
27649
27820
  },
27821
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
27822
+ capName: "pipeline-analytics",
27823
+ capScope: "device",
27824
+ addonId: null,
27825
+ access: "view"
27826
+ },
27650
27827
  "pipelineAnalytics.getTrack": {
27651
27828
  capName: "pipeline-analytics",
27652
27829
  capScope: "device",
@@ -27725,6 +27902,12 @@ Object.freeze({
27725
27902
  addonId: null,
27726
27903
  access: "view"
27727
27904
  },
27905
+ "pipelineAnalytics.pauseForStorageMigration": {
27906
+ capName: "pipeline-analytics",
27907
+ capScope: "device",
27908
+ addonId: null,
27909
+ access: "create"
27910
+ },
27728
27911
  "pipelineAnalytics.proposeRetrainAnnotations": {
27729
27912
  capName: "pipeline-analytics",
27730
27913
  capScope: "device",
@@ -27755,7 +27938,7 @@ Object.freeze({
27755
27938
  addonId: null,
27756
27939
  access: "create"
27757
27940
  },
27758
- "pipelineAnalytics.relocateMedia": {
27941
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
27759
27942
  capName: "pipeline-analytics",
27760
27943
  capScope: "device",
27761
27944
  addonId: null,
@@ -27767,6 +27950,12 @@ Object.freeze({
27767
27950
  addonId: null,
27768
27951
  access: "create"
27769
27952
  },
27953
+ "pipelineAnalytics.resumeForStorageMigration": {
27954
+ capName: "pipeline-analytics",
27955
+ capScope: "device",
27956
+ addonId: null,
27957
+ access: "create"
27958
+ },
27770
27959
  "pipelineAnalytics.saveRetrainAnnotations": {
27771
27960
  capName: "pipeline-analytics",
27772
27961
  capScope: "device",
@@ -27791,6 +27980,12 @@ Object.freeze({
27791
27980
  addonId: null,
27792
27981
  access: "create"
27793
27982
  },
27983
+ "pipelineAnalytics.startStorageMigrationMove": {
27984
+ capName: "pipeline-analytics",
27985
+ capScope: "device",
27986
+ addonId: null,
27987
+ access: "create"
27988
+ },
27794
27989
  "pipelineAnalytics.wipeAllAnalytics": {
27795
27990
  capName: "pipeline-analytics",
27796
27991
  capScope: "device",
@@ -28157,6 +28352,12 @@ Object.freeze({
28157
28352
  addonId: null,
28158
28353
  access: "view"
28159
28354
  },
28355
+ "pipelineOrchestrator.pauseForStorageMigration": {
28356
+ capName: "pipeline-orchestrator",
28357
+ capScope: "system",
28358
+ addonId: null,
28359
+ access: "create"
28360
+ },
28160
28361
  "pipelineOrchestrator.rebalance": {
28161
28362
  capName: "pipeline-orchestrator",
28162
28363
  capScope: "system",
@@ -28181,6 +28382,12 @@ Object.freeze({
28181
28382
  addonId: null,
28182
28383
  access: "view"
28183
28384
  },
28385
+ "pipelineOrchestrator.resumeForStorageMigration": {
28386
+ capName: "pipeline-orchestrator",
28387
+ capScope: "system",
28388
+ addonId: null,
28389
+ access: "create"
28390
+ },
28184
28391
  "pipelineOrchestrator.saveTemplate": {
28185
28392
  capName: "pipeline-orchestrator",
28186
28393
  capScope: "system",
@@ -28577,7 +28784,7 @@ Object.freeze({
28577
28784
  addonId: null,
28578
28785
  access: "create"
28579
28786
  },
28580
- "recording.cancelRelocate": {
28787
+ "recording.cancelStorageMigrationMove": {
28581
28788
  capName: "recording",
28582
28789
  capScope: "system",
28583
28790
  addonId: null,
@@ -28613,7 +28820,7 @@ Object.freeze({
28613
28820
  addonId: null,
28614
28821
  access: "view"
28615
28822
  },
28616
- "recording.getRelocateStatus": {
28823
+ "recording.getStorageMigrationMoveStatus": {
28617
28824
  capName: "recording",
28618
28825
  capScope: "system",
28619
28826
  addonId: null,
@@ -28637,6 +28844,12 @@ Object.freeze({
28637
28844
  addonId: null,
28638
28845
  access: "view"
28639
28846
  },
28847
+ "recording.pauseForStorageMigration": {
28848
+ capName: "recording",
28849
+ capScope: "system",
28850
+ addonId: null,
28851
+ access: "create"
28852
+ },
28640
28853
  "recording.pruneFootage": {
28641
28854
  capName: "recording",
28642
28855
  capScope: "system",
@@ -28655,7 +28868,7 @@ Object.freeze({
28655
28868
  addonId: null,
28656
28869
  access: "view"
28657
28870
  },
28658
- "recording.relocateFootage": {
28871
+ "recording.refreshStorageLocationsForMigration": {
28659
28872
  capName: "recording",
28660
28873
  capScope: "system",
28661
28874
  addonId: null,
@@ -28679,12 +28892,24 @@ Object.freeze({
28679
28892
  addonId: null,
28680
28893
  access: "create"
28681
28894
  },
28895
+ "recording.resumeForStorageMigration": {
28896
+ capName: "recording",
28897
+ capScope: "system",
28898
+ addonId: null,
28899
+ access: "create"
28900
+ },
28682
28901
  "recording.setDeviceConfig": {
28683
28902
  capName: "recording",
28684
28903
  capScope: "system",
28685
28904
  addonId: null,
28686
28905
  access: "create"
28687
28906
  },
28907
+ "recording.startStorageMigrationMove": {
28908
+ capName: "recording",
28909
+ capScope: "system",
28910
+ addonId: null,
28911
+ access: "create"
28912
+ },
28688
28913
  "recordingExport.cancelExport": {
28689
28914
  capName: "recordingExport",
28690
28915
  capScope: "system",
@@ -29075,6 +29300,30 @@ Object.freeze({
29075
29300
  addonId: null,
29076
29301
  access: "view"
29077
29302
  },
29303
+ "storageMigration.cancel": {
29304
+ capName: "storage-migration",
29305
+ capScope: "system",
29306
+ addonId: null,
29307
+ access: "create"
29308
+ },
29309
+ "storageMigration.plan": {
29310
+ capName: "storage-migration",
29311
+ capScope: "system",
29312
+ addonId: null,
29313
+ access: "view"
29314
+ },
29315
+ "storageMigration.start": {
29316
+ capName: "storage-migration",
29317
+ capScope: "system",
29318
+ addonId: null,
29319
+ access: "create"
29320
+ },
29321
+ "storageMigration.status": {
29322
+ capName: "storage-migration",
29323
+ capScope: "system",
29324
+ addonId: null,
29325
+ access: "view"
29326
+ },
29078
29327
  "storageProvider.abortUpload": {
29079
29328
  capName: "storage-provider",
29080
29329
  capScope: "system",
@@ -29453,12 +29702,42 @@ Object.freeze({
29453
29702
  addonId: null,
29454
29703
  access: "create"
29455
29704
  },
29705
+ "terminalSession.adoptLegacyMonitor": {
29706
+ capName: "terminal-session",
29707
+ capScope: "system",
29708
+ addonId: null,
29709
+ access: "create"
29710
+ },
29456
29711
  "terminalSession.close": {
29457
29712
  capName: "terminal-session",
29458
29713
  capScope: "system",
29459
29714
  addonId: null,
29460
29715
  access: "create"
29461
29716
  },
29717
+ "terminalSession.createInstance": {
29718
+ capName: "terminal-session",
29719
+ capScope: "system",
29720
+ addonId: null,
29721
+ access: "create"
29722
+ },
29723
+ "terminalSession.deleteInstance": {
29724
+ capName: "terminal-session",
29725
+ capScope: "system",
29726
+ addonId: null,
29727
+ access: "delete"
29728
+ },
29729
+ "terminalSession.listInstances": {
29730
+ capName: "terminal-session",
29731
+ capScope: "system",
29732
+ addonId: null,
29733
+ access: "view"
29734
+ },
29735
+ "terminalSession.listLegacyCameras": {
29736
+ capName: "terminal-session",
29737
+ capScope: "system",
29738
+ addonId: null,
29739
+ access: "view"
29740
+ },
29462
29741
  "terminalSession.listProfiles": {
29463
29742
  capName: "terminal-session",
29464
29743
  capScope: "system",
@@ -29489,6 +29768,12 @@ Object.freeze({
29489
29768
  addonId: null,
29490
29769
  access: "create"
29491
29770
  },
29771
+ "terminalSession.setInstanceEnabled": {
29772
+ capName: "terminal-session",
29773
+ capScope: "system",
29774
+ addonId: null,
29775
+ access: "create"
29776
+ },
29492
29777
  "terminalSession.writeInput": {
29493
29778
  capName: "terminal-session",
29494
29779
  capScope: "system",
@@ -7692,12 +7692,11 @@ var RecordingConfigSchema = object({
7692
7692
  /**
7693
7693
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
7694
7694
  *
7695
- * One shape shared by the recorder's `relocateFootage` (segments) and
7696
- * pipeline-analytics' `relocateMedia` (event media blobs) so the admin Data
7697
- * page renders both movers with one component. Jobs are in-RAM (a restart
7698
- * forgets them — re-running is safe by construction: copy-if-absent, delete
7699
- * after verify) and each completed/failed run also lands one durable ops-log
7700
- * row on the owning addon's surface.
7695
+ * One shape shared by the recorder and pipeline-analytics internal movers.
7696
+ * The public admin surface is `storage-migration`; child jobs remain in RAM
7697
+ * because copy-if-absent, verify, delete and index/row repoint are resumable.
7698
+ * Each completed/failed run also lands one durable ops-log row on its owning
7699
+ * addon surface.
7701
7700
  */
7702
7701
  var RelocateJobStateSchema = _enum([
7703
7702
  "running",
@@ -7724,19 +7723,100 @@ var RelocateJobSchema = object({
7724
7723
  finishedAt: number().nullable(),
7725
7724
  error: string().nullable()
7726
7725
  });
7726
+ /** Profile-derived footage selection used only by the migration coordinator:
7727
+ * `recordings` owns high+mid; `recordingsLow` owns low. */
7728
+ var RelocateFootageClassSchema = _enum(["recordings", "recordingsLow"]);
7727
7729
  var RelocateFootageInputSchema = object({
7728
- deviceId: number().optional(),
7729
7730
  fromLocationId: string(),
7730
7731
  toLocationId: string(),
7731
7732
  entities: array(_enum(["segments"])).optional(),
7733
+ /** Limits relocation to the logical profile class. Omit only for the
7734
+ * pre-orchestration compatibility path. */
7735
+ footageClass: RelocateFootageClassSchema.optional(),
7732
7736
  /** Copy throttle in MB/s (default 40) — the drain is a background chore,
7733
7737
  * never allowed to starve live writers. */
7734
7738
  throttleMbps: number().min(1).max(1e3).optional()
7735
7739
  });
7736
- var RelocateMediaInputSchema = object({
7737
- deviceId: number().optional(),
7740
+ /** Internal, lease-scoped participant operation. It is intentionally separate
7741
+ * from persistent recording settings: a migration never changes
7742
+ * `RecordingConfig.enabled` or camera wrapper bindings. */
7743
+ var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
7744
+ var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
7745
+ var StorageMigrationMediaMoveInputSchema = object({
7738
7746
  toLocationId: string(),
7739
7747
  throttleMbps: number().min(1).max(1e3).optional()
7748
+ }).extend({ leaseId: string().min(1) });
7749
+ /** The independently selectable logical storage classes. `recordings`
7750
+ * encompasses the high and mid segment profiles; `recordingsLow` is low
7751
+ * segments; `eventMedia` is post-analysis blobs. */
7752
+ var StorageMigrationClassSchema = _enum([
7753
+ "recordings",
7754
+ "recordingsLow",
7755
+ "eventMedia"
7756
+ ]);
7757
+ /** A destination is always an existing, fully-qualified location id. The
7758
+ * migration API intentionally never changes a source location's `basePath`:
7759
+ * callers create a new `<type>:<slug>` location, then select it here. */
7760
+ var StorageMigrationDestinationsSchema = object({
7761
+ recordings: string().min(1).optional(),
7762
+ recordingsLow: string().min(1).optional(),
7763
+ eventMedia: string().min(1).optional()
7764
+ }).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
7765
+ /** Shared input for planning and starting an orchestrated storage migration. */
7766
+ var StorageMigrationInputSchema = object({
7767
+ destinations: StorageMigrationDestinationsSchema,
7768
+ throttleMbps: number().min(1).max(1e3).optional()
7769
+ });
7770
+ /** The durable coordinator state machine. The only phase that changes default
7771
+ * locations is `repointing`, after every selected mover has completed and been
7772
+ * verified. */
7773
+ var StorageMigrationPhaseSchema = _enum([
7774
+ "planning",
7775
+ "pausing",
7776
+ "moving",
7777
+ "verifying",
7778
+ "repointing",
7779
+ "refreshing",
7780
+ "resuming",
7781
+ "done",
7782
+ "failed",
7783
+ "cancelled"
7784
+ ]);
7785
+ var StorageMigrationParticipantSchema = _enum([
7786
+ "pipeline",
7787
+ "recorder",
7788
+ "analytics"
7789
+ ]);
7790
+ var StorageMigrationMoveSchema = object({
7791
+ storageClass: StorageMigrationClassSchema,
7792
+ fromLocationId: string(),
7793
+ toLocationId: string(),
7794
+ moverJobId: string().nullable(),
7795
+ state: RelocateJobStateSchema.nullable(),
7796
+ error: string().nullable()
7797
+ });
7798
+ var StorageMigrationJobSchema = object({
7799
+ jobId: string(),
7800
+ phase: StorageMigrationPhaseSchema,
7801
+ destinations: StorageMigrationDestinationsSchema,
7802
+ throttleMbps: number(),
7803
+ moves: array(StorageMigrationMoveSchema),
7804
+ pauseLeaseId: string().nullable(),
7805
+ pausedParticipants: array(StorageMigrationParticipantSchema),
7806
+ repointed: boolean(),
7807
+ cancelRequested: boolean(),
7808
+ startedAt: number(),
7809
+ updatedAt: number(),
7810
+ finishedAt: number().nullable(),
7811
+ error: string().nullable()
7812
+ });
7813
+ var StorageMigrationPlanSchema = object({
7814
+ destinations: StorageMigrationDestinationsSchema,
7815
+ moves: array(object({
7816
+ storageClass: StorageMigrationClassSchema,
7817
+ fromLocationId: string(),
7818
+ toLocationId: string()
7819
+ }))
7740
7820
  });
7741
7821
  /**
7742
7822
  * `StorageLocationType` — an addon-declared id that identifies the *kind* of
@@ -16245,13 +16325,19 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
16245
16325
  }), method(object({ deviceId: number() }), EventPruneCountsSchema, {
16246
16326
  kind: "mutation",
16247
16327
  auth: "admin"
16248
- }), method(RelocateMediaInputSchema, object({ jobId: string() }), {
16328
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
16249
16329
  kind: "mutation",
16250
16330
  auth: "admin"
16251
- }), method(object({}), array(RelocateJobSchema).readonly(), {
16252
- kind: "query",
16331
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
16332
+ kind: "mutation",
16333
+ auth: "admin"
16334
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
16335
+ kind: "mutation",
16336
+ auth: "admin"
16337
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
16338
+ kind: "mutation",
16253
16339
  auth: "admin"
16254
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16340
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16255
16341
  kind: "mutation",
16256
16342
  auth: "admin"
16257
16343
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
@@ -17748,7 +17834,13 @@ var NodeInferenceDevicesSchema = object({
17748
17834
  reachable: boolean(),
17749
17835
  devices: array(NodeInferenceDeviceSchema).readonly()
17750
17836
  });
17751
- method(object({
17837
+ method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
17838
+ kind: "mutation",
17839
+ auth: "admin"
17840
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
17841
+ kind: "mutation",
17842
+ auth: "admin"
17843
+ }), method(object({
17752
17844
  deviceId: number(),
17753
17845
  agentNodeId: string()
17754
17846
  }), object({ success: literal(true) }), {
@@ -18422,6 +18514,13 @@ method(object({ locationId: string() }), EvictableUsageSchema), method(object({
18422
18514
  locationId: string(),
18423
18515
  targetBytes: number().int().positive()
18424
18516
  }), EvictResultSchema, { kind: "mutation" });
18517
+ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
18518
+ kind: "mutation",
18519
+ auth: "admin"
18520
+ }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
18521
+ kind: "mutation",
18522
+ auth: "admin"
18523
+ });
18425
18524
  var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
18426
18525
  providerId: string().min(1),
18427
18526
  displayName: string().min(1),
@@ -18525,6 +18624,28 @@ var TerminalProfileInfoSchema = object({
18525
18624
  label: string(),
18526
18625
  description: string().optional()
18527
18626
  });
18627
+ /**
18628
+ * A durable operator-created Terminal instance. Profiles are templates; only
18629
+ * an instance declares a camera.
18630
+ */
18631
+ var TerminalInstanceInfoSchema = object({
18632
+ instanceId: string(),
18633
+ cameraStableId: string(),
18634
+ nodeId: string(),
18635
+ profileId: string(),
18636
+ profileLabel: string(),
18637
+ name: string(),
18638
+ enabled: boolean()
18639
+ });
18640
+ var TerminalLegacyCameraSchema = object({
18641
+ stableId: string(),
18642
+ nodeId: string(),
18643
+ profileId: string(),
18644
+ profileLabel: string(),
18645
+ name: string(),
18646
+ /** Only legacy monitor cameras can retain their historic stable identity. */
18647
+ adoptable: boolean()
18648
+ });
18528
18649
  var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
18529
18650
  seq: number().int().positive(),
18530
18651
  kind: literal("data"),
@@ -18541,7 +18662,29 @@ var TerminalOutputBatchSchema = object({
18541
18662
  snapshot: string().optional(),
18542
18663
  events: array(TerminalOutputEventSchema).readonly()
18543
18664
  });
18544
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18665
+ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
18666
+ targetNodeId: string().min(1),
18667
+ profileId: string().min(1),
18668
+ name: string().trim().min(1).max(160).optional()
18669
+ }), TerminalInstanceInfoSchema, {
18670
+ kind: "mutation",
18671
+ auth: "admin"
18672
+ }), method(object({ instanceId: string().min(1) }), _void(), {
18673
+ kind: "mutation",
18674
+ auth: "admin"
18675
+ }), method(object({
18676
+ instanceId: string().min(1),
18677
+ enabled: boolean()
18678
+ }), TerminalInstanceInfoSchema, {
18679
+ kind: "mutation",
18680
+ auth: "admin"
18681
+ }), method(_void(), array(TerminalLegacyCameraSchema).readonly(), { auth: "admin" }), method(object({
18682
+ stableId: string().min(1),
18683
+ name: string().trim().min(1).max(160).optional()
18684
+ }), TerminalInstanceInfoSchema, {
18685
+ kind: "mutation",
18686
+ auth: "admin"
18687
+ }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18545
18688
  profileId: string(),
18546
18689
  cols: number().int().positive(),
18547
18690
  rows: number().int().positive()
@@ -18558,7 +18701,13 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
18558
18701
  }), method(object({
18559
18702
  sessionId: string(),
18560
18703
  afterSeq: number().int().nonnegative(),
18561
- waitMs: number().int().min(0).max(2e3).default(0)
18704
+ waitMs: number().int().min(0).max(2e3).default(0),
18705
+ /**
18706
+ * Wait when a just-opened session has no output yet. Kept opt-in so a
18707
+ * browser's initial repaint remains immediate; the camera snapshot
18708
+ * relay uses it to avoid encoding a blank startup frame.
18709
+ */
18710
+ waitForOutput: boolean().optional()
18562
18711
  }), TerminalOutputBatchSchema, {
18563
18712
  kind: "mutation",
18564
18713
  auth: "admin",
@@ -20499,6 +20648,7 @@ var FaceInfoSchema = object({
20499
20648
  var FaceFilterEnum = _enum([
20500
20649
  "unassigned",
20501
20650
  "recognized",
20651
+ "identified",
20502
20652
  "all"
20503
20653
  ]);
20504
20654
  var MediaFileLiteSchema$1 = object({
@@ -20527,6 +20677,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
20527
20677
  kind: "mutation",
20528
20678
  auth: "admin"
20529
20679
  }), method(object({
20680
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
20681
+ deviceId: number().int().optional(),
20530
20682
  limit: number().int().positive().optional(),
20531
20683
  filter: FaceFilterEnum.optional(),
20532
20684
  /**
@@ -22292,6 +22444,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
22292
22444
  capName: string().min(1).max(64),
22293
22445
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
22294
22446
  valuePath: string().min(1).max(64)
22447
+ }),
22448
+ object({
22449
+ kind: literal("latest-recognition"),
22450
+ recognition: _enum(["person", "plate"])
22295
22451
  })
22296
22452
  ]);
22297
22453
  var OsdSlotBindingSchema = object({
@@ -22397,6 +22553,15 @@ method(object({ deviceId: number().int() }), object({
22397
22553
  }), object({ success: literal(true) }), {
22398
22554
  kind: "mutation",
22399
22555
  auth: "admin"
22556
+ }), method(object({
22557
+ sourceDeviceId: number().int(),
22558
+ targetDeviceId: number().int()
22559
+ }), object({
22560
+ copied: number().int().nonnegative(),
22561
+ skipped: number().int().nonnegative()
22562
+ }), {
22563
+ kind: "mutation",
22564
+ auth: "admin"
22400
22565
  }), method(object({
22401
22566
  deviceId: number().int(),
22402
22567
  slotId: string().min(1),
@@ -23282,13 +23447,19 @@ method(object({
23282
23447
  }), {
23283
23448
  kind: "mutation",
23284
23449
  auth: "admin"
23285
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
23450
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
23286
23451
  kind: "mutation",
23287
23452
  auth: "admin"
23288
- }), method(object({}), array(RelocateJobSchema).readonly(), {
23289
- kind: "query",
23453
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
23454
+ kind: "mutation",
23290
23455
  auth: "admin"
23291
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23456
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
23457
+ kind: "mutation",
23458
+ auth: "admin"
23459
+ }), method(StorageMigrationFootageMoveInputSchema, object({ jobId: string() }), {
23460
+ kind: "mutation",
23461
+ auth: "admin"
23462
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23292
23463
  kind: "mutation",
23293
23464
  auth: "admin"
23294
23465
  });
@@ -27410,6 +27581,12 @@ Object.freeze({
27410
27581
  addonId: null,
27411
27582
  access: "delete"
27412
27583
  },
27584
+ "osdManager.copyDeviceConfiguration": {
27585
+ capName: "osd-manager",
27586
+ capScope: "system",
27587
+ addonId: null,
27588
+ access: "create"
27589
+ },
27413
27590
  "osdManager.getConditionSupport": {
27414
27591
  capName: "osd-manager",
27415
27592
  capScope: "system",
@@ -27506,7 +27683,7 @@ Object.freeze({
27506
27683
  addonId: null,
27507
27684
  access: "create"
27508
27685
  },
27509
- "pipelineAnalytics.cancelMediaRelocate": {
27686
+ "pipelineAnalytics.cancelStorageMigrationMove": {
27510
27687
  capName: "pipeline-analytics",
27511
27688
  capScope: "device",
27512
27689
  addonId: null,
@@ -27578,12 +27755,6 @@ Object.freeze({
27578
27755
  addonId: null,
27579
27756
  access: "view"
27580
27757
  },
27581
- "pipelineAnalytics.getMediaRelocateStatus": {
27582
- capName: "pipeline-analytics",
27583
- capScope: "device",
27584
- addonId: null,
27585
- access: "view"
27586
- },
27587
27758
  "pipelineAnalytics.getMotionEvents": {
27588
27759
  capName: "pipeline-analytics",
27589
27760
  capScope: "device",
@@ -27620,6 +27791,12 @@ Object.freeze({
27620
27791
  addonId: null,
27621
27792
  access: "view"
27622
27793
  },
27794
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
27795
+ capName: "pipeline-analytics",
27796
+ capScope: "device",
27797
+ addonId: null,
27798
+ access: "view"
27799
+ },
27623
27800
  "pipelineAnalytics.getTrack": {
27624
27801
  capName: "pipeline-analytics",
27625
27802
  capScope: "device",
@@ -27698,6 +27875,12 @@ Object.freeze({
27698
27875
  addonId: null,
27699
27876
  access: "view"
27700
27877
  },
27878
+ "pipelineAnalytics.pauseForStorageMigration": {
27879
+ capName: "pipeline-analytics",
27880
+ capScope: "device",
27881
+ addonId: null,
27882
+ access: "create"
27883
+ },
27701
27884
  "pipelineAnalytics.proposeRetrainAnnotations": {
27702
27885
  capName: "pipeline-analytics",
27703
27886
  capScope: "device",
@@ -27728,7 +27911,7 @@ Object.freeze({
27728
27911
  addonId: null,
27729
27912
  access: "create"
27730
27913
  },
27731
- "pipelineAnalytics.relocateMedia": {
27914
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
27732
27915
  capName: "pipeline-analytics",
27733
27916
  capScope: "device",
27734
27917
  addonId: null,
@@ -27740,6 +27923,12 @@ Object.freeze({
27740
27923
  addonId: null,
27741
27924
  access: "create"
27742
27925
  },
27926
+ "pipelineAnalytics.resumeForStorageMigration": {
27927
+ capName: "pipeline-analytics",
27928
+ capScope: "device",
27929
+ addonId: null,
27930
+ access: "create"
27931
+ },
27743
27932
  "pipelineAnalytics.saveRetrainAnnotations": {
27744
27933
  capName: "pipeline-analytics",
27745
27934
  capScope: "device",
@@ -27764,6 +27953,12 @@ Object.freeze({
27764
27953
  addonId: null,
27765
27954
  access: "create"
27766
27955
  },
27956
+ "pipelineAnalytics.startStorageMigrationMove": {
27957
+ capName: "pipeline-analytics",
27958
+ capScope: "device",
27959
+ addonId: null,
27960
+ access: "create"
27961
+ },
27767
27962
  "pipelineAnalytics.wipeAllAnalytics": {
27768
27963
  capName: "pipeline-analytics",
27769
27964
  capScope: "device",
@@ -28130,6 +28325,12 @@ Object.freeze({
28130
28325
  addonId: null,
28131
28326
  access: "view"
28132
28327
  },
28328
+ "pipelineOrchestrator.pauseForStorageMigration": {
28329
+ capName: "pipeline-orchestrator",
28330
+ capScope: "system",
28331
+ addonId: null,
28332
+ access: "create"
28333
+ },
28133
28334
  "pipelineOrchestrator.rebalance": {
28134
28335
  capName: "pipeline-orchestrator",
28135
28336
  capScope: "system",
@@ -28154,6 +28355,12 @@ Object.freeze({
28154
28355
  addonId: null,
28155
28356
  access: "view"
28156
28357
  },
28358
+ "pipelineOrchestrator.resumeForStorageMigration": {
28359
+ capName: "pipeline-orchestrator",
28360
+ capScope: "system",
28361
+ addonId: null,
28362
+ access: "create"
28363
+ },
28157
28364
  "pipelineOrchestrator.saveTemplate": {
28158
28365
  capName: "pipeline-orchestrator",
28159
28366
  capScope: "system",
@@ -28550,7 +28757,7 @@ Object.freeze({
28550
28757
  addonId: null,
28551
28758
  access: "create"
28552
28759
  },
28553
- "recording.cancelRelocate": {
28760
+ "recording.cancelStorageMigrationMove": {
28554
28761
  capName: "recording",
28555
28762
  capScope: "system",
28556
28763
  addonId: null,
@@ -28586,7 +28793,7 @@ Object.freeze({
28586
28793
  addonId: null,
28587
28794
  access: "view"
28588
28795
  },
28589
- "recording.getRelocateStatus": {
28796
+ "recording.getStorageMigrationMoveStatus": {
28590
28797
  capName: "recording",
28591
28798
  capScope: "system",
28592
28799
  addonId: null,
@@ -28610,6 +28817,12 @@ Object.freeze({
28610
28817
  addonId: null,
28611
28818
  access: "view"
28612
28819
  },
28820
+ "recording.pauseForStorageMigration": {
28821
+ capName: "recording",
28822
+ capScope: "system",
28823
+ addonId: null,
28824
+ access: "create"
28825
+ },
28613
28826
  "recording.pruneFootage": {
28614
28827
  capName: "recording",
28615
28828
  capScope: "system",
@@ -28628,7 +28841,7 @@ Object.freeze({
28628
28841
  addonId: null,
28629
28842
  access: "view"
28630
28843
  },
28631
- "recording.relocateFootage": {
28844
+ "recording.refreshStorageLocationsForMigration": {
28632
28845
  capName: "recording",
28633
28846
  capScope: "system",
28634
28847
  addonId: null,
@@ -28652,12 +28865,24 @@ Object.freeze({
28652
28865
  addonId: null,
28653
28866
  access: "create"
28654
28867
  },
28868
+ "recording.resumeForStorageMigration": {
28869
+ capName: "recording",
28870
+ capScope: "system",
28871
+ addonId: null,
28872
+ access: "create"
28873
+ },
28655
28874
  "recording.setDeviceConfig": {
28656
28875
  capName: "recording",
28657
28876
  capScope: "system",
28658
28877
  addonId: null,
28659
28878
  access: "create"
28660
28879
  },
28880
+ "recording.startStorageMigrationMove": {
28881
+ capName: "recording",
28882
+ capScope: "system",
28883
+ addonId: null,
28884
+ access: "create"
28885
+ },
28661
28886
  "recordingExport.cancelExport": {
28662
28887
  capName: "recordingExport",
28663
28888
  capScope: "system",
@@ -29048,6 +29273,30 @@ Object.freeze({
29048
29273
  addonId: null,
29049
29274
  access: "view"
29050
29275
  },
29276
+ "storageMigration.cancel": {
29277
+ capName: "storage-migration",
29278
+ capScope: "system",
29279
+ addonId: null,
29280
+ access: "create"
29281
+ },
29282
+ "storageMigration.plan": {
29283
+ capName: "storage-migration",
29284
+ capScope: "system",
29285
+ addonId: null,
29286
+ access: "view"
29287
+ },
29288
+ "storageMigration.start": {
29289
+ capName: "storage-migration",
29290
+ capScope: "system",
29291
+ addonId: null,
29292
+ access: "create"
29293
+ },
29294
+ "storageMigration.status": {
29295
+ capName: "storage-migration",
29296
+ capScope: "system",
29297
+ addonId: null,
29298
+ access: "view"
29299
+ },
29051
29300
  "storageProvider.abortUpload": {
29052
29301
  capName: "storage-provider",
29053
29302
  capScope: "system",
@@ -29426,12 +29675,42 @@ Object.freeze({
29426
29675
  addonId: null,
29427
29676
  access: "create"
29428
29677
  },
29678
+ "terminalSession.adoptLegacyMonitor": {
29679
+ capName: "terminal-session",
29680
+ capScope: "system",
29681
+ addonId: null,
29682
+ access: "create"
29683
+ },
29429
29684
  "terminalSession.close": {
29430
29685
  capName: "terminal-session",
29431
29686
  capScope: "system",
29432
29687
  addonId: null,
29433
29688
  access: "create"
29434
29689
  },
29690
+ "terminalSession.createInstance": {
29691
+ capName: "terminal-session",
29692
+ capScope: "system",
29693
+ addonId: null,
29694
+ access: "create"
29695
+ },
29696
+ "terminalSession.deleteInstance": {
29697
+ capName: "terminal-session",
29698
+ capScope: "system",
29699
+ addonId: null,
29700
+ access: "delete"
29701
+ },
29702
+ "terminalSession.listInstances": {
29703
+ capName: "terminal-session",
29704
+ capScope: "system",
29705
+ addonId: null,
29706
+ access: "view"
29707
+ },
29708
+ "terminalSession.listLegacyCameras": {
29709
+ capName: "terminal-session",
29710
+ capScope: "system",
29711
+ addonId: null,
29712
+ access: "view"
29713
+ },
29435
29714
  "terminalSession.listProfiles": {
29436
29715
  capName: "terminal-session",
29437
29716
  capScope: "system",
@@ -29462,6 +29741,12 @@ Object.freeze({
29462
29741
  addonId: null,
29463
29742
  access: "create"
29464
29743
  },
29744
+ "terminalSession.setInstanceEnabled": {
29745
+ capName: "terminal-session",
29746
+ capScope: "system",
29747
+ addonId: null,
29748
+ access: "create"
29749
+ },
29465
29750
  "terminalSession.writeInput": {
29466
29751
  capName: "terminal-session",
29467
29752
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-export-alexa",
3
- "version": "1.2.16",
3
+ "version": "1.2.17",
4
4
  "description": "Alexa Smart Home Skill export — hub-side OAuth provider + directive handler. The companion AWS Lambda forwards Alexa directives to this addon's /addon/export-alexa/directive endpoint.",
5
5
  "keywords": [
6
6
  "camstack",