@camstack/addon-provider-unraid 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"
@@ -21094,6 +21273,7 @@ var FaceInfoSchema = object({
21094
21273
  var FaceFilterEnum = _enum([
21095
21274
  "unassigned",
21096
21275
  "recognized",
21276
+ "identified",
21097
21277
  "all"
21098
21278
  ]);
21099
21279
  var MediaFileLiteSchema$1 = object({
@@ -21122,6 +21302,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
21122
21302
  kind: "mutation",
21123
21303
  auth: "admin"
21124
21304
  }), method(object({
21305
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
21306
+ deviceId: number().int().optional(),
21125
21307
  limit: number().int().positive().optional(),
21126
21308
  filter: FaceFilterEnum.optional(),
21127
21309
  /**
@@ -23351,6 +23533,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
23351
23533
  capName: string().min(1).max(64),
23352
23534
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
23353
23535
  valuePath: string().min(1).max(64)
23536
+ }),
23537
+ object({
23538
+ kind: literal("latest-recognition"),
23539
+ recognition: _enum(["person", "plate"])
23354
23540
  })
23355
23541
  ]);
23356
23542
  var OsdSlotBindingSchema = object({
@@ -23456,6 +23642,15 @@ method(object({ deviceId: number().int() }), object({
23456
23642
  }), object({ success: literal(true) }), {
23457
23643
  kind: "mutation",
23458
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"
23459
23654
  }), method(object({
23460
23655
  deviceId: number().int(),
23461
23656
  slotId: string().min(1),
@@ -24553,13 +24748,19 @@ method(object({
24553
24748
  }), {
24554
24749
  kind: "mutation",
24555
24750
  auth: "admin"
24556
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
24751
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
24557
24752
  kind: "mutation",
24558
24753
  auth: "admin"
24559
- }), method(object({}), array(RelocateJobSchema).readonly(), {
24560
- kind: "query",
24754
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
24755
+ kind: "mutation",
24561
24756
  auth: "admin"
24562
- }), 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() }), {
24563
24764
  kind: "mutation",
24564
24765
  auth: "admin"
24565
24766
  });
@@ -30165,6 +30366,12 @@ Object.freeze({
30165
30366
  addonId: null,
30166
30367
  access: "delete"
30167
30368
  },
30369
+ "osdManager.copyDeviceConfiguration": {
30370
+ capName: "osd-manager",
30371
+ capScope: "system",
30372
+ addonId: null,
30373
+ access: "create"
30374
+ },
30168
30375
  "osdManager.getConditionSupport": {
30169
30376
  capName: "osd-manager",
30170
30377
  capScope: "system",
@@ -30261,7 +30468,7 @@ Object.freeze({
30261
30468
  addonId: null,
30262
30469
  access: "create"
30263
30470
  },
30264
- "pipelineAnalytics.cancelMediaRelocate": {
30471
+ "pipelineAnalytics.cancelStorageMigrationMove": {
30265
30472
  capName: "pipeline-analytics",
30266
30473
  capScope: "device",
30267
30474
  addonId: null,
@@ -30333,12 +30540,6 @@ Object.freeze({
30333
30540
  addonId: null,
30334
30541
  access: "view"
30335
30542
  },
30336
- "pipelineAnalytics.getMediaRelocateStatus": {
30337
- capName: "pipeline-analytics",
30338
- capScope: "device",
30339
- addonId: null,
30340
- access: "view"
30341
- },
30342
30543
  "pipelineAnalytics.getMotionEvents": {
30343
30544
  capName: "pipeline-analytics",
30344
30545
  capScope: "device",
@@ -30375,6 +30576,12 @@ Object.freeze({
30375
30576
  addonId: null,
30376
30577
  access: "view"
30377
30578
  },
30579
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
30580
+ capName: "pipeline-analytics",
30581
+ capScope: "device",
30582
+ addonId: null,
30583
+ access: "view"
30584
+ },
30378
30585
  "pipelineAnalytics.getTrack": {
30379
30586
  capName: "pipeline-analytics",
30380
30587
  capScope: "device",
@@ -30453,6 +30660,12 @@ Object.freeze({
30453
30660
  addonId: null,
30454
30661
  access: "view"
30455
30662
  },
30663
+ "pipelineAnalytics.pauseForStorageMigration": {
30664
+ capName: "pipeline-analytics",
30665
+ capScope: "device",
30666
+ addonId: null,
30667
+ access: "create"
30668
+ },
30456
30669
  "pipelineAnalytics.proposeRetrainAnnotations": {
30457
30670
  capName: "pipeline-analytics",
30458
30671
  capScope: "device",
@@ -30483,7 +30696,7 @@ Object.freeze({
30483
30696
  addonId: null,
30484
30697
  access: "create"
30485
30698
  },
30486
- "pipelineAnalytics.relocateMedia": {
30699
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
30487
30700
  capName: "pipeline-analytics",
30488
30701
  capScope: "device",
30489
30702
  addonId: null,
@@ -30495,6 +30708,12 @@ Object.freeze({
30495
30708
  addonId: null,
30496
30709
  access: "create"
30497
30710
  },
30711
+ "pipelineAnalytics.resumeForStorageMigration": {
30712
+ capName: "pipeline-analytics",
30713
+ capScope: "device",
30714
+ addonId: null,
30715
+ access: "create"
30716
+ },
30498
30717
  "pipelineAnalytics.saveRetrainAnnotations": {
30499
30718
  capName: "pipeline-analytics",
30500
30719
  capScope: "device",
@@ -30519,6 +30738,12 @@ Object.freeze({
30519
30738
  addonId: null,
30520
30739
  access: "create"
30521
30740
  },
30741
+ "pipelineAnalytics.startStorageMigrationMove": {
30742
+ capName: "pipeline-analytics",
30743
+ capScope: "device",
30744
+ addonId: null,
30745
+ access: "create"
30746
+ },
30522
30747
  "pipelineAnalytics.wipeAllAnalytics": {
30523
30748
  capName: "pipeline-analytics",
30524
30749
  capScope: "device",
@@ -30885,6 +31110,12 @@ Object.freeze({
30885
31110
  addonId: null,
30886
31111
  access: "view"
30887
31112
  },
31113
+ "pipelineOrchestrator.pauseForStorageMigration": {
31114
+ capName: "pipeline-orchestrator",
31115
+ capScope: "system",
31116
+ addonId: null,
31117
+ access: "create"
31118
+ },
30888
31119
  "pipelineOrchestrator.rebalance": {
30889
31120
  capName: "pipeline-orchestrator",
30890
31121
  capScope: "system",
@@ -30909,6 +31140,12 @@ Object.freeze({
30909
31140
  addonId: null,
30910
31141
  access: "view"
30911
31142
  },
31143
+ "pipelineOrchestrator.resumeForStorageMigration": {
31144
+ capName: "pipeline-orchestrator",
31145
+ capScope: "system",
31146
+ addonId: null,
31147
+ access: "create"
31148
+ },
30912
31149
  "pipelineOrchestrator.saveTemplate": {
30913
31150
  capName: "pipeline-orchestrator",
30914
31151
  capScope: "system",
@@ -31305,7 +31542,7 @@ Object.freeze({
31305
31542
  addonId: null,
31306
31543
  access: "create"
31307
31544
  },
31308
- "recording.cancelRelocate": {
31545
+ "recording.cancelStorageMigrationMove": {
31309
31546
  capName: "recording",
31310
31547
  capScope: "system",
31311
31548
  addonId: null,
@@ -31341,7 +31578,7 @@ Object.freeze({
31341
31578
  addonId: null,
31342
31579
  access: "view"
31343
31580
  },
31344
- "recording.getRelocateStatus": {
31581
+ "recording.getStorageMigrationMoveStatus": {
31345
31582
  capName: "recording",
31346
31583
  capScope: "system",
31347
31584
  addonId: null,
@@ -31365,6 +31602,12 @@ Object.freeze({
31365
31602
  addonId: null,
31366
31603
  access: "view"
31367
31604
  },
31605
+ "recording.pauseForStorageMigration": {
31606
+ capName: "recording",
31607
+ capScope: "system",
31608
+ addonId: null,
31609
+ access: "create"
31610
+ },
31368
31611
  "recording.pruneFootage": {
31369
31612
  capName: "recording",
31370
31613
  capScope: "system",
@@ -31383,7 +31626,7 @@ Object.freeze({
31383
31626
  addonId: null,
31384
31627
  access: "view"
31385
31628
  },
31386
- "recording.relocateFootage": {
31629
+ "recording.refreshStorageLocationsForMigration": {
31387
31630
  capName: "recording",
31388
31631
  capScope: "system",
31389
31632
  addonId: null,
@@ -31407,12 +31650,24 @@ Object.freeze({
31407
31650
  addonId: null,
31408
31651
  access: "create"
31409
31652
  },
31653
+ "recording.resumeForStorageMigration": {
31654
+ capName: "recording",
31655
+ capScope: "system",
31656
+ addonId: null,
31657
+ access: "create"
31658
+ },
31410
31659
  "recording.setDeviceConfig": {
31411
31660
  capName: "recording",
31412
31661
  capScope: "system",
31413
31662
  addonId: null,
31414
31663
  access: "create"
31415
31664
  },
31665
+ "recording.startStorageMigrationMove": {
31666
+ capName: "recording",
31667
+ capScope: "system",
31668
+ addonId: null,
31669
+ access: "create"
31670
+ },
31416
31671
  "recordingExport.cancelExport": {
31417
31672
  capName: "recordingExport",
31418
31673
  capScope: "system",
@@ -31803,6 +32058,30 @@ Object.freeze({
31803
32058
  addonId: null,
31804
32059
  access: "view"
31805
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
+ },
31806
32085
  "storageProvider.abortUpload": {
31807
32086
  capName: "storage-provider",
31808
32087
  capScope: "system",
@@ -32181,12 +32460,42 @@ Object.freeze({
32181
32460
  addonId: null,
32182
32461
  access: "create"
32183
32462
  },
32463
+ "terminalSession.adoptLegacyMonitor": {
32464
+ capName: "terminal-session",
32465
+ capScope: "system",
32466
+ addonId: null,
32467
+ access: "create"
32468
+ },
32184
32469
  "terminalSession.close": {
32185
32470
  capName: "terminal-session",
32186
32471
  capScope: "system",
32187
32472
  addonId: null,
32188
32473
  access: "create"
32189
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
+ },
32190
32499
  "terminalSession.listProfiles": {
32191
32500
  capName: "terminal-session",
32192
32501
  capScope: "system",
@@ -32205,12 +32514,30 @@ Object.freeze({
32205
32514
  addonId: null,
32206
32515
  access: "create"
32207
32516
  },
32517
+ "terminalSession.pullOutput": {
32518
+ capName: "terminal-session",
32519
+ capScope: "system",
32520
+ addonId: null,
32521
+ access: "create"
32522
+ },
32208
32523
  "terminalSession.resize": {
32209
32524
  capName: "terminal-session",
32210
32525
  capScope: "system",
32211
32526
  addonId: null,
32212
32527
  access: "create"
32213
32528
  },
32529
+ "terminalSession.setInstanceEnabled": {
32530
+ capName: "terminal-session",
32531
+ capScope: "system",
32532
+ addonId: null,
32533
+ access: "create"
32534
+ },
32535
+ "terminalSession.writeInput": {
32536
+ capName: "terminal-session",
32537
+ capScope: "system",
32538
+ addonId: null,
32539
+ access: "create"
32540
+ },
32214
32541
  "toast.onToast": {
32215
32542
  capName: "toast",
32216
32543
  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"
@@ -21093,6 +21272,7 @@ var FaceInfoSchema = object({
21093
21272
  var FaceFilterEnum = _enum([
21094
21273
  "unassigned",
21095
21274
  "recognized",
21275
+ "identified",
21096
21276
  "all"
21097
21277
  ]);
21098
21278
  var MediaFileLiteSchema$1 = object({
@@ -21121,6 +21301,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
21121
21301
  kind: "mutation",
21122
21302
  auth: "admin"
21123
21303
  }), method(object({
21304
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
21305
+ deviceId: number().int().optional(),
21124
21306
  limit: number().int().positive().optional(),
21125
21307
  filter: FaceFilterEnum.optional(),
21126
21308
  /**
@@ -23350,6 +23532,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
23350
23532
  capName: string().min(1).max(64),
23351
23533
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
23352
23534
  valuePath: string().min(1).max(64)
23535
+ }),
23536
+ object({
23537
+ kind: literal("latest-recognition"),
23538
+ recognition: _enum(["person", "plate"])
23353
23539
  })
23354
23540
  ]);
23355
23541
  var OsdSlotBindingSchema = object({
@@ -23455,6 +23641,15 @@ method(object({ deviceId: number().int() }), object({
23455
23641
  }), object({ success: literal(true) }), {
23456
23642
  kind: "mutation",
23457
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"
23458
23653
  }), method(object({
23459
23654
  deviceId: number().int(),
23460
23655
  slotId: string().min(1),
@@ -24552,13 +24747,19 @@ method(object({
24552
24747
  }), {
24553
24748
  kind: "mutation",
24554
24749
  auth: "admin"
24555
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
24750
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
24556
24751
  kind: "mutation",
24557
24752
  auth: "admin"
24558
- }), method(object({}), array(RelocateJobSchema).readonly(), {
24559
- kind: "query",
24753
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
24754
+ kind: "mutation",
24560
24755
  auth: "admin"
24561
- }), 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() }), {
24562
24763
  kind: "mutation",
24563
24764
  auth: "admin"
24564
24765
  });
@@ -30164,6 +30365,12 @@ Object.freeze({
30164
30365
  addonId: null,
30165
30366
  access: "delete"
30166
30367
  },
30368
+ "osdManager.copyDeviceConfiguration": {
30369
+ capName: "osd-manager",
30370
+ capScope: "system",
30371
+ addonId: null,
30372
+ access: "create"
30373
+ },
30167
30374
  "osdManager.getConditionSupport": {
30168
30375
  capName: "osd-manager",
30169
30376
  capScope: "system",
@@ -30260,7 +30467,7 @@ Object.freeze({
30260
30467
  addonId: null,
30261
30468
  access: "create"
30262
30469
  },
30263
- "pipelineAnalytics.cancelMediaRelocate": {
30470
+ "pipelineAnalytics.cancelStorageMigrationMove": {
30264
30471
  capName: "pipeline-analytics",
30265
30472
  capScope: "device",
30266
30473
  addonId: null,
@@ -30332,12 +30539,6 @@ Object.freeze({
30332
30539
  addonId: null,
30333
30540
  access: "view"
30334
30541
  },
30335
- "pipelineAnalytics.getMediaRelocateStatus": {
30336
- capName: "pipeline-analytics",
30337
- capScope: "device",
30338
- addonId: null,
30339
- access: "view"
30340
- },
30341
30542
  "pipelineAnalytics.getMotionEvents": {
30342
30543
  capName: "pipeline-analytics",
30343
30544
  capScope: "device",
@@ -30374,6 +30575,12 @@ Object.freeze({
30374
30575
  addonId: null,
30375
30576
  access: "view"
30376
30577
  },
30578
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
30579
+ capName: "pipeline-analytics",
30580
+ capScope: "device",
30581
+ addonId: null,
30582
+ access: "view"
30583
+ },
30377
30584
  "pipelineAnalytics.getTrack": {
30378
30585
  capName: "pipeline-analytics",
30379
30586
  capScope: "device",
@@ -30452,6 +30659,12 @@ Object.freeze({
30452
30659
  addonId: null,
30453
30660
  access: "view"
30454
30661
  },
30662
+ "pipelineAnalytics.pauseForStorageMigration": {
30663
+ capName: "pipeline-analytics",
30664
+ capScope: "device",
30665
+ addonId: null,
30666
+ access: "create"
30667
+ },
30455
30668
  "pipelineAnalytics.proposeRetrainAnnotations": {
30456
30669
  capName: "pipeline-analytics",
30457
30670
  capScope: "device",
@@ -30482,7 +30695,7 @@ Object.freeze({
30482
30695
  addonId: null,
30483
30696
  access: "create"
30484
30697
  },
30485
- "pipelineAnalytics.relocateMedia": {
30698
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
30486
30699
  capName: "pipeline-analytics",
30487
30700
  capScope: "device",
30488
30701
  addonId: null,
@@ -30494,6 +30707,12 @@ Object.freeze({
30494
30707
  addonId: null,
30495
30708
  access: "create"
30496
30709
  },
30710
+ "pipelineAnalytics.resumeForStorageMigration": {
30711
+ capName: "pipeline-analytics",
30712
+ capScope: "device",
30713
+ addonId: null,
30714
+ access: "create"
30715
+ },
30497
30716
  "pipelineAnalytics.saveRetrainAnnotations": {
30498
30717
  capName: "pipeline-analytics",
30499
30718
  capScope: "device",
@@ -30518,6 +30737,12 @@ Object.freeze({
30518
30737
  addonId: null,
30519
30738
  access: "create"
30520
30739
  },
30740
+ "pipelineAnalytics.startStorageMigrationMove": {
30741
+ capName: "pipeline-analytics",
30742
+ capScope: "device",
30743
+ addonId: null,
30744
+ access: "create"
30745
+ },
30521
30746
  "pipelineAnalytics.wipeAllAnalytics": {
30522
30747
  capName: "pipeline-analytics",
30523
30748
  capScope: "device",
@@ -30884,6 +31109,12 @@ Object.freeze({
30884
31109
  addonId: null,
30885
31110
  access: "view"
30886
31111
  },
31112
+ "pipelineOrchestrator.pauseForStorageMigration": {
31113
+ capName: "pipeline-orchestrator",
31114
+ capScope: "system",
31115
+ addonId: null,
31116
+ access: "create"
31117
+ },
30887
31118
  "pipelineOrchestrator.rebalance": {
30888
31119
  capName: "pipeline-orchestrator",
30889
31120
  capScope: "system",
@@ -30908,6 +31139,12 @@ Object.freeze({
30908
31139
  addonId: null,
30909
31140
  access: "view"
30910
31141
  },
31142
+ "pipelineOrchestrator.resumeForStorageMigration": {
31143
+ capName: "pipeline-orchestrator",
31144
+ capScope: "system",
31145
+ addonId: null,
31146
+ access: "create"
31147
+ },
30911
31148
  "pipelineOrchestrator.saveTemplate": {
30912
31149
  capName: "pipeline-orchestrator",
30913
31150
  capScope: "system",
@@ -31304,7 +31541,7 @@ Object.freeze({
31304
31541
  addonId: null,
31305
31542
  access: "create"
31306
31543
  },
31307
- "recording.cancelRelocate": {
31544
+ "recording.cancelStorageMigrationMove": {
31308
31545
  capName: "recording",
31309
31546
  capScope: "system",
31310
31547
  addonId: null,
@@ -31340,7 +31577,7 @@ Object.freeze({
31340
31577
  addonId: null,
31341
31578
  access: "view"
31342
31579
  },
31343
- "recording.getRelocateStatus": {
31580
+ "recording.getStorageMigrationMoveStatus": {
31344
31581
  capName: "recording",
31345
31582
  capScope: "system",
31346
31583
  addonId: null,
@@ -31364,6 +31601,12 @@ Object.freeze({
31364
31601
  addonId: null,
31365
31602
  access: "view"
31366
31603
  },
31604
+ "recording.pauseForStorageMigration": {
31605
+ capName: "recording",
31606
+ capScope: "system",
31607
+ addonId: null,
31608
+ access: "create"
31609
+ },
31367
31610
  "recording.pruneFootage": {
31368
31611
  capName: "recording",
31369
31612
  capScope: "system",
@@ -31382,7 +31625,7 @@ Object.freeze({
31382
31625
  addonId: null,
31383
31626
  access: "view"
31384
31627
  },
31385
- "recording.relocateFootage": {
31628
+ "recording.refreshStorageLocationsForMigration": {
31386
31629
  capName: "recording",
31387
31630
  capScope: "system",
31388
31631
  addonId: null,
@@ -31406,12 +31649,24 @@ Object.freeze({
31406
31649
  addonId: null,
31407
31650
  access: "create"
31408
31651
  },
31652
+ "recording.resumeForStorageMigration": {
31653
+ capName: "recording",
31654
+ capScope: "system",
31655
+ addonId: null,
31656
+ access: "create"
31657
+ },
31409
31658
  "recording.setDeviceConfig": {
31410
31659
  capName: "recording",
31411
31660
  capScope: "system",
31412
31661
  addonId: null,
31413
31662
  access: "create"
31414
31663
  },
31664
+ "recording.startStorageMigrationMove": {
31665
+ capName: "recording",
31666
+ capScope: "system",
31667
+ addonId: null,
31668
+ access: "create"
31669
+ },
31415
31670
  "recordingExport.cancelExport": {
31416
31671
  capName: "recordingExport",
31417
31672
  capScope: "system",
@@ -31802,6 +32057,30 @@ Object.freeze({
31802
32057
  addonId: null,
31803
32058
  access: "view"
31804
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
+ },
31805
32084
  "storageProvider.abortUpload": {
31806
32085
  capName: "storage-provider",
31807
32086
  capScope: "system",
@@ -32180,12 +32459,42 @@ Object.freeze({
32180
32459
  addonId: null,
32181
32460
  access: "create"
32182
32461
  },
32462
+ "terminalSession.adoptLegacyMonitor": {
32463
+ capName: "terminal-session",
32464
+ capScope: "system",
32465
+ addonId: null,
32466
+ access: "create"
32467
+ },
32183
32468
  "terminalSession.close": {
32184
32469
  capName: "terminal-session",
32185
32470
  capScope: "system",
32186
32471
  addonId: null,
32187
32472
  access: "create"
32188
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
+ },
32189
32498
  "terminalSession.listProfiles": {
32190
32499
  capName: "terminal-session",
32191
32500
  capScope: "system",
@@ -32204,12 +32513,30 @@ Object.freeze({
32204
32513
  addonId: null,
32205
32514
  access: "create"
32206
32515
  },
32516
+ "terminalSession.pullOutput": {
32517
+ capName: "terminal-session",
32518
+ capScope: "system",
32519
+ addonId: null,
32520
+ access: "create"
32521
+ },
32207
32522
  "terminalSession.resize": {
32208
32523
  capName: "terminal-session",
32209
32524
  capScope: "system",
32210
32525
  addonId: null,
32211
32526
  access: "create"
32212
32527
  },
32528
+ "terminalSession.setInstanceEnabled": {
32529
+ capName: "terminal-session",
32530
+ capScope: "system",
32531
+ addonId: null,
32532
+ access: "create"
32533
+ },
32534
+ "terminalSession.writeInput": {
32535
+ capName: "terminal-session",
32536
+ capScope: "system",
32537
+ addonId: null,
32538
+ access: "create"
32539
+ },
32213
32540
  "toast.onToast": {
32214
32541
  capName: "toast",
32215
32542
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-unraid",
3
- "version": "0.2.11",
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",