@camstack/addon-provider-tuya 0.2.12 → 0.2.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/addon.js +316 -31
  2. package/dist/addon.mjs +316 -31
  3. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -8385,12 +8385,11 @@ var RecordingConfigSchema = object({
8385
8385
  /**
8386
8386
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
8387
8387
  *
8388
- * One shape shared by the recorder's `relocateFootage` (segments) and
8389
- * pipeline-analytics' `relocateMedia` (event media blobs) so the admin Data
8390
- * page renders both movers with one component. Jobs are in-RAM (a restart
8391
- * forgets them re-running is safe by construction: copy-if-absent, delete
8392
- * after verify) and each completed/failed run also lands one durable ops-log
8393
- * row on the owning addon's surface.
8388
+ * One shape shared by the recorder and pipeline-analytics internal movers.
8389
+ * The public admin surface is `storage-migration`; child jobs remain in RAM
8390
+ * because copy-if-absent, verify, delete and index/row repoint are resumable.
8391
+ * Each completed/failed run also lands one durable ops-log row on its owning
8392
+ * addon surface.
8394
8393
  */
8395
8394
  var RelocateJobStateSchema = _enum([
8396
8395
  "running",
@@ -8417,19 +8416,100 @@ var RelocateJobSchema = object({
8417
8416
  finishedAt: number().nullable(),
8418
8417
  error: string().nullable()
8419
8418
  });
8419
+ /** Profile-derived footage selection used only by the migration coordinator:
8420
+ * `recordings` owns high+mid; `recordingsLow` owns low. */
8421
+ var RelocateFootageClassSchema = _enum(["recordings", "recordingsLow"]);
8420
8422
  var RelocateFootageInputSchema = object({
8421
- deviceId: number().optional(),
8422
8423
  fromLocationId: string(),
8423
8424
  toLocationId: string(),
8424
8425
  entities: array(_enum(["segments"])).optional(),
8426
+ /** Limits relocation to the logical profile class. Omit only for the
8427
+ * pre-orchestration compatibility path. */
8428
+ footageClass: RelocateFootageClassSchema.optional(),
8425
8429
  /** Copy throttle in MB/s (default 40) — the drain is a background chore,
8426
8430
  * never allowed to starve live writers. */
8427
8431
  throttleMbps: number().min(1).max(1e3).optional()
8428
8432
  });
8429
- var RelocateMediaInputSchema = object({
8430
- deviceId: number().optional(),
8433
+ /** Internal, lease-scoped participant operation. It is intentionally separate
8434
+ * from persistent recording settings: a migration never changes
8435
+ * `RecordingConfig.enabled` or camera wrapper bindings. */
8436
+ var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
8437
+ var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
8438
+ var StorageMigrationMediaMoveInputSchema = object({
8431
8439
  toLocationId: string(),
8432
8440
  throttleMbps: number().min(1).max(1e3).optional()
8441
+ }).extend({ leaseId: string().min(1) });
8442
+ /** The independently selectable logical storage classes. `recordings`
8443
+ * encompasses the high and mid segment profiles; `recordingsLow` is low
8444
+ * segments; `eventMedia` is post-analysis blobs. */
8445
+ var StorageMigrationClassSchema = _enum([
8446
+ "recordings",
8447
+ "recordingsLow",
8448
+ "eventMedia"
8449
+ ]);
8450
+ /** A destination is always an existing, fully-qualified location id. The
8451
+ * migration API intentionally never changes a source location's `basePath`:
8452
+ * callers create a new `<type>:<slug>` location, then select it here. */
8453
+ var StorageMigrationDestinationsSchema = object({
8454
+ recordings: string().min(1).optional(),
8455
+ recordingsLow: string().min(1).optional(),
8456
+ eventMedia: string().min(1).optional()
8457
+ }).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
8458
+ /** Shared input for planning and starting an orchestrated storage migration. */
8459
+ var StorageMigrationInputSchema = object({
8460
+ destinations: StorageMigrationDestinationsSchema,
8461
+ throttleMbps: number().min(1).max(1e3).optional()
8462
+ });
8463
+ /** The durable coordinator state machine. The only phase that changes default
8464
+ * locations is `repointing`, after every selected mover has completed and been
8465
+ * verified. */
8466
+ var StorageMigrationPhaseSchema = _enum([
8467
+ "planning",
8468
+ "pausing",
8469
+ "moving",
8470
+ "verifying",
8471
+ "repointing",
8472
+ "refreshing",
8473
+ "resuming",
8474
+ "done",
8475
+ "failed",
8476
+ "cancelled"
8477
+ ]);
8478
+ var StorageMigrationParticipantSchema = _enum([
8479
+ "pipeline",
8480
+ "recorder",
8481
+ "analytics"
8482
+ ]);
8483
+ var StorageMigrationMoveSchema = object({
8484
+ storageClass: StorageMigrationClassSchema,
8485
+ fromLocationId: string(),
8486
+ toLocationId: string(),
8487
+ moverJobId: string().nullable(),
8488
+ state: RelocateJobStateSchema.nullable(),
8489
+ error: string().nullable()
8490
+ });
8491
+ var StorageMigrationJobSchema = object({
8492
+ jobId: string(),
8493
+ phase: StorageMigrationPhaseSchema,
8494
+ destinations: StorageMigrationDestinationsSchema,
8495
+ throttleMbps: number(),
8496
+ moves: array(StorageMigrationMoveSchema),
8497
+ pauseLeaseId: string().nullable(),
8498
+ pausedParticipants: array(StorageMigrationParticipantSchema),
8499
+ repointed: boolean(),
8500
+ cancelRequested: boolean(),
8501
+ startedAt: number(),
8502
+ updatedAt: number(),
8503
+ finishedAt: number().nullable(),
8504
+ error: string().nullable()
8505
+ });
8506
+ var StorageMigrationPlanSchema = object({
8507
+ destinations: StorageMigrationDestinationsSchema,
8508
+ moves: array(object({
8509
+ storageClass: StorageMigrationClassSchema,
8510
+ fromLocationId: string(),
8511
+ toLocationId: string()
8512
+ }))
8433
8513
  });
8434
8514
  /**
8435
8515
  * `StorageLocationType` — an addon-declared id that identifies the *kind* of
@@ -17100,13 +17180,19 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
17100
17180
  }), method(object({ deviceId: number() }), EventPruneCountsSchema, {
17101
17181
  kind: "mutation",
17102
17182
  auth: "admin"
17103
- }), method(RelocateMediaInputSchema, object({ jobId: string() }), {
17183
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
17104
17184
  kind: "mutation",
17105
17185
  auth: "admin"
17106
- }), method(object({}), array(RelocateJobSchema).readonly(), {
17107
- kind: "query",
17186
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
17187
+ kind: "mutation",
17188
+ auth: "admin"
17189
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
17190
+ kind: "mutation",
17191
+ auth: "admin"
17192
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
17193
+ kind: "mutation",
17108
17194
  auth: "admin"
17109
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
17195
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
17110
17196
  kind: "mutation",
17111
17197
  auth: "admin"
17112
17198
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
@@ -18636,7 +18722,13 @@ var NodeInferenceDevicesSchema = object({
18636
18722
  reachable: boolean(),
18637
18723
  devices: array(NodeInferenceDeviceSchema).readonly()
18638
18724
  });
18639
- method(object({
18725
+ method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
18726
+ kind: "mutation",
18727
+ auth: "admin"
18728
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
18729
+ kind: "mutation",
18730
+ auth: "admin"
18731
+ }), method(object({
18640
18732
  deviceId: number(),
18641
18733
  agentNodeId: string()
18642
18734
  }), object({ success: literal(true) }), {
@@ -19310,6 +19402,13 @@ method(object({ locationId: string() }), EvictableUsageSchema), method(object({
19310
19402
  locationId: string(),
19311
19403
  targetBytes: number().int().positive()
19312
19404
  }), EvictResultSchema, { kind: "mutation" });
19405
+ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
19406
+ kind: "mutation",
19407
+ auth: "admin"
19408
+ }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
19409
+ kind: "mutation",
19410
+ auth: "admin"
19411
+ });
19313
19412
  var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
19314
19413
  providerId: string().min(1),
19315
19414
  displayName: string().min(1),
@@ -19413,6 +19512,28 @@ var TerminalProfileInfoSchema = object({
19413
19512
  label: string(),
19414
19513
  description: string().optional()
19415
19514
  });
19515
+ /**
19516
+ * A durable operator-created Terminal instance. Profiles are templates; only
19517
+ * an instance declares a camera.
19518
+ */
19519
+ var TerminalInstanceInfoSchema = object({
19520
+ instanceId: string(),
19521
+ cameraStableId: string(),
19522
+ nodeId: string(),
19523
+ profileId: string(),
19524
+ profileLabel: string(),
19525
+ name: string(),
19526
+ enabled: boolean()
19527
+ });
19528
+ var TerminalLegacyCameraSchema = object({
19529
+ stableId: string(),
19530
+ nodeId: string(),
19531
+ profileId: string(),
19532
+ profileLabel: string(),
19533
+ name: string(),
19534
+ /** Only legacy monitor cameras can retain their historic stable identity. */
19535
+ adoptable: boolean()
19536
+ });
19416
19537
  var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
19417
19538
  seq: number().int().positive(),
19418
19539
  kind: literal("data"),
@@ -19429,7 +19550,29 @@ var TerminalOutputBatchSchema = object({
19429
19550
  snapshot: string().optional(),
19430
19551
  events: array(TerminalOutputEventSchema).readonly()
19431
19552
  });
19432
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
19553
+ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
19554
+ targetNodeId: string().min(1),
19555
+ profileId: string().min(1),
19556
+ name: string().trim().min(1).max(160).optional()
19557
+ }), TerminalInstanceInfoSchema, {
19558
+ kind: "mutation",
19559
+ auth: "admin"
19560
+ }), method(object({ instanceId: string().min(1) }), _void(), {
19561
+ kind: "mutation",
19562
+ auth: "admin"
19563
+ }), method(object({
19564
+ instanceId: string().min(1),
19565
+ enabled: boolean()
19566
+ }), TerminalInstanceInfoSchema, {
19567
+ kind: "mutation",
19568
+ auth: "admin"
19569
+ }), method(_void(), array(TerminalLegacyCameraSchema).readonly(), { auth: "admin" }), method(object({
19570
+ stableId: string().min(1),
19571
+ name: string().trim().min(1).max(160).optional()
19572
+ }), TerminalInstanceInfoSchema, {
19573
+ kind: "mutation",
19574
+ auth: "admin"
19575
+ }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
19433
19576
  profileId: string(),
19434
19577
  cols: number().int().positive(),
19435
19578
  rows: number().int().positive()
@@ -19446,7 +19589,13 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
19446
19589
  }), method(object({
19447
19590
  sessionId: string(),
19448
19591
  afterSeq: number().int().nonnegative(),
19449
- waitMs: number().int().min(0).max(2e3).default(0)
19592
+ waitMs: number().int().min(0).max(2e3).default(0),
19593
+ /**
19594
+ * Wait when a just-opened session has no output yet. Kept opt-in so a
19595
+ * browser's initial repaint remains immediate; the camera snapshot
19596
+ * relay uses it to avoid encoding a blank startup frame.
19597
+ */
19598
+ waitForOutput: boolean().optional()
19450
19599
  }), TerminalOutputBatchSchema, {
19451
19600
  kind: "mutation",
19452
19601
  auth: "admin",
@@ -21952,6 +22101,7 @@ var FaceInfoSchema = object({
21952
22101
  var FaceFilterEnum = _enum([
21953
22102
  "unassigned",
21954
22103
  "recognized",
22104
+ "identified",
21955
22105
  "all"
21956
22106
  ]);
21957
22107
  var MediaFileLiteSchema$1 = object({
@@ -21980,6 +22130,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
21980
22130
  kind: "mutation",
21981
22131
  auth: "admin"
21982
22132
  }), method(object({
22133
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
22134
+ deviceId: number().int().optional(),
21983
22135
  limit: number().int().positive().optional(),
21984
22136
  filter: FaceFilterEnum.optional(),
21985
22137
  /**
@@ -24209,6 +24361,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
24209
24361
  capName: string().min(1).max(64),
24210
24362
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
24211
24363
  valuePath: string().min(1).max(64)
24364
+ }),
24365
+ object({
24366
+ kind: literal("latest-recognition"),
24367
+ recognition: _enum(["person", "plate"])
24212
24368
  })
24213
24369
  ]);
24214
24370
  var OsdSlotBindingSchema = object({
@@ -24314,6 +24470,15 @@ method(object({ deviceId: number().int() }), object({
24314
24470
  }), object({ success: literal(true) }), {
24315
24471
  kind: "mutation",
24316
24472
  auth: "admin"
24473
+ }), method(object({
24474
+ sourceDeviceId: number().int(),
24475
+ targetDeviceId: number().int()
24476
+ }), object({
24477
+ copied: number().int().nonnegative(),
24478
+ skipped: number().int().nonnegative()
24479
+ }), {
24480
+ kind: "mutation",
24481
+ auth: "admin"
24317
24482
  }), method(object({
24318
24483
  deviceId: number().int(),
24319
24484
  slotId: string().min(1),
@@ -25411,13 +25576,19 @@ method(object({
25411
25576
  }), {
25412
25577
  kind: "mutation",
25413
25578
  auth: "admin"
25414
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
25579
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
25415
25580
  kind: "mutation",
25416
25581
  auth: "admin"
25417
- }), method(object({}), array(RelocateJobSchema).readonly(), {
25418
- kind: "query",
25582
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
25583
+ kind: "mutation",
25419
25584
  auth: "admin"
25420
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
25585
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
25586
+ kind: "mutation",
25587
+ auth: "admin"
25588
+ }), method(StorageMigrationFootageMoveInputSchema, object({ jobId: string() }), {
25589
+ kind: "mutation",
25590
+ auth: "admin"
25591
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
25421
25592
  kind: "mutation",
25422
25593
  auth: "admin"
25423
25594
  });
@@ -31023,6 +31194,12 @@ Object.freeze({
31023
31194
  addonId: null,
31024
31195
  access: "delete"
31025
31196
  },
31197
+ "osdManager.copyDeviceConfiguration": {
31198
+ capName: "osd-manager",
31199
+ capScope: "system",
31200
+ addonId: null,
31201
+ access: "create"
31202
+ },
31026
31203
  "osdManager.getConditionSupport": {
31027
31204
  capName: "osd-manager",
31028
31205
  capScope: "system",
@@ -31119,7 +31296,7 @@ Object.freeze({
31119
31296
  addonId: null,
31120
31297
  access: "create"
31121
31298
  },
31122
- "pipelineAnalytics.cancelMediaRelocate": {
31299
+ "pipelineAnalytics.cancelStorageMigrationMove": {
31123
31300
  capName: "pipeline-analytics",
31124
31301
  capScope: "device",
31125
31302
  addonId: null,
@@ -31191,12 +31368,6 @@ Object.freeze({
31191
31368
  addonId: null,
31192
31369
  access: "view"
31193
31370
  },
31194
- "pipelineAnalytics.getMediaRelocateStatus": {
31195
- capName: "pipeline-analytics",
31196
- capScope: "device",
31197
- addonId: null,
31198
- access: "view"
31199
- },
31200
31371
  "pipelineAnalytics.getMotionEvents": {
31201
31372
  capName: "pipeline-analytics",
31202
31373
  capScope: "device",
@@ -31233,6 +31404,12 @@ Object.freeze({
31233
31404
  addonId: null,
31234
31405
  access: "view"
31235
31406
  },
31407
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
31408
+ capName: "pipeline-analytics",
31409
+ capScope: "device",
31410
+ addonId: null,
31411
+ access: "view"
31412
+ },
31236
31413
  "pipelineAnalytics.getTrack": {
31237
31414
  capName: "pipeline-analytics",
31238
31415
  capScope: "device",
@@ -31311,6 +31488,12 @@ Object.freeze({
31311
31488
  addonId: null,
31312
31489
  access: "view"
31313
31490
  },
31491
+ "pipelineAnalytics.pauseForStorageMigration": {
31492
+ capName: "pipeline-analytics",
31493
+ capScope: "device",
31494
+ addonId: null,
31495
+ access: "create"
31496
+ },
31314
31497
  "pipelineAnalytics.proposeRetrainAnnotations": {
31315
31498
  capName: "pipeline-analytics",
31316
31499
  capScope: "device",
@@ -31341,7 +31524,7 @@ Object.freeze({
31341
31524
  addonId: null,
31342
31525
  access: "create"
31343
31526
  },
31344
- "pipelineAnalytics.relocateMedia": {
31527
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
31345
31528
  capName: "pipeline-analytics",
31346
31529
  capScope: "device",
31347
31530
  addonId: null,
@@ -31353,6 +31536,12 @@ Object.freeze({
31353
31536
  addonId: null,
31354
31537
  access: "create"
31355
31538
  },
31539
+ "pipelineAnalytics.resumeForStorageMigration": {
31540
+ capName: "pipeline-analytics",
31541
+ capScope: "device",
31542
+ addonId: null,
31543
+ access: "create"
31544
+ },
31356
31545
  "pipelineAnalytics.saveRetrainAnnotations": {
31357
31546
  capName: "pipeline-analytics",
31358
31547
  capScope: "device",
@@ -31377,6 +31566,12 @@ Object.freeze({
31377
31566
  addonId: null,
31378
31567
  access: "create"
31379
31568
  },
31569
+ "pipelineAnalytics.startStorageMigrationMove": {
31570
+ capName: "pipeline-analytics",
31571
+ capScope: "device",
31572
+ addonId: null,
31573
+ access: "create"
31574
+ },
31380
31575
  "pipelineAnalytics.wipeAllAnalytics": {
31381
31576
  capName: "pipeline-analytics",
31382
31577
  capScope: "device",
@@ -31743,6 +31938,12 @@ Object.freeze({
31743
31938
  addonId: null,
31744
31939
  access: "view"
31745
31940
  },
31941
+ "pipelineOrchestrator.pauseForStorageMigration": {
31942
+ capName: "pipeline-orchestrator",
31943
+ capScope: "system",
31944
+ addonId: null,
31945
+ access: "create"
31946
+ },
31746
31947
  "pipelineOrchestrator.rebalance": {
31747
31948
  capName: "pipeline-orchestrator",
31748
31949
  capScope: "system",
@@ -31767,6 +31968,12 @@ Object.freeze({
31767
31968
  addonId: null,
31768
31969
  access: "view"
31769
31970
  },
31971
+ "pipelineOrchestrator.resumeForStorageMigration": {
31972
+ capName: "pipeline-orchestrator",
31973
+ capScope: "system",
31974
+ addonId: null,
31975
+ access: "create"
31976
+ },
31770
31977
  "pipelineOrchestrator.saveTemplate": {
31771
31978
  capName: "pipeline-orchestrator",
31772
31979
  capScope: "system",
@@ -32163,7 +32370,7 @@ Object.freeze({
32163
32370
  addonId: null,
32164
32371
  access: "create"
32165
32372
  },
32166
- "recording.cancelRelocate": {
32373
+ "recording.cancelStorageMigrationMove": {
32167
32374
  capName: "recording",
32168
32375
  capScope: "system",
32169
32376
  addonId: null,
@@ -32199,7 +32406,7 @@ Object.freeze({
32199
32406
  addonId: null,
32200
32407
  access: "view"
32201
32408
  },
32202
- "recording.getRelocateStatus": {
32409
+ "recording.getStorageMigrationMoveStatus": {
32203
32410
  capName: "recording",
32204
32411
  capScope: "system",
32205
32412
  addonId: null,
@@ -32223,6 +32430,12 @@ Object.freeze({
32223
32430
  addonId: null,
32224
32431
  access: "view"
32225
32432
  },
32433
+ "recording.pauseForStorageMigration": {
32434
+ capName: "recording",
32435
+ capScope: "system",
32436
+ addonId: null,
32437
+ access: "create"
32438
+ },
32226
32439
  "recording.pruneFootage": {
32227
32440
  capName: "recording",
32228
32441
  capScope: "system",
@@ -32241,7 +32454,7 @@ Object.freeze({
32241
32454
  addonId: null,
32242
32455
  access: "view"
32243
32456
  },
32244
- "recording.relocateFootage": {
32457
+ "recording.refreshStorageLocationsForMigration": {
32245
32458
  capName: "recording",
32246
32459
  capScope: "system",
32247
32460
  addonId: null,
@@ -32265,12 +32478,24 @@ Object.freeze({
32265
32478
  addonId: null,
32266
32479
  access: "create"
32267
32480
  },
32481
+ "recording.resumeForStorageMigration": {
32482
+ capName: "recording",
32483
+ capScope: "system",
32484
+ addonId: null,
32485
+ access: "create"
32486
+ },
32268
32487
  "recording.setDeviceConfig": {
32269
32488
  capName: "recording",
32270
32489
  capScope: "system",
32271
32490
  addonId: null,
32272
32491
  access: "create"
32273
32492
  },
32493
+ "recording.startStorageMigrationMove": {
32494
+ capName: "recording",
32495
+ capScope: "system",
32496
+ addonId: null,
32497
+ access: "create"
32498
+ },
32274
32499
  "recordingExport.cancelExport": {
32275
32500
  capName: "recordingExport",
32276
32501
  capScope: "system",
@@ -32661,6 +32886,30 @@ Object.freeze({
32661
32886
  addonId: null,
32662
32887
  access: "view"
32663
32888
  },
32889
+ "storageMigration.cancel": {
32890
+ capName: "storage-migration",
32891
+ capScope: "system",
32892
+ addonId: null,
32893
+ access: "create"
32894
+ },
32895
+ "storageMigration.plan": {
32896
+ capName: "storage-migration",
32897
+ capScope: "system",
32898
+ addonId: null,
32899
+ access: "view"
32900
+ },
32901
+ "storageMigration.start": {
32902
+ capName: "storage-migration",
32903
+ capScope: "system",
32904
+ addonId: null,
32905
+ access: "create"
32906
+ },
32907
+ "storageMigration.status": {
32908
+ capName: "storage-migration",
32909
+ capScope: "system",
32910
+ addonId: null,
32911
+ access: "view"
32912
+ },
32664
32913
  "storageProvider.abortUpload": {
32665
32914
  capName: "storage-provider",
32666
32915
  capScope: "system",
@@ -33039,12 +33288,42 @@ Object.freeze({
33039
33288
  addonId: null,
33040
33289
  access: "create"
33041
33290
  },
33291
+ "terminalSession.adoptLegacyMonitor": {
33292
+ capName: "terminal-session",
33293
+ capScope: "system",
33294
+ addonId: null,
33295
+ access: "create"
33296
+ },
33042
33297
  "terminalSession.close": {
33043
33298
  capName: "terminal-session",
33044
33299
  capScope: "system",
33045
33300
  addonId: null,
33046
33301
  access: "create"
33047
33302
  },
33303
+ "terminalSession.createInstance": {
33304
+ capName: "terminal-session",
33305
+ capScope: "system",
33306
+ addonId: null,
33307
+ access: "create"
33308
+ },
33309
+ "terminalSession.deleteInstance": {
33310
+ capName: "terminal-session",
33311
+ capScope: "system",
33312
+ addonId: null,
33313
+ access: "delete"
33314
+ },
33315
+ "terminalSession.listInstances": {
33316
+ capName: "terminal-session",
33317
+ capScope: "system",
33318
+ addonId: null,
33319
+ access: "view"
33320
+ },
33321
+ "terminalSession.listLegacyCameras": {
33322
+ capName: "terminal-session",
33323
+ capScope: "system",
33324
+ addonId: null,
33325
+ access: "view"
33326
+ },
33048
33327
  "terminalSession.listProfiles": {
33049
33328
  capName: "terminal-session",
33050
33329
  capScope: "system",
@@ -33075,6 +33354,12 @@ Object.freeze({
33075
33354
  addonId: null,
33076
33355
  access: "create"
33077
33356
  },
33357
+ "terminalSession.setInstanceEnabled": {
33358
+ capName: "terminal-session",
33359
+ capScope: "system",
33360
+ addonId: null,
33361
+ access: "create"
33362
+ },
33078
33363
  "terminalSession.writeInput": {
33079
33364
  capName: "terminal-session",
33080
33365
  capScope: "system",
package/dist/addon.mjs CHANGED
@@ -8384,12 +8384,11 @@ var RecordingConfigSchema = object({
8384
8384
  /**
8385
8385
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
8386
8386
  *
8387
- * One shape shared by the recorder's `relocateFootage` (segments) and
8388
- * pipeline-analytics' `relocateMedia` (event media blobs) so the admin Data
8389
- * page renders both movers with one component. Jobs are in-RAM (a restart
8390
- * forgets them re-running is safe by construction: copy-if-absent, delete
8391
- * after verify) and each completed/failed run also lands one durable ops-log
8392
- * row on the owning addon's surface.
8387
+ * One shape shared by the recorder and pipeline-analytics internal movers.
8388
+ * The public admin surface is `storage-migration`; child jobs remain in RAM
8389
+ * because copy-if-absent, verify, delete and index/row repoint are resumable.
8390
+ * Each completed/failed run also lands one durable ops-log row on its owning
8391
+ * addon surface.
8393
8392
  */
8394
8393
  var RelocateJobStateSchema = _enum([
8395
8394
  "running",
@@ -8416,19 +8415,100 @@ var RelocateJobSchema = object({
8416
8415
  finishedAt: number().nullable(),
8417
8416
  error: string().nullable()
8418
8417
  });
8418
+ /** Profile-derived footage selection used only by the migration coordinator:
8419
+ * `recordings` owns high+mid; `recordingsLow` owns low. */
8420
+ var RelocateFootageClassSchema = _enum(["recordings", "recordingsLow"]);
8419
8421
  var RelocateFootageInputSchema = object({
8420
- deviceId: number().optional(),
8421
8422
  fromLocationId: string(),
8422
8423
  toLocationId: string(),
8423
8424
  entities: array(_enum(["segments"])).optional(),
8425
+ /** Limits relocation to the logical profile class. Omit only for the
8426
+ * pre-orchestration compatibility path. */
8427
+ footageClass: RelocateFootageClassSchema.optional(),
8424
8428
  /** Copy throttle in MB/s (default 40) — the drain is a background chore,
8425
8429
  * never allowed to starve live writers. */
8426
8430
  throttleMbps: number().min(1).max(1e3).optional()
8427
8431
  });
8428
- var RelocateMediaInputSchema = object({
8429
- deviceId: number().optional(),
8432
+ /** Internal, lease-scoped participant operation. It is intentionally separate
8433
+ * from persistent recording settings: a migration never changes
8434
+ * `RecordingConfig.enabled` or camera wrapper bindings. */
8435
+ var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
8436
+ var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
8437
+ var StorageMigrationMediaMoveInputSchema = object({
8430
8438
  toLocationId: string(),
8431
8439
  throttleMbps: number().min(1).max(1e3).optional()
8440
+ }).extend({ leaseId: string().min(1) });
8441
+ /** The independently selectable logical storage classes. `recordings`
8442
+ * encompasses the high and mid segment profiles; `recordingsLow` is low
8443
+ * segments; `eventMedia` is post-analysis blobs. */
8444
+ var StorageMigrationClassSchema = _enum([
8445
+ "recordings",
8446
+ "recordingsLow",
8447
+ "eventMedia"
8448
+ ]);
8449
+ /** A destination is always an existing, fully-qualified location id. The
8450
+ * migration API intentionally never changes a source location's `basePath`:
8451
+ * callers create a new `<type>:<slug>` location, then select it here. */
8452
+ var StorageMigrationDestinationsSchema = object({
8453
+ recordings: string().min(1).optional(),
8454
+ recordingsLow: string().min(1).optional(),
8455
+ eventMedia: string().min(1).optional()
8456
+ }).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
8457
+ /** Shared input for planning and starting an orchestrated storage migration. */
8458
+ var StorageMigrationInputSchema = object({
8459
+ destinations: StorageMigrationDestinationsSchema,
8460
+ throttleMbps: number().min(1).max(1e3).optional()
8461
+ });
8462
+ /** The durable coordinator state machine. The only phase that changes default
8463
+ * locations is `repointing`, after every selected mover has completed and been
8464
+ * verified. */
8465
+ var StorageMigrationPhaseSchema = _enum([
8466
+ "planning",
8467
+ "pausing",
8468
+ "moving",
8469
+ "verifying",
8470
+ "repointing",
8471
+ "refreshing",
8472
+ "resuming",
8473
+ "done",
8474
+ "failed",
8475
+ "cancelled"
8476
+ ]);
8477
+ var StorageMigrationParticipantSchema = _enum([
8478
+ "pipeline",
8479
+ "recorder",
8480
+ "analytics"
8481
+ ]);
8482
+ var StorageMigrationMoveSchema = object({
8483
+ storageClass: StorageMigrationClassSchema,
8484
+ fromLocationId: string(),
8485
+ toLocationId: string(),
8486
+ moverJobId: string().nullable(),
8487
+ state: RelocateJobStateSchema.nullable(),
8488
+ error: string().nullable()
8489
+ });
8490
+ var StorageMigrationJobSchema = object({
8491
+ jobId: string(),
8492
+ phase: StorageMigrationPhaseSchema,
8493
+ destinations: StorageMigrationDestinationsSchema,
8494
+ throttleMbps: number(),
8495
+ moves: array(StorageMigrationMoveSchema),
8496
+ pauseLeaseId: string().nullable(),
8497
+ pausedParticipants: array(StorageMigrationParticipantSchema),
8498
+ repointed: boolean(),
8499
+ cancelRequested: boolean(),
8500
+ startedAt: number(),
8501
+ updatedAt: number(),
8502
+ finishedAt: number().nullable(),
8503
+ error: string().nullable()
8504
+ });
8505
+ var StorageMigrationPlanSchema = object({
8506
+ destinations: StorageMigrationDestinationsSchema,
8507
+ moves: array(object({
8508
+ storageClass: StorageMigrationClassSchema,
8509
+ fromLocationId: string(),
8510
+ toLocationId: string()
8511
+ }))
8432
8512
  });
8433
8513
  /**
8434
8514
  * `StorageLocationType` — an addon-declared id that identifies the *kind* of
@@ -17099,13 +17179,19 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
17099
17179
  }), method(object({ deviceId: number() }), EventPruneCountsSchema, {
17100
17180
  kind: "mutation",
17101
17181
  auth: "admin"
17102
- }), method(RelocateMediaInputSchema, object({ jobId: string() }), {
17182
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
17103
17183
  kind: "mutation",
17104
17184
  auth: "admin"
17105
- }), method(object({}), array(RelocateJobSchema).readonly(), {
17106
- kind: "query",
17185
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
17186
+ kind: "mutation",
17187
+ auth: "admin"
17188
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
17189
+ kind: "mutation",
17190
+ auth: "admin"
17191
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
17192
+ kind: "mutation",
17107
17193
  auth: "admin"
17108
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
17194
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
17109
17195
  kind: "mutation",
17110
17196
  auth: "admin"
17111
17197
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
@@ -18635,7 +18721,13 @@ var NodeInferenceDevicesSchema = object({
18635
18721
  reachable: boolean(),
18636
18722
  devices: array(NodeInferenceDeviceSchema).readonly()
18637
18723
  });
18638
- method(object({
18724
+ method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
18725
+ kind: "mutation",
18726
+ auth: "admin"
18727
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
18728
+ kind: "mutation",
18729
+ auth: "admin"
18730
+ }), method(object({
18639
18731
  deviceId: number(),
18640
18732
  agentNodeId: string()
18641
18733
  }), object({ success: literal(true) }), {
@@ -19309,6 +19401,13 @@ method(object({ locationId: string() }), EvictableUsageSchema), method(object({
19309
19401
  locationId: string(),
19310
19402
  targetBytes: number().int().positive()
19311
19403
  }), EvictResultSchema, { kind: "mutation" });
19404
+ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
19405
+ kind: "mutation",
19406
+ auth: "admin"
19407
+ }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
19408
+ kind: "mutation",
19409
+ auth: "admin"
19410
+ });
19312
19411
  var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
19313
19412
  providerId: string().min(1),
19314
19413
  displayName: string().min(1),
@@ -19412,6 +19511,28 @@ var TerminalProfileInfoSchema = object({
19412
19511
  label: string(),
19413
19512
  description: string().optional()
19414
19513
  });
19514
+ /**
19515
+ * A durable operator-created Terminal instance. Profiles are templates; only
19516
+ * an instance declares a camera.
19517
+ */
19518
+ var TerminalInstanceInfoSchema = object({
19519
+ instanceId: string(),
19520
+ cameraStableId: string(),
19521
+ nodeId: string(),
19522
+ profileId: string(),
19523
+ profileLabel: string(),
19524
+ name: string(),
19525
+ enabled: boolean()
19526
+ });
19527
+ var TerminalLegacyCameraSchema = object({
19528
+ stableId: string(),
19529
+ nodeId: string(),
19530
+ profileId: string(),
19531
+ profileLabel: string(),
19532
+ name: string(),
19533
+ /** Only legacy monitor cameras can retain their historic stable identity. */
19534
+ adoptable: boolean()
19535
+ });
19415
19536
  var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
19416
19537
  seq: number().int().positive(),
19417
19538
  kind: literal("data"),
@@ -19428,7 +19549,29 @@ var TerminalOutputBatchSchema = object({
19428
19549
  snapshot: string().optional(),
19429
19550
  events: array(TerminalOutputEventSchema).readonly()
19430
19551
  });
19431
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
19552
+ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
19553
+ targetNodeId: string().min(1),
19554
+ profileId: string().min(1),
19555
+ name: string().trim().min(1).max(160).optional()
19556
+ }), TerminalInstanceInfoSchema, {
19557
+ kind: "mutation",
19558
+ auth: "admin"
19559
+ }), method(object({ instanceId: string().min(1) }), _void(), {
19560
+ kind: "mutation",
19561
+ auth: "admin"
19562
+ }), method(object({
19563
+ instanceId: string().min(1),
19564
+ enabled: boolean()
19565
+ }), TerminalInstanceInfoSchema, {
19566
+ kind: "mutation",
19567
+ auth: "admin"
19568
+ }), method(_void(), array(TerminalLegacyCameraSchema).readonly(), { auth: "admin" }), method(object({
19569
+ stableId: string().min(1),
19570
+ name: string().trim().min(1).max(160).optional()
19571
+ }), TerminalInstanceInfoSchema, {
19572
+ kind: "mutation",
19573
+ auth: "admin"
19574
+ }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
19432
19575
  profileId: string(),
19433
19576
  cols: number().int().positive(),
19434
19577
  rows: number().int().positive()
@@ -19445,7 +19588,13 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
19445
19588
  }), method(object({
19446
19589
  sessionId: string(),
19447
19590
  afterSeq: number().int().nonnegative(),
19448
- waitMs: number().int().min(0).max(2e3).default(0)
19591
+ waitMs: number().int().min(0).max(2e3).default(0),
19592
+ /**
19593
+ * Wait when a just-opened session has no output yet. Kept opt-in so a
19594
+ * browser's initial repaint remains immediate; the camera snapshot
19595
+ * relay uses it to avoid encoding a blank startup frame.
19596
+ */
19597
+ waitForOutput: boolean().optional()
19449
19598
  }), TerminalOutputBatchSchema, {
19450
19599
  kind: "mutation",
19451
19600
  auth: "admin",
@@ -21951,6 +22100,7 @@ var FaceInfoSchema = object({
21951
22100
  var FaceFilterEnum = _enum([
21952
22101
  "unassigned",
21953
22102
  "recognized",
22103
+ "identified",
21954
22104
  "all"
21955
22105
  ]);
21956
22106
  var MediaFileLiteSchema$1 = object({
@@ -21979,6 +22129,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
21979
22129
  kind: "mutation",
21980
22130
  auth: "admin"
21981
22131
  }), method(object({
22132
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
22133
+ deviceId: number().int().optional(),
21982
22134
  limit: number().int().positive().optional(),
21983
22135
  filter: FaceFilterEnum.optional(),
21984
22136
  /**
@@ -24208,6 +24360,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
24208
24360
  capName: string().min(1).max(64),
24209
24361
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
24210
24362
  valuePath: string().min(1).max(64)
24363
+ }),
24364
+ object({
24365
+ kind: literal("latest-recognition"),
24366
+ recognition: _enum(["person", "plate"])
24211
24367
  })
24212
24368
  ]);
24213
24369
  var OsdSlotBindingSchema = object({
@@ -24313,6 +24469,15 @@ method(object({ deviceId: number().int() }), object({
24313
24469
  }), object({ success: literal(true) }), {
24314
24470
  kind: "mutation",
24315
24471
  auth: "admin"
24472
+ }), method(object({
24473
+ sourceDeviceId: number().int(),
24474
+ targetDeviceId: number().int()
24475
+ }), object({
24476
+ copied: number().int().nonnegative(),
24477
+ skipped: number().int().nonnegative()
24478
+ }), {
24479
+ kind: "mutation",
24480
+ auth: "admin"
24316
24481
  }), method(object({
24317
24482
  deviceId: number().int(),
24318
24483
  slotId: string().min(1),
@@ -25410,13 +25575,19 @@ method(object({
25410
25575
  }), {
25411
25576
  kind: "mutation",
25412
25577
  auth: "admin"
25413
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
25578
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
25414
25579
  kind: "mutation",
25415
25580
  auth: "admin"
25416
- }), method(object({}), array(RelocateJobSchema).readonly(), {
25417
- kind: "query",
25581
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
25582
+ kind: "mutation",
25418
25583
  auth: "admin"
25419
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
25584
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
25585
+ kind: "mutation",
25586
+ auth: "admin"
25587
+ }), method(StorageMigrationFootageMoveInputSchema, object({ jobId: string() }), {
25588
+ kind: "mutation",
25589
+ auth: "admin"
25590
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
25420
25591
  kind: "mutation",
25421
25592
  auth: "admin"
25422
25593
  });
@@ -31022,6 +31193,12 @@ Object.freeze({
31022
31193
  addonId: null,
31023
31194
  access: "delete"
31024
31195
  },
31196
+ "osdManager.copyDeviceConfiguration": {
31197
+ capName: "osd-manager",
31198
+ capScope: "system",
31199
+ addonId: null,
31200
+ access: "create"
31201
+ },
31025
31202
  "osdManager.getConditionSupport": {
31026
31203
  capName: "osd-manager",
31027
31204
  capScope: "system",
@@ -31118,7 +31295,7 @@ Object.freeze({
31118
31295
  addonId: null,
31119
31296
  access: "create"
31120
31297
  },
31121
- "pipelineAnalytics.cancelMediaRelocate": {
31298
+ "pipelineAnalytics.cancelStorageMigrationMove": {
31122
31299
  capName: "pipeline-analytics",
31123
31300
  capScope: "device",
31124
31301
  addonId: null,
@@ -31190,12 +31367,6 @@ Object.freeze({
31190
31367
  addonId: null,
31191
31368
  access: "view"
31192
31369
  },
31193
- "pipelineAnalytics.getMediaRelocateStatus": {
31194
- capName: "pipeline-analytics",
31195
- capScope: "device",
31196
- addonId: null,
31197
- access: "view"
31198
- },
31199
31370
  "pipelineAnalytics.getMotionEvents": {
31200
31371
  capName: "pipeline-analytics",
31201
31372
  capScope: "device",
@@ -31232,6 +31403,12 @@ Object.freeze({
31232
31403
  addonId: null,
31233
31404
  access: "view"
31234
31405
  },
31406
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
31407
+ capName: "pipeline-analytics",
31408
+ capScope: "device",
31409
+ addonId: null,
31410
+ access: "view"
31411
+ },
31235
31412
  "pipelineAnalytics.getTrack": {
31236
31413
  capName: "pipeline-analytics",
31237
31414
  capScope: "device",
@@ -31310,6 +31487,12 @@ Object.freeze({
31310
31487
  addonId: null,
31311
31488
  access: "view"
31312
31489
  },
31490
+ "pipelineAnalytics.pauseForStorageMigration": {
31491
+ capName: "pipeline-analytics",
31492
+ capScope: "device",
31493
+ addonId: null,
31494
+ access: "create"
31495
+ },
31313
31496
  "pipelineAnalytics.proposeRetrainAnnotations": {
31314
31497
  capName: "pipeline-analytics",
31315
31498
  capScope: "device",
@@ -31340,7 +31523,7 @@ Object.freeze({
31340
31523
  addonId: null,
31341
31524
  access: "create"
31342
31525
  },
31343
- "pipelineAnalytics.relocateMedia": {
31526
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
31344
31527
  capName: "pipeline-analytics",
31345
31528
  capScope: "device",
31346
31529
  addonId: null,
@@ -31352,6 +31535,12 @@ Object.freeze({
31352
31535
  addonId: null,
31353
31536
  access: "create"
31354
31537
  },
31538
+ "pipelineAnalytics.resumeForStorageMigration": {
31539
+ capName: "pipeline-analytics",
31540
+ capScope: "device",
31541
+ addonId: null,
31542
+ access: "create"
31543
+ },
31355
31544
  "pipelineAnalytics.saveRetrainAnnotations": {
31356
31545
  capName: "pipeline-analytics",
31357
31546
  capScope: "device",
@@ -31376,6 +31565,12 @@ Object.freeze({
31376
31565
  addonId: null,
31377
31566
  access: "create"
31378
31567
  },
31568
+ "pipelineAnalytics.startStorageMigrationMove": {
31569
+ capName: "pipeline-analytics",
31570
+ capScope: "device",
31571
+ addonId: null,
31572
+ access: "create"
31573
+ },
31379
31574
  "pipelineAnalytics.wipeAllAnalytics": {
31380
31575
  capName: "pipeline-analytics",
31381
31576
  capScope: "device",
@@ -31742,6 +31937,12 @@ Object.freeze({
31742
31937
  addonId: null,
31743
31938
  access: "view"
31744
31939
  },
31940
+ "pipelineOrchestrator.pauseForStorageMigration": {
31941
+ capName: "pipeline-orchestrator",
31942
+ capScope: "system",
31943
+ addonId: null,
31944
+ access: "create"
31945
+ },
31745
31946
  "pipelineOrchestrator.rebalance": {
31746
31947
  capName: "pipeline-orchestrator",
31747
31948
  capScope: "system",
@@ -31766,6 +31967,12 @@ Object.freeze({
31766
31967
  addonId: null,
31767
31968
  access: "view"
31768
31969
  },
31970
+ "pipelineOrchestrator.resumeForStorageMigration": {
31971
+ capName: "pipeline-orchestrator",
31972
+ capScope: "system",
31973
+ addonId: null,
31974
+ access: "create"
31975
+ },
31769
31976
  "pipelineOrchestrator.saveTemplate": {
31770
31977
  capName: "pipeline-orchestrator",
31771
31978
  capScope: "system",
@@ -32162,7 +32369,7 @@ Object.freeze({
32162
32369
  addonId: null,
32163
32370
  access: "create"
32164
32371
  },
32165
- "recording.cancelRelocate": {
32372
+ "recording.cancelStorageMigrationMove": {
32166
32373
  capName: "recording",
32167
32374
  capScope: "system",
32168
32375
  addonId: null,
@@ -32198,7 +32405,7 @@ Object.freeze({
32198
32405
  addonId: null,
32199
32406
  access: "view"
32200
32407
  },
32201
- "recording.getRelocateStatus": {
32408
+ "recording.getStorageMigrationMoveStatus": {
32202
32409
  capName: "recording",
32203
32410
  capScope: "system",
32204
32411
  addonId: null,
@@ -32222,6 +32429,12 @@ Object.freeze({
32222
32429
  addonId: null,
32223
32430
  access: "view"
32224
32431
  },
32432
+ "recording.pauseForStorageMigration": {
32433
+ capName: "recording",
32434
+ capScope: "system",
32435
+ addonId: null,
32436
+ access: "create"
32437
+ },
32225
32438
  "recording.pruneFootage": {
32226
32439
  capName: "recording",
32227
32440
  capScope: "system",
@@ -32240,7 +32453,7 @@ Object.freeze({
32240
32453
  addonId: null,
32241
32454
  access: "view"
32242
32455
  },
32243
- "recording.relocateFootage": {
32456
+ "recording.refreshStorageLocationsForMigration": {
32244
32457
  capName: "recording",
32245
32458
  capScope: "system",
32246
32459
  addonId: null,
@@ -32264,12 +32477,24 @@ Object.freeze({
32264
32477
  addonId: null,
32265
32478
  access: "create"
32266
32479
  },
32480
+ "recording.resumeForStorageMigration": {
32481
+ capName: "recording",
32482
+ capScope: "system",
32483
+ addonId: null,
32484
+ access: "create"
32485
+ },
32267
32486
  "recording.setDeviceConfig": {
32268
32487
  capName: "recording",
32269
32488
  capScope: "system",
32270
32489
  addonId: null,
32271
32490
  access: "create"
32272
32491
  },
32492
+ "recording.startStorageMigrationMove": {
32493
+ capName: "recording",
32494
+ capScope: "system",
32495
+ addonId: null,
32496
+ access: "create"
32497
+ },
32273
32498
  "recordingExport.cancelExport": {
32274
32499
  capName: "recordingExport",
32275
32500
  capScope: "system",
@@ -32660,6 +32885,30 @@ Object.freeze({
32660
32885
  addonId: null,
32661
32886
  access: "view"
32662
32887
  },
32888
+ "storageMigration.cancel": {
32889
+ capName: "storage-migration",
32890
+ capScope: "system",
32891
+ addonId: null,
32892
+ access: "create"
32893
+ },
32894
+ "storageMigration.plan": {
32895
+ capName: "storage-migration",
32896
+ capScope: "system",
32897
+ addonId: null,
32898
+ access: "view"
32899
+ },
32900
+ "storageMigration.start": {
32901
+ capName: "storage-migration",
32902
+ capScope: "system",
32903
+ addonId: null,
32904
+ access: "create"
32905
+ },
32906
+ "storageMigration.status": {
32907
+ capName: "storage-migration",
32908
+ capScope: "system",
32909
+ addonId: null,
32910
+ access: "view"
32911
+ },
32663
32912
  "storageProvider.abortUpload": {
32664
32913
  capName: "storage-provider",
32665
32914
  capScope: "system",
@@ -33038,12 +33287,42 @@ Object.freeze({
33038
33287
  addonId: null,
33039
33288
  access: "create"
33040
33289
  },
33290
+ "terminalSession.adoptLegacyMonitor": {
33291
+ capName: "terminal-session",
33292
+ capScope: "system",
33293
+ addonId: null,
33294
+ access: "create"
33295
+ },
33041
33296
  "terminalSession.close": {
33042
33297
  capName: "terminal-session",
33043
33298
  capScope: "system",
33044
33299
  addonId: null,
33045
33300
  access: "create"
33046
33301
  },
33302
+ "terminalSession.createInstance": {
33303
+ capName: "terminal-session",
33304
+ capScope: "system",
33305
+ addonId: null,
33306
+ access: "create"
33307
+ },
33308
+ "terminalSession.deleteInstance": {
33309
+ capName: "terminal-session",
33310
+ capScope: "system",
33311
+ addonId: null,
33312
+ access: "delete"
33313
+ },
33314
+ "terminalSession.listInstances": {
33315
+ capName: "terminal-session",
33316
+ capScope: "system",
33317
+ addonId: null,
33318
+ access: "view"
33319
+ },
33320
+ "terminalSession.listLegacyCameras": {
33321
+ capName: "terminal-session",
33322
+ capScope: "system",
33323
+ addonId: null,
33324
+ access: "view"
33325
+ },
33047
33326
  "terminalSession.listProfiles": {
33048
33327
  capName: "terminal-session",
33049
33328
  capScope: "system",
@@ -33074,6 +33353,12 @@ Object.freeze({
33074
33353
  addonId: null,
33075
33354
  access: "create"
33076
33355
  },
33356
+ "terminalSession.setInstanceEnabled": {
33357
+ capName: "terminal-session",
33358
+ capScope: "system",
33359
+ addonId: null,
33360
+ access: "create"
33361
+ },
33077
33362
  "terminalSession.writeInput": {
33078
33363
  capName: "terminal-session",
33079
33364
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-tuya",
3
- "version": "0.2.12",
3
+ "version": "0.2.13",
4
4
  "description": "Tuya / Smart Life device-provider addon for CamStack — account-onboarded (Tuya IoT cloud fetch of device localKeys) + LOCAL DP control via the @apocaliss92/nodetuya encrypted-LAN client, exposing switch / water-heater-family kettle entities",
5
5
  "keywords": [
6
6
  "camstack",