@camstack/addon-smtp-nodemailer 1.2.11 → 1.2.12

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.
@@ -7572,12 +7572,11 @@ var RecordingConfigSchema = object({
7572
7572
  /**
7573
7573
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
7574
7574
  *
7575
- * One shape shared by the recorder's `relocateFootage` (segments) and
7576
- * pipeline-analytics' `relocateMedia` (event media blobs) so the admin Data
7577
- * page renders both movers with one component. Jobs are in-RAM (a restart
7578
- * forgets them re-running is safe by construction: copy-if-absent, delete
7579
- * after verify) and each completed/failed run also lands one durable ops-log
7580
- * row on the owning addon's surface.
7575
+ * One shape shared by the recorder and pipeline-analytics internal movers.
7576
+ * The public admin surface is `storage-migration`; child jobs remain in RAM
7577
+ * because copy-if-absent, verify, delete and index/row repoint are resumable.
7578
+ * Each completed/failed run also lands one durable ops-log row on its owning
7579
+ * addon surface.
7581
7580
  */
7582
7581
  var RelocateJobStateSchema = _enum([
7583
7582
  "running",
@@ -7604,19 +7603,100 @@ var RelocateJobSchema = object({
7604
7603
  finishedAt: number().nullable(),
7605
7604
  error: string().nullable()
7606
7605
  });
7606
+ /** Profile-derived footage selection used only by the migration coordinator:
7607
+ * `recordings` owns high+mid; `recordingsLow` owns low. */
7608
+ var RelocateFootageClassSchema = _enum(["recordings", "recordingsLow"]);
7607
7609
  var RelocateFootageInputSchema = object({
7608
- deviceId: number().optional(),
7609
7610
  fromLocationId: string(),
7610
7611
  toLocationId: string(),
7611
7612
  entities: array(_enum(["segments"])).optional(),
7613
+ /** Limits relocation to the logical profile class. Omit only for the
7614
+ * pre-orchestration compatibility path. */
7615
+ footageClass: RelocateFootageClassSchema.optional(),
7612
7616
  /** Copy throttle in MB/s (default 40) — the drain is a background chore,
7613
7617
  * never allowed to starve live writers. */
7614
7618
  throttleMbps: number().min(1).max(1e3).optional()
7615
7619
  });
7616
- var RelocateMediaInputSchema = object({
7617
- deviceId: number().optional(),
7620
+ /** Internal, lease-scoped participant operation. It is intentionally separate
7621
+ * from persistent recording settings: a migration never changes
7622
+ * `RecordingConfig.enabled` or camera wrapper bindings. */
7623
+ var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
7624
+ var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
7625
+ var StorageMigrationMediaMoveInputSchema = object({
7618
7626
  toLocationId: string(),
7619
7627
  throttleMbps: number().min(1).max(1e3).optional()
7628
+ }).extend({ leaseId: string().min(1) });
7629
+ /** The independently selectable logical storage classes. `recordings`
7630
+ * encompasses the high and mid segment profiles; `recordingsLow` is low
7631
+ * segments; `eventMedia` is post-analysis blobs. */
7632
+ var StorageMigrationClassSchema = _enum([
7633
+ "recordings",
7634
+ "recordingsLow",
7635
+ "eventMedia"
7636
+ ]);
7637
+ /** A destination is always an existing, fully-qualified location id. The
7638
+ * migration API intentionally never changes a source location's `basePath`:
7639
+ * callers create a new `<type>:<slug>` location, then select it here. */
7640
+ var StorageMigrationDestinationsSchema = object({
7641
+ recordings: string().min(1).optional(),
7642
+ recordingsLow: string().min(1).optional(),
7643
+ eventMedia: string().min(1).optional()
7644
+ }).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
7645
+ /** Shared input for planning and starting an orchestrated storage migration. */
7646
+ var StorageMigrationInputSchema = object({
7647
+ destinations: StorageMigrationDestinationsSchema,
7648
+ throttleMbps: number().min(1).max(1e3).optional()
7649
+ });
7650
+ /** The durable coordinator state machine. The only phase that changes default
7651
+ * locations is `repointing`, after every selected mover has completed and been
7652
+ * verified. */
7653
+ var StorageMigrationPhaseSchema = _enum([
7654
+ "planning",
7655
+ "pausing",
7656
+ "moving",
7657
+ "verifying",
7658
+ "repointing",
7659
+ "refreshing",
7660
+ "resuming",
7661
+ "done",
7662
+ "failed",
7663
+ "cancelled"
7664
+ ]);
7665
+ var StorageMigrationParticipantSchema = _enum([
7666
+ "pipeline",
7667
+ "recorder",
7668
+ "analytics"
7669
+ ]);
7670
+ var StorageMigrationMoveSchema = object({
7671
+ storageClass: StorageMigrationClassSchema,
7672
+ fromLocationId: string(),
7673
+ toLocationId: string(),
7674
+ moverJobId: string().nullable(),
7675
+ state: RelocateJobStateSchema.nullable(),
7676
+ error: string().nullable()
7677
+ });
7678
+ var StorageMigrationJobSchema = object({
7679
+ jobId: string(),
7680
+ phase: StorageMigrationPhaseSchema,
7681
+ destinations: StorageMigrationDestinationsSchema,
7682
+ throttleMbps: number(),
7683
+ moves: array(StorageMigrationMoveSchema),
7684
+ pauseLeaseId: string().nullable(),
7685
+ pausedParticipants: array(StorageMigrationParticipantSchema),
7686
+ repointed: boolean(),
7687
+ cancelRequested: boolean(),
7688
+ startedAt: number(),
7689
+ updatedAt: number(),
7690
+ finishedAt: number().nullable(),
7691
+ error: string().nullable()
7692
+ });
7693
+ var StorageMigrationPlanSchema = object({
7694
+ destinations: StorageMigrationDestinationsSchema,
7695
+ moves: array(object({
7696
+ storageClass: StorageMigrationClassSchema,
7697
+ fromLocationId: string(),
7698
+ toLocationId: string()
7699
+ }))
7620
7700
  });
7621
7701
  /**
7622
7702
  * `StorageLocationType` — an addon-declared id that identifies the *kind* of
@@ -15992,13 +16072,19 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
15992
16072
  }), method(object({ deviceId: number() }), EventPruneCountsSchema, {
15993
16073
  kind: "mutation",
15994
16074
  auth: "admin"
15995
- }), method(RelocateMediaInputSchema, object({ jobId: string() }), {
16075
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
15996
16076
  kind: "mutation",
15997
16077
  auth: "admin"
15998
- }), method(object({}), array(RelocateJobSchema).readonly(), {
15999
- kind: "query",
16078
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
16079
+ kind: "mutation",
16080
+ auth: "admin"
16081
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
16082
+ kind: "mutation",
16083
+ auth: "admin"
16084
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
16085
+ kind: "mutation",
16000
16086
  auth: "admin"
16001
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16087
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16002
16088
  kind: "mutation",
16003
16089
  auth: "admin"
16004
16090
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
@@ -17495,7 +17581,13 @@ var NodeInferenceDevicesSchema = object({
17495
17581
  reachable: boolean(),
17496
17582
  devices: array(NodeInferenceDeviceSchema).readonly()
17497
17583
  });
17498
- method(object({
17584
+ method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
17585
+ kind: "mutation",
17586
+ auth: "admin"
17587
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
17588
+ kind: "mutation",
17589
+ auth: "admin"
17590
+ }), method(object({
17499
17591
  deviceId: number(),
17500
17592
  agentNodeId: string()
17501
17593
  }), object({ success: literal(true) }), {
@@ -18182,6 +18274,13 @@ method(object({ locationId: string() }), EvictableUsageSchema), method(object({
18182
18274
  locationId: string(),
18183
18275
  targetBytes: number().int().positive()
18184
18276
  }), EvictResultSchema, { kind: "mutation" });
18277
+ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
18278
+ kind: "mutation",
18279
+ auth: "admin"
18280
+ }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
18281
+ kind: "mutation",
18282
+ auth: "admin"
18283
+ });
18185
18284
  var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
18186
18285
  providerId: string().min(1),
18187
18286
  displayName: string().min(1),
@@ -18285,6 +18384,28 @@ var TerminalProfileInfoSchema = object({
18285
18384
  label: string(),
18286
18385
  description: string().optional()
18287
18386
  });
18387
+ /**
18388
+ * A durable operator-created Terminal instance. Profiles are templates; only
18389
+ * an instance declares a camera.
18390
+ */
18391
+ var TerminalInstanceInfoSchema = object({
18392
+ instanceId: string(),
18393
+ cameraStableId: string(),
18394
+ nodeId: string(),
18395
+ profileId: string(),
18396
+ profileLabel: string(),
18397
+ name: string(),
18398
+ enabled: boolean()
18399
+ });
18400
+ var TerminalLegacyCameraSchema = object({
18401
+ stableId: string(),
18402
+ nodeId: string(),
18403
+ profileId: string(),
18404
+ profileLabel: string(),
18405
+ name: string(),
18406
+ /** Only legacy monitor cameras can retain their historic stable identity. */
18407
+ adoptable: boolean()
18408
+ });
18288
18409
  var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
18289
18410
  seq: number().int().positive(),
18290
18411
  kind: literal("data"),
@@ -18301,7 +18422,29 @@ var TerminalOutputBatchSchema = object({
18301
18422
  snapshot: string().optional(),
18302
18423
  events: array(TerminalOutputEventSchema).readonly()
18303
18424
  });
18304
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18425
+ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
18426
+ targetNodeId: string().min(1),
18427
+ profileId: string().min(1),
18428
+ name: string().trim().min(1).max(160).optional()
18429
+ }), TerminalInstanceInfoSchema, {
18430
+ kind: "mutation",
18431
+ auth: "admin"
18432
+ }), method(object({ instanceId: string().min(1) }), _void(), {
18433
+ kind: "mutation",
18434
+ auth: "admin"
18435
+ }), method(object({
18436
+ instanceId: string().min(1),
18437
+ enabled: boolean()
18438
+ }), TerminalInstanceInfoSchema, {
18439
+ kind: "mutation",
18440
+ auth: "admin"
18441
+ }), method(_void(), array(TerminalLegacyCameraSchema).readonly(), { auth: "admin" }), method(object({
18442
+ stableId: string().min(1),
18443
+ name: string().trim().min(1).max(160).optional()
18444
+ }), TerminalInstanceInfoSchema, {
18445
+ kind: "mutation",
18446
+ auth: "admin"
18447
+ }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18305
18448
  profileId: string(),
18306
18449
  cols: number().int().positive(),
18307
18450
  rows: number().int().positive()
@@ -18318,7 +18461,13 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
18318
18461
  }), method(object({
18319
18462
  sessionId: string(),
18320
18463
  afterSeq: number().int().nonnegative(),
18321
- waitMs: number().int().min(0).max(2e3).default(0)
18464
+ waitMs: number().int().min(0).max(2e3).default(0),
18465
+ /**
18466
+ * Wait when a just-opened session has no output yet. Kept opt-in so a
18467
+ * browser's initial repaint remains immediate; the camera snapshot
18468
+ * relay uses it to avoid encoding a blank startup frame.
18469
+ */
18470
+ waitForOutput: boolean().optional()
18322
18471
  }), TerminalOutputBatchSchema, {
18323
18472
  kind: "mutation",
18324
18473
  auth: "admin",
@@ -20259,6 +20408,7 @@ var FaceInfoSchema = object({
20259
20408
  var FaceFilterEnum = _enum([
20260
20409
  "unassigned",
20261
20410
  "recognized",
20411
+ "identified",
20262
20412
  "all"
20263
20413
  ]);
20264
20414
  var MediaFileLiteSchema$1 = object({
@@ -20287,6 +20437,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
20287
20437
  kind: "mutation",
20288
20438
  auth: "admin"
20289
20439
  }), method(object({
20440
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
20441
+ deviceId: number().int().optional(),
20290
20442
  limit: number().int().positive().optional(),
20291
20443
  filter: FaceFilterEnum.optional(),
20292
20444
  /**
@@ -22052,6 +22204,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
22052
22204
  capName: string().min(1).max(64),
22053
22205
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
22054
22206
  valuePath: string().min(1).max(64)
22207
+ }),
22208
+ object({
22209
+ kind: literal("latest-recognition"),
22210
+ recognition: _enum(["person", "plate"])
22055
22211
  })
22056
22212
  ]);
22057
22213
  var OsdSlotBindingSchema = object({
@@ -22157,6 +22313,15 @@ method(object({ deviceId: number().int() }), object({
22157
22313
  }), object({ success: literal(true) }), {
22158
22314
  kind: "mutation",
22159
22315
  auth: "admin"
22316
+ }), method(object({
22317
+ sourceDeviceId: number().int(),
22318
+ targetDeviceId: number().int()
22319
+ }), object({
22320
+ copied: number().int().nonnegative(),
22321
+ skipped: number().int().nonnegative()
22322
+ }), {
22323
+ kind: "mutation",
22324
+ auth: "admin"
22160
22325
  }), method(object({
22161
22326
  deviceId: number().int(),
22162
22327
  slotId: string().min(1),
@@ -23042,13 +23207,19 @@ method(object({
23042
23207
  }), {
23043
23208
  kind: "mutation",
23044
23209
  auth: "admin"
23045
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
23210
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
23046
23211
  kind: "mutation",
23047
23212
  auth: "admin"
23048
- }), method(object({}), array(RelocateJobSchema).readonly(), {
23049
- kind: "query",
23213
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
23214
+ kind: "mutation",
23050
23215
  auth: "admin"
23051
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23216
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
23217
+ kind: "mutation",
23218
+ auth: "admin"
23219
+ }), method(StorageMigrationFootageMoveInputSchema, object({ jobId: string() }), {
23220
+ kind: "mutation",
23221
+ auth: "admin"
23222
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23052
23223
  kind: "mutation",
23053
23224
  auth: "admin"
23054
23225
  });
@@ -27170,6 +27341,12 @@ Object.freeze({
27170
27341
  addonId: null,
27171
27342
  access: "delete"
27172
27343
  },
27344
+ "osdManager.copyDeviceConfiguration": {
27345
+ capName: "osd-manager",
27346
+ capScope: "system",
27347
+ addonId: null,
27348
+ access: "create"
27349
+ },
27173
27350
  "osdManager.getConditionSupport": {
27174
27351
  capName: "osd-manager",
27175
27352
  capScope: "system",
@@ -27266,7 +27443,7 @@ Object.freeze({
27266
27443
  addonId: null,
27267
27444
  access: "create"
27268
27445
  },
27269
- "pipelineAnalytics.cancelMediaRelocate": {
27446
+ "pipelineAnalytics.cancelStorageMigrationMove": {
27270
27447
  capName: "pipeline-analytics",
27271
27448
  capScope: "device",
27272
27449
  addonId: null,
@@ -27338,12 +27515,6 @@ Object.freeze({
27338
27515
  addonId: null,
27339
27516
  access: "view"
27340
27517
  },
27341
- "pipelineAnalytics.getMediaRelocateStatus": {
27342
- capName: "pipeline-analytics",
27343
- capScope: "device",
27344
- addonId: null,
27345
- access: "view"
27346
- },
27347
27518
  "pipelineAnalytics.getMotionEvents": {
27348
27519
  capName: "pipeline-analytics",
27349
27520
  capScope: "device",
@@ -27380,6 +27551,12 @@ Object.freeze({
27380
27551
  addonId: null,
27381
27552
  access: "view"
27382
27553
  },
27554
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
27555
+ capName: "pipeline-analytics",
27556
+ capScope: "device",
27557
+ addonId: null,
27558
+ access: "view"
27559
+ },
27383
27560
  "pipelineAnalytics.getTrack": {
27384
27561
  capName: "pipeline-analytics",
27385
27562
  capScope: "device",
@@ -27458,6 +27635,12 @@ Object.freeze({
27458
27635
  addonId: null,
27459
27636
  access: "view"
27460
27637
  },
27638
+ "pipelineAnalytics.pauseForStorageMigration": {
27639
+ capName: "pipeline-analytics",
27640
+ capScope: "device",
27641
+ addonId: null,
27642
+ access: "create"
27643
+ },
27461
27644
  "pipelineAnalytics.proposeRetrainAnnotations": {
27462
27645
  capName: "pipeline-analytics",
27463
27646
  capScope: "device",
@@ -27488,7 +27671,7 @@ Object.freeze({
27488
27671
  addonId: null,
27489
27672
  access: "create"
27490
27673
  },
27491
- "pipelineAnalytics.relocateMedia": {
27674
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
27492
27675
  capName: "pipeline-analytics",
27493
27676
  capScope: "device",
27494
27677
  addonId: null,
@@ -27500,6 +27683,12 @@ Object.freeze({
27500
27683
  addonId: null,
27501
27684
  access: "create"
27502
27685
  },
27686
+ "pipelineAnalytics.resumeForStorageMigration": {
27687
+ capName: "pipeline-analytics",
27688
+ capScope: "device",
27689
+ addonId: null,
27690
+ access: "create"
27691
+ },
27503
27692
  "pipelineAnalytics.saveRetrainAnnotations": {
27504
27693
  capName: "pipeline-analytics",
27505
27694
  capScope: "device",
@@ -27524,6 +27713,12 @@ Object.freeze({
27524
27713
  addonId: null,
27525
27714
  access: "create"
27526
27715
  },
27716
+ "pipelineAnalytics.startStorageMigrationMove": {
27717
+ capName: "pipeline-analytics",
27718
+ capScope: "device",
27719
+ addonId: null,
27720
+ access: "create"
27721
+ },
27527
27722
  "pipelineAnalytics.wipeAllAnalytics": {
27528
27723
  capName: "pipeline-analytics",
27529
27724
  capScope: "device",
@@ -27890,6 +28085,12 @@ Object.freeze({
27890
28085
  addonId: null,
27891
28086
  access: "view"
27892
28087
  },
28088
+ "pipelineOrchestrator.pauseForStorageMigration": {
28089
+ capName: "pipeline-orchestrator",
28090
+ capScope: "system",
28091
+ addonId: null,
28092
+ access: "create"
28093
+ },
27893
28094
  "pipelineOrchestrator.rebalance": {
27894
28095
  capName: "pipeline-orchestrator",
27895
28096
  capScope: "system",
@@ -27914,6 +28115,12 @@ Object.freeze({
27914
28115
  addonId: null,
27915
28116
  access: "view"
27916
28117
  },
28118
+ "pipelineOrchestrator.resumeForStorageMigration": {
28119
+ capName: "pipeline-orchestrator",
28120
+ capScope: "system",
28121
+ addonId: null,
28122
+ access: "create"
28123
+ },
27917
28124
  "pipelineOrchestrator.saveTemplate": {
27918
28125
  capName: "pipeline-orchestrator",
27919
28126
  capScope: "system",
@@ -28310,7 +28517,7 @@ Object.freeze({
28310
28517
  addonId: null,
28311
28518
  access: "create"
28312
28519
  },
28313
- "recording.cancelRelocate": {
28520
+ "recording.cancelStorageMigrationMove": {
28314
28521
  capName: "recording",
28315
28522
  capScope: "system",
28316
28523
  addonId: null,
@@ -28346,7 +28553,7 @@ Object.freeze({
28346
28553
  addonId: null,
28347
28554
  access: "view"
28348
28555
  },
28349
- "recording.getRelocateStatus": {
28556
+ "recording.getStorageMigrationMoveStatus": {
28350
28557
  capName: "recording",
28351
28558
  capScope: "system",
28352
28559
  addonId: null,
@@ -28370,6 +28577,12 @@ Object.freeze({
28370
28577
  addonId: null,
28371
28578
  access: "view"
28372
28579
  },
28580
+ "recording.pauseForStorageMigration": {
28581
+ capName: "recording",
28582
+ capScope: "system",
28583
+ addonId: null,
28584
+ access: "create"
28585
+ },
28373
28586
  "recording.pruneFootage": {
28374
28587
  capName: "recording",
28375
28588
  capScope: "system",
@@ -28388,7 +28601,7 @@ Object.freeze({
28388
28601
  addonId: null,
28389
28602
  access: "view"
28390
28603
  },
28391
- "recording.relocateFootage": {
28604
+ "recording.refreshStorageLocationsForMigration": {
28392
28605
  capName: "recording",
28393
28606
  capScope: "system",
28394
28607
  addonId: null,
@@ -28412,12 +28625,24 @@ Object.freeze({
28412
28625
  addonId: null,
28413
28626
  access: "create"
28414
28627
  },
28628
+ "recording.resumeForStorageMigration": {
28629
+ capName: "recording",
28630
+ capScope: "system",
28631
+ addonId: null,
28632
+ access: "create"
28633
+ },
28415
28634
  "recording.setDeviceConfig": {
28416
28635
  capName: "recording",
28417
28636
  capScope: "system",
28418
28637
  addonId: null,
28419
28638
  access: "create"
28420
28639
  },
28640
+ "recording.startStorageMigrationMove": {
28641
+ capName: "recording",
28642
+ capScope: "system",
28643
+ addonId: null,
28644
+ access: "create"
28645
+ },
28421
28646
  "recordingExport.cancelExport": {
28422
28647
  capName: "recordingExport",
28423
28648
  capScope: "system",
@@ -28808,6 +29033,30 @@ Object.freeze({
28808
29033
  addonId: null,
28809
29034
  access: "view"
28810
29035
  },
29036
+ "storageMigration.cancel": {
29037
+ capName: "storage-migration",
29038
+ capScope: "system",
29039
+ addonId: null,
29040
+ access: "create"
29041
+ },
29042
+ "storageMigration.plan": {
29043
+ capName: "storage-migration",
29044
+ capScope: "system",
29045
+ addonId: null,
29046
+ access: "view"
29047
+ },
29048
+ "storageMigration.start": {
29049
+ capName: "storage-migration",
29050
+ capScope: "system",
29051
+ addonId: null,
29052
+ access: "create"
29053
+ },
29054
+ "storageMigration.status": {
29055
+ capName: "storage-migration",
29056
+ capScope: "system",
29057
+ addonId: null,
29058
+ access: "view"
29059
+ },
28811
29060
  "storageProvider.abortUpload": {
28812
29061
  capName: "storage-provider",
28813
29062
  capScope: "system",
@@ -29186,12 +29435,42 @@ Object.freeze({
29186
29435
  addonId: null,
29187
29436
  access: "create"
29188
29437
  },
29438
+ "terminalSession.adoptLegacyMonitor": {
29439
+ capName: "terminal-session",
29440
+ capScope: "system",
29441
+ addonId: null,
29442
+ access: "create"
29443
+ },
29189
29444
  "terminalSession.close": {
29190
29445
  capName: "terminal-session",
29191
29446
  capScope: "system",
29192
29447
  addonId: null,
29193
29448
  access: "create"
29194
29449
  },
29450
+ "terminalSession.createInstance": {
29451
+ capName: "terminal-session",
29452
+ capScope: "system",
29453
+ addonId: null,
29454
+ access: "create"
29455
+ },
29456
+ "terminalSession.deleteInstance": {
29457
+ capName: "terminal-session",
29458
+ capScope: "system",
29459
+ addonId: null,
29460
+ access: "delete"
29461
+ },
29462
+ "terminalSession.listInstances": {
29463
+ capName: "terminal-session",
29464
+ capScope: "system",
29465
+ addonId: null,
29466
+ access: "view"
29467
+ },
29468
+ "terminalSession.listLegacyCameras": {
29469
+ capName: "terminal-session",
29470
+ capScope: "system",
29471
+ addonId: null,
29472
+ access: "view"
29473
+ },
29195
29474
  "terminalSession.listProfiles": {
29196
29475
  capName: "terminal-session",
29197
29476
  capScope: "system",
@@ -29222,6 +29501,12 @@ Object.freeze({
29222
29501
  addonId: null,
29223
29502
  access: "create"
29224
29503
  },
29504
+ "terminalSession.setInstanceEnabled": {
29505
+ capName: "terminal-session",
29506
+ capScope: "system",
29507
+ addonId: null,
29508
+ access: "create"
29509
+ },
29225
29510
  "terminalSession.writeInput": {
29226
29511
  capName: "terminal-session",
29227
29512
  capScope: "system",
@@ -7570,12 +7570,11 @@ var RecordingConfigSchema = object({
7570
7570
  /**
7571
7571
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
7572
7572
  *
7573
- * One shape shared by the recorder's `relocateFootage` (segments) and
7574
- * pipeline-analytics' `relocateMedia` (event media blobs) so the admin Data
7575
- * page renders both movers with one component. Jobs are in-RAM (a restart
7576
- * forgets them re-running is safe by construction: copy-if-absent, delete
7577
- * after verify) and each completed/failed run also lands one durable ops-log
7578
- * row on the owning addon's surface.
7573
+ * One shape shared by the recorder and pipeline-analytics internal movers.
7574
+ * The public admin surface is `storage-migration`; child jobs remain in RAM
7575
+ * because copy-if-absent, verify, delete and index/row repoint are resumable.
7576
+ * Each completed/failed run also lands one durable ops-log row on its owning
7577
+ * addon surface.
7579
7578
  */
7580
7579
  var RelocateJobStateSchema = _enum([
7581
7580
  "running",
@@ -7602,19 +7601,100 @@ var RelocateJobSchema = object({
7602
7601
  finishedAt: number().nullable(),
7603
7602
  error: string().nullable()
7604
7603
  });
7604
+ /** Profile-derived footage selection used only by the migration coordinator:
7605
+ * `recordings` owns high+mid; `recordingsLow` owns low. */
7606
+ var RelocateFootageClassSchema = _enum(["recordings", "recordingsLow"]);
7605
7607
  var RelocateFootageInputSchema = object({
7606
- deviceId: number().optional(),
7607
7608
  fromLocationId: string(),
7608
7609
  toLocationId: string(),
7609
7610
  entities: array(_enum(["segments"])).optional(),
7611
+ /** Limits relocation to the logical profile class. Omit only for the
7612
+ * pre-orchestration compatibility path. */
7613
+ footageClass: RelocateFootageClassSchema.optional(),
7610
7614
  /** Copy throttle in MB/s (default 40) — the drain is a background chore,
7611
7615
  * never allowed to starve live writers. */
7612
7616
  throttleMbps: number().min(1).max(1e3).optional()
7613
7617
  });
7614
- var RelocateMediaInputSchema = object({
7615
- deviceId: number().optional(),
7618
+ /** Internal, lease-scoped participant operation. It is intentionally separate
7619
+ * from persistent recording settings: a migration never changes
7620
+ * `RecordingConfig.enabled` or camera wrapper bindings. */
7621
+ var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
7622
+ var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
7623
+ var StorageMigrationMediaMoveInputSchema = object({
7616
7624
  toLocationId: string(),
7617
7625
  throttleMbps: number().min(1).max(1e3).optional()
7626
+ }).extend({ leaseId: string().min(1) });
7627
+ /** The independently selectable logical storage classes. `recordings`
7628
+ * encompasses the high and mid segment profiles; `recordingsLow` is low
7629
+ * segments; `eventMedia` is post-analysis blobs. */
7630
+ var StorageMigrationClassSchema = _enum([
7631
+ "recordings",
7632
+ "recordingsLow",
7633
+ "eventMedia"
7634
+ ]);
7635
+ /** A destination is always an existing, fully-qualified location id. The
7636
+ * migration API intentionally never changes a source location's `basePath`:
7637
+ * callers create a new `<type>:<slug>` location, then select it here. */
7638
+ var StorageMigrationDestinationsSchema = object({
7639
+ recordings: string().min(1).optional(),
7640
+ recordingsLow: string().min(1).optional(),
7641
+ eventMedia: string().min(1).optional()
7642
+ }).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
7643
+ /** Shared input for planning and starting an orchestrated storage migration. */
7644
+ var StorageMigrationInputSchema = object({
7645
+ destinations: StorageMigrationDestinationsSchema,
7646
+ throttleMbps: number().min(1).max(1e3).optional()
7647
+ });
7648
+ /** The durable coordinator state machine. The only phase that changes default
7649
+ * locations is `repointing`, after every selected mover has completed and been
7650
+ * verified. */
7651
+ var StorageMigrationPhaseSchema = _enum([
7652
+ "planning",
7653
+ "pausing",
7654
+ "moving",
7655
+ "verifying",
7656
+ "repointing",
7657
+ "refreshing",
7658
+ "resuming",
7659
+ "done",
7660
+ "failed",
7661
+ "cancelled"
7662
+ ]);
7663
+ var StorageMigrationParticipantSchema = _enum([
7664
+ "pipeline",
7665
+ "recorder",
7666
+ "analytics"
7667
+ ]);
7668
+ var StorageMigrationMoveSchema = object({
7669
+ storageClass: StorageMigrationClassSchema,
7670
+ fromLocationId: string(),
7671
+ toLocationId: string(),
7672
+ moverJobId: string().nullable(),
7673
+ state: RelocateJobStateSchema.nullable(),
7674
+ error: string().nullable()
7675
+ });
7676
+ var StorageMigrationJobSchema = object({
7677
+ jobId: string(),
7678
+ phase: StorageMigrationPhaseSchema,
7679
+ destinations: StorageMigrationDestinationsSchema,
7680
+ throttleMbps: number(),
7681
+ moves: array(StorageMigrationMoveSchema),
7682
+ pauseLeaseId: string().nullable(),
7683
+ pausedParticipants: array(StorageMigrationParticipantSchema),
7684
+ repointed: boolean(),
7685
+ cancelRequested: boolean(),
7686
+ startedAt: number(),
7687
+ updatedAt: number(),
7688
+ finishedAt: number().nullable(),
7689
+ error: string().nullable()
7690
+ });
7691
+ var StorageMigrationPlanSchema = object({
7692
+ destinations: StorageMigrationDestinationsSchema,
7693
+ moves: array(object({
7694
+ storageClass: StorageMigrationClassSchema,
7695
+ fromLocationId: string(),
7696
+ toLocationId: string()
7697
+ }))
7618
7698
  });
7619
7699
  /**
7620
7700
  * `StorageLocationType` — an addon-declared id that identifies the *kind* of
@@ -15990,13 +16070,19 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
15990
16070
  }), method(object({ deviceId: number() }), EventPruneCountsSchema, {
15991
16071
  kind: "mutation",
15992
16072
  auth: "admin"
15993
- }), method(RelocateMediaInputSchema, object({ jobId: string() }), {
16073
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
15994
16074
  kind: "mutation",
15995
16075
  auth: "admin"
15996
- }), method(object({}), array(RelocateJobSchema).readonly(), {
15997
- kind: "query",
16076
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
16077
+ kind: "mutation",
16078
+ auth: "admin"
16079
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
16080
+ kind: "mutation",
16081
+ auth: "admin"
16082
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
16083
+ kind: "mutation",
15998
16084
  auth: "admin"
15999
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16085
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16000
16086
  kind: "mutation",
16001
16087
  auth: "admin"
16002
16088
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
@@ -17493,7 +17579,13 @@ var NodeInferenceDevicesSchema = object({
17493
17579
  reachable: boolean(),
17494
17580
  devices: array(NodeInferenceDeviceSchema).readonly()
17495
17581
  });
17496
- method(object({
17582
+ method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
17583
+ kind: "mutation",
17584
+ auth: "admin"
17585
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
17586
+ kind: "mutation",
17587
+ auth: "admin"
17588
+ }), method(object({
17497
17589
  deviceId: number(),
17498
17590
  agentNodeId: string()
17499
17591
  }), object({ success: literal(true) }), {
@@ -18180,6 +18272,13 @@ method(object({ locationId: string() }), EvictableUsageSchema), method(object({
18180
18272
  locationId: string(),
18181
18273
  targetBytes: number().int().positive()
18182
18274
  }), EvictResultSchema, { kind: "mutation" });
18275
+ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
18276
+ kind: "mutation",
18277
+ auth: "admin"
18278
+ }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
18279
+ kind: "mutation",
18280
+ auth: "admin"
18281
+ });
18183
18282
  var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
18184
18283
  providerId: string().min(1),
18185
18284
  displayName: string().min(1),
@@ -18283,6 +18382,28 @@ var TerminalProfileInfoSchema = object({
18283
18382
  label: string(),
18284
18383
  description: string().optional()
18285
18384
  });
18385
+ /**
18386
+ * A durable operator-created Terminal instance. Profiles are templates; only
18387
+ * an instance declares a camera.
18388
+ */
18389
+ var TerminalInstanceInfoSchema = object({
18390
+ instanceId: string(),
18391
+ cameraStableId: string(),
18392
+ nodeId: string(),
18393
+ profileId: string(),
18394
+ profileLabel: string(),
18395
+ name: string(),
18396
+ enabled: boolean()
18397
+ });
18398
+ var TerminalLegacyCameraSchema = object({
18399
+ stableId: string(),
18400
+ nodeId: string(),
18401
+ profileId: string(),
18402
+ profileLabel: string(),
18403
+ name: string(),
18404
+ /** Only legacy monitor cameras can retain their historic stable identity. */
18405
+ adoptable: boolean()
18406
+ });
18286
18407
  var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
18287
18408
  seq: number().int().positive(),
18288
18409
  kind: literal("data"),
@@ -18299,7 +18420,29 @@ var TerminalOutputBatchSchema = object({
18299
18420
  snapshot: string().optional(),
18300
18421
  events: array(TerminalOutputEventSchema).readonly()
18301
18422
  });
18302
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18423
+ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
18424
+ targetNodeId: string().min(1),
18425
+ profileId: string().min(1),
18426
+ name: string().trim().min(1).max(160).optional()
18427
+ }), TerminalInstanceInfoSchema, {
18428
+ kind: "mutation",
18429
+ auth: "admin"
18430
+ }), method(object({ instanceId: string().min(1) }), _void(), {
18431
+ kind: "mutation",
18432
+ auth: "admin"
18433
+ }), method(object({
18434
+ instanceId: string().min(1),
18435
+ enabled: boolean()
18436
+ }), TerminalInstanceInfoSchema, {
18437
+ kind: "mutation",
18438
+ auth: "admin"
18439
+ }), method(_void(), array(TerminalLegacyCameraSchema).readonly(), { auth: "admin" }), method(object({
18440
+ stableId: string().min(1),
18441
+ name: string().trim().min(1).max(160).optional()
18442
+ }), TerminalInstanceInfoSchema, {
18443
+ kind: "mutation",
18444
+ auth: "admin"
18445
+ }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18303
18446
  profileId: string(),
18304
18447
  cols: number().int().positive(),
18305
18448
  rows: number().int().positive()
@@ -18316,7 +18459,13 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
18316
18459
  }), method(object({
18317
18460
  sessionId: string(),
18318
18461
  afterSeq: number().int().nonnegative(),
18319
- waitMs: number().int().min(0).max(2e3).default(0)
18462
+ waitMs: number().int().min(0).max(2e3).default(0),
18463
+ /**
18464
+ * Wait when a just-opened session has no output yet. Kept opt-in so a
18465
+ * browser's initial repaint remains immediate; the camera snapshot
18466
+ * relay uses it to avoid encoding a blank startup frame.
18467
+ */
18468
+ waitForOutput: boolean().optional()
18320
18469
  }), TerminalOutputBatchSchema, {
18321
18470
  kind: "mutation",
18322
18471
  auth: "admin",
@@ -20257,6 +20406,7 @@ var FaceInfoSchema = object({
20257
20406
  var FaceFilterEnum = _enum([
20258
20407
  "unassigned",
20259
20408
  "recognized",
20409
+ "identified",
20260
20410
  "all"
20261
20411
  ]);
20262
20412
  var MediaFileLiteSchema$1 = object({
@@ -20285,6 +20435,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
20285
20435
  kind: "mutation",
20286
20436
  auth: "admin"
20287
20437
  }), method(object({
20438
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
20439
+ deviceId: number().int().optional(),
20288
20440
  limit: number().int().positive().optional(),
20289
20441
  filter: FaceFilterEnum.optional(),
20290
20442
  /**
@@ -22050,6 +22202,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
22050
22202
  capName: string().min(1).max(64),
22051
22203
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
22052
22204
  valuePath: string().min(1).max(64)
22205
+ }),
22206
+ object({
22207
+ kind: literal("latest-recognition"),
22208
+ recognition: _enum(["person", "plate"])
22053
22209
  })
22054
22210
  ]);
22055
22211
  var OsdSlotBindingSchema = object({
@@ -22155,6 +22311,15 @@ method(object({ deviceId: number().int() }), object({
22155
22311
  }), object({ success: literal(true) }), {
22156
22312
  kind: "mutation",
22157
22313
  auth: "admin"
22314
+ }), method(object({
22315
+ sourceDeviceId: number().int(),
22316
+ targetDeviceId: number().int()
22317
+ }), object({
22318
+ copied: number().int().nonnegative(),
22319
+ skipped: number().int().nonnegative()
22320
+ }), {
22321
+ kind: "mutation",
22322
+ auth: "admin"
22158
22323
  }), method(object({
22159
22324
  deviceId: number().int(),
22160
22325
  slotId: string().min(1),
@@ -23040,13 +23205,19 @@ method(object({
23040
23205
  }), {
23041
23206
  kind: "mutation",
23042
23207
  auth: "admin"
23043
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
23208
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
23044
23209
  kind: "mutation",
23045
23210
  auth: "admin"
23046
- }), method(object({}), array(RelocateJobSchema).readonly(), {
23047
- kind: "query",
23211
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
23212
+ kind: "mutation",
23048
23213
  auth: "admin"
23049
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23214
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
23215
+ kind: "mutation",
23216
+ auth: "admin"
23217
+ }), method(StorageMigrationFootageMoveInputSchema, object({ jobId: string() }), {
23218
+ kind: "mutation",
23219
+ auth: "admin"
23220
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23050
23221
  kind: "mutation",
23051
23222
  auth: "admin"
23052
23223
  });
@@ -27168,6 +27339,12 @@ Object.freeze({
27168
27339
  addonId: null,
27169
27340
  access: "delete"
27170
27341
  },
27342
+ "osdManager.copyDeviceConfiguration": {
27343
+ capName: "osd-manager",
27344
+ capScope: "system",
27345
+ addonId: null,
27346
+ access: "create"
27347
+ },
27171
27348
  "osdManager.getConditionSupport": {
27172
27349
  capName: "osd-manager",
27173
27350
  capScope: "system",
@@ -27264,7 +27441,7 @@ Object.freeze({
27264
27441
  addonId: null,
27265
27442
  access: "create"
27266
27443
  },
27267
- "pipelineAnalytics.cancelMediaRelocate": {
27444
+ "pipelineAnalytics.cancelStorageMigrationMove": {
27268
27445
  capName: "pipeline-analytics",
27269
27446
  capScope: "device",
27270
27447
  addonId: null,
@@ -27336,12 +27513,6 @@ Object.freeze({
27336
27513
  addonId: null,
27337
27514
  access: "view"
27338
27515
  },
27339
- "pipelineAnalytics.getMediaRelocateStatus": {
27340
- capName: "pipeline-analytics",
27341
- capScope: "device",
27342
- addonId: null,
27343
- access: "view"
27344
- },
27345
27516
  "pipelineAnalytics.getMotionEvents": {
27346
27517
  capName: "pipeline-analytics",
27347
27518
  capScope: "device",
@@ -27378,6 +27549,12 @@ Object.freeze({
27378
27549
  addonId: null,
27379
27550
  access: "view"
27380
27551
  },
27552
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
27553
+ capName: "pipeline-analytics",
27554
+ capScope: "device",
27555
+ addonId: null,
27556
+ access: "view"
27557
+ },
27381
27558
  "pipelineAnalytics.getTrack": {
27382
27559
  capName: "pipeline-analytics",
27383
27560
  capScope: "device",
@@ -27456,6 +27633,12 @@ Object.freeze({
27456
27633
  addonId: null,
27457
27634
  access: "view"
27458
27635
  },
27636
+ "pipelineAnalytics.pauseForStorageMigration": {
27637
+ capName: "pipeline-analytics",
27638
+ capScope: "device",
27639
+ addonId: null,
27640
+ access: "create"
27641
+ },
27459
27642
  "pipelineAnalytics.proposeRetrainAnnotations": {
27460
27643
  capName: "pipeline-analytics",
27461
27644
  capScope: "device",
@@ -27486,7 +27669,7 @@ Object.freeze({
27486
27669
  addonId: null,
27487
27670
  access: "create"
27488
27671
  },
27489
- "pipelineAnalytics.relocateMedia": {
27672
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
27490
27673
  capName: "pipeline-analytics",
27491
27674
  capScope: "device",
27492
27675
  addonId: null,
@@ -27498,6 +27681,12 @@ Object.freeze({
27498
27681
  addonId: null,
27499
27682
  access: "create"
27500
27683
  },
27684
+ "pipelineAnalytics.resumeForStorageMigration": {
27685
+ capName: "pipeline-analytics",
27686
+ capScope: "device",
27687
+ addonId: null,
27688
+ access: "create"
27689
+ },
27501
27690
  "pipelineAnalytics.saveRetrainAnnotations": {
27502
27691
  capName: "pipeline-analytics",
27503
27692
  capScope: "device",
@@ -27522,6 +27711,12 @@ Object.freeze({
27522
27711
  addonId: null,
27523
27712
  access: "create"
27524
27713
  },
27714
+ "pipelineAnalytics.startStorageMigrationMove": {
27715
+ capName: "pipeline-analytics",
27716
+ capScope: "device",
27717
+ addonId: null,
27718
+ access: "create"
27719
+ },
27525
27720
  "pipelineAnalytics.wipeAllAnalytics": {
27526
27721
  capName: "pipeline-analytics",
27527
27722
  capScope: "device",
@@ -27888,6 +28083,12 @@ Object.freeze({
27888
28083
  addonId: null,
27889
28084
  access: "view"
27890
28085
  },
28086
+ "pipelineOrchestrator.pauseForStorageMigration": {
28087
+ capName: "pipeline-orchestrator",
28088
+ capScope: "system",
28089
+ addonId: null,
28090
+ access: "create"
28091
+ },
27891
28092
  "pipelineOrchestrator.rebalance": {
27892
28093
  capName: "pipeline-orchestrator",
27893
28094
  capScope: "system",
@@ -27912,6 +28113,12 @@ Object.freeze({
27912
28113
  addonId: null,
27913
28114
  access: "view"
27914
28115
  },
28116
+ "pipelineOrchestrator.resumeForStorageMigration": {
28117
+ capName: "pipeline-orchestrator",
28118
+ capScope: "system",
28119
+ addonId: null,
28120
+ access: "create"
28121
+ },
27915
28122
  "pipelineOrchestrator.saveTemplate": {
27916
28123
  capName: "pipeline-orchestrator",
27917
28124
  capScope: "system",
@@ -28308,7 +28515,7 @@ Object.freeze({
28308
28515
  addonId: null,
28309
28516
  access: "create"
28310
28517
  },
28311
- "recording.cancelRelocate": {
28518
+ "recording.cancelStorageMigrationMove": {
28312
28519
  capName: "recording",
28313
28520
  capScope: "system",
28314
28521
  addonId: null,
@@ -28344,7 +28551,7 @@ Object.freeze({
28344
28551
  addonId: null,
28345
28552
  access: "view"
28346
28553
  },
28347
- "recording.getRelocateStatus": {
28554
+ "recording.getStorageMigrationMoveStatus": {
28348
28555
  capName: "recording",
28349
28556
  capScope: "system",
28350
28557
  addonId: null,
@@ -28368,6 +28575,12 @@ Object.freeze({
28368
28575
  addonId: null,
28369
28576
  access: "view"
28370
28577
  },
28578
+ "recording.pauseForStorageMigration": {
28579
+ capName: "recording",
28580
+ capScope: "system",
28581
+ addonId: null,
28582
+ access: "create"
28583
+ },
28371
28584
  "recording.pruneFootage": {
28372
28585
  capName: "recording",
28373
28586
  capScope: "system",
@@ -28386,7 +28599,7 @@ Object.freeze({
28386
28599
  addonId: null,
28387
28600
  access: "view"
28388
28601
  },
28389
- "recording.relocateFootage": {
28602
+ "recording.refreshStorageLocationsForMigration": {
28390
28603
  capName: "recording",
28391
28604
  capScope: "system",
28392
28605
  addonId: null,
@@ -28410,12 +28623,24 @@ Object.freeze({
28410
28623
  addonId: null,
28411
28624
  access: "create"
28412
28625
  },
28626
+ "recording.resumeForStorageMigration": {
28627
+ capName: "recording",
28628
+ capScope: "system",
28629
+ addonId: null,
28630
+ access: "create"
28631
+ },
28413
28632
  "recording.setDeviceConfig": {
28414
28633
  capName: "recording",
28415
28634
  capScope: "system",
28416
28635
  addonId: null,
28417
28636
  access: "create"
28418
28637
  },
28638
+ "recording.startStorageMigrationMove": {
28639
+ capName: "recording",
28640
+ capScope: "system",
28641
+ addonId: null,
28642
+ access: "create"
28643
+ },
28419
28644
  "recordingExport.cancelExport": {
28420
28645
  capName: "recordingExport",
28421
28646
  capScope: "system",
@@ -28806,6 +29031,30 @@ Object.freeze({
28806
29031
  addonId: null,
28807
29032
  access: "view"
28808
29033
  },
29034
+ "storageMigration.cancel": {
29035
+ capName: "storage-migration",
29036
+ capScope: "system",
29037
+ addonId: null,
29038
+ access: "create"
29039
+ },
29040
+ "storageMigration.plan": {
29041
+ capName: "storage-migration",
29042
+ capScope: "system",
29043
+ addonId: null,
29044
+ access: "view"
29045
+ },
29046
+ "storageMigration.start": {
29047
+ capName: "storage-migration",
29048
+ capScope: "system",
29049
+ addonId: null,
29050
+ access: "create"
29051
+ },
29052
+ "storageMigration.status": {
29053
+ capName: "storage-migration",
29054
+ capScope: "system",
29055
+ addonId: null,
29056
+ access: "view"
29057
+ },
28809
29058
  "storageProvider.abortUpload": {
28810
29059
  capName: "storage-provider",
28811
29060
  capScope: "system",
@@ -29184,12 +29433,42 @@ Object.freeze({
29184
29433
  addonId: null,
29185
29434
  access: "create"
29186
29435
  },
29436
+ "terminalSession.adoptLegacyMonitor": {
29437
+ capName: "terminal-session",
29438
+ capScope: "system",
29439
+ addonId: null,
29440
+ access: "create"
29441
+ },
29187
29442
  "terminalSession.close": {
29188
29443
  capName: "terminal-session",
29189
29444
  capScope: "system",
29190
29445
  addonId: null,
29191
29446
  access: "create"
29192
29447
  },
29448
+ "terminalSession.createInstance": {
29449
+ capName: "terminal-session",
29450
+ capScope: "system",
29451
+ addonId: null,
29452
+ access: "create"
29453
+ },
29454
+ "terminalSession.deleteInstance": {
29455
+ capName: "terminal-session",
29456
+ capScope: "system",
29457
+ addonId: null,
29458
+ access: "delete"
29459
+ },
29460
+ "terminalSession.listInstances": {
29461
+ capName: "terminal-session",
29462
+ capScope: "system",
29463
+ addonId: null,
29464
+ access: "view"
29465
+ },
29466
+ "terminalSession.listLegacyCameras": {
29467
+ capName: "terminal-session",
29468
+ capScope: "system",
29469
+ addonId: null,
29470
+ access: "view"
29471
+ },
29193
29472
  "terminalSession.listProfiles": {
29194
29473
  capName: "terminal-session",
29195
29474
  capScope: "system",
@@ -29220,6 +29499,12 @@ Object.freeze({
29220
29499
  addonId: null,
29221
29500
  access: "create"
29222
29501
  },
29502
+ "terminalSession.setInstanceEnabled": {
29503
+ capName: "terminal-session",
29504
+ capScope: "system",
29505
+ addonId: null,
29506
+ access: "create"
29507
+ },
29223
29508
  "terminalSession.writeInput": {
29224
29509
  capName: "terminal-session",
29225
29510
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-smtp-nodemailer",
3
- "version": "1.2.11",
3
+ "version": "1.2.12",
4
4
  "description": "SMTP email provider addon for CamStack — wraps `nodemailer` and registers a `smtp-provider` cap collection entry. Used by magic-link login + notifier addons.",
5
5
  "keywords": [
6
6
  "camstack",