@camstack/addon-provider-tuya 0.2.11 → 0.2.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/addon.js +357 -30
  2. package/dist/addon.mjs +357 -30
  3. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -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",
17108
17188
  auth: "admin"
17109
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
17189
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
17190
+ kind: "mutation",
17191
+ auth: "admin"
17192
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
17193
+ kind: "mutation",
17194
+ auth: "admin"
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,7 +19512,67 @@ var TerminalProfileInfoSchema = object({
19413
19512
  label: string(),
19414
19513
  description: string().optional()
19415
19514
  });
19416
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
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
+ });
19537
+ var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
19538
+ seq: number().int().positive(),
19539
+ kind: literal("data"),
19540
+ data: string()
19541
+ }), object({
19542
+ seq: number().int().positive(),
19543
+ kind: literal("exit"),
19544
+ exitCode: number().int(),
19545
+ signal: number().int().optional()
19546
+ })]);
19547
+ var TerminalOutputBatchSchema = object({
19548
+ cursor: number().int().nonnegative(),
19549
+ reset: boolean(),
19550
+ snapshot: string().optional(),
19551
+ events: array(TerminalOutputEventSchema).readonly()
19552
+ });
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({
19417
19576
  profileId: string(),
19418
19577
  cols: number().int().positive(),
19419
19578
  rows: number().int().positive()
@@ -19427,6 +19586,26 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
19427
19586
  }), _void(), {
19428
19587
  kind: "mutation",
19429
19588
  auth: "admin"
19589
+ }), method(object({
19590
+ sessionId: string(),
19591
+ afterSeq: number().int().nonnegative(),
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()
19599
+ }), TerminalOutputBatchSchema, {
19600
+ kind: "mutation",
19601
+ auth: "admin",
19602
+ timeoutMs: 15e3
19603
+ }), method(object({
19604
+ sessionId: string(),
19605
+ data: string().max(64 * 1024)
19606
+ }), _void(), {
19607
+ kind: "mutation",
19608
+ auth: "admin"
19430
19609
  }), method(object({ sessionId: string() }), _void(), {
19431
19610
  kind: "mutation",
19432
19611
  auth: "admin"
@@ -21922,6 +22101,7 @@ var FaceInfoSchema = object({
21922
22101
  var FaceFilterEnum = _enum([
21923
22102
  "unassigned",
21924
22103
  "recognized",
22104
+ "identified",
21925
22105
  "all"
21926
22106
  ]);
21927
22107
  var MediaFileLiteSchema$1 = object({
@@ -21950,6 +22130,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
21950
22130
  kind: "mutation",
21951
22131
  auth: "admin"
21952
22132
  }), method(object({
22133
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
22134
+ deviceId: number().int().optional(),
21953
22135
  limit: number().int().positive().optional(),
21954
22136
  filter: FaceFilterEnum.optional(),
21955
22137
  /**
@@ -24179,6 +24361,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
24179
24361
  capName: string().min(1).max(64),
24180
24362
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
24181
24363
  valuePath: string().min(1).max(64)
24364
+ }),
24365
+ object({
24366
+ kind: literal("latest-recognition"),
24367
+ recognition: _enum(["person", "plate"])
24182
24368
  })
24183
24369
  ]);
24184
24370
  var OsdSlotBindingSchema = object({
@@ -24284,6 +24470,15 @@ method(object({ deviceId: number().int() }), object({
24284
24470
  }), object({ success: literal(true) }), {
24285
24471
  kind: "mutation",
24286
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"
24287
24482
  }), method(object({
24288
24483
  deviceId: number().int(),
24289
24484
  slotId: string().min(1),
@@ -25381,13 +25576,19 @@ method(object({
25381
25576
  }), {
25382
25577
  kind: "mutation",
25383
25578
  auth: "admin"
25384
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
25579
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
25385
25580
  kind: "mutation",
25386
25581
  auth: "admin"
25387
- }), method(object({}), array(RelocateJobSchema).readonly(), {
25388
- kind: "query",
25582
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
25583
+ kind: "mutation",
25389
25584
  auth: "admin"
25390
- }), 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() }), {
25391
25592
  kind: "mutation",
25392
25593
  auth: "admin"
25393
25594
  });
@@ -30993,6 +31194,12 @@ Object.freeze({
30993
31194
  addonId: null,
30994
31195
  access: "delete"
30995
31196
  },
31197
+ "osdManager.copyDeviceConfiguration": {
31198
+ capName: "osd-manager",
31199
+ capScope: "system",
31200
+ addonId: null,
31201
+ access: "create"
31202
+ },
30996
31203
  "osdManager.getConditionSupport": {
30997
31204
  capName: "osd-manager",
30998
31205
  capScope: "system",
@@ -31089,7 +31296,7 @@ Object.freeze({
31089
31296
  addonId: null,
31090
31297
  access: "create"
31091
31298
  },
31092
- "pipelineAnalytics.cancelMediaRelocate": {
31299
+ "pipelineAnalytics.cancelStorageMigrationMove": {
31093
31300
  capName: "pipeline-analytics",
31094
31301
  capScope: "device",
31095
31302
  addonId: null,
@@ -31161,12 +31368,6 @@ Object.freeze({
31161
31368
  addonId: null,
31162
31369
  access: "view"
31163
31370
  },
31164
- "pipelineAnalytics.getMediaRelocateStatus": {
31165
- capName: "pipeline-analytics",
31166
- capScope: "device",
31167
- addonId: null,
31168
- access: "view"
31169
- },
31170
31371
  "pipelineAnalytics.getMotionEvents": {
31171
31372
  capName: "pipeline-analytics",
31172
31373
  capScope: "device",
@@ -31203,6 +31404,12 @@ Object.freeze({
31203
31404
  addonId: null,
31204
31405
  access: "view"
31205
31406
  },
31407
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
31408
+ capName: "pipeline-analytics",
31409
+ capScope: "device",
31410
+ addonId: null,
31411
+ access: "view"
31412
+ },
31206
31413
  "pipelineAnalytics.getTrack": {
31207
31414
  capName: "pipeline-analytics",
31208
31415
  capScope: "device",
@@ -31281,6 +31488,12 @@ Object.freeze({
31281
31488
  addonId: null,
31282
31489
  access: "view"
31283
31490
  },
31491
+ "pipelineAnalytics.pauseForStorageMigration": {
31492
+ capName: "pipeline-analytics",
31493
+ capScope: "device",
31494
+ addonId: null,
31495
+ access: "create"
31496
+ },
31284
31497
  "pipelineAnalytics.proposeRetrainAnnotations": {
31285
31498
  capName: "pipeline-analytics",
31286
31499
  capScope: "device",
@@ -31311,7 +31524,7 @@ Object.freeze({
31311
31524
  addonId: null,
31312
31525
  access: "create"
31313
31526
  },
31314
- "pipelineAnalytics.relocateMedia": {
31527
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
31315
31528
  capName: "pipeline-analytics",
31316
31529
  capScope: "device",
31317
31530
  addonId: null,
@@ -31323,6 +31536,12 @@ Object.freeze({
31323
31536
  addonId: null,
31324
31537
  access: "create"
31325
31538
  },
31539
+ "pipelineAnalytics.resumeForStorageMigration": {
31540
+ capName: "pipeline-analytics",
31541
+ capScope: "device",
31542
+ addonId: null,
31543
+ access: "create"
31544
+ },
31326
31545
  "pipelineAnalytics.saveRetrainAnnotations": {
31327
31546
  capName: "pipeline-analytics",
31328
31547
  capScope: "device",
@@ -31347,6 +31566,12 @@ Object.freeze({
31347
31566
  addonId: null,
31348
31567
  access: "create"
31349
31568
  },
31569
+ "pipelineAnalytics.startStorageMigrationMove": {
31570
+ capName: "pipeline-analytics",
31571
+ capScope: "device",
31572
+ addonId: null,
31573
+ access: "create"
31574
+ },
31350
31575
  "pipelineAnalytics.wipeAllAnalytics": {
31351
31576
  capName: "pipeline-analytics",
31352
31577
  capScope: "device",
@@ -31713,6 +31938,12 @@ Object.freeze({
31713
31938
  addonId: null,
31714
31939
  access: "view"
31715
31940
  },
31941
+ "pipelineOrchestrator.pauseForStorageMigration": {
31942
+ capName: "pipeline-orchestrator",
31943
+ capScope: "system",
31944
+ addonId: null,
31945
+ access: "create"
31946
+ },
31716
31947
  "pipelineOrchestrator.rebalance": {
31717
31948
  capName: "pipeline-orchestrator",
31718
31949
  capScope: "system",
@@ -31737,6 +31968,12 @@ Object.freeze({
31737
31968
  addonId: null,
31738
31969
  access: "view"
31739
31970
  },
31971
+ "pipelineOrchestrator.resumeForStorageMigration": {
31972
+ capName: "pipeline-orchestrator",
31973
+ capScope: "system",
31974
+ addonId: null,
31975
+ access: "create"
31976
+ },
31740
31977
  "pipelineOrchestrator.saveTemplate": {
31741
31978
  capName: "pipeline-orchestrator",
31742
31979
  capScope: "system",
@@ -32133,7 +32370,7 @@ Object.freeze({
32133
32370
  addonId: null,
32134
32371
  access: "create"
32135
32372
  },
32136
- "recording.cancelRelocate": {
32373
+ "recording.cancelStorageMigrationMove": {
32137
32374
  capName: "recording",
32138
32375
  capScope: "system",
32139
32376
  addonId: null,
@@ -32169,7 +32406,7 @@ Object.freeze({
32169
32406
  addonId: null,
32170
32407
  access: "view"
32171
32408
  },
32172
- "recording.getRelocateStatus": {
32409
+ "recording.getStorageMigrationMoveStatus": {
32173
32410
  capName: "recording",
32174
32411
  capScope: "system",
32175
32412
  addonId: null,
@@ -32193,6 +32430,12 @@ Object.freeze({
32193
32430
  addonId: null,
32194
32431
  access: "view"
32195
32432
  },
32433
+ "recording.pauseForStorageMigration": {
32434
+ capName: "recording",
32435
+ capScope: "system",
32436
+ addonId: null,
32437
+ access: "create"
32438
+ },
32196
32439
  "recording.pruneFootage": {
32197
32440
  capName: "recording",
32198
32441
  capScope: "system",
@@ -32211,7 +32454,7 @@ Object.freeze({
32211
32454
  addonId: null,
32212
32455
  access: "view"
32213
32456
  },
32214
- "recording.relocateFootage": {
32457
+ "recording.refreshStorageLocationsForMigration": {
32215
32458
  capName: "recording",
32216
32459
  capScope: "system",
32217
32460
  addonId: null,
@@ -32235,12 +32478,24 @@ Object.freeze({
32235
32478
  addonId: null,
32236
32479
  access: "create"
32237
32480
  },
32481
+ "recording.resumeForStorageMigration": {
32482
+ capName: "recording",
32483
+ capScope: "system",
32484
+ addonId: null,
32485
+ access: "create"
32486
+ },
32238
32487
  "recording.setDeviceConfig": {
32239
32488
  capName: "recording",
32240
32489
  capScope: "system",
32241
32490
  addonId: null,
32242
32491
  access: "create"
32243
32492
  },
32493
+ "recording.startStorageMigrationMove": {
32494
+ capName: "recording",
32495
+ capScope: "system",
32496
+ addonId: null,
32497
+ access: "create"
32498
+ },
32244
32499
  "recordingExport.cancelExport": {
32245
32500
  capName: "recordingExport",
32246
32501
  capScope: "system",
@@ -32631,6 +32886,30 @@ Object.freeze({
32631
32886
  addonId: null,
32632
32887
  access: "view"
32633
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
+ },
32634
32913
  "storageProvider.abortUpload": {
32635
32914
  capName: "storage-provider",
32636
32915
  capScope: "system",
@@ -33009,12 +33288,42 @@ Object.freeze({
33009
33288
  addonId: null,
33010
33289
  access: "create"
33011
33290
  },
33291
+ "terminalSession.adoptLegacyMonitor": {
33292
+ capName: "terminal-session",
33293
+ capScope: "system",
33294
+ addonId: null,
33295
+ access: "create"
33296
+ },
33012
33297
  "terminalSession.close": {
33013
33298
  capName: "terminal-session",
33014
33299
  capScope: "system",
33015
33300
  addonId: null,
33016
33301
  access: "create"
33017
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
+ },
33018
33327
  "terminalSession.listProfiles": {
33019
33328
  capName: "terminal-session",
33020
33329
  capScope: "system",
@@ -33033,12 +33342,30 @@ Object.freeze({
33033
33342
  addonId: null,
33034
33343
  access: "create"
33035
33344
  },
33345
+ "terminalSession.pullOutput": {
33346
+ capName: "terminal-session",
33347
+ capScope: "system",
33348
+ addonId: null,
33349
+ access: "create"
33350
+ },
33036
33351
  "terminalSession.resize": {
33037
33352
  capName: "terminal-session",
33038
33353
  capScope: "system",
33039
33354
  addonId: null,
33040
33355
  access: "create"
33041
33356
  },
33357
+ "terminalSession.setInstanceEnabled": {
33358
+ capName: "terminal-session",
33359
+ capScope: "system",
33360
+ addonId: null,
33361
+ access: "create"
33362
+ },
33363
+ "terminalSession.writeInput": {
33364
+ capName: "terminal-session",
33365
+ capScope: "system",
33366
+ addonId: null,
33367
+ access: "create"
33368
+ },
33042
33369
  "toast.onToast": {
33043
33370
  capName: "toast",
33044
33371
  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",
17107
17187
  auth: "admin"
17108
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
17188
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
17189
+ kind: "mutation",
17190
+ auth: "admin"
17191
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
17192
+ kind: "mutation",
17193
+ auth: "admin"
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,7 +19511,67 @@ var TerminalProfileInfoSchema = object({
19412
19511
  label: string(),
19413
19512
  description: string().optional()
19414
19513
  });
19415
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
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
+ });
19536
+ var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
19537
+ seq: number().int().positive(),
19538
+ kind: literal("data"),
19539
+ data: string()
19540
+ }), object({
19541
+ seq: number().int().positive(),
19542
+ kind: literal("exit"),
19543
+ exitCode: number().int(),
19544
+ signal: number().int().optional()
19545
+ })]);
19546
+ var TerminalOutputBatchSchema = object({
19547
+ cursor: number().int().nonnegative(),
19548
+ reset: boolean(),
19549
+ snapshot: string().optional(),
19550
+ events: array(TerminalOutputEventSchema).readonly()
19551
+ });
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({
19416
19575
  profileId: string(),
19417
19576
  cols: number().int().positive(),
19418
19577
  rows: number().int().positive()
@@ -19426,6 +19585,26 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
19426
19585
  }), _void(), {
19427
19586
  kind: "mutation",
19428
19587
  auth: "admin"
19588
+ }), method(object({
19589
+ sessionId: string(),
19590
+ afterSeq: number().int().nonnegative(),
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()
19598
+ }), TerminalOutputBatchSchema, {
19599
+ kind: "mutation",
19600
+ auth: "admin",
19601
+ timeoutMs: 15e3
19602
+ }), method(object({
19603
+ sessionId: string(),
19604
+ data: string().max(64 * 1024)
19605
+ }), _void(), {
19606
+ kind: "mutation",
19607
+ auth: "admin"
19429
19608
  }), method(object({ sessionId: string() }), _void(), {
19430
19609
  kind: "mutation",
19431
19610
  auth: "admin"
@@ -21921,6 +22100,7 @@ var FaceInfoSchema = object({
21921
22100
  var FaceFilterEnum = _enum([
21922
22101
  "unassigned",
21923
22102
  "recognized",
22103
+ "identified",
21924
22104
  "all"
21925
22105
  ]);
21926
22106
  var MediaFileLiteSchema$1 = object({
@@ -21949,6 +22129,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
21949
22129
  kind: "mutation",
21950
22130
  auth: "admin"
21951
22131
  }), method(object({
22132
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
22133
+ deviceId: number().int().optional(),
21952
22134
  limit: number().int().positive().optional(),
21953
22135
  filter: FaceFilterEnum.optional(),
21954
22136
  /**
@@ -24178,6 +24360,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
24178
24360
  capName: string().min(1).max(64),
24179
24361
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
24180
24362
  valuePath: string().min(1).max(64)
24363
+ }),
24364
+ object({
24365
+ kind: literal("latest-recognition"),
24366
+ recognition: _enum(["person", "plate"])
24181
24367
  })
24182
24368
  ]);
24183
24369
  var OsdSlotBindingSchema = object({
@@ -24283,6 +24469,15 @@ method(object({ deviceId: number().int() }), object({
24283
24469
  }), object({ success: literal(true) }), {
24284
24470
  kind: "mutation",
24285
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"
24286
24481
  }), method(object({
24287
24482
  deviceId: number().int(),
24288
24483
  slotId: string().min(1),
@@ -25380,13 +25575,19 @@ method(object({
25380
25575
  }), {
25381
25576
  kind: "mutation",
25382
25577
  auth: "admin"
25383
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
25578
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
25384
25579
  kind: "mutation",
25385
25580
  auth: "admin"
25386
- }), method(object({}), array(RelocateJobSchema).readonly(), {
25387
- kind: "query",
25581
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
25582
+ kind: "mutation",
25388
25583
  auth: "admin"
25389
- }), 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() }), {
25390
25591
  kind: "mutation",
25391
25592
  auth: "admin"
25392
25593
  });
@@ -30992,6 +31193,12 @@ Object.freeze({
30992
31193
  addonId: null,
30993
31194
  access: "delete"
30994
31195
  },
31196
+ "osdManager.copyDeviceConfiguration": {
31197
+ capName: "osd-manager",
31198
+ capScope: "system",
31199
+ addonId: null,
31200
+ access: "create"
31201
+ },
30995
31202
  "osdManager.getConditionSupport": {
30996
31203
  capName: "osd-manager",
30997
31204
  capScope: "system",
@@ -31088,7 +31295,7 @@ Object.freeze({
31088
31295
  addonId: null,
31089
31296
  access: "create"
31090
31297
  },
31091
- "pipelineAnalytics.cancelMediaRelocate": {
31298
+ "pipelineAnalytics.cancelStorageMigrationMove": {
31092
31299
  capName: "pipeline-analytics",
31093
31300
  capScope: "device",
31094
31301
  addonId: null,
@@ -31160,12 +31367,6 @@ Object.freeze({
31160
31367
  addonId: null,
31161
31368
  access: "view"
31162
31369
  },
31163
- "pipelineAnalytics.getMediaRelocateStatus": {
31164
- capName: "pipeline-analytics",
31165
- capScope: "device",
31166
- addonId: null,
31167
- access: "view"
31168
- },
31169
31370
  "pipelineAnalytics.getMotionEvents": {
31170
31371
  capName: "pipeline-analytics",
31171
31372
  capScope: "device",
@@ -31202,6 +31403,12 @@ Object.freeze({
31202
31403
  addonId: null,
31203
31404
  access: "view"
31204
31405
  },
31406
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
31407
+ capName: "pipeline-analytics",
31408
+ capScope: "device",
31409
+ addonId: null,
31410
+ access: "view"
31411
+ },
31205
31412
  "pipelineAnalytics.getTrack": {
31206
31413
  capName: "pipeline-analytics",
31207
31414
  capScope: "device",
@@ -31280,6 +31487,12 @@ Object.freeze({
31280
31487
  addonId: null,
31281
31488
  access: "view"
31282
31489
  },
31490
+ "pipelineAnalytics.pauseForStorageMigration": {
31491
+ capName: "pipeline-analytics",
31492
+ capScope: "device",
31493
+ addonId: null,
31494
+ access: "create"
31495
+ },
31283
31496
  "pipelineAnalytics.proposeRetrainAnnotations": {
31284
31497
  capName: "pipeline-analytics",
31285
31498
  capScope: "device",
@@ -31310,7 +31523,7 @@ Object.freeze({
31310
31523
  addonId: null,
31311
31524
  access: "create"
31312
31525
  },
31313
- "pipelineAnalytics.relocateMedia": {
31526
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
31314
31527
  capName: "pipeline-analytics",
31315
31528
  capScope: "device",
31316
31529
  addonId: null,
@@ -31322,6 +31535,12 @@ Object.freeze({
31322
31535
  addonId: null,
31323
31536
  access: "create"
31324
31537
  },
31538
+ "pipelineAnalytics.resumeForStorageMigration": {
31539
+ capName: "pipeline-analytics",
31540
+ capScope: "device",
31541
+ addonId: null,
31542
+ access: "create"
31543
+ },
31325
31544
  "pipelineAnalytics.saveRetrainAnnotations": {
31326
31545
  capName: "pipeline-analytics",
31327
31546
  capScope: "device",
@@ -31346,6 +31565,12 @@ Object.freeze({
31346
31565
  addonId: null,
31347
31566
  access: "create"
31348
31567
  },
31568
+ "pipelineAnalytics.startStorageMigrationMove": {
31569
+ capName: "pipeline-analytics",
31570
+ capScope: "device",
31571
+ addonId: null,
31572
+ access: "create"
31573
+ },
31349
31574
  "pipelineAnalytics.wipeAllAnalytics": {
31350
31575
  capName: "pipeline-analytics",
31351
31576
  capScope: "device",
@@ -31712,6 +31937,12 @@ Object.freeze({
31712
31937
  addonId: null,
31713
31938
  access: "view"
31714
31939
  },
31940
+ "pipelineOrchestrator.pauseForStorageMigration": {
31941
+ capName: "pipeline-orchestrator",
31942
+ capScope: "system",
31943
+ addonId: null,
31944
+ access: "create"
31945
+ },
31715
31946
  "pipelineOrchestrator.rebalance": {
31716
31947
  capName: "pipeline-orchestrator",
31717
31948
  capScope: "system",
@@ -31736,6 +31967,12 @@ Object.freeze({
31736
31967
  addonId: null,
31737
31968
  access: "view"
31738
31969
  },
31970
+ "pipelineOrchestrator.resumeForStorageMigration": {
31971
+ capName: "pipeline-orchestrator",
31972
+ capScope: "system",
31973
+ addonId: null,
31974
+ access: "create"
31975
+ },
31739
31976
  "pipelineOrchestrator.saveTemplate": {
31740
31977
  capName: "pipeline-orchestrator",
31741
31978
  capScope: "system",
@@ -32132,7 +32369,7 @@ Object.freeze({
32132
32369
  addonId: null,
32133
32370
  access: "create"
32134
32371
  },
32135
- "recording.cancelRelocate": {
32372
+ "recording.cancelStorageMigrationMove": {
32136
32373
  capName: "recording",
32137
32374
  capScope: "system",
32138
32375
  addonId: null,
@@ -32168,7 +32405,7 @@ Object.freeze({
32168
32405
  addonId: null,
32169
32406
  access: "view"
32170
32407
  },
32171
- "recording.getRelocateStatus": {
32408
+ "recording.getStorageMigrationMoveStatus": {
32172
32409
  capName: "recording",
32173
32410
  capScope: "system",
32174
32411
  addonId: null,
@@ -32192,6 +32429,12 @@ Object.freeze({
32192
32429
  addonId: null,
32193
32430
  access: "view"
32194
32431
  },
32432
+ "recording.pauseForStorageMigration": {
32433
+ capName: "recording",
32434
+ capScope: "system",
32435
+ addonId: null,
32436
+ access: "create"
32437
+ },
32195
32438
  "recording.pruneFootage": {
32196
32439
  capName: "recording",
32197
32440
  capScope: "system",
@@ -32210,7 +32453,7 @@ Object.freeze({
32210
32453
  addonId: null,
32211
32454
  access: "view"
32212
32455
  },
32213
- "recording.relocateFootage": {
32456
+ "recording.refreshStorageLocationsForMigration": {
32214
32457
  capName: "recording",
32215
32458
  capScope: "system",
32216
32459
  addonId: null,
@@ -32234,12 +32477,24 @@ Object.freeze({
32234
32477
  addonId: null,
32235
32478
  access: "create"
32236
32479
  },
32480
+ "recording.resumeForStorageMigration": {
32481
+ capName: "recording",
32482
+ capScope: "system",
32483
+ addonId: null,
32484
+ access: "create"
32485
+ },
32237
32486
  "recording.setDeviceConfig": {
32238
32487
  capName: "recording",
32239
32488
  capScope: "system",
32240
32489
  addonId: null,
32241
32490
  access: "create"
32242
32491
  },
32492
+ "recording.startStorageMigrationMove": {
32493
+ capName: "recording",
32494
+ capScope: "system",
32495
+ addonId: null,
32496
+ access: "create"
32497
+ },
32243
32498
  "recordingExport.cancelExport": {
32244
32499
  capName: "recordingExport",
32245
32500
  capScope: "system",
@@ -32630,6 +32885,30 @@ Object.freeze({
32630
32885
  addonId: null,
32631
32886
  access: "view"
32632
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
+ },
32633
32912
  "storageProvider.abortUpload": {
32634
32913
  capName: "storage-provider",
32635
32914
  capScope: "system",
@@ -33008,12 +33287,42 @@ Object.freeze({
33008
33287
  addonId: null,
33009
33288
  access: "create"
33010
33289
  },
33290
+ "terminalSession.adoptLegacyMonitor": {
33291
+ capName: "terminal-session",
33292
+ capScope: "system",
33293
+ addonId: null,
33294
+ access: "create"
33295
+ },
33011
33296
  "terminalSession.close": {
33012
33297
  capName: "terminal-session",
33013
33298
  capScope: "system",
33014
33299
  addonId: null,
33015
33300
  access: "create"
33016
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
+ },
33017
33326
  "terminalSession.listProfiles": {
33018
33327
  capName: "terminal-session",
33019
33328
  capScope: "system",
@@ -33032,12 +33341,30 @@ Object.freeze({
33032
33341
  addonId: null,
33033
33342
  access: "create"
33034
33343
  },
33344
+ "terminalSession.pullOutput": {
33345
+ capName: "terminal-session",
33346
+ capScope: "system",
33347
+ addonId: null,
33348
+ access: "create"
33349
+ },
33035
33350
  "terminalSession.resize": {
33036
33351
  capName: "terminal-session",
33037
33352
  capScope: "system",
33038
33353
  addonId: null,
33039
33354
  access: "create"
33040
33355
  },
33356
+ "terminalSession.setInstanceEnabled": {
33357
+ capName: "terminal-session",
33358
+ capScope: "system",
33359
+ addonId: null,
33360
+ access: "create"
33361
+ },
33362
+ "terminalSession.writeInput": {
33363
+ capName: "terminal-session",
33364
+ capScope: "system",
33365
+ addonId: null,
33366
+ access: "create"
33367
+ },
33041
33368
  "toast.onToast": {
33042
33369
  capName: "toast",
33043
33370
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-tuya",
3
- "version": "0.2.11",
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",