@camstack/addon-provider-velux 0.2.11 → 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 +357 -30
  2. package/dist/addon.mjs +357 -30
  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",
16271
16351
  auth: "admin"
16272
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16352
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
16353
+ kind: "mutation",
16354
+ auth: "admin"
16355
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
16356
+ kind: "mutation",
16357
+ auth: "admin"
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,7 +18675,67 @@ var TerminalProfileInfoSchema = object({
18576
18675
  label: string(),
18577
18676
  description: string().optional()
18578
18677
  });
18579
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
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
+ });
18700
+ var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
18701
+ seq: number().int().positive(),
18702
+ kind: literal("data"),
18703
+ data: string()
18704
+ }), object({
18705
+ seq: number().int().positive(),
18706
+ kind: literal("exit"),
18707
+ exitCode: number().int(),
18708
+ signal: number().int().optional()
18709
+ })]);
18710
+ var TerminalOutputBatchSchema = object({
18711
+ cursor: number().int().nonnegative(),
18712
+ reset: boolean(),
18713
+ snapshot: string().optional(),
18714
+ events: array(TerminalOutputEventSchema).readonly()
18715
+ });
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({
18580
18739
  profileId: string(),
18581
18740
  cols: number().int().positive(),
18582
18741
  rows: number().int().positive()
@@ -18590,6 +18749,26 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
18590
18749
  }), _void(), {
18591
18750
  kind: "mutation",
18592
18751
  auth: "admin"
18752
+ }), method(object({
18753
+ sessionId: string(),
18754
+ afterSeq: number().int().nonnegative(),
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()
18762
+ }), TerminalOutputBatchSchema, {
18763
+ kind: "mutation",
18764
+ auth: "admin",
18765
+ timeoutMs: 15e3
18766
+ }), method(object({
18767
+ sessionId: string(),
18768
+ data: string().max(64 * 1024)
18769
+ }), _void(), {
18770
+ kind: "mutation",
18771
+ auth: "admin"
18593
18772
  }), method(object({ sessionId: string() }), _void(), {
18594
18773
  kind: "mutation",
18595
18774
  auth: "admin"
@@ -21077,6 +21256,7 @@ var FaceInfoSchema = object({
21077
21256
  var FaceFilterEnum = _enum([
21078
21257
  "unassigned",
21079
21258
  "recognized",
21259
+ "identified",
21080
21260
  "all"
21081
21261
  ]);
21082
21262
  var MediaFileLiteSchema$1 = object({
@@ -21105,6 +21285,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
21105
21285
  kind: "mutation",
21106
21286
  auth: "admin"
21107
21287
  }), method(object({
21288
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
21289
+ deviceId: number().int().optional(),
21108
21290
  limit: number().int().positive().optional(),
21109
21291
  filter: FaceFilterEnum.optional(),
21110
21292
  /**
@@ -23334,6 +23516,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
23334
23516
  capName: string().min(1).max(64),
23335
23517
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
23336
23518
  valuePath: string().min(1).max(64)
23519
+ }),
23520
+ object({
23521
+ kind: literal("latest-recognition"),
23522
+ recognition: _enum(["person", "plate"])
23337
23523
  })
23338
23524
  ]);
23339
23525
  var OsdSlotBindingSchema = object({
@@ -23439,6 +23625,15 @@ method(object({ deviceId: number().int() }), object({
23439
23625
  }), object({ success: literal(true) }), {
23440
23626
  kind: "mutation",
23441
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"
23442
23637
  }), method(object({
23443
23638
  deviceId: number().int(),
23444
23639
  slotId: string().min(1),
@@ -24536,13 +24731,19 @@ method(object({
24536
24731
  }), {
24537
24732
  kind: "mutation",
24538
24733
  auth: "admin"
24539
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
24734
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
24540
24735
  kind: "mutation",
24541
24736
  auth: "admin"
24542
- }), method(object({}), array(RelocateJobSchema).readonly(), {
24543
- kind: "query",
24737
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
24738
+ kind: "mutation",
24544
24739
  auth: "admin"
24545
- }), 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() }), {
24546
24747
  kind: "mutation",
24547
24748
  auth: "admin"
24548
24749
  });
@@ -30148,6 +30349,12 @@ Object.freeze({
30148
30349
  addonId: null,
30149
30350
  access: "delete"
30150
30351
  },
30352
+ "osdManager.copyDeviceConfiguration": {
30353
+ capName: "osd-manager",
30354
+ capScope: "system",
30355
+ addonId: null,
30356
+ access: "create"
30357
+ },
30151
30358
  "osdManager.getConditionSupport": {
30152
30359
  capName: "osd-manager",
30153
30360
  capScope: "system",
@@ -30244,7 +30451,7 @@ Object.freeze({
30244
30451
  addonId: null,
30245
30452
  access: "create"
30246
30453
  },
30247
- "pipelineAnalytics.cancelMediaRelocate": {
30454
+ "pipelineAnalytics.cancelStorageMigrationMove": {
30248
30455
  capName: "pipeline-analytics",
30249
30456
  capScope: "device",
30250
30457
  addonId: null,
@@ -30316,12 +30523,6 @@ Object.freeze({
30316
30523
  addonId: null,
30317
30524
  access: "view"
30318
30525
  },
30319
- "pipelineAnalytics.getMediaRelocateStatus": {
30320
- capName: "pipeline-analytics",
30321
- capScope: "device",
30322
- addonId: null,
30323
- access: "view"
30324
- },
30325
30526
  "pipelineAnalytics.getMotionEvents": {
30326
30527
  capName: "pipeline-analytics",
30327
30528
  capScope: "device",
@@ -30358,6 +30559,12 @@ Object.freeze({
30358
30559
  addonId: null,
30359
30560
  access: "view"
30360
30561
  },
30562
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
30563
+ capName: "pipeline-analytics",
30564
+ capScope: "device",
30565
+ addonId: null,
30566
+ access: "view"
30567
+ },
30361
30568
  "pipelineAnalytics.getTrack": {
30362
30569
  capName: "pipeline-analytics",
30363
30570
  capScope: "device",
@@ -30436,6 +30643,12 @@ Object.freeze({
30436
30643
  addonId: null,
30437
30644
  access: "view"
30438
30645
  },
30646
+ "pipelineAnalytics.pauseForStorageMigration": {
30647
+ capName: "pipeline-analytics",
30648
+ capScope: "device",
30649
+ addonId: null,
30650
+ access: "create"
30651
+ },
30439
30652
  "pipelineAnalytics.proposeRetrainAnnotations": {
30440
30653
  capName: "pipeline-analytics",
30441
30654
  capScope: "device",
@@ -30466,7 +30679,7 @@ Object.freeze({
30466
30679
  addonId: null,
30467
30680
  access: "create"
30468
30681
  },
30469
- "pipelineAnalytics.relocateMedia": {
30682
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
30470
30683
  capName: "pipeline-analytics",
30471
30684
  capScope: "device",
30472
30685
  addonId: null,
@@ -30478,6 +30691,12 @@ Object.freeze({
30478
30691
  addonId: null,
30479
30692
  access: "create"
30480
30693
  },
30694
+ "pipelineAnalytics.resumeForStorageMigration": {
30695
+ capName: "pipeline-analytics",
30696
+ capScope: "device",
30697
+ addonId: null,
30698
+ access: "create"
30699
+ },
30481
30700
  "pipelineAnalytics.saveRetrainAnnotations": {
30482
30701
  capName: "pipeline-analytics",
30483
30702
  capScope: "device",
@@ -30502,6 +30721,12 @@ Object.freeze({
30502
30721
  addonId: null,
30503
30722
  access: "create"
30504
30723
  },
30724
+ "pipelineAnalytics.startStorageMigrationMove": {
30725
+ capName: "pipeline-analytics",
30726
+ capScope: "device",
30727
+ addonId: null,
30728
+ access: "create"
30729
+ },
30505
30730
  "pipelineAnalytics.wipeAllAnalytics": {
30506
30731
  capName: "pipeline-analytics",
30507
30732
  capScope: "device",
@@ -30868,6 +31093,12 @@ Object.freeze({
30868
31093
  addonId: null,
30869
31094
  access: "view"
30870
31095
  },
31096
+ "pipelineOrchestrator.pauseForStorageMigration": {
31097
+ capName: "pipeline-orchestrator",
31098
+ capScope: "system",
31099
+ addonId: null,
31100
+ access: "create"
31101
+ },
30871
31102
  "pipelineOrchestrator.rebalance": {
30872
31103
  capName: "pipeline-orchestrator",
30873
31104
  capScope: "system",
@@ -30892,6 +31123,12 @@ Object.freeze({
30892
31123
  addonId: null,
30893
31124
  access: "view"
30894
31125
  },
31126
+ "pipelineOrchestrator.resumeForStorageMigration": {
31127
+ capName: "pipeline-orchestrator",
31128
+ capScope: "system",
31129
+ addonId: null,
31130
+ access: "create"
31131
+ },
30895
31132
  "pipelineOrchestrator.saveTemplate": {
30896
31133
  capName: "pipeline-orchestrator",
30897
31134
  capScope: "system",
@@ -31288,7 +31525,7 @@ Object.freeze({
31288
31525
  addonId: null,
31289
31526
  access: "create"
31290
31527
  },
31291
- "recording.cancelRelocate": {
31528
+ "recording.cancelStorageMigrationMove": {
31292
31529
  capName: "recording",
31293
31530
  capScope: "system",
31294
31531
  addonId: null,
@@ -31324,7 +31561,7 @@ Object.freeze({
31324
31561
  addonId: null,
31325
31562
  access: "view"
31326
31563
  },
31327
- "recording.getRelocateStatus": {
31564
+ "recording.getStorageMigrationMoveStatus": {
31328
31565
  capName: "recording",
31329
31566
  capScope: "system",
31330
31567
  addonId: null,
@@ -31348,6 +31585,12 @@ Object.freeze({
31348
31585
  addonId: null,
31349
31586
  access: "view"
31350
31587
  },
31588
+ "recording.pauseForStorageMigration": {
31589
+ capName: "recording",
31590
+ capScope: "system",
31591
+ addonId: null,
31592
+ access: "create"
31593
+ },
31351
31594
  "recording.pruneFootage": {
31352
31595
  capName: "recording",
31353
31596
  capScope: "system",
@@ -31366,7 +31609,7 @@ Object.freeze({
31366
31609
  addonId: null,
31367
31610
  access: "view"
31368
31611
  },
31369
- "recording.relocateFootage": {
31612
+ "recording.refreshStorageLocationsForMigration": {
31370
31613
  capName: "recording",
31371
31614
  capScope: "system",
31372
31615
  addonId: null,
@@ -31390,12 +31633,24 @@ Object.freeze({
31390
31633
  addonId: null,
31391
31634
  access: "create"
31392
31635
  },
31636
+ "recording.resumeForStorageMigration": {
31637
+ capName: "recording",
31638
+ capScope: "system",
31639
+ addonId: null,
31640
+ access: "create"
31641
+ },
31393
31642
  "recording.setDeviceConfig": {
31394
31643
  capName: "recording",
31395
31644
  capScope: "system",
31396
31645
  addonId: null,
31397
31646
  access: "create"
31398
31647
  },
31648
+ "recording.startStorageMigrationMove": {
31649
+ capName: "recording",
31650
+ capScope: "system",
31651
+ addonId: null,
31652
+ access: "create"
31653
+ },
31399
31654
  "recordingExport.cancelExport": {
31400
31655
  capName: "recordingExport",
31401
31656
  capScope: "system",
@@ -31786,6 +32041,30 @@ Object.freeze({
31786
32041
  addonId: null,
31787
32042
  access: "view"
31788
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
+ },
31789
32068
  "storageProvider.abortUpload": {
31790
32069
  capName: "storage-provider",
31791
32070
  capScope: "system",
@@ -32164,12 +32443,42 @@ Object.freeze({
32164
32443
  addonId: null,
32165
32444
  access: "create"
32166
32445
  },
32446
+ "terminalSession.adoptLegacyMonitor": {
32447
+ capName: "terminal-session",
32448
+ capScope: "system",
32449
+ addonId: null,
32450
+ access: "create"
32451
+ },
32167
32452
  "terminalSession.close": {
32168
32453
  capName: "terminal-session",
32169
32454
  capScope: "system",
32170
32455
  addonId: null,
32171
32456
  access: "create"
32172
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
+ },
32173
32482
  "terminalSession.listProfiles": {
32174
32483
  capName: "terminal-session",
32175
32484
  capScope: "system",
@@ -32188,12 +32497,30 @@ Object.freeze({
32188
32497
  addonId: null,
32189
32498
  access: "create"
32190
32499
  },
32500
+ "terminalSession.pullOutput": {
32501
+ capName: "terminal-session",
32502
+ capScope: "system",
32503
+ addonId: null,
32504
+ access: "create"
32505
+ },
32191
32506
  "terminalSession.resize": {
32192
32507
  capName: "terminal-session",
32193
32508
  capScope: "system",
32194
32509
  addonId: null,
32195
32510
  access: "create"
32196
32511
  },
32512
+ "terminalSession.setInstanceEnabled": {
32513
+ capName: "terminal-session",
32514
+ capScope: "system",
32515
+ addonId: null,
32516
+ access: "create"
32517
+ },
32518
+ "terminalSession.writeInput": {
32519
+ capName: "terminal-session",
32520
+ capScope: "system",
32521
+ addonId: null,
32522
+ access: "create"
32523
+ },
32197
32524
  "toast.onToast": {
32198
32525
  capName: "toast",
32199
32526
  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",
16270
16350
  auth: "admin"
16271
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16351
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
16352
+ kind: "mutation",
16353
+ auth: "admin"
16354
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
16355
+ kind: "mutation",
16356
+ auth: "admin"
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,7 +18674,67 @@ var TerminalProfileInfoSchema = object({
18575
18674
  label: string(),
18576
18675
  description: string().optional()
18577
18676
  });
18578
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
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
+ });
18699
+ var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
18700
+ seq: number().int().positive(),
18701
+ kind: literal("data"),
18702
+ data: string()
18703
+ }), object({
18704
+ seq: number().int().positive(),
18705
+ kind: literal("exit"),
18706
+ exitCode: number().int(),
18707
+ signal: number().int().optional()
18708
+ })]);
18709
+ var TerminalOutputBatchSchema = object({
18710
+ cursor: number().int().nonnegative(),
18711
+ reset: boolean(),
18712
+ snapshot: string().optional(),
18713
+ events: array(TerminalOutputEventSchema).readonly()
18714
+ });
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({
18579
18738
  profileId: string(),
18580
18739
  cols: number().int().positive(),
18581
18740
  rows: number().int().positive()
@@ -18589,6 +18748,26 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
18589
18748
  }), _void(), {
18590
18749
  kind: "mutation",
18591
18750
  auth: "admin"
18751
+ }), method(object({
18752
+ sessionId: string(),
18753
+ afterSeq: number().int().nonnegative(),
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()
18761
+ }), TerminalOutputBatchSchema, {
18762
+ kind: "mutation",
18763
+ auth: "admin",
18764
+ timeoutMs: 15e3
18765
+ }), method(object({
18766
+ sessionId: string(),
18767
+ data: string().max(64 * 1024)
18768
+ }), _void(), {
18769
+ kind: "mutation",
18770
+ auth: "admin"
18592
18771
  }), method(object({ sessionId: string() }), _void(), {
18593
18772
  kind: "mutation",
18594
18773
  auth: "admin"
@@ -21076,6 +21255,7 @@ var FaceInfoSchema = object({
21076
21255
  var FaceFilterEnum = _enum([
21077
21256
  "unassigned",
21078
21257
  "recognized",
21258
+ "identified",
21079
21259
  "all"
21080
21260
  ]);
21081
21261
  var MediaFileLiteSchema$1 = object({
@@ -21104,6 +21284,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
21104
21284
  kind: "mutation",
21105
21285
  auth: "admin"
21106
21286
  }), method(object({
21287
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
21288
+ deviceId: number().int().optional(),
21107
21289
  limit: number().int().positive().optional(),
21108
21290
  filter: FaceFilterEnum.optional(),
21109
21291
  /**
@@ -23333,6 +23515,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
23333
23515
  capName: string().min(1).max(64),
23334
23516
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
23335
23517
  valuePath: string().min(1).max(64)
23518
+ }),
23519
+ object({
23520
+ kind: literal("latest-recognition"),
23521
+ recognition: _enum(["person", "plate"])
23336
23522
  })
23337
23523
  ]);
23338
23524
  var OsdSlotBindingSchema = object({
@@ -23438,6 +23624,15 @@ method(object({ deviceId: number().int() }), object({
23438
23624
  }), object({ success: literal(true) }), {
23439
23625
  kind: "mutation",
23440
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"
23441
23636
  }), method(object({
23442
23637
  deviceId: number().int(),
23443
23638
  slotId: string().min(1),
@@ -24535,13 +24730,19 @@ method(object({
24535
24730
  }), {
24536
24731
  kind: "mutation",
24537
24732
  auth: "admin"
24538
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
24733
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
24539
24734
  kind: "mutation",
24540
24735
  auth: "admin"
24541
- }), method(object({}), array(RelocateJobSchema).readonly(), {
24542
- kind: "query",
24736
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
24737
+ kind: "mutation",
24543
24738
  auth: "admin"
24544
- }), 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() }), {
24545
24746
  kind: "mutation",
24546
24747
  auth: "admin"
24547
24748
  });
@@ -30147,6 +30348,12 @@ Object.freeze({
30147
30348
  addonId: null,
30148
30349
  access: "delete"
30149
30350
  },
30351
+ "osdManager.copyDeviceConfiguration": {
30352
+ capName: "osd-manager",
30353
+ capScope: "system",
30354
+ addonId: null,
30355
+ access: "create"
30356
+ },
30150
30357
  "osdManager.getConditionSupport": {
30151
30358
  capName: "osd-manager",
30152
30359
  capScope: "system",
@@ -30243,7 +30450,7 @@ Object.freeze({
30243
30450
  addonId: null,
30244
30451
  access: "create"
30245
30452
  },
30246
- "pipelineAnalytics.cancelMediaRelocate": {
30453
+ "pipelineAnalytics.cancelStorageMigrationMove": {
30247
30454
  capName: "pipeline-analytics",
30248
30455
  capScope: "device",
30249
30456
  addonId: null,
@@ -30315,12 +30522,6 @@ Object.freeze({
30315
30522
  addonId: null,
30316
30523
  access: "view"
30317
30524
  },
30318
- "pipelineAnalytics.getMediaRelocateStatus": {
30319
- capName: "pipeline-analytics",
30320
- capScope: "device",
30321
- addonId: null,
30322
- access: "view"
30323
- },
30324
30525
  "pipelineAnalytics.getMotionEvents": {
30325
30526
  capName: "pipeline-analytics",
30326
30527
  capScope: "device",
@@ -30357,6 +30558,12 @@ Object.freeze({
30357
30558
  addonId: null,
30358
30559
  access: "view"
30359
30560
  },
30561
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
30562
+ capName: "pipeline-analytics",
30563
+ capScope: "device",
30564
+ addonId: null,
30565
+ access: "view"
30566
+ },
30360
30567
  "pipelineAnalytics.getTrack": {
30361
30568
  capName: "pipeline-analytics",
30362
30569
  capScope: "device",
@@ -30435,6 +30642,12 @@ Object.freeze({
30435
30642
  addonId: null,
30436
30643
  access: "view"
30437
30644
  },
30645
+ "pipelineAnalytics.pauseForStorageMigration": {
30646
+ capName: "pipeline-analytics",
30647
+ capScope: "device",
30648
+ addonId: null,
30649
+ access: "create"
30650
+ },
30438
30651
  "pipelineAnalytics.proposeRetrainAnnotations": {
30439
30652
  capName: "pipeline-analytics",
30440
30653
  capScope: "device",
@@ -30465,7 +30678,7 @@ Object.freeze({
30465
30678
  addonId: null,
30466
30679
  access: "create"
30467
30680
  },
30468
- "pipelineAnalytics.relocateMedia": {
30681
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
30469
30682
  capName: "pipeline-analytics",
30470
30683
  capScope: "device",
30471
30684
  addonId: null,
@@ -30477,6 +30690,12 @@ Object.freeze({
30477
30690
  addonId: null,
30478
30691
  access: "create"
30479
30692
  },
30693
+ "pipelineAnalytics.resumeForStorageMigration": {
30694
+ capName: "pipeline-analytics",
30695
+ capScope: "device",
30696
+ addonId: null,
30697
+ access: "create"
30698
+ },
30480
30699
  "pipelineAnalytics.saveRetrainAnnotations": {
30481
30700
  capName: "pipeline-analytics",
30482
30701
  capScope: "device",
@@ -30501,6 +30720,12 @@ Object.freeze({
30501
30720
  addonId: null,
30502
30721
  access: "create"
30503
30722
  },
30723
+ "pipelineAnalytics.startStorageMigrationMove": {
30724
+ capName: "pipeline-analytics",
30725
+ capScope: "device",
30726
+ addonId: null,
30727
+ access: "create"
30728
+ },
30504
30729
  "pipelineAnalytics.wipeAllAnalytics": {
30505
30730
  capName: "pipeline-analytics",
30506
30731
  capScope: "device",
@@ -30867,6 +31092,12 @@ Object.freeze({
30867
31092
  addonId: null,
30868
31093
  access: "view"
30869
31094
  },
31095
+ "pipelineOrchestrator.pauseForStorageMigration": {
31096
+ capName: "pipeline-orchestrator",
31097
+ capScope: "system",
31098
+ addonId: null,
31099
+ access: "create"
31100
+ },
30870
31101
  "pipelineOrchestrator.rebalance": {
30871
31102
  capName: "pipeline-orchestrator",
30872
31103
  capScope: "system",
@@ -30891,6 +31122,12 @@ Object.freeze({
30891
31122
  addonId: null,
30892
31123
  access: "view"
30893
31124
  },
31125
+ "pipelineOrchestrator.resumeForStorageMigration": {
31126
+ capName: "pipeline-orchestrator",
31127
+ capScope: "system",
31128
+ addonId: null,
31129
+ access: "create"
31130
+ },
30894
31131
  "pipelineOrchestrator.saveTemplate": {
30895
31132
  capName: "pipeline-orchestrator",
30896
31133
  capScope: "system",
@@ -31287,7 +31524,7 @@ Object.freeze({
31287
31524
  addonId: null,
31288
31525
  access: "create"
31289
31526
  },
31290
- "recording.cancelRelocate": {
31527
+ "recording.cancelStorageMigrationMove": {
31291
31528
  capName: "recording",
31292
31529
  capScope: "system",
31293
31530
  addonId: null,
@@ -31323,7 +31560,7 @@ Object.freeze({
31323
31560
  addonId: null,
31324
31561
  access: "view"
31325
31562
  },
31326
- "recording.getRelocateStatus": {
31563
+ "recording.getStorageMigrationMoveStatus": {
31327
31564
  capName: "recording",
31328
31565
  capScope: "system",
31329
31566
  addonId: null,
@@ -31347,6 +31584,12 @@ Object.freeze({
31347
31584
  addonId: null,
31348
31585
  access: "view"
31349
31586
  },
31587
+ "recording.pauseForStorageMigration": {
31588
+ capName: "recording",
31589
+ capScope: "system",
31590
+ addonId: null,
31591
+ access: "create"
31592
+ },
31350
31593
  "recording.pruneFootage": {
31351
31594
  capName: "recording",
31352
31595
  capScope: "system",
@@ -31365,7 +31608,7 @@ Object.freeze({
31365
31608
  addonId: null,
31366
31609
  access: "view"
31367
31610
  },
31368
- "recording.relocateFootage": {
31611
+ "recording.refreshStorageLocationsForMigration": {
31369
31612
  capName: "recording",
31370
31613
  capScope: "system",
31371
31614
  addonId: null,
@@ -31389,12 +31632,24 @@ Object.freeze({
31389
31632
  addonId: null,
31390
31633
  access: "create"
31391
31634
  },
31635
+ "recording.resumeForStorageMigration": {
31636
+ capName: "recording",
31637
+ capScope: "system",
31638
+ addonId: null,
31639
+ access: "create"
31640
+ },
31392
31641
  "recording.setDeviceConfig": {
31393
31642
  capName: "recording",
31394
31643
  capScope: "system",
31395
31644
  addonId: null,
31396
31645
  access: "create"
31397
31646
  },
31647
+ "recording.startStorageMigrationMove": {
31648
+ capName: "recording",
31649
+ capScope: "system",
31650
+ addonId: null,
31651
+ access: "create"
31652
+ },
31398
31653
  "recordingExport.cancelExport": {
31399
31654
  capName: "recordingExport",
31400
31655
  capScope: "system",
@@ -31785,6 +32040,30 @@ Object.freeze({
31785
32040
  addonId: null,
31786
32041
  access: "view"
31787
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
+ },
31788
32067
  "storageProvider.abortUpload": {
31789
32068
  capName: "storage-provider",
31790
32069
  capScope: "system",
@@ -32163,12 +32442,42 @@ Object.freeze({
32163
32442
  addonId: null,
32164
32443
  access: "create"
32165
32444
  },
32445
+ "terminalSession.adoptLegacyMonitor": {
32446
+ capName: "terminal-session",
32447
+ capScope: "system",
32448
+ addonId: null,
32449
+ access: "create"
32450
+ },
32166
32451
  "terminalSession.close": {
32167
32452
  capName: "terminal-session",
32168
32453
  capScope: "system",
32169
32454
  addonId: null,
32170
32455
  access: "create"
32171
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
+ },
32172
32481
  "terminalSession.listProfiles": {
32173
32482
  capName: "terminal-session",
32174
32483
  capScope: "system",
@@ -32187,12 +32496,30 @@ Object.freeze({
32187
32496
  addonId: null,
32188
32497
  access: "create"
32189
32498
  },
32499
+ "terminalSession.pullOutput": {
32500
+ capName: "terminal-session",
32501
+ capScope: "system",
32502
+ addonId: null,
32503
+ access: "create"
32504
+ },
32190
32505
  "terminalSession.resize": {
32191
32506
  capName: "terminal-session",
32192
32507
  capScope: "system",
32193
32508
  addonId: null,
32194
32509
  access: "create"
32195
32510
  },
32511
+ "terminalSession.setInstanceEnabled": {
32512
+ capName: "terminal-session",
32513
+ capScope: "system",
32514
+ addonId: null,
32515
+ access: "create"
32516
+ },
32517
+ "terminalSession.writeInput": {
32518
+ capName: "terminal-session",
32519
+ capScope: "system",
32520
+ addonId: null,
32521
+ access: "create"
32522
+ },
32196
32523
  "toast.onToast": {
32197
32524
  capName: "toast",
32198
32525
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-velux",
3
- "version": "0.2.11",
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",