@camstack/addon-provider-unraid 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",
@@ -21124,6 +21273,7 @@ var FaceInfoSchema = object({
21124
21273
  var FaceFilterEnum = _enum([
21125
21274
  "unassigned",
21126
21275
  "recognized",
21276
+ "identified",
21127
21277
  "all"
21128
21278
  ]);
21129
21279
  var MediaFileLiteSchema$1 = object({
@@ -21152,6 +21302,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
21152
21302
  kind: "mutation",
21153
21303
  auth: "admin"
21154
21304
  }), method(object({
21305
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
21306
+ deviceId: number().int().optional(),
21155
21307
  limit: number().int().positive().optional(),
21156
21308
  filter: FaceFilterEnum.optional(),
21157
21309
  /**
@@ -23381,6 +23533,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
23381
23533
  capName: string().min(1).max(64),
23382
23534
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
23383
23535
  valuePath: string().min(1).max(64)
23536
+ }),
23537
+ object({
23538
+ kind: literal("latest-recognition"),
23539
+ recognition: _enum(["person", "plate"])
23384
23540
  })
23385
23541
  ]);
23386
23542
  var OsdSlotBindingSchema = object({
@@ -23486,6 +23642,15 @@ method(object({ deviceId: number().int() }), object({
23486
23642
  }), object({ success: literal(true) }), {
23487
23643
  kind: "mutation",
23488
23644
  auth: "admin"
23645
+ }), method(object({
23646
+ sourceDeviceId: number().int(),
23647
+ targetDeviceId: number().int()
23648
+ }), object({
23649
+ copied: number().int().nonnegative(),
23650
+ skipped: number().int().nonnegative()
23651
+ }), {
23652
+ kind: "mutation",
23653
+ auth: "admin"
23489
23654
  }), method(object({
23490
23655
  deviceId: number().int(),
23491
23656
  slotId: string().min(1),
@@ -24583,13 +24748,19 @@ method(object({
24583
24748
  }), {
24584
24749
  kind: "mutation",
24585
24750
  auth: "admin"
24586
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
24751
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
24587
24752
  kind: "mutation",
24588
24753
  auth: "admin"
24589
- }), method(object({}), array(RelocateJobSchema).readonly(), {
24590
- kind: "query",
24754
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
24755
+ kind: "mutation",
24591
24756
  auth: "admin"
24592
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
24757
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
24758
+ kind: "mutation",
24759
+ auth: "admin"
24760
+ }), method(StorageMigrationFootageMoveInputSchema, object({ jobId: string() }), {
24761
+ kind: "mutation",
24762
+ auth: "admin"
24763
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
24593
24764
  kind: "mutation",
24594
24765
  auth: "admin"
24595
24766
  });
@@ -30195,6 +30366,12 @@ Object.freeze({
30195
30366
  addonId: null,
30196
30367
  access: "delete"
30197
30368
  },
30369
+ "osdManager.copyDeviceConfiguration": {
30370
+ capName: "osd-manager",
30371
+ capScope: "system",
30372
+ addonId: null,
30373
+ access: "create"
30374
+ },
30198
30375
  "osdManager.getConditionSupport": {
30199
30376
  capName: "osd-manager",
30200
30377
  capScope: "system",
@@ -30291,7 +30468,7 @@ Object.freeze({
30291
30468
  addonId: null,
30292
30469
  access: "create"
30293
30470
  },
30294
- "pipelineAnalytics.cancelMediaRelocate": {
30471
+ "pipelineAnalytics.cancelStorageMigrationMove": {
30295
30472
  capName: "pipeline-analytics",
30296
30473
  capScope: "device",
30297
30474
  addonId: null,
@@ -30363,12 +30540,6 @@ Object.freeze({
30363
30540
  addonId: null,
30364
30541
  access: "view"
30365
30542
  },
30366
- "pipelineAnalytics.getMediaRelocateStatus": {
30367
- capName: "pipeline-analytics",
30368
- capScope: "device",
30369
- addonId: null,
30370
- access: "view"
30371
- },
30372
30543
  "pipelineAnalytics.getMotionEvents": {
30373
30544
  capName: "pipeline-analytics",
30374
30545
  capScope: "device",
@@ -30405,6 +30576,12 @@ Object.freeze({
30405
30576
  addonId: null,
30406
30577
  access: "view"
30407
30578
  },
30579
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
30580
+ capName: "pipeline-analytics",
30581
+ capScope: "device",
30582
+ addonId: null,
30583
+ access: "view"
30584
+ },
30408
30585
  "pipelineAnalytics.getTrack": {
30409
30586
  capName: "pipeline-analytics",
30410
30587
  capScope: "device",
@@ -30483,6 +30660,12 @@ Object.freeze({
30483
30660
  addonId: null,
30484
30661
  access: "view"
30485
30662
  },
30663
+ "pipelineAnalytics.pauseForStorageMigration": {
30664
+ capName: "pipeline-analytics",
30665
+ capScope: "device",
30666
+ addonId: null,
30667
+ access: "create"
30668
+ },
30486
30669
  "pipelineAnalytics.proposeRetrainAnnotations": {
30487
30670
  capName: "pipeline-analytics",
30488
30671
  capScope: "device",
@@ -30513,7 +30696,7 @@ Object.freeze({
30513
30696
  addonId: null,
30514
30697
  access: "create"
30515
30698
  },
30516
- "pipelineAnalytics.relocateMedia": {
30699
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
30517
30700
  capName: "pipeline-analytics",
30518
30701
  capScope: "device",
30519
30702
  addonId: null,
@@ -30525,6 +30708,12 @@ Object.freeze({
30525
30708
  addonId: null,
30526
30709
  access: "create"
30527
30710
  },
30711
+ "pipelineAnalytics.resumeForStorageMigration": {
30712
+ capName: "pipeline-analytics",
30713
+ capScope: "device",
30714
+ addonId: null,
30715
+ access: "create"
30716
+ },
30528
30717
  "pipelineAnalytics.saveRetrainAnnotations": {
30529
30718
  capName: "pipeline-analytics",
30530
30719
  capScope: "device",
@@ -30549,6 +30738,12 @@ Object.freeze({
30549
30738
  addonId: null,
30550
30739
  access: "create"
30551
30740
  },
30741
+ "pipelineAnalytics.startStorageMigrationMove": {
30742
+ capName: "pipeline-analytics",
30743
+ capScope: "device",
30744
+ addonId: null,
30745
+ access: "create"
30746
+ },
30552
30747
  "pipelineAnalytics.wipeAllAnalytics": {
30553
30748
  capName: "pipeline-analytics",
30554
30749
  capScope: "device",
@@ -30915,6 +31110,12 @@ Object.freeze({
30915
31110
  addonId: null,
30916
31111
  access: "view"
30917
31112
  },
31113
+ "pipelineOrchestrator.pauseForStorageMigration": {
31114
+ capName: "pipeline-orchestrator",
31115
+ capScope: "system",
31116
+ addonId: null,
31117
+ access: "create"
31118
+ },
30918
31119
  "pipelineOrchestrator.rebalance": {
30919
31120
  capName: "pipeline-orchestrator",
30920
31121
  capScope: "system",
@@ -30939,6 +31140,12 @@ Object.freeze({
30939
31140
  addonId: null,
30940
31141
  access: "view"
30941
31142
  },
31143
+ "pipelineOrchestrator.resumeForStorageMigration": {
31144
+ capName: "pipeline-orchestrator",
31145
+ capScope: "system",
31146
+ addonId: null,
31147
+ access: "create"
31148
+ },
30942
31149
  "pipelineOrchestrator.saveTemplate": {
30943
31150
  capName: "pipeline-orchestrator",
30944
31151
  capScope: "system",
@@ -31335,7 +31542,7 @@ Object.freeze({
31335
31542
  addonId: null,
31336
31543
  access: "create"
31337
31544
  },
31338
- "recording.cancelRelocate": {
31545
+ "recording.cancelStorageMigrationMove": {
31339
31546
  capName: "recording",
31340
31547
  capScope: "system",
31341
31548
  addonId: null,
@@ -31371,7 +31578,7 @@ Object.freeze({
31371
31578
  addonId: null,
31372
31579
  access: "view"
31373
31580
  },
31374
- "recording.getRelocateStatus": {
31581
+ "recording.getStorageMigrationMoveStatus": {
31375
31582
  capName: "recording",
31376
31583
  capScope: "system",
31377
31584
  addonId: null,
@@ -31395,6 +31602,12 @@ Object.freeze({
31395
31602
  addonId: null,
31396
31603
  access: "view"
31397
31604
  },
31605
+ "recording.pauseForStorageMigration": {
31606
+ capName: "recording",
31607
+ capScope: "system",
31608
+ addonId: null,
31609
+ access: "create"
31610
+ },
31398
31611
  "recording.pruneFootage": {
31399
31612
  capName: "recording",
31400
31613
  capScope: "system",
@@ -31413,7 +31626,7 @@ Object.freeze({
31413
31626
  addonId: null,
31414
31627
  access: "view"
31415
31628
  },
31416
- "recording.relocateFootage": {
31629
+ "recording.refreshStorageLocationsForMigration": {
31417
31630
  capName: "recording",
31418
31631
  capScope: "system",
31419
31632
  addonId: null,
@@ -31437,12 +31650,24 @@ Object.freeze({
31437
31650
  addonId: null,
31438
31651
  access: "create"
31439
31652
  },
31653
+ "recording.resumeForStorageMigration": {
31654
+ capName: "recording",
31655
+ capScope: "system",
31656
+ addonId: null,
31657
+ access: "create"
31658
+ },
31440
31659
  "recording.setDeviceConfig": {
31441
31660
  capName: "recording",
31442
31661
  capScope: "system",
31443
31662
  addonId: null,
31444
31663
  access: "create"
31445
31664
  },
31665
+ "recording.startStorageMigrationMove": {
31666
+ capName: "recording",
31667
+ capScope: "system",
31668
+ addonId: null,
31669
+ access: "create"
31670
+ },
31446
31671
  "recordingExport.cancelExport": {
31447
31672
  capName: "recordingExport",
31448
31673
  capScope: "system",
@@ -31833,6 +32058,30 @@ Object.freeze({
31833
32058
  addonId: null,
31834
32059
  access: "view"
31835
32060
  },
32061
+ "storageMigration.cancel": {
32062
+ capName: "storage-migration",
32063
+ capScope: "system",
32064
+ addonId: null,
32065
+ access: "create"
32066
+ },
32067
+ "storageMigration.plan": {
32068
+ capName: "storage-migration",
32069
+ capScope: "system",
32070
+ addonId: null,
32071
+ access: "view"
32072
+ },
32073
+ "storageMigration.start": {
32074
+ capName: "storage-migration",
32075
+ capScope: "system",
32076
+ addonId: null,
32077
+ access: "create"
32078
+ },
32079
+ "storageMigration.status": {
32080
+ capName: "storage-migration",
32081
+ capScope: "system",
32082
+ addonId: null,
32083
+ access: "view"
32084
+ },
31836
32085
  "storageProvider.abortUpload": {
31837
32086
  capName: "storage-provider",
31838
32087
  capScope: "system",
@@ -32211,12 +32460,42 @@ Object.freeze({
32211
32460
  addonId: null,
32212
32461
  access: "create"
32213
32462
  },
32463
+ "terminalSession.adoptLegacyMonitor": {
32464
+ capName: "terminal-session",
32465
+ capScope: "system",
32466
+ addonId: null,
32467
+ access: "create"
32468
+ },
32214
32469
  "terminalSession.close": {
32215
32470
  capName: "terminal-session",
32216
32471
  capScope: "system",
32217
32472
  addonId: null,
32218
32473
  access: "create"
32219
32474
  },
32475
+ "terminalSession.createInstance": {
32476
+ capName: "terminal-session",
32477
+ capScope: "system",
32478
+ addonId: null,
32479
+ access: "create"
32480
+ },
32481
+ "terminalSession.deleteInstance": {
32482
+ capName: "terminal-session",
32483
+ capScope: "system",
32484
+ addonId: null,
32485
+ access: "delete"
32486
+ },
32487
+ "terminalSession.listInstances": {
32488
+ capName: "terminal-session",
32489
+ capScope: "system",
32490
+ addonId: null,
32491
+ access: "view"
32492
+ },
32493
+ "terminalSession.listLegacyCameras": {
32494
+ capName: "terminal-session",
32495
+ capScope: "system",
32496
+ addonId: null,
32497
+ access: "view"
32498
+ },
32220
32499
  "terminalSession.listProfiles": {
32221
32500
  capName: "terminal-session",
32222
32501
  capScope: "system",
@@ -32247,6 +32526,12 @@ Object.freeze({
32247
32526
  addonId: null,
32248
32527
  access: "create"
32249
32528
  },
32529
+ "terminalSession.setInstanceEnabled": {
32530
+ capName: "terminal-session",
32531
+ capScope: "system",
32532
+ addonId: null,
32533
+ access: "create"
32534
+ },
32250
32535
  "terminalSession.writeInput": {
32251
32536
  capName: "terminal-session",
32252
32537
  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",
@@ -21123,6 +21272,7 @@ var FaceInfoSchema = object({
21123
21272
  var FaceFilterEnum = _enum([
21124
21273
  "unassigned",
21125
21274
  "recognized",
21275
+ "identified",
21126
21276
  "all"
21127
21277
  ]);
21128
21278
  var MediaFileLiteSchema$1 = object({
@@ -21151,6 +21301,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
21151
21301
  kind: "mutation",
21152
21302
  auth: "admin"
21153
21303
  }), method(object({
21304
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
21305
+ deviceId: number().int().optional(),
21154
21306
  limit: number().int().positive().optional(),
21155
21307
  filter: FaceFilterEnum.optional(),
21156
21308
  /**
@@ -23380,6 +23532,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
23380
23532
  capName: string().min(1).max(64),
23381
23533
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
23382
23534
  valuePath: string().min(1).max(64)
23535
+ }),
23536
+ object({
23537
+ kind: literal("latest-recognition"),
23538
+ recognition: _enum(["person", "plate"])
23383
23539
  })
23384
23540
  ]);
23385
23541
  var OsdSlotBindingSchema = object({
@@ -23485,6 +23641,15 @@ method(object({ deviceId: number().int() }), object({
23485
23641
  }), object({ success: literal(true) }), {
23486
23642
  kind: "mutation",
23487
23643
  auth: "admin"
23644
+ }), method(object({
23645
+ sourceDeviceId: number().int(),
23646
+ targetDeviceId: number().int()
23647
+ }), object({
23648
+ copied: number().int().nonnegative(),
23649
+ skipped: number().int().nonnegative()
23650
+ }), {
23651
+ kind: "mutation",
23652
+ auth: "admin"
23488
23653
  }), method(object({
23489
23654
  deviceId: number().int(),
23490
23655
  slotId: string().min(1),
@@ -24582,13 +24747,19 @@ method(object({
24582
24747
  }), {
24583
24748
  kind: "mutation",
24584
24749
  auth: "admin"
24585
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
24750
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
24586
24751
  kind: "mutation",
24587
24752
  auth: "admin"
24588
- }), method(object({}), array(RelocateJobSchema).readonly(), {
24589
- kind: "query",
24753
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
24754
+ kind: "mutation",
24590
24755
  auth: "admin"
24591
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
24756
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
24757
+ kind: "mutation",
24758
+ auth: "admin"
24759
+ }), method(StorageMigrationFootageMoveInputSchema, object({ jobId: string() }), {
24760
+ kind: "mutation",
24761
+ auth: "admin"
24762
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
24592
24763
  kind: "mutation",
24593
24764
  auth: "admin"
24594
24765
  });
@@ -30194,6 +30365,12 @@ Object.freeze({
30194
30365
  addonId: null,
30195
30366
  access: "delete"
30196
30367
  },
30368
+ "osdManager.copyDeviceConfiguration": {
30369
+ capName: "osd-manager",
30370
+ capScope: "system",
30371
+ addonId: null,
30372
+ access: "create"
30373
+ },
30197
30374
  "osdManager.getConditionSupport": {
30198
30375
  capName: "osd-manager",
30199
30376
  capScope: "system",
@@ -30290,7 +30467,7 @@ Object.freeze({
30290
30467
  addonId: null,
30291
30468
  access: "create"
30292
30469
  },
30293
- "pipelineAnalytics.cancelMediaRelocate": {
30470
+ "pipelineAnalytics.cancelStorageMigrationMove": {
30294
30471
  capName: "pipeline-analytics",
30295
30472
  capScope: "device",
30296
30473
  addonId: null,
@@ -30362,12 +30539,6 @@ Object.freeze({
30362
30539
  addonId: null,
30363
30540
  access: "view"
30364
30541
  },
30365
- "pipelineAnalytics.getMediaRelocateStatus": {
30366
- capName: "pipeline-analytics",
30367
- capScope: "device",
30368
- addonId: null,
30369
- access: "view"
30370
- },
30371
30542
  "pipelineAnalytics.getMotionEvents": {
30372
30543
  capName: "pipeline-analytics",
30373
30544
  capScope: "device",
@@ -30404,6 +30575,12 @@ Object.freeze({
30404
30575
  addonId: null,
30405
30576
  access: "view"
30406
30577
  },
30578
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
30579
+ capName: "pipeline-analytics",
30580
+ capScope: "device",
30581
+ addonId: null,
30582
+ access: "view"
30583
+ },
30407
30584
  "pipelineAnalytics.getTrack": {
30408
30585
  capName: "pipeline-analytics",
30409
30586
  capScope: "device",
@@ -30482,6 +30659,12 @@ Object.freeze({
30482
30659
  addonId: null,
30483
30660
  access: "view"
30484
30661
  },
30662
+ "pipelineAnalytics.pauseForStorageMigration": {
30663
+ capName: "pipeline-analytics",
30664
+ capScope: "device",
30665
+ addonId: null,
30666
+ access: "create"
30667
+ },
30485
30668
  "pipelineAnalytics.proposeRetrainAnnotations": {
30486
30669
  capName: "pipeline-analytics",
30487
30670
  capScope: "device",
@@ -30512,7 +30695,7 @@ Object.freeze({
30512
30695
  addonId: null,
30513
30696
  access: "create"
30514
30697
  },
30515
- "pipelineAnalytics.relocateMedia": {
30698
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
30516
30699
  capName: "pipeline-analytics",
30517
30700
  capScope: "device",
30518
30701
  addonId: null,
@@ -30524,6 +30707,12 @@ Object.freeze({
30524
30707
  addonId: null,
30525
30708
  access: "create"
30526
30709
  },
30710
+ "pipelineAnalytics.resumeForStorageMigration": {
30711
+ capName: "pipeline-analytics",
30712
+ capScope: "device",
30713
+ addonId: null,
30714
+ access: "create"
30715
+ },
30527
30716
  "pipelineAnalytics.saveRetrainAnnotations": {
30528
30717
  capName: "pipeline-analytics",
30529
30718
  capScope: "device",
@@ -30548,6 +30737,12 @@ Object.freeze({
30548
30737
  addonId: null,
30549
30738
  access: "create"
30550
30739
  },
30740
+ "pipelineAnalytics.startStorageMigrationMove": {
30741
+ capName: "pipeline-analytics",
30742
+ capScope: "device",
30743
+ addonId: null,
30744
+ access: "create"
30745
+ },
30551
30746
  "pipelineAnalytics.wipeAllAnalytics": {
30552
30747
  capName: "pipeline-analytics",
30553
30748
  capScope: "device",
@@ -30914,6 +31109,12 @@ Object.freeze({
30914
31109
  addonId: null,
30915
31110
  access: "view"
30916
31111
  },
31112
+ "pipelineOrchestrator.pauseForStorageMigration": {
31113
+ capName: "pipeline-orchestrator",
31114
+ capScope: "system",
31115
+ addonId: null,
31116
+ access: "create"
31117
+ },
30917
31118
  "pipelineOrchestrator.rebalance": {
30918
31119
  capName: "pipeline-orchestrator",
30919
31120
  capScope: "system",
@@ -30938,6 +31139,12 @@ Object.freeze({
30938
31139
  addonId: null,
30939
31140
  access: "view"
30940
31141
  },
31142
+ "pipelineOrchestrator.resumeForStorageMigration": {
31143
+ capName: "pipeline-orchestrator",
31144
+ capScope: "system",
31145
+ addonId: null,
31146
+ access: "create"
31147
+ },
30941
31148
  "pipelineOrchestrator.saveTemplate": {
30942
31149
  capName: "pipeline-orchestrator",
30943
31150
  capScope: "system",
@@ -31334,7 +31541,7 @@ Object.freeze({
31334
31541
  addonId: null,
31335
31542
  access: "create"
31336
31543
  },
31337
- "recording.cancelRelocate": {
31544
+ "recording.cancelStorageMigrationMove": {
31338
31545
  capName: "recording",
31339
31546
  capScope: "system",
31340
31547
  addonId: null,
@@ -31370,7 +31577,7 @@ Object.freeze({
31370
31577
  addonId: null,
31371
31578
  access: "view"
31372
31579
  },
31373
- "recording.getRelocateStatus": {
31580
+ "recording.getStorageMigrationMoveStatus": {
31374
31581
  capName: "recording",
31375
31582
  capScope: "system",
31376
31583
  addonId: null,
@@ -31394,6 +31601,12 @@ Object.freeze({
31394
31601
  addonId: null,
31395
31602
  access: "view"
31396
31603
  },
31604
+ "recording.pauseForStorageMigration": {
31605
+ capName: "recording",
31606
+ capScope: "system",
31607
+ addonId: null,
31608
+ access: "create"
31609
+ },
31397
31610
  "recording.pruneFootage": {
31398
31611
  capName: "recording",
31399
31612
  capScope: "system",
@@ -31412,7 +31625,7 @@ Object.freeze({
31412
31625
  addonId: null,
31413
31626
  access: "view"
31414
31627
  },
31415
- "recording.relocateFootage": {
31628
+ "recording.refreshStorageLocationsForMigration": {
31416
31629
  capName: "recording",
31417
31630
  capScope: "system",
31418
31631
  addonId: null,
@@ -31436,12 +31649,24 @@ Object.freeze({
31436
31649
  addonId: null,
31437
31650
  access: "create"
31438
31651
  },
31652
+ "recording.resumeForStorageMigration": {
31653
+ capName: "recording",
31654
+ capScope: "system",
31655
+ addonId: null,
31656
+ access: "create"
31657
+ },
31439
31658
  "recording.setDeviceConfig": {
31440
31659
  capName: "recording",
31441
31660
  capScope: "system",
31442
31661
  addonId: null,
31443
31662
  access: "create"
31444
31663
  },
31664
+ "recording.startStorageMigrationMove": {
31665
+ capName: "recording",
31666
+ capScope: "system",
31667
+ addonId: null,
31668
+ access: "create"
31669
+ },
31445
31670
  "recordingExport.cancelExport": {
31446
31671
  capName: "recordingExport",
31447
31672
  capScope: "system",
@@ -31832,6 +32057,30 @@ Object.freeze({
31832
32057
  addonId: null,
31833
32058
  access: "view"
31834
32059
  },
32060
+ "storageMigration.cancel": {
32061
+ capName: "storage-migration",
32062
+ capScope: "system",
32063
+ addonId: null,
32064
+ access: "create"
32065
+ },
32066
+ "storageMigration.plan": {
32067
+ capName: "storage-migration",
32068
+ capScope: "system",
32069
+ addonId: null,
32070
+ access: "view"
32071
+ },
32072
+ "storageMigration.start": {
32073
+ capName: "storage-migration",
32074
+ capScope: "system",
32075
+ addonId: null,
32076
+ access: "create"
32077
+ },
32078
+ "storageMigration.status": {
32079
+ capName: "storage-migration",
32080
+ capScope: "system",
32081
+ addonId: null,
32082
+ access: "view"
32083
+ },
31835
32084
  "storageProvider.abortUpload": {
31836
32085
  capName: "storage-provider",
31837
32086
  capScope: "system",
@@ -32210,12 +32459,42 @@ Object.freeze({
32210
32459
  addonId: null,
32211
32460
  access: "create"
32212
32461
  },
32462
+ "terminalSession.adoptLegacyMonitor": {
32463
+ capName: "terminal-session",
32464
+ capScope: "system",
32465
+ addonId: null,
32466
+ access: "create"
32467
+ },
32213
32468
  "terminalSession.close": {
32214
32469
  capName: "terminal-session",
32215
32470
  capScope: "system",
32216
32471
  addonId: null,
32217
32472
  access: "create"
32218
32473
  },
32474
+ "terminalSession.createInstance": {
32475
+ capName: "terminal-session",
32476
+ capScope: "system",
32477
+ addonId: null,
32478
+ access: "create"
32479
+ },
32480
+ "terminalSession.deleteInstance": {
32481
+ capName: "terminal-session",
32482
+ capScope: "system",
32483
+ addonId: null,
32484
+ access: "delete"
32485
+ },
32486
+ "terminalSession.listInstances": {
32487
+ capName: "terminal-session",
32488
+ capScope: "system",
32489
+ addonId: null,
32490
+ access: "view"
32491
+ },
32492
+ "terminalSession.listLegacyCameras": {
32493
+ capName: "terminal-session",
32494
+ capScope: "system",
32495
+ addonId: null,
32496
+ access: "view"
32497
+ },
32219
32498
  "terminalSession.listProfiles": {
32220
32499
  capName: "terminal-session",
32221
32500
  capScope: "system",
@@ -32246,6 +32525,12 @@ Object.freeze({
32246
32525
  addonId: null,
32247
32526
  access: "create"
32248
32527
  },
32528
+ "terminalSession.setInstanceEnabled": {
32529
+ capName: "terminal-session",
32530
+ capScope: "system",
32531
+ addonId: null,
32532
+ access: "create"
32533
+ },
32249
32534
  "terminalSession.writeInput": {
32250
32535
  capName: "terminal-session",
32251
32536
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-unraid",
3
- "version": "0.2.12",
3
+ "version": "0.2.13",
4
4
  "description": "Unraid device-provider addon for CamStack — one Container per Unraid instance fanning out array, disk, docker and notification entities",
5
5
  "keywords": [
6
6
  "camstack",