@camstack/addon-notifiers 1.2.15 → 1.2.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/addon.js +317 -32
  2. package/dist/addon.mjs +317 -32
  3. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -7684,12 +7684,11 @@ var RecordingConfigSchema = object({
7684
7684
  /**
7685
7685
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
7686
7686
  *
7687
- * One shape shared by the recorder's `relocateFootage` (segments) and
7688
- * pipeline-analytics' `relocateMedia` (event media blobs) so the admin Data
7689
- * page renders both movers with one component. Jobs are in-RAM (a restart
7690
- * forgets them re-running is safe by construction: copy-if-absent, delete
7691
- * after verify) and each completed/failed run also lands one durable ops-log
7692
- * row on the owning addon's surface.
7687
+ * One shape shared by the recorder and pipeline-analytics internal movers.
7688
+ * The public admin surface is `storage-migration`; child jobs remain in RAM
7689
+ * because copy-if-absent, verify, delete and index/row repoint are resumable.
7690
+ * Each completed/failed run also lands one durable ops-log row on its owning
7691
+ * addon surface.
7693
7692
  */
7694
7693
  var RelocateJobStateSchema = _enum([
7695
7694
  "running",
@@ -7716,19 +7715,100 @@ var RelocateJobSchema = object({
7716
7715
  finishedAt: number().nullable(),
7717
7716
  error: string().nullable()
7718
7717
  });
7718
+ /** Profile-derived footage selection used only by the migration coordinator:
7719
+ * `recordings` owns high+mid; `recordingsLow` owns low. */
7720
+ var RelocateFootageClassSchema = _enum(["recordings", "recordingsLow"]);
7719
7721
  var RelocateFootageInputSchema = object({
7720
- deviceId: number().optional(),
7721
7722
  fromLocationId: string(),
7722
7723
  toLocationId: string(),
7723
7724
  entities: array(_enum(["segments"])).optional(),
7725
+ /** Limits relocation to the logical profile class. Omit only for the
7726
+ * pre-orchestration compatibility path. */
7727
+ footageClass: RelocateFootageClassSchema.optional(),
7724
7728
  /** Copy throttle in MB/s (default 40) — the drain is a background chore,
7725
7729
  * never allowed to starve live writers. */
7726
7730
  throttleMbps: number().min(1).max(1e3).optional()
7727
7731
  });
7728
- var RelocateMediaInputSchema = object({
7729
- deviceId: number().optional(),
7732
+ /** Internal, lease-scoped participant operation. It is intentionally separate
7733
+ * from persistent recording settings: a migration never changes
7734
+ * `RecordingConfig.enabled` or camera wrapper bindings. */
7735
+ var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
7736
+ var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
7737
+ var StorageMigrationMediaMoveInputSchema = object({
7730
7738
  toLocationId: string(),
7731
7739
  throttleMbps: number().min(1).max(1e3).optional()
7740
+ }).extend({ leaseId: string().min(1) });
7741
+ /** The independently selectable logical storage classes. `recordings`
7742
+ * encompasses the high and mid segment profiles; `recordingsLow` is low
7743
+ * segments; `eventMedia` is post-analysis blobs. */
7744
+ var StorageMigrationClassSchema = _enum([
7745
+ "recordings",
7746
+ "recordingsLow",
7747
+ "eventMedia"
7748
+ ]);
7749
+ /** A destination is always an existing, fully-qualified location id. The
7750
+ * migration API intentionally never changes a source location's `basePath`:
7751
+ * callers create a new `<type>:<slug>` location, then select it here. */
7752
+ var StorageMigrationDestinationsSchema = object({
7753
+ recordings: string().min(1).optional(),
7754
+ recordingsLow: string().min(1).optional(),
7755
+ eventMedia: string().min(1).optional()
7756
+ }).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
7757
+ /** Shared input for planning and starting an orchestrated storage migration. */
7758
+ var StorageMigrationInputSchema = object({
7759
+ destinations: StorageMigrationDestinationsSchema,
7760
+ throttleMbps: number().min(1).max(1e3).optional()
7761
+ });
7762
+ /** The durable coordinator state machine. The only phase that changes default
7763
+ * locations is `repointing`, after every selected mover has completed and been
7764
+ * verified. */
7765
+ var StorageMigrationPhaseSchema = _enum([
7766
+ "planning",
7767
+ "pausing",
7768
+ "moving",
7769
+ "verifying",
7770
+ "repointing",
7771
+ "refreshing",
7772
+ "resuming",
7773
+ "done",
7774
+ "failed",
7775
+ "cancelled"
7776
+ ]);
7777
+ var StorageMigrationParticipantSchema = _enum([
7778
+ "pipeline",
7779
+ "recorder",
7780
+ "analytics"
7781
+ ]);
7782
+ var StorageMigrationMoveSchema = object({
7783
+ storageClass: StorageMigrationClassSchema,
7784
+ fromLocationId: string(),
7785
+ toLocationId: string(),
7786
+ moverJobId: string().nullable(),
7787
+ state: RelocateJobStateSchema.nullable(),
7788
+ error: string().nullable()
7789
+ });
7790
+ var StorageMigrationJobSchema = object({
7791
+ jobId: string(),
7792
+ phase: StorageMigrationPhaseSchema,
7793
+ destinations: StorageMigrationDestinationsSchema,
7794
+ throttleMbps: number(),
7795
+ moves: array(StorageMigrationMoveSchema),
7796
+ pauseLeaseId: string().nullable(),
7797
+ pausedParticipants: array(StorageMigrationParticipantSchema),
7798
+ repointed: boolean(),
7799
+ cancelRequested: boolean(),
7800
+ startedAt: number(),
7801
+ updatedAt: number(),
7802
+ finishedAt: number().nullable(),
7803
+ error: string().nullable()
7804
+ });
7805
+ var StorageMigrationPlanSchema = object({
7806
+ destinations: StorageMigrationDestinationsSchema,
7807
+ moves: array(object({
7808
+ storageClass: StorageMigrationClassSchema,
7809
+ fromLocationId: string(),
7810
+ toLocationId: string()
7811
+ }))
7732
7812
  });
7733
7813
  /**
7734
7814
  * `StorageLocationType` — an addon-declared id that identifies the *kind* of
@@ -16159,13 +16239,19 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
16159
16239
  }), method(object({ deviceId: number() }), EventPruneCountsSchema, {
16160
16240
  kind: "mutation",
16161
16241
  auth: "admin"
16162
- }), method(RelocateMediaInputSchema, object({ jobId: string() }), {
16242
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
16163
16243
  kind: "mutation",
16164
16244
  auth: "admin"
16165
- }), method(object({}), array(RelocateJobSchema).readonly(), {
16166
- kind: "query",
16245
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
16246
+ kind: "mutation",
16247
+ auth: "admin"
16248
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
16249
+ kind: "mutation",
16250
+ auth: "admin"
16251
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
16252
+ kind: "mutation",
16167
16253
  auth: "admin"
16168
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16254
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16169
16255
  kind: "mutation",
16170
16256
  auth: "admin"
16171
16257
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
@@ -17662,7 +17748,13 @@ var NodeInferenceDevicesSchema = object({
17662
17748
  reachable: boolean(),
17663
17749
  devices: array(NodeInferenceDeviceSchema).readonly()
17664
17750
  });
17665
- method(object({
17751
+ method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
17752
+ kind: "mutation",
17753
+ auth: "admin"
17754
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
17755
+ kind: "mutation",
17756
+ auth: "admin"
17757
+ }), method(object({
17666
17758
  deviceId: number(),
17667
17759
  agentNodeId: string()
17668
17760
  }), object({ success: literal(true) }), {
@@ -18336,6 +18428,13 @@ method(object({ locationId: string() }), EvictableUsageSchema), method(object({
18336
18428
  locationId: string(),
18337
18429
  targetBytes: number().int().positive()
18338
18430
  }), EvictResultSchema, { kind: "mutation" });
18431
+ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
18432
+ kind: "mutation",
18433
+ auth: "admin"
18434
+ }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
18435
+ kind: "mutation",
18436
+ auth: "admin"
18437
+ });
18339
18438
  var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
18340
18439
  providerId: string().min(1),
18341
18440
  displayName: string().min(1),
@@ -18439,6 +18538,28 @@ var TerminalProfileInfoSchema = object({
18439
18538
  label: string(),
18440
18539
  description: string().optional()
18441
18540
  });
18541
+ /**
18542
+ * A durable operator-created Terminal instance. Profiles are templates; only
18543
+ * an instance declares a camera.
18544
+ */
18545
+ var TerminalInstanceInfoSchema = object({
18546
+ instanceId: string(),
18547
+ cameraStableId: string(),
18548
+ nodeId: string(),
18549
+ profileId: string(),
18550
+ profileLabel: string(),
18551
+ name: string(),
18552
+ enabled: boolean()
18553
+ });
18554
+ var TerminalLegacyCameraSchema = object({
18555
+ stableId: string(),
18556
+ nodeId: string(),
18557
+ profileId: string(),
18558
+ profileLabel: string(),
18559
+ name: string(),
18560
+ /** Only legacy monitor cameras can retain their historic stable identity. */
18561
+ adoptable: boolean()
18562
+ });
18442
18563
  var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
18443
18564
  seq: number().int().positive(),
18444
18565
  kind: literal("data"),
@@ -18455,7 +18576,29 @@ var TerminalOutputBatchSchema = object({
18455
18576
  snapshot: string().optional(),
18456
18577
  events: array(TerminalOutputEventSchema).readonly()
18457
18578
  });
18458
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18579
+ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
18580
+ targetNodeId: string().min(1),
18581
+ profileId: string().min(1),
18582
+ name: string().trim().min(1).max(160).optional()
18583
+ }), TerminalInstanceInfoSchema, {
18584
+ kind: "mutation",
18585
+ auth: "admin"
18586
+ }), method(object({ instanceId: string().min(1) }), _void(), {
18587
+ kind: "mutation",
18588
+ auth: "admin"
18589
+ }), method(object({
18590
+ instanceId: string().min(1),
18591
+ enabled: boolean()
18592
+ }), TerminalInstanceInfoSchema, {
18593
+ kind: "mutation",
18594
+ auth: "admin"
18595
+ }), method(_void(), array(TerminalLegacyCameraSchema).readonly(), { auth: "admin" }), method(object({
18596
+ stableId: string().min(1),
18597
+ name: string().trim().min(1).max(160).optional()
18598
+ }), TerminalInstanceInfoSchema, {
18599
+ kind: "mutation",
18600
+ auth: "admin"
18601
+ }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18459
18602
  profileId: string(),
18460
18603
  cols: number().int().positive(),
18461
18604
  rows: number().int().positive()
@@ -18472,7 +18615,13 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
18472
18615
  }), method(object({
18473
18616
  sessionId: string(),
18474
18617
  afterSeq: number().int().nonnegative(),
18475
- waitMs: number().int().min(0).max(2e3).default(0)
18618
+ waitMs: number().int().min(0).max(2e3).default(0),
18619
+ /**
18620
+ * Wait when a just-opened session has no output yet. Kept opt-in so a
18621
+ * browser's initial repaint remains immediate; the camera snapshot
18622
+ * relay uses it to avoid encoding a blank startup frame.
18623
+ */
18624
+ waitForOutput: boolean().optional()
18476
18625
  }), TerminalOutputBatchSchema, {
18477
18626
  kind: "mutation",
18478
18627
  auth: "admin",
@@ -20413,6 +20562,7 @@ var FaceInfoSchema = object({
20413
20562
  var FaceFilterEnum = _enum([
20414
20563
  "unassigned",
20415
20564
  "recognized",
20565
+ "identified",
20416
20566
  "all"
20417
20567
  ]);
20418
20568
  var MediaFileLiteSchema$1 = object({
@@ -20441,6 +20591,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
20441
20591
  kind: "mutation",
20442
20592
  auth: "admin"
20443
20593
  }), method(object({
20594
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
20595
+ deviceId: number().int().optional(),
20444
20596
  limit: number().int().positive().optional(),
20445
20597
  filter: FaceFilterEnum.optional(),
20446
20598
  /**
@@ -22206,6 +22358,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
22206
22358
  capName: string().min(1).max(64),
22207
22359
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
22208
22360
  valuePath: string().min(1).max(64)
22361
+ }),
22362
+ object({
22363
+ kind: literal("latest-recognition"),
22364
+ recognition: _enum(["person", "plate"])
22209
22365
  })
22210
22366
  ]);
22211
22367
  var OsdSlotBindingSchema = object({
@@ -22311,6 +22467,15 @@ method(object({ deviceId: number().int() }), object({
22311
22467
  }), object({ success: literal(true) }), {
22312
22468
  kind: "mutation",
22313
22469
  auth: "admin"
22470
+ }), method(object({
22471
+ sourceDeviceId: number().int(),
22472
+ targetDeviceId: number().int()
22473
+ }), object({
22474
+ copied: number().int().nonnegative(),
22475
+ skipped: number().int().nonnegative()
22476
+ }), {
22477
+ kind: "mutation",
22478
+ auth: "admin"
22314
22479
  }), method(object({
22315
22480
  deviceId: number().int(),
22316
22481
  slotId: string().min(1),
@@ -23196,13 +23361,19 @@ method(object({
23196
23361
  }), {
23197
23362
  kind: "mutation",
23198
23363
  auth: "admin"
23199
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
23364
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
23200
23365
  kind: "mutation",
23201
23366
  auth: "admin"
23202
- }), method(object({}), array(RelocateJobSchema).readonly(), {
23203
- kind: "query",
23367
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
23368
+ kind: "mutation",
23204
23369
  auth: "admin"
23205
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23370
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
23371
+ kind: "mutation",
23372
+ auth: "admin"
23373
+ }), method(StorageMigrationFootageMoveInputSchema, object({ jobId: string() }), {
23374
+ kind: "mutation",
23375
+ auth: "admin"
23376
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23206
23377
  kind: "mutation",
23207
23378
  auth: "admin"
23208
23379
  });
@@ -27324,6 +27495,12 @@ Object.freeze({
27324
27495
  addonId: null,
27325
27496
  access: "delete"
27326
27497
  },
27498
+ "osdManager.copyDeviceConfiguration": {
27499
+ capName: "osd-manager",
27500
+ capScope: "system",
27501
+ addonId: null,
27502
+ access: "create"
27503
+ },
27327
27504
  "osdManager.getConditionSupport": {
27328
27505
  capName: "osd-manager",
27329
27506
  capScope: "system",
@@ -27420,7 +27597,7 @@ Object.freeze({
27420
27597
  addonId: null,
27421
27598
  access: "create"
27422
27599
  },
27423
- "pipelineAnalytics.cancelMediaRelocate": {
27600
+ "pipelineAnalytics.cancelStorageMigrationMove": {
27424
27601
  capName: "pipeline-analytics",
27425
27602
  capScope: "device",
27426
27603
  addonId: null,
@@ -27492,12 +27669,6 @@ Object.freeze({
27492
27669
  addonId: null,
27493
27670
  access: "view"
27494
27671
  },
27495
- "pipelineAnalytics.getMediaRelocateStatus": {
27496
- capName: "pipeline-analytics",
27497
- capScope: "device",
27498
- addonId: null,
27499
- access: "view"
27500
- },
27501
27672
  "pipelineAnalytics.getMotionEvents": {
27502
27673
  capName: "pipeline-analytics",
27503
27674
  capScope: "device",
@@ -27534,6 +27705,12 @@ Object.freeze({
27534
27705
  addonId: null,
27535
27706
  access: "view"
27536
27707
  },
27708
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
27709
+ capName: "pipeline-analytics",
27710
+ capScope: "device",
27711
+ addonId: null,
27712
+ access: "view"
27713
+ },
27537
27714
  "pipelineAnalytics.getTrack": {
27538
27715
  capName: "pipeline-analytics",
27539
27716
  capScope: "device",
@@ -27612,6 +27789,12 @@ Object.freeze({
27612
27789
  addonId: null,
27613
27790
  access: "view"
27614
27791
  },
27792
+ "pipelineAnalytics.pauseForStorageMigration": {
27793
+ capName: "pipeline-analytics",
27794
+ capScope: "device",
27795
+ addonId: null,
27796
+ access: "create"
27797
+ },
27615
27798
  "pipelineAnalytics.proposeRetrainAnnotations": {
27616
27799
  capName: "pipeline-analytics",
27617
27800
  capScope: "device",
@@ -27642,7 +27825,7 @@ Object.freeze({
27642
27825
  addonId: null,
27643
27826
  access: "create"
27644
27827
  },
27645
- "pipelineAnalytics.relocateMedia": {
27828
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
27646
27829
  capName: "pipeline-analytics",
27647
27830
  capScope: "device",
27648
27831
  addonId: null,
@@ -27654,6 +27837,12 @@ Object.freeze({
27654
27837
  addonId: null,
27655
27838
  access: "create"
27656
27839
  },
27840
+ "pipelineAnalytics.resumeForStorageMigration": {
27841
+ capName: "pipeline-analytics",
27842
+ capScope: "device",
27843
+ addonId: null,
27844
+ access: "create"
27845
+ },
27657
27846
  "pipelineAnalytics.saveRetrainAnnotations": {
27658
27847
  capName: "pipeline-analytics",
27659
27848
  capScope: "device",
@@ -27678,6 +27867,12 @@ Object.freeze({
27678
27867
  addonId: null,
27679
27868
  access: "create"
27680
27869
  },
27870
+ "pipelineAnalytics.startStorageMigrationMove": {
27871
+ capName: "pipeline-analytics",
27872
+ capScope: "device",
27873
+ addonId: null,
27874
+ access: "create"
27875
+ },
27681
27876
  "pipelineAnalytics.wipeAllAnalytics": {
27682
27877
  capName: "pipeline-analytics",
27683
27878
  capScope: "device",
@@ -28044,6 +28239,12 @@ Object.freeze({
28044
28239
  addonId: null,
28045
28240
  access: "view"
28046
28241
  },
28242
+ "pipelineOrchestrator.pauseForStorageMigration": {
28243
+ capName: "pipeline-orchestrator",
28244
+ capScope: "system",
28245
+ addonId: null,
28246
+ access: "create"
28247
+ },
28047
28248
  "pipelineOrchestrator.rebalance": {
28048
28249
  capName: "pipeline-orchestrator",
28049
28250
  capScope: "system",
@@ -28068,6 +28269,12 @@ Object.freeze({
28068
28269
  addonId: null,
28069
28270
  access: "view"
28070
28271
  },
28272
+ "pipelineOrchestrator.resumeForStorageMigration": {
28273
+ capName: "pipeline-orchestrator",
28274
+ capScope: "system",
28275
+ addonId: null,
28276
+ access: "create"
28277
+ },
28071
28278
  "pipelineOrchestrator.saveTemplate": {
28072
28279
  capName: "pipeline-orchestrator",
28073
28280
  capScope: "system",
@@ -28464,7 +28671,7 @@ Object.freeze({
28464
28671
  addonId: null,
28465
28672
  access: "create"
28466
28673
  },
28467
- "recording.cancelRelocate": {
28674
+ "recording.cancelStorageMigrationMove": {
28468
28675
  capName: "recording",
28469
28676
  capScope: "system",
28470
28677
  addonId: null,
@@ -28500,7 +28707,7 @@ Object.freeze({
28500
28707
  addonId: null,
28501
28708
  access: "view"
28502
28709
  },
28503
- "recording.getRelocateStatus": {
28710
+ "recording.getStorageMigrationMoveStatus": {
28504
28711
  capName: "recording",
28505
28712
  capScope: "system",
28506
28713
  addonId: null,
@@ -28524,6 +28731,12 @@ Object.freeze({
28524
28731
  addonId: null,
28525
28732
  access: "view"
28526
28733
  },
28734
+ "recording.pauseForStorageMigration": {
28735
+ capName: "recording",
28736
+ capScope: "system",
28737
+ addonId: null,
28738
+ access: "create"
28739
+ },
28527
28740
  "recording.pruneFootage": {
28528
28741
  capName: "recording",
28529
28742
  capScope: "system",
@@ -28542,7 +28755,7 @@ Object.freeze({
28542
28755
  addonId: null,
28543
28756
  access: "view"
28544
28757
  },
28545
- "recording.relocateFootage": {
28758
+ "recording.refreshStorageLocationsForMigration": {
28546
28759
  capName: "recording",
28547
28760
  capScope: "system",
28548
28761
  addonId: null,
@@ -28566,12 +28779,24 @@ Object.freeze({
28566
28779
  addonId: null,
28567
28780
  access: "create"
28568
28781
  },
28782
+ "recording.resumeForStorageMigration": {
28783
+ capName: "recording",
28784
+ capScope: "system",
28785
+ addonId: null,
28786
+ access: "create"
28787
+ },
28569
28788
  "recording.setDeviceConfig": {
28570
28789
  capName: "recording",
28571
28790
  capScope: "system",
28572
28791
  addonId: null,
28573
28792
  access: "create"
28574
28793
  },
28794
+ "recording.startStorageMigrationMove": {
28795
+ capName: "recording",
28796
+ capScope: "system",
28797
+ addonId: null,
28798
+ access: "create"
28799
+ },
28575
28800
  "recordingExport.cancelExport": {
28576
28801
  capName: "recordingExport",
28577
28802
  capScope: "system",
@@ -28962,6 +29187,30 @@ Object.freeze({
28962
29187
  addonId: null,
28963
29188
  access: "view"
28964
29189
  },
29190
+ "storageMigration.cancel": {
29191
+ capName: "storage-migration",
29192
+ capScope: "system",
29193
+ addonId: null,
29194
+ access: "create"
29195
+ },
29196
+ "storageMigration.plan": {
29197
+ capName: "storage-migration",
29198
+ capScope: "system",
29199
+ addonId: null,
29200
+ access: "view"
29201
+ },
29202
+ "storageMigration.start": {
29203
+ capName: "storage-migration",
29204
+ capScope: "system",
29205
+ addonId: null,
29206
+ access: "create"
29207
+ },
29208
+ "storageMigration.status": {
29209
+ capName: "storage-migration",
29210
+ capScope: "system",
29211
+ addonId: null,
29212
+ access: "view"
29213
+ },
28965
29214
  "storageProvider.abortUpload": {
28966
29215
  capName: "storage-provider",
28967
29216
  capScope: "system",
@@ -29340,12 +29589,42 @@ Object.freeze({
29340
29589
  addonId: null,
29341
29590
  access: "create"
29342
29591
  },
29592
+ "terminalSession.adoptLegacyMonitor": {
29593
+ capName: "terminal-session",
29594
+ capScope: "system",
29595
+ addonId: null,
29596
+ access: "create"
29597
+ },
29343
29598
  "terminalSession.close": {
29344
29599
  capName: "terminal-session",
29345
29600
  capScope: "system",
29346
29601
  addonId: null,
29347
29602
  access: "create"
29348
29603
  },
29604
+ "terminalSession.createInstance": {
29605
+ capName: "terminal-session",
29606
+ capScope: "system",
29607
+ addonId: null,
29608
+ access: "create"
29609
+ },
29610
+ "terminalSession.deleteInstance": {
29611
+ capName: "terminal-session",
29612
+ capScope: "system",
29613
+ addonId: null,
29614
+ access: "delete"
29615
+ },
29616
+ "terminalSession.listInstances": {
29617
+ capName: "terminal-session",
29618
+ capScope: "system",
29619
+ addonId: null,
29620
+ access: "view"
29621
+ },
29622
+ "terminalSession.listLegacyCameras": {
29623
+ capName: "terminal-session",
29624
+ capScope: "system",
29625
+ addonId: null,
29626
+ access: "view"
29627
+ },
29349
29628
  "terminalSession.listProfiles": {
29350
29629
  capName: "terminal-session",
29351
29630
  capScope: "system",
@@ -29376,6 +29655,12 @@ Object.freeze({
29376
29655
  addonId: null,
29377
29656
  access: "create"
29378
29657
  },
29658
+ "terminalSession.setInstanceEnabled": {
29659
+ capName: "terminal-session",
29660
+ capScope: "system",
29661
+ addonId: null,
29662
+ access: "create"
29663
+ },
29379
29664
  "terminalSession.writeInput": {
29380
29665
  capName: "terminal-session",
29381
29666
  capScope: "system",
@@ -31011,7 +31296,7 @@ async function sendHttpPlan(plan, timeoutMs = DEFAULT_OUTPUT_TIMEOUT_MS) {
31011
31296
  return fetchWithTimeout(plan.url, init, timeoutMs);
31012
31297
  }
31013
31298
  function buildRequestInit(plan) {
31014
- const headers = { ...plan.headers ?? {} };
31299
+ const headers = { ...plan.headers };
31015
31300
  const init = {
31016
31301
  method: plan.method ?? "POST",
31017
31302
  headers
package/dist/addon.mjs CHANGED
@@ -7657,12 +7657,11 @@ var RecordingConfigSchema = object({
7657
7657
  /**
7658
7658
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
7659
7659
  *
7660
- * One shape shared by the recorder's `relocateFootage` (segments) and
7661
- * pipeline-analytics' `relocateMedia` (event media blobs) so the admin Data
7662
- * page renders both movers with one component. Jobs are in-RAM (a restart
7663
- * forgets them re-running is safe by construction: copy-if-absent, delete
7664
- * after verify) and each completed/failed run also lands one durable ops-log
7665
- * row on the owning addon's surface.
7660
+ * One shape shared by the recorder and pipeline-analytics internal movers.
7661
+ * The public admin surface is `storage-migration`; child jobs remain in RAM
7662
+ * because copy-if-absent, verify, delete and index/row repoint are resumable.
7663
+ * Each completed/failed run also lands one durable ops-log row on its owning
7664
+ * addon surface.
7666
7665
  */
7667
7666
  var RelocateJobStateSchema = _enum([
7668
7667
  "running",
@@ -7689,19 +7688,100 @@ var RelocateJobSchema = object({
7689
7688
  finishedAt: number().nullable(),
7690
7689
  error: string().nullable()
7691
7690
  });
7691
+ /** Profile-derived footage selection used only by the migration coordinator:
7692
+ * `recordings` owns high+mid; `recordingsLow` owns low. */
7693
+ var RelocateFootageClassSchema = _enum(["recordings", "recordingsLow"]);
7692
7694
  var RelocateFootageInputSchema = object({
7693
- deviceId: number().optional(),
7694
7695
  fromLocationId: string(),
7695
7696
  toLocationId: string(),
7696
7697
  entities: array(_enum(["segments"])).optional(),
7698
+ /** Limits relocation to the logical profile class. Omit only for the
7699
+ * pre-orchestration compatibility path. */
7700
+ footageClass: RelocateFootageClassSchema.optional(),
7697
7701
  /** Copy throttle in MB/s (default 40) — the drain is a background chore,
7698
7702
  * never allowed to starve live writers. */
7699
7703
  throttleMbps: number().min(1).max(1e3).optional()
7700
7704
  });
7701
- var RelocateMediaInputSchema = object({
7702
- deviceId: number().optional(),
7705
+ /** Internal, lease-scoped participant operation. It is intentionally separate
7706
+ * from persistent recording settings: a migration never changes
7707
+ * `RecordingConfig.enabled` or camera wrapper bindings. */
7708
+ var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
7709
+ var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
7710
+ var StorageMigrationMediaMoveInputSchema = object({
7703
7711
  toLocationId: string(),
7704
7712
  throttleMbps: number().min(1).max(1e3).optional()
7713
+ }).extend({ leaseId: string().min(1) });
7714
+ /** The independently selectable logical storage classes. `recordings`
7715
+ * encompasses the high and mid segment profiles; `recordingsLow` is low
7716
+ * segments; `eventMedia` is post-analysis blobs. */
7717
+ var StorageMigrationClassSchema = _enum([
7718
+ "recordings",
7719
+ "recordingsLow",
7720
+ "eventMedia"
7721
+ ]);
7722
+ /** A destination is always an existing, fully-qualified location id. The
7723
+ * migration API intentionally never changes a source location's `basePath`:
7724
+ * callers create a new `<type>:<slug>` location, then select it here. */
7725
+ var StorageMigrationDestinationsSchema = object({
7726
+ recordings: string().min(1).optional(),
7727
+ recordingsLow: string().min(1).optional(),
7728
+ eventMedia: string().min(1).optional()
7729
+ }).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
7730
+ /** Shared input for planning and starting an orchestrated storage migration. */
7731
+ var StorageMigrationInputSchema = object({
7732
+ destinations: StorageMigrationDestinationsSchema,
7733
+ throttleMbps: number().min(1).max(1e3).optional()
7734
+ });
7735
+ /** The durable coordinator state machine. The only phase that changes default
7736
+ * locations is `repointing`, after every selected mover has completed and been
7737
+ * verified. */
7738
+ var StorageMigrationPhaseSchema = _enum([
7739
+ "planning",
7740
+ "pausing",
7741
+ "moving",
7742
+ "verifying",
7743
+ "repointing",
7744
+ "refreshing",
7745
+ "resuming",
7746
+ "done",
7747
+ "failed",
7748
+ "cancelled"
7749
+ ]);
7750
+ var StorageMigrationParticipantSchema = _enum([
7751
+ "pipeline",
7752
+ "recorder",
7753
+ "analytics"
7754
+ ]);
7755
+ var StorageMigrationMoveSchema = object({
7756
+ storageClass: StorageMigrationClassSchema,
7757
+ fromLocationId: string(),
7758
+ toLocationId: string(),
7759
+ moverJobId: string().nullable(),
7760
+ state: RelocateJobStateSchema.nullable(),
7761
+ error: string().nullable()
7762
+ });
7763
+ var StorageMigrationJobSchema = object({
7764
+ jobId: string(),
7765
+ phase: StorageMigrationPhaseSchema,
7766
+ destinations: StorageMigrationDestinationsSchema,
7767
+ throttleMbps: number(),
7768
+ moves: array(StorageMigrationMoveSchema),
7769
+ pauseLeaseId: string().nullable(),
7770
+ pausedParticipants: array(StorageMigrationParticipantSchema),
7771
+ repointed: boolean(),
7772
+ cancelRequested: boolean(),
7773
+ startedAt: number(),
7774
+ updatedAt: number(),
7775
+ finishedAt: number().nullable(),
7776
+ error: string().nullable()
7777
+ });
7778
+ var StorageMigrationPlanSchema = object({
7779
+ destinations: StorageMigrationDestinationsSchema,
7780
+ moves: array(object({
7781
+ storageClass: StorageMigrationClassSchema,
7782
+ fromLocationId: string(),
7783
+ toLocationId: string()
7784
+ }))
7705
7785
  });
7706
7786
  /**
7707
7787
  * `StorageLocationType` — an addon-declared id that identifies the *kind* of
@@ -16132,13 +16212,19 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
16132
16212
  }), method(object({ deviceId: number() }), EventPruneCountsSchema, {
16133
16213
  kind: "mutation",
16134
16214
  auth: "admin"
16135
- }), method(RelocateMediaInputSchema, object({ jobId: string() }), {
16215
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
16136
16216
  kind: "mutation",
16137
16217
  auth: "admin"
16138
- }), method(object({}), array(RelocateJobSchema).readonly(), {
16139
- kind: "query",
16218
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
16219
+ kind: "mutation",
16220
+ auth: "admin"
16221
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
16222
+ kind: "mutation",
16223
+ auth: "admin"
16224
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
16225
+ kind: "mutation",
16140
16226
  auth: "admin"
16141
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16227
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16142
16228
  kind: "mutation",
16143
16229
  auth: "admin"
16144
16230
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
@@ -17635,7 +17721,13 @@ var NodeInferenceDevicesSchema = object({
17635
17721
  reachable: boolean(),
17636
17722
  devices: array(NodeInferenceDeviceSchema).readonly()
17637
17723
  });
17638
- method(object({
17724
+ method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
17725
+ kind: "mutation",
17726
+ auth: "admin"
17727
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
17728
+ kind: "mutation",
17729
+ auth: "admin"
17730
+ }), method(object({
17639
17731
  deviceId: number(),
17640
17732
  agentNodeId: string()
17641
17733
  }), object({ success: literal(true) }), {
@@ -18309,6 +18401,13 @@ method(object({ locationId: string() }), EvictableUsageSchema), method(object({
18309
18401
  locationId: string(),
18310
18402
  targetBytes: number().int().positive()
18311
18403
  }), EvictResultSchema, { kind: "mutation" });
18404
+ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
18405
+ kind: "mutation",
18406
+ auth: "admin"
18407
+ }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
18408
+ kind: "mutation",
18409
+ auth: "admin"
18410
+ });
18312
18411
  var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
18313
18412
  providerId: string().min(1),
18314
18413
  displayName: string().min(1),
@@ -18412,6 +18511,28 @@ var TerminalProfileInfoSchema = object({
18412
18511
  label: string(),
18413
18512
  description: string().optional()
18414
18513
  });
18514
+ /**
18515
+ * A durable operator-created Terminal instance. Profiles are templates; only
18516
+ * an instance declares a camera.
18517
+ */
18518
+ var TerminalInstanceInfoSchema = object({
18519
+ instanceId: string(),
18520
+ cameraStableId: string(),
18521
+ nodeId: string(),
18522
+ profileId: string(),
18523
+ profileLabel: string(),
18524
+ name: string(),
18525
+ enabled: boolean()
18526
+ });
18527
+ var TerminalLegacyCameraSchema = object({
18528
+ stableId: string(),
18529
+ nodeId: string(),
18530
+ profileId: string(),
18531
+ profileLabel: string(),
18532
+ name: string(),
18533
+ /** Only legacy monitor cameras can retain their historic stable identity. */
18534
+ adoptable: boolean()
18535
+ });
18415
18536
  var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
18416
18537
  seq: number().int().positive(),
18417
18538
  kind: literal("data"),
@@ -18428,7 +18549,29 @@ var TerminalOutputBatchSchema = object({
18428
18549
  snapshot: string().optional(),
18429
18550
  events: array(TerminalOutputEventSchema).readonly()
18430
18551
  });
18431
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18552
+ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
18553
+ targetNodeId: string().min(1),
18554
+ profileId: string().min(1),
18555
+ name: string().trim().min(1).max(160).optional()
18556
+ }), TerminalInstanceInfoSchema, {
18557
+ kind: "mutation",
18558
+ auth: "admin"
18559
+ }), method(object({ instanceId: string().min(1) }), _void(), {
18560
+ kind: "mutation",
18561
+ auth: "admin"
18562
+ }), method(object({
18563
+ instanceId: string().min(1),
18564
+ enabled: boolean()
18565
+ }), TerminalInstanceInfoSchema, {
18566
+ kind: "mutation",
18567
+ auth: "admin"
18568
+ }), method(_void(), array(TerminalLegacyCameraSchema).readonly(), { auth: "admin" }), method(object({
18569
+ stableId: string().min(1),
18570
+ name: string().trim().min(1).max(160).optional()
18571
+ }), TerminalInstanceInfoSchema, {
18572
+ kind: "mutation",
18573
+ auth: "admin"
18574
+ }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18432
18575
  profileId: string(),
18433
18576
  cols: number().int().positive(),
18434
18577
  rows: number().int().positive()
@@ -18445,7 +18588,13 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
18445
18588
  }), method(object({
18446
18589
  sessionId: string(),
18447
18590
  afterSeq: number().int().nonnegative(),
18448
- waitMs: number().int().min(0).max(2e3).default(0)
18591
+ waitMs: number().int().min(0).max(2e3).default(0),
18592
+ /**
18593
+ * Wait when a just-opened session has no output yet. Kept opt-in so a
18594
+ * browser's initial repaint remains immediate; the camera snapshot
18595
+ * relay uses it to avoid encoding a blank startup frame.
18596
+ */
18597
+ waitForOutput: boolean().optional()
18449
18598
  }), TerminalOutputBatchSchema, {
18450
18599
  kind: "mutation",
18451
18600
  auth: "admin",
@@ -20386,6 +20535,7 @@ var FaceInfoSchema = object({
20386
20535
  var FaceFilterEnum = _enum([
20387
20536
  "unassigned",
20388
20537
  "recognized",
20538
+ "identified",
20389
20539
  "all"
20390
20540
  ]);
20391
20541
  var MediaFileLiteSchema$1 = object({
@@ -20414,6 +20564,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
20414
20564
  kind: "mutation",
20415
20565
  auth: "admin"
20416
20566
  }), method(object({
20567
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
20568
+ deviceId: number().int().optional(),
20417
20569
  limit: number().int().positive().optional(),
20418
20570
  filter: FaceFilterEnum.optional(),
20419
20571
  /**
@@ -22179,6 +22331,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
22179
22331
  capName: string().min(1).max(64),
22180
22332
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
22181
22333
  valuePath: string().min(1).max(64)
22334
+ }),
22335
+ object({
22336
+ kind: literal("latest-recognition"),
22337
+ recognition: _enum(["person", "plate"])
22182
22338
  })
22183
22339
  ]);
22184
22340
  var OsdSlotBindingSchema = object({
@@ -22284,6 +22440,15 @@ method(object({ deviceId: number().int() }), object({
22284
22440
  }), object({ success: literal(true) }), {
22285
22441
  kind: "mutation",
22286
22442
  auth: "admin"
22443
+ }), method(object({
22444
+ sourceDeviceId: number().int(),
22445
+ targetDeviceId: number().int()
22446
+ }), object({
22447
+ copied: number().int().nonnegative(),
22448
+ skipped: number().int().nonnegative()
22449
+ }), {
22450
+ kind: "mutation",
22451
+ auth: "admin"
22287
22452
  }), method(object({
22288
22453
  deviceId: number().int(),
22289
22454
  slotId: string().min(1),
@@ -23169,13 +23334,19 @@ method(object({
23169
23334
  }), {
23170
23335
  kind: "mutation",
23171
23336
  auth: "admin"
23172
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
23337
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
23173
23338
  kind: "mutation",
23174
23339
  auth: "admin"
23175
- }), method(object({}), array(RelocateJobSchema).readonly(), {
23176
- kind: "query",
23340
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
23341
+ kind: "mutation",
23177
23342
  auth: "admin"
23178
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23343
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
23344
+ kind: "mutation",
23345
+ auth: "admin"
23346
+ }), method(StorageMigrationFootageMoveInputSchema, object({ jobId: string() }), {
23347
+ kind: "mutation",
23348
+ auth: "admin"
23349
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23179
23350
  kind: "mutation",
23180
23351
  auth: "admin"
23181
23352
  });
@@ -27297,6 +27468,12 @@ Object.freeze({
27297
27468
  addonId: null,
27298
27469
  access: "delete"
27299
27470
  },
27471
+ "osdManager.copyDeviceConfiguration": {
27472
+ capName: "osd-manager",
27473
+ capScope: "system",
27474
+ addonId: null,
27475
+ access: "create"
27476
+ },
27300
27477
  "osdManager.getConditionSupport": {
27301
27478
  capName: "osd-manager",
27302
27479
  capScope: "system",
@@ -27393,7 +27570,7 @@ Object.freeze({
27393
27570
  addonId: null,
27394
27571
  access: "create"
27395
27572
  },
27396
- "pipelineAnalytics.cancelMediaRelocate": {
27573
+ "pipelineAnalytics.cancelStorageMigrationMove": {
27397
27574
  capName: "pipeline-analytics",
27398
27575
  capScope: "device",
27399
27576
  addonId: null,
@@ -27465,12 +27642,6 @@ Object.freeze({
27465
27642
  addonId: null,
27466
27643
  access: "view"
27467
27644
  },
27468
- "pipelineAnalytics.getMediaRelocateStatus": {
27469
- capName: "pipeline-analytics",
27470
- capScope: "device",
27471
- addonId: null,
27472
- access: "view"
27473
- },
27474
27645
  "pipelineAnalytics.getMotionEvents": {
27475
27646
  capName: "pipeline-analytics",
27476
27647
  capScope: "device",
@@ -27507,6 +27678,12 @@ Object.freeze({
27507
27678
  addonId: null,
27508
27679
  access: "view"
27509
27680
  },
27681
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
27682
+ capName: "pipeline-analytics",
27683
+ capScope: "device",
27684
+ addonId: null,
27685
+ access: "view"
27686
+ },
27510
27687
  "pipelineAnalytics.getTrack": {
27511
27688
  capName: "pipeline-analytics",
27512
27689
  capScope: "device",
@@ -27585,6 +27762,12 @@ Object.freeze({
27585
27762
  addonId: null,
27586
27763
  access: "view"
27587
27764
  },
27765
+ "pipelineAnalytics.pauseForStorageMigration": {
27766
+ capName: "pipeline-analytics",
27767
+ capScope: "device",
27768
+ addonId: null,
27769
+ access: "create"
27770
+ },
27588
27771
  "pipelineAnalytics.proposeRetrainAnnotations": {
27589
27772
  capName: "pipeline-analytics",
27590
27773
  capScope: "device",
@@ -27615,7 +27798,7 @@ Object.freeze({
27615
27798
  addonId: null,
27616
27799
  access: "create"
27617
27800
  },
27618
- "pipelineAnalytics.relocateMedia": {
27801
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
27619
27802
  capName: "pipeline-analytics",
27620
27803
  capScope: "device",
27621
27804
  addonId: null,
@@ -27627,6 +27810,12 @@ Object.freeze({
27627
27810
  addonId: null,
27628
27811
  access: "create"
27629
27812
  },
27813
+ "pipelineAnalytics.resumeForStorageMigration": {
27814
+ capName: "pipeline-analytics",
27815
+ capScope: "device",
27816
+ addonId: null,
27817
+ access: "create"
27818
+ },
27630
27819
  "pipelineAnalytics.saveRetrainAnnotations": {
27631
27820
  capName: "pipeline-analytics",
27632
27821
  capScope: "device",
@@ -27651,6 +27840,12 @@ Object.freeze({
27651
27840
  addonId: null,
27652
27841
  access: "create"
27653
27842
  },
27843
+ "pipelineAnalytics.startStorageMigrationMove": {
27844
+ capName: "pipeline-analytics",
27845
+ capScope: "device",
27846
+ addonId: null,
27847
+ access: "create"
27848
+ },
27654
27849
  "pipelineAnalytics.wipeAllAnalytics": {
27655
27850
  capName: "pipeline-analytics",
27656
27851
  capScope: "device",
@@ -28017,6 +28212,12 @@ Object.freeze({
28017
28212
  addonId: null,
28018
28213
  access: "view"
28019
28214
  },
28215
+ "pipelineOrchestrator.pauseForStorageMigration": {
28216
+ capName: "pipeline-orchestrator",
28217
+ capScope: "system",
28218
+ addonId: null,
28219
+ access: "create"
28220
+ },
28020
28221
  "pipelineOrchestrator.rebalance": {
28021
28222
  capName: "pipeline-orchestrator",
28022
28223
  capScope: "system",
@@ -28041,6 +28242,12 @@ Object.freeze({
28041
28242
  addonId: null,
28042
28243
  access: "view"
28043
28244
  },
28245
+ "pipelineOrchestrator.resumeForStorageMigration": {
28246
+ capName: "pipeline-orchestrator",
28247
+ capScope: "system",
28248
+ addonId: null,
28249
+ access: "create"
28250
+ },
28044
28251
  "pipelineOrchestrator.saveTemplate": {
28045
28252
  capName: "pipeline-orchestrator",
28046
28253
  capScope: "system",
@@ -28437,7 +28644,7 @@ Object.freeze({
28437
28644
  addonId: null,
28438
28645
  access: "create"
28439
28646
  },
28440
- "recording.cancelRelocate": {
28647
+ "recording.cancelStorageMigrationMove": {
28441
28648
  capName: "recording",
28442
28649
  capScope: "system",
28443
28650
  addonId: null,
@@ -28473,7 +28680,7 @@ Object.freeze({
28473
28680
  addonId: null,
28474
28681
  access: "view"
28475
28682
  },
28476
- "recording.getRelocateStatus": {
28683
+ "recording.getStorageMigrationMoveStatus": {
28477
28684
  capName: "recording",
28478
28685
  capScope: "system",
28479
28686
  addonId: null,
@@ -28497,6 +28704,12 @@ Object.freeze({
28497
28704
  addonId: null,
28498
28705
  access: "view"
28499
28706
  },
28707
+ "recording.pauseForStorageMigration": {
28708
+ capName: "recording",
28709
+ capScope: "system",
28710
+ addonId: null,
28711
+ access: "create"
28712
+ },
28500
28713
  "recording.pruneFootage": {
28501
28714
  capName: "recording",
28502
28715
  capScope: "system",
@@ -28515,7 +28728,7 @@ Object.freeze({
28515
28728
  addonId: null,
28516
28729
  access: "view"
28517
28730
  },
28518
- "recording.relocateFootage": {
28731
+ "recording.refreshStorageLocationsForMigration": {
28519
28732
  capName: "recording",
28520
28733
  capScope: "system",
28521
28734
  addonId: null,
@@ -28539,12 +28752,24 @@ Object.freeze({
28539
28752
  addonId: null,
28540
28753
  access: "create"
28541
28754
  },
28755
+ "recording.resumeForStorageMigration": {
28756
+ capName: "recording",
28757
+ capScope: "system",
28758
+ addonId: null,
28759
+ access: "create"
28760
+ },
28542
28761
  "recording.setDeviceConfig": {
28543
28762
  capName: "recording",
28544
28763
  capScope: "system",
28545
28764
  addonId: null,
28546
28765
  access: "create"
28547
28766
  },
28767
+ "recording.startStorageMigrationMove": {
28768
+ capName: "recording",
28769
+ capScope: "system",
28770
+ addonId: null,
28771
+ access: "create"
28772
+ },
28548
28773
  "recordingExport.cancelExport": {
28549
28774
  capName: "recordingExport",
28550
28775
  capScope: "system",
@@ -28935,6 +29160,30 @@ Object.freeze({
28935
29160
  addonId: null,
28936
29161
  access: "view"
28937
29162
  },
29163
+ "storageMigration.cancel": {
29164
+ capName: "storage-migration",
29165
+ capScope: "system",
29166
+ addonId: null,
29167
+ access: "create"
29168
+ },
29169
+ "storageMigration.plan": {
29170
+ capName: "storage-migration",
29171
+ capScope: "system",
29172
+ addonId: null,
29173
+ access: "view"
29174
+ },
29175
+ "storageMigration.start": {
29176
+ capName: "storage-migration",
29177
+ capScope: "system",
29178
+ addonId: null,
29179
+ access: "create"
29180
+ },
29181
+ "storageMigration.status": {
29182
+ capName: "storage-migration",
29183
+ capScope: "system",
29184
+ addonId: null,
29185
+ access: "view"
29186
+ },
28938
29187
  "storageProvider.abortUpload": {
28939
29188
  capName: "storage-provider",
28940
29189
  capScope: "system",
@@ -29313,12 +29562,42 @@ Object.freeze({
29313
29562
  addonId: null,
29314
29563
  access: "create"
29315
29564
  },
29565
+ "terminalSession.adoptLegacyMonitor": {
29566
+ capName: "terminal-session",
29567
+ capScope: "system",
29568
+ addonId: null,
29569
+ access: "create"
29570
+ },
29316
29571
  "terminalSession.close": {
29317
29572
  capName: "terminal-session",
29318
29573
  capScope: "system",
29319
29574
  addonId: null,
29320
29575
  access: "create"
29321
29576
  },
29577
+ "terminalSession.createInstance": {
29578
+ capName: "terminal-session",
29579
+ capScope: "system",
29580
+ addonId: null,
29581
+ access: "create"
29582
+ },
29583
+ "terminalSession.deleteInstance": {
29584
+ capName: "terminal-session",
29585
+ capScope: "system",
29586
+ addonId: null,
29587
+ access: "delete"
29588
+ },
29589
+ "terminalSession.listInstances": {
29590
+ capName: "terminal-session",
29591
+ capScope: "system",
29592
+ addonId: null,
29593
+ access: "view"
29594
+ },
29595
+ "terminalSession.listLegacyCameras": {
29596
+ capName: "terminal-session",
29597
+ capScope: "system",
29598
+ addonId: null,
29599
+ access: "view"
29600
+ },
29322
29601
  "terminalSession.listProfiles": {
29323
29602
  capName: "terminal-session",
29324
29603
  capScope: "system",
@@ -29349,6 +29628,12 @@ Object.freeze({
29349
29628
  addonId: null,
29350
29629
  access: "create"
29351
29630
  },
29631
+ "terminalSession.setInstanceEnabled": {
29632
+ capName: "terminal-session",
29633
+ capScope: "system",
29634
+ addonId: null,
29635
+ access: "create"
29636
+ },
29352
29637
  "terminalSession.writeInput": {
29353
29638
  capName: "terminal-session",
29354
29639
  capScope: "system",
@@ -30984,7 +31269,7 @@ async function sendHttpPlan(plan, timeoutMs = DEFAULT_OUTPUT_TIMEOUT_MS) {
30984
31269
  return fetchWithTimeout(plan.url, init, timeoutMs);
30985
31270
  }
30986
31271
  function buildRequestInit(plan) {
30987
- const headers = { ...plan.headers ?? {} };
31272
+ const headers = { ...plan.headers };
30988
31273
  const init = {
30989
31274
  method: plan.method ?? "POST",
30990
31275
  headers
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-notifiers",
3
- "version": "1.2.15",
3
+ "version": "1.2.17",
4
4
  "description": "System notifiers addon for CamStack — a `notification-output` collection provider hosting per-kind notifier adapters (ntfy, pushover, gotify, telegram, discord, webhook, zentik).",
5
5
  "keywords": [
6
6
  "camstack",