@camstack/addon-provider-velux 0.2.12 → 0.2.13

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.
Files changed (3) hide show
  1. package/dist/addon.js +316 -31
  2. package/dist/addon.mjs +316 -31
  3. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -7565,12 +7565,11 @@ var RecordingConfigSchema = object({
7565
7565
  /**
7566
7566
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
7567
7567
  *
7568
- * One shape shared by the recorder's `relocateFootage` (segments) and
7569
- * pipeline-analytics' `relocateMedia` (event media blobs) so the admin Data
7570
- * page renders both movers with one component. Jobs are in-RAM (a restart
7571
- * forgets them — re-running is safe by construction: copy-if-absent, delete
7572
- * after verify) and each completed/failed run also lands one durable ops-log
7573
- * row on the owning addon's surface.
7568
+ * One shape shared by the recorder and pipeline-analytics internal movers.
7569
+ * The public admin surface is `storage-migration`; child jobs remain in RAM
7570
+ * because copy-if-absent, verify, delete and index/row repoint are resumable.
7571
+ * Each completed/failed run also lands one durable ops-log row on its owning
7572
+ * addon surface.
7574
7573
  */
7575
7574
  var RelocateJobStateSchema = _enum([
7576
7575
  "running",
@@ -7597,19 +7596,100 @@ var RelocateJobSchema = object({
7597
7596
  finishedAt: number().nullable(),
7598
7597
  error: string().nullable()
7599
7598
  });
7599
+ /** Profile-derived footage selection used only by the migration coordinator:
7600
+ * `recordings` owns high+mid; `recordingsLow` owns low. */
7601
+ var RelocateFootageClassSchema = _enum(["recordings", "recordingsLow"]);
7600
7602
  var RelocateFootageInputSchema = object({
7601
- deviceId: number().optional(),
7602
7603
  fromLocationId: string(),
7603
7604
  toLocationId: string(),
7604
7605
  entities: array(_enum(["segments"])).optional(),
7606
+ /** Limits relocation to the logical profile class. Omit only for the
7607
+ * pre-orchestration compatibility path. */
7608
+ footageClass: RelocateFootageClassSchema.optional(),
7605
7609
  /** Copy throttle in MB/s (default 40) — the drain is a background chore,
7606
7610
  * never allowed to starve live writers. */
7607
7611
  throttleMbps: number().min(1).max(1e3).optional()
7608
7612
  });
7609
- var RelocateMediaInputSchema = object({
7610
- deviceId: number().optional(),
7613
+ /** Internal, lease-scoped participant operation. It is intentionally separate
7614
+ * from persistent recording settings: a migration never changes
7615
+ * `RecordingConfig.enabled` or camera wrapper bindings. */
7616
+ var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
7617
+ var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
7618
+ var StorageMigrationMediaMoveInputSchema = object({
7611
7619
  toLocationId: string(),
7612
7620
  throttleMbps: number().min(1).max(1e3).optional()
7621
+ }).extend({ leaseId: string().min(1) });
7622
+ /** The independently selectable logical storage classes. `recordings`
7623
+ * encompasses the high and mid segment profiles; `recordingsLow` is low
7624
+ * segments; `eventMedia` is post-analysis blobs. */
7625
+ var StorageMigrationClassSchema = _enum([
7626
+ "recordings",
7627
+ "recordingsLow",
7628
+ "eventMedia"
7629
+ ]);
7630
+ /** A destination is always an existing, fully-qualified location id. The
7631
+ * migration API intentionally never changes a source location's `basePath`:
7632
+ * callers create a new `<type>:<slug>` location, then select it here. */
7633
+ var StorageMigrationDestinationsSchema = object({
7634
+ recordings: string().min(1).optional(),
7635
+ recordingsLow: string().min(1).optional(),
7636
+ eventMedia: string().min(1).optional()
7637
+ }).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
7638
+ /** Shared input for planning and starting an orchestrated storage migration. */
7639
+ var StorageMigrationInputSchema = object({
7640
+ destinations: StorageMigrationDestinationsSchema,
7641
+ throttleMbps: number().min(1).max(1e3).optional()
7642
+ });
7643
+ /** The durable coordinator state machine. The only phase that changes default
7644
+ * locations is `repointing`, after every selected mover has completed and been
7645
+ * verified. */
7646
+ var StorageMigrationPhaseSchema = _enum([
7647
+ "planning",
7648
+ "pausing",
7649
+ "moving",
7650
+ "verifying",
7651
+ "repointing",
7652
+ "refreshing",
7653
+ "resuming",
7654
+ "done",
7655
+ "failed",
7656
+ "cancelled"
7657
+ ]);
7658
+ var StorageMigrationParticipantSchema = _enum([
7659
+ "pipeline",
7660
+ "recorder",
7661
+ "analytics"
7662
+ ]);
7663
+ var StorageMigrationMoveSchema = object({
7664
+ storageClass: StorageMigrationClassSchema,
7665
+ fromLocationId: string(),
7666
+ toLocationId: string(),
7667
+ moverJobId: string().nullable(),
7668
+ state: RelocateJobStateSchema.nullable(),
7669
+ error: string().nullable()
7670
+ });
7671
+ var StorageMigrationJobSchema = object({
7672
+ jobId: string(),
7673
+ phase: StorageMigrationPhaseSchema,
7674
+ destinations: StorageMigrationDestinationsSchema,
7675
+ throttleMbps: number(),
7676
+ moves: array(StorageMigrationMoveSchema),
7677
+ pauseLeaseId: string().nullable(),
7678
+ pausedParticipants: array(StorageMigrationParticipantSchema),
7679
+ repointed: boolean(),
7680
+ cancelRequested: boolean(),
7681
+ startedAt: number(),
7682
+ updatedAt: number(),
7683
+ finishedAt: number().nullable(),
7684
+ error: string().nullable()
7685
+ });
7686
+ var StorageMigrationPlanSchema = object({
7687
+ destinations: StorageMigrationDestinationsSchema,
7688
+ moves: array(object({
7689
+ storageClass: StorageMigrationClassSchema,
7690
+ fromLocationId: string(),
7691
+ toLocationId: string()
7692
+ }))
7613
7693
  });
7614
7694
  /**
7615
7695
  * `StorageLocationType` — an addon-declared id that identifies the *kind* of
@@ -16263,13 +16343,19 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
16263
16343
  }), method(object({ deviceId: number() }), EventPruneCountsSchema, {
16264
16344
  kind: "mutation",
16265
16345
  auth: "admin"
16266
- }), method(RelocateMediaInputSchema, object({ jobId: string() }), {
16346
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
16267
16347
  kind: "mutation",
16268
16348
  auth: "admin"
16269
- }), method(object({}), array(RelocateJobSchema).readonly(), {
16270
- kind: "query",
16349
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
16350
+ kind: "mutation",
16351
+ auth: "admin"
16352
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
16353
+ kind: "mutation",
16354
+ auth: "admin"
16355
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
16356
+ kind: "mutation",
16271
16357
  auth: "admin"
16272
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16358
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16273
16359
  kind: "mutation",
16274
16360
  auth: "admin"
16275
16361
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
@@ -17799,7 +17885,13 @@ var NodeInferenceDevicesSchema = object({
17799
17885
  reachable: boolean(),
17800
17886
  devices: array(NodeInferenceDeviceSchema).readonly()
17801
17887
  });
17802
- method(object({
17888
+ method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
17889
+ kind: "mutation",
17890
+ auth: "admin"
17891
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
17892
+ kind: "mutation",
17893
+ auth: "admin"
17894
+ }), method(object({
17803
17895
  deviceId: number(),
17804
17896
  agentNodeId: string()
17805
17897
  }), object({ success: literal(true) }), {
@@ -18473,6 +18565,13 @@ method(object({ locationId: string() }), EvictableUsageSchema), method(object({
18473
18565
  locationId: string(),
18474
18566
  targetBytes: number().int().positive()
18475
18567
  }), EvictResultSchema, { kind: "mutation" });
18568
+ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
18569
+ kind: "mutation",
18570
+ auth: "admin"
18571
+ }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
18572
+ kind: "mutation",
18573
+ auth: "admin"
18574
+ });
18476
18575
  var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
18477
18576
  providerId: string().min(1),
18478
18577
  displayName: string().min(1),
@@ -18576,6 +18675,28 @@ var TerminalProfileInfoSchema = object({
18576
18675
  label: string(),
18577
18676
  description: string().optional()
18578
18677
  });
18678
+ /**
18679
+ * A durable operator-created Terminal instance. Profiles are templates; only
18680
+ * an instance declares a camera.
18681
+ */
18682
+ var TerminalInstanceInfoSchema = object({
18683
+ instanceId: string(),
18684
+ cameraStableId: string(),
18685
+ nodeId: string(),
18686
+ profileId: string(),
18687
+ profileLabel: string(),
18688
+ name: string(),
18689
+ enabled: boolean()
18690
+ });
18691
+ var TerminalLegacyCameraSchema = object({
18692
+ stableId: string(),
18693
+ nodeId: string(),
18694
+ profileId: string(),
18695
+ profileLabel: string(),
18696
+ name: string(),
18697
+ /** Only legacy monitor cameras can retain their historic stable identity. */
18698
+ adoptable: boolean()
18699
+ });
18579
18700
  var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
18580
18701
  seq: number().int().positive(),
18581
18702
  kind: literal("data"),
@@ -18592,7 +18713,29 @@ var TerminalOutputBatchSchema = object({
18592
18713
  snapshot: string().optional(),
18593
18714
  events: array(TerminalOutputEventSchema).readonly()
18594
18715
  });
18595
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18716
+ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
18717
+ targetNodeId: string().min(1),
18718
+ profileId: string().min(1),
18719
+ name: string().trim().min(1).max(160).optional()
18720
+ }), TerminalInstanceInfoSchema, {
18721
+ kind: "mutation",
18722
+ auth: "admin"
18723
+ }), method(object({ instanceId: string().min(1) }), _void(), {
18724
+ kind: "mutation",
18725
+ auth: "admin"
18726
+ }), method(object({
18727
+ instanceId: string().min(1),
18728
+ enabled: boolean()
18729
+ }), TerminalInstanceInfoSchema, {
18730
+ kind: "mutation",
18731
+ auth: "admin"
18732
+ }), method(_void(), array(TerminalLegacyCameraSchema).readonly(), { auth: "admin" }), method(object({
18733
+ stableId: string().min(1),
18734
+ name: string().trim().min(1).max(160).optional()
18735
+ }), TerminalInstanceInfoSchema, {
18736
+ kind: "mutation",
18737
+ auth: "admin"
18738
+ }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18596
18739
  profileId: string(),
18597
18740
  cols: number().int().positive(),
18598
18741
  rows: number().int().positive()
@@ -18609,7 +18752,13 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
18609
18752
  }), method(object({
18610
18753
  sessionId: string(),
18611
18754
  afterSeq: number().int().nonnegative(),
18612
- waitMs: number().int().min(0).max(2e3).default(0)
18755
+ waitMs: number().int().min(0).max(2e3).default(0),
18756
+ /**
18757
+ * Wait when a just-opened session has no output yet. Kept opt-in so a
18758
+ * browser's initial repaint remains immediate; the camera snapshot
18759
+ * relay uses it to avoid encoding a blank startup frame.
18760
+ */
18761
+ waitForOutput: boolean().optional()
18613
18762
  }), TerminalOutputBatchSchema, {
18614
18763
  kind: "mutation",
18615
18764
  auth: "admin",
@@ -21107,6 +21256,7 @@ var FaceInfoSchema = object({
21107
21256
  var FaceFilterEnum = _enum([
21108
21257
  "unassigned",
21109
21258
  "recognized",
21259
+ "identified",
21110
21260
  "all"
21111
21261
  ]);
21112
21262
  var MediaFileLiteSchema$1 = object({
@@ -21135,6 +21285,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
21135
21285
  kind: "mutation",
21136
21286
  auth: "admin"
21137
21287
  }), method(object({
21288
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
21289
+ deviceId: number().int().optional(),
21138
21290
  limit: number().int().positive().optional(),
21139
21291
  filter: FaceFilterEnum.optional(),
21140
21292
  /**
@@ -23364,6 +23516,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
23364
23516
  capName: string().min(1).max(64),
23365
23517
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
23366
23518
  valuePath: string().min(1).max(64)
23519
+ }),
23520
+ object({
23521
+ kind: literal("latest-recognition"),
23522
+ recognition: _enum(["person", "plate"])
23367
23523
  })
23368
23524
  ]);
23369
23525
  var OsdSlotBindingSchema = object({
@@ -23469,6 +23625,15 @@ method(object({ deviceId: number().int() }), object({
23469
23625
  }), object({ success: literal(true) }), {
23470
23626
  kind: "mutation",
23471
23627
  auth: "admin"
23628
+ }), method(object({
23629
+ sourceDeviceId: number().int(),
23630
+ targetDeviceId: number().int()
23631
+ }), object({
23632
+ copied: number().int().nonnegative(),
23633
+ skipped: number().int().nonnegative()
23634
+ }), {
23635
+ kind: "mutation",
23636
+ auth: "admin"
23472
23637
  }), method(object({
23473
23638
  deviceId: number().int(),
23474
23639
  slotId: string().min(1),
@@ -24566,13 +24731,19 @@ method(object({
24566
24731
  }), {
24567
24732
  kind: "mutation",
24568
24733
  auth: "admin"
24569
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
24734
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
24570
24735
  kind: "mutation",
24571
24736
  auth: "admin"
24572
- }), method(object({}), array(RelocateJobSchema).readonly(), {
24573
- kind: "query",
24737
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
24738
+ kind: "mutation",
24574
24739
  auth: "admin"
24575
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
24740
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
24741
+ kind: "mutation",
24742
+ auth: "admin"
24743
+ }), method(StorageMigrationFootageMoveInputSchema, object({ jobId: string() }), {
24744
+ kind: "mutation",
24745
+ auth: "admin"
24746
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
24576
24747
  kind: "mutation",
24577
24748
  auth: "admin"
24578
24749
  });
@@ -30178,6 +30349,12 @@ Object.freeze({
30178
30349
  addonId: null,
30179
30350
  access: "delete"
30180
30351
  },
30352
+ "osdManager.copyDeviceConfiguration": {
30353
+ capName: "osd-manager",
30354
+ capScope: "system",
30355
+ addonId: null,
30356
+ access: "create"
30357
+ },
30181
30358
  "osdManager.getConditionSupport": {
30182
30359
  capName: "osd-manager",
30183
30360
  capScope: "system",
@@ -30274,7 +30451,7 @@ Object.freeze({
30274
30451
  addonId: null,
30275
30452
  access: "create"
30276
30453
  },
30277
- "pipelineAnalytics.cancelMediaRelocate": {
30454
+ "pipelineAnalytics.cancelStorageMigrationMove": {
30278
30455
  capName: "pipeline-analytics",
30279
30456
  capScope: "device",
30280
30457
  addonId: null,
@@ -30346,12 +30523,6 @@ Object.freeze({
30346
30523
  addonId: null,
30347
30524
  access: "view"
30348
30525
  },
30349
- "pipelineAnalytics.getMediaRelocateStatus": {
30350
- capName: "pipeline-analytics",
30351
- capScope: "device",
30352
- addonId: null,
30353
- access: "view"
30354
- },
30355
30526
  "pipelineAnalytics.getMotionEvents": {
30356
30527
  capName: "pipeline-analytics",
30357
30528
  capScope: "device",
@@ -30388,6 +30559,12 @@ Object.freeze({
30388
30559
  addonId: null,
30389
30560
  access: "view"
30390
30561
  },
30562
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
30563
+ capName: "pipeline-analytics",
30564
+ capScope: "device",
30565
+ addonId: null,
30566
+ access: "view"
30567
+ },
30391
30568
  "pipelineAnalytics.getTrack": {
30392
30569
  capName: "pipeline-analytics",
30393
30570
  capScope: "device",
@@ -30466,6 +30643,12 @@ Object.freeze({
30466
30643
  addonId: null,
30467
30644
  access: "view"
30468
30645
  },
30646
+ "pipelineAnalytics.pauseForStorageMigration": {
30647
+ capName: "pipeline-analytics",
30648
+ capScope: "device",
30649
+ addonId: null,
30650
+ access: "create"
30651
+ },
30469
30652
  "pipelineAnalytics.proposeRetrainAnnotations": {
30470
30653
  capName: "pipeline-analytics",
30471
30654
  capScope: "device",
@@ -30496,7 +30679,7 @@ Object.freeze({
30496
30679
  addonId: null,
30497
30680
  access: "create"
30498
30681
  },
30499
- "pipelineAnalytics.relocateMedia": {
30682
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
30500
30683
  capName: "pipeline-analytics",
30501
30684
  capScope: "device",
30502
30685
  addonId: null,
@@ -30508,6 +30691,12 @@ Object.freeze({
30508
30691
  addonId: null,
30509
30692
  access: "create"
30510
30693
  },
30694
+ "pipelineAnalytics.resumeForStorageMigration": {
30695
+ capName: "pipeline-analytics",
30696
+ capScope: "device",
30697
+ addonId: null,
30698
+ access: "create"
30699
+ },
30511
30700
  "pipelineAnalytics.saveRetrainAnnotations": {
30512
30701
  capName: "pipeline-analytics",
30513
30702
  capScope: "device",
@@ -30532,6 +30721,12 @@ Object.freeze({
30532
30721
  addonId: null,
30533
30722
  access: "create"
30534
30723
  },
30724
+ "pipelineAnalytics.startStorageMigrationMove": {
30725
+ capName: "pipeline-analytics",
30726
+ capScope: "device",
30727
+ addonId: null,
30728
+ access: "create"
30729
+ },
30535
30730
  "pipelineAnalytics.wipeAllAnalytics": {
30536
30731
  capName: "pipeline-analytics",
30537
30732
  capScope: "device",
@@ -30898,6 +31093,12 @@ Object.freeze({
30898
31093
  addonId: null,
30899
31094
  access: "view"
30900
31095
  },
31096
+ "pipelineOrchestrator.pauseForStorageMigration": {
31097
+ capName: "pipeline-orchestrator",
31098
+ capScope: "system",
31099
+ addonId: null,
31100
+ access: "create"
31101
+ },
30901
31102
  "pipelineOrchestrator.rebalance": {
30902
31103
  capName: "pipeline-orchestrator",
30903
31104
  capScope: "system",
@@ -30922,6 +31123,12 @@ Object.freeze({
30922
31123
  addonId: null,
30923
31124
  access: "view"
30924
31125
  },
31126
+ "pipelineOrchestrator.resumeForStorageMigration": {
31127
+ capName: "pipeline-orchestrator",
31128
+ capScope: "system",
31129
+ addonId: null,
31130
+ access: "create"
31131
+ },
30925
31132
  "pipelineOrchestrator.saveTemplate": {
30926
31133
  capName: "pipeline-orchestrator",
30927
31134
  capScope: "system",
@@ -31318,7 +31525,7 @@ Object.freeze({
31318
31525
  addonId: null,
31319
31526
  access: "create"
31320
31527
  },
31321
- "recording.cancelRelocate": {
31528
+ "recording.cancelStorageMigrationMove": {
31322
31529
  capName: "recording",
31323
31530
  capScope: "system",
31324
31531
  addonId: null,
@@ -31354,7 +31561,7 @@ Object.freeze({
31354
31561
  addonId: null,
31355
31562
  access: "view"
31356
31563
  },
31357
- "recording.getRelocateStatus": {
31564
+ "recording.getStorageMigrationMoveStatus": {
31358
31565
  capName: "recording",
31359
31566
  capScope: "system",
31360
31567
  addonId: null,
@@ -31378,6 +31585,12 @@ Object.freeze({
31378
31585
  addonId: null,
31379
31586
  access: "view"
31380
31587
  },
31588
+ "recording.pauseForStorageMigration": {
31589
+ capName: "recording",
31590
+ capScope: "system",
31591
+ addonId: null,
31592
+ access: "create"
31593
+ },
31381
31594
  "recording.pruneFootage": {
31382
31595
  capName: "recording",
31383
31596
  capScope: "system",
@@ -31396,7 +31609,7 @@ Object.freeze({
31396
31609
  addonId: null,
31397
31610
  access: "view"
31398
31611
  },
31399
- "recording.relocateFootage": {
31612
+ "recording.refreshStorageLocationsForMigration": {
31400
31613
  capName: "recording",
31401
31614
  capScope: "system",
31402
31615
  addonId: null,
@@ -31420,12 +31633,24 @@ Object.freeze({
31420
31633
  addonId: null,
31421
31634
  access: "create"
31422
31635
  },
31636
+ "recording.resumeForStorageMigration": {
31637
+ capName: "recording",
31638
+ capScope: "system",
31639
+ addonId: null,
31640
+ access: "create"
31641
+ },
31423
31642
  "recording.setDeviceConfig": {
31424
31643
  capName: "recording",
31425
31644
  capScope: "system",
31426
31645
  addonId: null,
31427
31646
  access: "create"
31428
31647
  },
31648
+ "recording.startStorageMigrationMove": {
31649
+ capName: "recording",
31650
+ capScope: "system",
31651
+ addonId: null,
31652
+ access: "create"
31653
+ },
31429
31654
  "recordingExport.cancelExport": {
31430
31655
  capName: "recordingExport",
31431
31656
  capScope: "system",
@@ -31816,6 +32041,30 @@ Object.freeze({
31816
32041
  addonId: null,
31817
32042
  access: "view"
31818
32043
  },
32044
+ "storageMigration.cancel": {
32045
+ capName: "storage-migration",
32046
+ capScope: "system",
32047
+ addonId: null,
32048
+ access: "create"
32049
+ },
32050
+ "storageMigration.plan": {
32051
+ capName: "storage-migration",
32052
+ capScope: "system",
32053
+ addonId: null,
32054
+ access: "view"
32055
+ },
32056
+ "storageMigration.start": {
32057
+ capName: "storage-migration",
32058
+ capScope: "system",
32059
+ addonId: null,
32060
+ access: "create"
32061
+ },
32062
+ "storageMigration.status": {
32063
+ capName: "storage-migration",
32064
+ capScope: "system",
32065
+ addonId: null,
32066
+ access: "view"
32067
+ },
31819
32068
  "storageProvider.abortUpload": {
31820
32069
  capName: "storage-provider",
31821
32070
  capScope: "system",
@@ -32194,12 +32443,42 @@ Object.freeze({
32194
32443
  addonId: null,
32195
32444
  access: "create"
32196
32445
  },
32446
+ "terminalSession.adoptLegacyMonitor": {
32447
+ capName: "terminal-session",
32448
+ capScope: "system",
32449
+ addonId: null,
32450
+ access: "create"
32451
+ },
32197
32452
  "terminalSession.close": {
32198
32453
  capName: "terminal-session",
32199
32454
  capScope: "system",
32200
32455
  addonId: null,
32201
32456
  access: "create"
32202
32457
  },
32458
+ "terminalSession.createInstance": {
32459
+ capName: "terminal-session",
32460
+ capScope: "system",
32461
+ addonId: null,
32462
+ access: "create"
32463
+ },
32464
+ "terminalSession.deleteInstance": {
32465
+ capName: "terminal-session",
32466
+ capScope: "system",
32467
+ addonId: null,
32468
+ access: "delete"
32469
+ },
32470
+ "terminalSession.listInstances": {
32471
+ capName: "terminal-session",
32472
+ capScope: "system",
32473
+ addonId: null,
32474
+ access: "view"
32475
+ },
32476
+ "terminalSession.listLegacyCameras": {
32477
+ capName: "terminal-session",
32478
+ capScope: "system",
32479
+ addonId: null,
32480
+ access: "view"
32481
+ },
32203
32482
  "terminalSession.listProfiles": {
32204
32483
  capName: "terminal-session",
32205
32484
  capScope: "system",
@@ -32230,6 +32509,12 @@ Object.freeze({
32230
32509
  addonId: null,
32231
32510
  access: "create"
32232
32511
  },
32512
+ "terminalSession.setInstanceEnabled": {
32513
+ capName: "terminal-session",
32514
+ capScope: "system",
32515
+ addonId: null,
32516
+ access: "create"
32517
+ },
32233
32518
  "terminalSession.writeInput": {
32234
32519
  capName: "terminal-session",
32235
32520
  capScope: "system",
package/dist/addon.mjs CHANGED
@@ -7564,12 +7564,11 @@ var RecordingConfigSchema = object({
7564
7564
  /**
7565
7565
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
7566
7566
  *
7567
- * One shape shared by the recorder's `relocateFootage` (segments) and
7568
- * pipeline-analytics' `relocateMedia` (event media blobs) so the admin Data
7569
- * page renders both movers with one component. Jobs are in-RAM (a restart
7570
- * forgets them — re-running is safe by construction: copy-if-absent, delete
7571
- * after verify) and each completed/failed run also lands one durable ops-log
7572
- * row on the owning addon's surface.
7567
+ * One shape shared by the recorder and pipeline-analytics internal movers.
7568
+ * The public admin surface is `storage-migration`; child jobs remain in RAM
7569
+ * because copy-if-absent, verify, delete and index/row repoint are resumable.
7570
+ * Each completed/failed run also lands one durable ops-log row on its owning
7571
+ * addon surface.
7573
7572
  */
7574
7573
  var RelocateJobStateSchema = _enum([
7575
7574
  "running",
@@ -7596,19 +7595,100 @@ var RelocateJobSchema = object({
7596
7595
  finishedAt: number().nullable(),
7597
7596
  error: string().nullable()
7598
7597
  });
7598
+ /** Profile-derived footage selection used only by the migration coordinator:
7599
+ * `recordings` owns high+mid; `recordingsLow` owns low. */
7600
+ var RelocateFootageClassSchema = _enum(["recordings", "recordingsLow"]);
7599
7601
  var RelocateFootageInputSchema = object({
7600
- deviceId: number().optional(),
7601
7602
  fromLocationId: string(),
7602
7603
  toLocationId: string(),
7603
7604
  entities: array(_enum(["segments"])).optional(),
7605
+ /** Limits relocation to the logical profile class. Omit only for the
7606
+ * pre-orchestration compatibility path. */
7607
+ footageClass: RelocateFootageClassSchema.optional(),
7604
7608
  /** Copy throttle in MB/s (default 40) — the drain is a background chore,
7605
7609
  * never allowed to starve live writers. */
7606
7610
  throttleMbps: number().min(1).max(1e3).optional()
7607
7611
  });
7608
- var RelocateMediaInputSchema = object({
7609
- deviceId: number().optional(),
7612
+ /** Internal, lease-scoped participant operation. It is intentionally separate
7613
+ * from persistent recording settings: a migration never changes
7614
+ * `RecordingConfig.enabled` or camera wrapper bindings. */
7615
+ var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
7616
+ var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
7617
+ var StorageMigrationMediaMoveInputSchema = object({
7610
7618
  toLocationId: string(),
7611
7619
  throttleMbps: number().min(1).max(1e3).optional()
7620
+ }).extend({ leaseId: string().min(1) });
7621
+ /** The independently selectable logical storage classes. `recordings`
7622
+ * encompasses the high and mid segment profiles; `recordingsLow` is low
7623
+ * segments; `eventMedia` is post-analysis blobs. */
7624
+ var StorageMigrationClassSchema = _enum([
7625
+ "recordings",
7626
+ "recordingsLow",
7627
+ "eventMedia"
7628
+ ]);
7629
+ /** A destination is always an existing, fully-qualified location id. The
7630
+ * migration API intentionally never changes a source location's `basePath`:
7631
+ * callers create a new `<type>:<slug>` location, then select it here. */
7632
+ var StorageMigrationDestinationsSchema = object({
7633
+ recordings: string().min(1).optional(),
7634
+ recordingsLow: string().min(1).optional(),
7635
+ eventMedia: string().min(1).optional()
7636
+ }).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
7637
+ /** Shared input for planning and starting an orchestrated storage migration. */
7638
+ var StorageMigrationInputSchema = object({
7639
+ destinations: StorageMigrationDestinationsSchema,
7640
+ throttleMbps: number().min(1).max(1e3).optional()
7641
+ });
7642
+ /** The durable coordinator state machine. The only phase that changes default
7643
+ * locations is `repointing`, after every selected mover has completed and been
7644
+ * verified. */
7645
+ var StorageMigrationPhaseSchema = _enum([
7646
+ "planning",
7647
+ "pausing",
7648
+ "moving",
7649
+ "verifying",
7650
+ "repointing",
7651
+ "refreshing",
7652
+ "resuming",
7653
+ "done",
7654
+ "failed",
7655
+ "cancelled"
7656
+ ]);
7657
+ var StorageMigrationParticipantSchema = _enum([
7658
+ "pipeline",
7659
+ "recorder",
7660
+ "analytics"
7661
+ ]);
7662
+ var StorageMigrationMoveSchema = object({
7663
+ storageClass: StorageMigrationClassSchema,
7664
+ fromLocationId: string(),
7665
+ toLocationId: string(),
7666
+ moverJobId: string().nullable(),
7667
+ state: RelocateJobStateSchema.nullable(),
7668
+ error: string().nullable()
7669
+ });
7670
+ var StorageMigrationJobSchema = object({
7671
+ jobId: string(),
7672
+ phase: StorageMigrationPhaseSchema,
7673
+ destinations: StorageMigrationDestinationsSchema,
7674
+ throttleMbps: number(),
7675
+ moves: array(StorageMigrationMoveSchema),
7676
+ pauseLeaseId: string().nullable(),
7677
+ pausedParticipants: array(StorageMigrationParticipantSchema),
7678
+ repointed: boolean(),
7679
+ cancelRequested: boolean(),
7680
+ startedAt: number(),
7681
+ updatedAt: number(),
7682
+ finishedAt: number().nullable(),
7683
+ error: string().nullable()
7684
+ });
7685
+ var StorageMigrationPlanSchema = object({
7686
+ destinations: StorageMigrationDestinationsSchema,
7687
+ moves: array(object({
7688
+ storageClass: StorageMigrationClassSchema,
7689
+ fromLocationId: string(),
7690
+ toLocationId: string()
7691
+ }))
7612
7692
  });
7613
7693
  /**
7614
7694
  * `StorageLocationType` — an addon-declared id that identifies the *kind* of
@@ -16262,13 +16342,19 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
16262
16342
  }), method(object({ deviceId: number() }), EventPruneCountsSchema, {
16263
16343
  kind: "mutation",
16264
16344
  auth: "admin"
16265
- }), method(RelocateMediaInputSchema, object({ jobId: string() }), {
16345
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
16266
16346
  kind: "mutation",
16267
16347
  auth: "admin"
16268
- }), method(object({}), array(RelocateJobSchema).readonly(), {
16269
- kind: "query",
16348
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
16349
+ kind: "mutation",
16350
+ auth: "admin"
16351
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
16352
+ kind: "mutation",
16353
+ auth: "admin"
16354
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
16355
+ kind: "mutation",
16270
16356
  auth: "admin"
16271
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16357
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16272
16358
  kind: "mutation",
16273
16359
  auth: "admin"
16274
16360
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
@@ -17798,7 +17884,13 @@ var NodeInferenceDevicesSchema = object({
17798
17884
  reachable: boolean(),
17799
17885
  devices: array(NodeInferenceDeviceSchema).readonly()
17800
17886
  });
17801
- method(object({
17887
+ method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
17888
+ kind: "mutation",
17889
+ auth: "admin"
17890
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
17891
+ kind: "mutation",
17892
+ auth: "admin"
17893
+ }), method(object({
17802
17894
  deviceId: number(),
17803
17895
  agentNodeId: string()
17804
17896
  }), object({ success: literal(true) }), {
@@ -18472,6 +18564,13 @@ method(object({ locationId: string() }), EvictableUsageSchema), method(object({
18472
18564
  locationId: string(),
18473
18565
  targetBytes: number().int().positive()
18474
18566
  }), EvictResultSchema, { kind: "mutation" });
18567
+ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
18568
+ kind: "mutation",
18569
+ auth: "admin"
18570
+ }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
18571
+ kind: "mutation",
18572
+ auth: "admin"
18573
+ });
18475
18574
  var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
18476
18575
  providerId: string().min(1),
18477
18576
  displayName: string().min(1),
@@ -18575,6 +18674,28 @@ var TerminalProfileInfoSchema = object({
18575
18674
  label: string(),
18576
18675
  description: string().optional()
18577
18676
  });
18677
+ /**
18678
+ * A durable operator-created Terminal instance. Profiles are templates; only
18679
+ * an instance declares a camera.
18680
+ */
18681
+ var TerminalInstanceInfoSchema = object({
18682
+ instanceId: string(),
18683
+ cameraStableId: string(),
18684
+ nodeId: string(),
18685
+ profileId: string(),
18686
+ profileLabel: string(),
18687
+ name: string(),
18688
+ enabled: boolean()
18689
+ });
18690
+ var TerminalLegacyCameraSchema = object({
18691
+ stableId: string(),
18692
+ nodeId: string(),
18693
+ profileId: string(),
18694
+ profileLabel: string(),
18695
+ name: string(),
18696
+ /** Only legacy monitor cameras can retain their historic stable identity. */
18697
+ adoptable: boolean()
18698
+ });
18578
18699
  var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
18579
18700
  seq: number().int().positive(),
18580
18701
  kind: literal("data"),
@@ -18591,7 +18712,29 @@ var TerminalOutputBatchSchema = object({
18591
18712
  snapshot: string().optional(),
18592
18713
  events: array(TerminalOutputEventSchema).readonly()
18593
18714
  });
18594
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18715
+ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
18716
+ targetNodeId: string().min(1),
18717
+ profileId: string().min(1),
18718
+ name: string().trim().min(1).max(160).optional()
18719
+ }), TerminalInstanceInfoSchema, {
18720
+ kind: "mutation",
18721
+ auth: "admin"
18722
+ }), method(object({ instanceId: string().min(1) }), _void(), {
18723
+ kind: "mutation",
18724
+ auth: "admin"
18725
+ }), method(object({
18726
+ instanceId: string().min(1),
18727
+ enabled: boolean()
18728
+ }), TerminalInstanceInfoSchema, {
18729
+ kind: "mutation",
18730
+ auth: "admin"
18731
+ }), method(_void(), array(TerminalLegacyCameraSchema).readonly(), { auth: "admin" }), method(object({
18732
+ stableId: string().min(1),
18733
+ name: string().trim().min(1).max(160).optional()
18734
+ }), TerminalInstanceInfoSchema, {
18735
+ kind: "mutation",
18736
+ auth: "admin"
18737
+ }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18595
18738
  profileId: string(),
18596
18739
  cols: number().int().positive(),
18597
18740
  rows: number().int().positive()
@@ -18608,7 +18751,13 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
18608
18751
  }), method(object({
18609
18752
  sessionId: string(),
18610
18753
  afterSeq: number().int().nonnegative(),
18611
- waitMs: number().int().min(0).max(2e3).default(0)
18754
+ waitMs: number().int().min(0).max(2e3).default(0),
18755
+ /**
18756
+ * Wait when a just-opened session has no output yet. Kept opt-in so a
18757
+ * browser's initial repaint remains immediate; the camera snapshot
18758
+ * relay uses it to avoid encoding a blank startup frame.
18759
+ */
18760
+ waitForOutput: boolean().optional()
18612
18761
  }), TerminalOutputBatchSchema, {
18613
18762
  kind: "mutation",
18614
18763
  auth: "admin",
@@ -21106,6 +21255,7 @@ var FaceInfoSchema = object({
21106
21255
  var FaceFilterEnum = _enum([
21107
21256
  "unassigned",
21108
21257
  "recognized",
21258
+ "identified",
21109
21259
  "all"
21110
21260
  ]);
21111
21261
  var MediaFileLiteSchema$1 = object({
@@ -21134,6 +21284,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
21134
21284
  kind: "mutation",
21135
21285
  auth: "admin"
21136
21286
  }), method(object({
21287
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
21288
+ deviceId: number().int().optional(),
21137
21289
  limit: number().int().positive().optional(),
21138
21290
  filter: FaceFilterEnum.optional(),
21139
21291
  /**
@@ -23363,6 +23515,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
23363
23515
  capName: string().min(1).max(64),
23364
23516
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
23365
23517
  valuePath: string().min(1).max(64)
23518
+ }),
23519
+ object({
23520
+ kind: literal("latest-recognition"),
23521
+ recognition: _enum(["person", "plate"])
23366
23522
  })
23367
23523
  ]);
23368
23524
  var OsdSlotBindingSchema = object({
@@ -23468,6 +23624,15 @@ method(object({ deviceId: number().int() }), object({
23468
23624
  }), object({ success: literal(true) }), {
23469
23625
  kind: "mutation",
23470
23626
  auth: "admin"
23627
+ }), method(object({
23628
+ sourceDeviceId: number().int(),
23629
+ targetDeviceId: number().int()
23630
+ }), object({
23631
+ copied: number().int().nonnegative(),
23632
+ skipped: number().int().nonnegative()
23633
+ }), {
23634
+ kind: "mutation",
23635
+ auth: "admin"
23471
23636
  }), method(object({
23472
23637
  deviceId: number().int(),
23473
23638
  slotId: string().min(1),
@@ -24565,13 +24730,19 @@ method(object({
24565
24730
  }), {
24566
24731
  kind: "mutation",
24567
24732
  auth: "admin"
24568
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
24733
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
24569
24734
  kind: "mutation",
24570
24735
  auth: "admin"
24571
- }), method(object({}), array(RelocateJobSchema).readonly(), {
24572
- kind: "query",
24736
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
24737
+ kind: "mutation",
24573
24738
  auth: "admin"
24574
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
24739
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
24740
+ kind: "mutation",
24741
+ auth: "admin"
24742
+ }), method(StorageMigrationFootageMoveInputSchema, object({ jobId: string() }), {
24743
+ kind: "mutation",
24744
+ auth: "admin"
24745
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
24575
24746
  kind: "mutation",
24576
24747
  auth: "admin"
24577
24748
  });
@@ -30177,6 +30348,12 @@ Object.freeze({
30177
30348
  addonId: null,
30178
30349
  access: "delete"
30179
30350
  },
30351
+ "osdManager.copyDeviceConfiguration": {
30352
+ capName: "osd-manager",
30353
+ capScope: "system",
30354
+ addonId: null,
30355
+ access: "create"
30356
+ },
30180
30357
  "osdManager.getConditionSupport": {
30181
30358
  capName: "osd-manager",
30182
30359
  capScope: "system",
@@ -30273,7 +30450,7 @@ Object.freeze({
30273
30450
  addonId: null,
30274
30451
  access: "create"
30275
30452
  },
30276
- "pipelineAnalytics.cancelMediaRelocate": {
30453
+ "pipelineAnalytics.cancelStorageMigrationMove": {
30277
30454
  capName: "pipeline-analytics",
30278
30455
  capScope: "device",
30279
30456
  addonId: null,
@@ -30345,12 +30522,6 @@ Object.freeze({
30345
30522
  addonId: null,
30346
30523
  access: "view"
30347
30524
  },
30348
- "pipelineAnalytics.getMediaRelocateStatus": {
30349
- capName: "pipeline-analytics",
30350
- capScope: "device",
30351
- addonId: null,
30352
- access: "view"
30353
- },
30354
30525
  "pipelineAnalytics.getMotionEvents": {
30355
30526
  capName: "pipeline-analytics",
30356
30527
  capScope: "device",
@@ -30387,6 +30558,12 @@ Object.freeze({
30387
30558
  addonId: null,
30388
30559
  access: "view"
30389
30560
  },
30561
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
30562
+ capName: "pipeline-analytics",
30563
+ capScope: "device",
30564
+ addonId: null,
30565
+ access: "view"
30566
+ },
30390
30567
  "pipelineAnalytics.getTrack": {
30391
30568
  capName: "pipeline-analytics",
30392
30569
  capScope: "device",
@@ -30465,6 +30642,12 @@ Object.freeze({
30465
30642
  addonId: null,
30466
30643
  access: "view"
30467
30644
  },
30645
+ "pipelineAnalytics.pauseForStorageMigration": {
30646
+ capName: "pipeline-analytics",
30647
+ capScope: "device",
30648
+ addonId: null,
30649
+ access: "create"
30650
+ },
30468
30651
  "pipelineAnalytics.proposeRetrainAnnotations": {
30469
30652
  capName: "pipeline-analytics",
30470
30653
  capScope: "device",
@@ -30495,7 +30678,7 @@ Object.freeze({
30495
30678
  addonId: null,
30496
30679
  access: "create"
30497
30680
  },
30498
- "pipelineAnalytics.relocateMedia": {
30681
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
30499
30682
  capName: "pipeline-analytics",
30500
30683
  capScope: "device",
30501
30684
  addonId: null,
@@ -30507,6 +30690,12 @@ Object.freeze({
30507
30690
  addonId: null,
30508
30691
  access: "create"
30509
30692
  },
30693
+ "pipelineAnalytics.resumeForStorageMigration": {
30694
+ capName: "pipeline-analytics",
30695
+ capScope: "device",
30696
+ addonId: null,
30697
+ access: "create"
30698
+ },
30510
30699
  "pipelineAnalytics.saveRetrainAnnotations": {
30511
30700
  capName: "pipeline-analytics",
30512
30701
  capScope: "device",
@@ -30531,6 +30720,12 @@ Object.freeze({
30531
30720
  addonId: null,
30532
30721
  access: "create"
30533
30722
  },
30723
+ "pipelineAnalytics.startStorageMigrationMove": {
30724
+ capName: "pipeline-analytics",
30725
+ capScope: "device",
30726
+ addonId: null,
30727
+ access: "create"
30728
+ },
30534
30729
  "pipelineAnalytics.wipeAllAnalytics": {
30535
30730
  capName: "pipeline-analytics",
30536
30731
  capScope: "device",
@@ -30897,6 +31092,12 @@ Object.freeze({
30897
31092
  addonId: null,
30898
31093
  access: "view"
30899
31094
  },
31095
+ "pipelineOrchestrator.pauseForStorageMigration": {
31096
+ capName: "pipeline-orchestrator",
31097
+ capScope: "system",
31098
+ addonId: null,
31099
+ access: "create"
31100
+ },
30900
31101
  "pipelineOrchestrator.rebalance": {
30901
31102
  capName: "pipeline-orchestrator",
30902
31103
  capScope: "system",
@@ -30921,6 +31122,12 @@ Object.freeze({
30921
31122
  addonId: null,
30922
31123
  access: "view"
30923
31124
  },
31125
+ "pipelineOrchestrator.resumeForStorageMigration": {
31126
+ capName: "pipeline-orchestrator",
31127
+ capScope: "system",
31128
+ addonId: null,
31129
+ access: "create"
31130
+ },
30924
31131
  "pipelineOrchestrator.saveTemplate": {
30925
31132
  capName: "pipeline-orchestrator",
30926
31133
  capScope: "system",
@@ -31317,7 +31524,7 @@ Object.freeze({
31317
31524
  addonId: null,
31318
31525
  access: "create"
31319
31526
  },
31320
- "recording.cancelRelocate": {
31527
+ "recording.cancelStorageMigrationMove": {
31321
31528
  capName: "recording",
31322
31529
  capScope: "system",
31323
31530
  addonId: null,
@@ -31353,7 +31560,7 @@ Object.freeze({
31353
31560
  addonId: null,
31354
31561
  access: "view"
31355
31562
  },
31356
- "recording.getRelocateStatus": {
31563
+ "recording.getStorageMigrationMoveStatus": {
31357
31564
  capName: "recording",
31358
31565
  capScope: "system",
31359
31566
  addonId: null,
@@ -31377,6 +31584,12 @@ Object.freeze({
31377
31584
  addonId: null,
31378
31585
  access: "view"
31379
31586
  },
31587
+ "recording.pauseForStorageMigration": {
31588
+ capName: "recording",
31589
+ capScope: "system",
31590
+ addonId: null,
31591
+ access: "create"
31592
+ },
31380
31593
  "recording.pruneFootage": {
31381
31594
  capName: "recording",
31382
31595
  capScope: "system",
@@ -31395,7 +31608,7 @@ Object.freeze({
31395
31608
  addonId: null,
31396
31609
  access: "view"
31397
31610
  },
31398
- "recording.relocateFootage": {
31611
+ "recording.refreshStorageLocationsForMigration": {
31399
31612
  capName: "recording",
31400
31613
  capScope: "system",
31401
31614
  addonId: null,
@@ -31419,12 +31632,24 @@ Object.freeze({
31419
31632
  addonId: null,
31420
31633
  access: "create"
31421
31634
  },
31635
+ "recording.resumeForStorageMigration": {
31636
+ capName: "recording",
31637
+ capScope: "system",
31638
+ addonId: null,
31639
+ access: "create"
31640
+ },
31422
31641
  "recording.setDeviceConfig": {
31423
31642
  capName: "recording",
31424
31643
  capScope: "system",
31425
31644
  addonId: null,
31426
31645
  access: "create"
31427
31646
  },
31647
+ "recording.startStorageMigrationMove": {
31648
+ capName: "recording",
31649
+ capScope: "system",
31650
+ addonId: null,
31651
+ access: "create"
31652
+ },
31428
31653
  "recordingExport.cancelExport": {
31429
31654
  capName: "recordingExport",
31430
31655
  capScope: "system",
@@ -31815,6 +32040,30 @@ Object.freeze({
31815
32040
  addonId: null,
31816
32041
  access: "view"
31817
32042
  },
32043
+ "storageMigration.cancel": {
32044
+ capName: "storage-migration",
32045
+ capScope: "system",
32046
+ addonId: null,
32047
+ access: "create"
32048
+ },
32049
+ "storageMigration.plan": {
32050
+ capName: "storage-migration",
32051
+ capScope: "system",
32052
+ addonId: null,
32053
+ access: "view"
32054
+ },
32055
+ "storageMigration.start": {
32056
+ capName: "storage-migration",
32057
+ capScope: "system",
32058
+ addonId: null,
32059
+ access: "create"
32060
+ },
32061
+ "storageMigration.status": {
32062
+ capName: "storage-migration",
32063
+ capScope: "system",
32064
+ addonId: null,
32065
+ access: "view"
32066
+ },
31818
32067
  "storageProvider.abortUpload": {
31819
32068
  capName: "storage-provider",
31820
32069
  capScope: "system",
@@ -32193,12 +32442,42 @@ Object.freeze({
32193
32442
  addonId: null,
32194
32443
  access: "create"
32195
32444
  },
32445
+ "terminalSession.adoptLegacyMonitor": {
32446
+ capName: "terminal-session",
32447
+ capScope: "system",
32448
+ addonId: null,
32449
+ access: "create"
32450
+ },
32196
32451
  "terminalSession.close": {
32197
32452
  capName: "terminal-session",
32198
32453
  capScope: "system",
32199
32454
  addonId: null,
32200
32455
  access: "create"
32201
32456
  },
32457
+ "terminalSession.createInstance": {
32458
+ capName: "terminal-session",
32459
+ capScope: "system",
32460
+ addonId: null,
32461
+ access: "create"
32462
+ },
32463
+ "terminalSession.deleteInstance": {
32464
+ capName: "terminal-session",
32465
+ capScope: "system",
32466
+ addonId: null,
32467
+ access: "delete"
32468
+ },
32469
+ "terminalSession.listInstances": {
32470
+ capName: "terminal-session",
32471
+ capScope: "system",
32472
+ addonId: null,
32473
+ access: "view"
32474
+ },
32475
+ "terminalSession.listLegacyCameras": {
32476
+ capName: "terminal-session",
32477
+ capScope: "system",
32478
+ addonId: null,
32479
+ access: "view"
32480
+ },
32202
32481
  "terminalSession.listProfiles": {
32203
32482
  capName: "terminal-session",
32204
32483
  capScope: "system",
@@ -32229,6 +32508,12 @@ Object.freeze({
32229
32508
  addonId: null,
32230
32509
  access: "create"
32231
32510
  },
32511
+ "terminalSession.setInstanceEnabled": {
32512
+ capName: "terminal-session",
32513
+ capScope: "system",
32514
+ addonId: null,
32515
+ access: "create"
32516
+ },
32232
32517
  "terminalSession.writeInput": {
32233
32518
  capName: "terminal-session",
32234
32519
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-velux",
3
- "version": "0.2.12",
3
+ "version": "0.2.13",
4
4
  "description": "Velux KLF-200 device-provider addon for CamStack — local-gateway window + shutter covers (positional, no tilt)",
5
5
  "keywords": [
6
6
  "camstack",