@camstack/addon-tailscale 1.2.11 → 1.2.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -24,7 +24,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
24
24
  enumerable: true
25
25
  }) : target, mod));
26
26
  //#endregion
27
- const require_dist = require("../dist-CSc3X4AE.js");
27
+ const require_dist = require("../dist-GM5pUTqy.js");
28
28
  let node_child_process = require("node:child_process");
29
29
  let node_util = require("node:util");
30
30
  let node_fs = require("node:fs");
@@ -1,4 +1,4 @@
1
- import { i as EventCategory, n as networkAccessCapability, r as BaseAddon, t as meshNetworkCapability } from "../dist-BRf5w7H0.mjs";
1
+ import { i as EventCategory, n as networkAccessCapability, r as BaseAddon, t as meshNetworkCapability } from "../dist-DodL65lc.mjs";
2
2
  import { execFile, spawn } from "node:child_process";
3
3
  import { promisify } from "node:util";
4
4
  import * as fs from "node:fs";
@@ -7534,12 +7534,11 @@ var RecordingConfigSchema = object({
7534
7534
  /**
7535
7535
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
7536
7536
  *
7537
- * One shape shared by the recorder's `relocateFootage` (segments) and
7538
- * pipeline-analytics' `relocateMedia` (event media blobs) so the admin Data
7539
- * page renders both movers with one component. Jobs are in-RAM (a restart
7540
- * forgets them — re-running is safe by construction: copy-if-absent, delete
7541
- * after verify) and each completed/failed run also lands one durable ops-log
7542
- * row on the owning addon's surface.
7537
+ * One shape shared by the recorder and pipeline-analytics internal movers.
7538
+ * The public admin surface is `storage-migration`; child jobs remain in RAM
7539
+ * because copy-if-absent, verify, delete and index/row repoint are resumable.
7540
+ * Each completed/failed run also lands one durable ops-log row on its owning
7541
+ * addon surface.
7543
7542
  */
7544
7543
  var RelocateJobStateSchema = _enum([
7545
7544
  "running",
@@ -7566,19 +7565,100 @@ var RelocateJobSchema = object({
7566
7565
  finishedAt: number().nullable(),
7567
7566
  error: string().nullable()
7568
7567
  });
7568
+ /** Profile-derived footage selection used only by the migration coordinator:
7569
+ * `recordings` owns high+mid; `recordingsLow` owns low. */
7570
+ var RelocateFootageClassSchema = _enum(["recordings", "recordingsLow"]);
7569
7571
  var RelocateFootageInputSchema = object({
7570
- deviceId: number().optional(),
7571
7572
  fromLocationId: string(),
7572
7573
  toLocationId: string(),
7573
7574
  entities: array(_enum(["segments"])).optional(),
7575
+ /** Limits relocation to the logical profile class. Omit only for the
7576
+ * pre-orchestration compatibility path. */
7577
+ footageClass: RelocateFootageClassSchema.optional(),
7574
7578
  /** Copy throttle in MB/s (default 40) — the drain is a background chore,
7575
7579
  * never allowed to starve live writers. */
7576
7580
  throttleMbps: number().min(1).max(1e3).optional()
7577
7581
  });
7578
- var RelocateMediaInputSchema = object({
7579
- deviceId: number().optional(),
7582
+ /** Internal, lease-scoped participant operation. It is intentionally separate
7583
+ * from persistent recording settings: a migration never changes
7584
+ * `RecordingConfig.enabled` or camera wrapper bindings. */
7585
+ var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
7586
+ var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
7587
+ var StorageMigrationMediaMoveInputSchema = object({
7580
7588
  toLocationId: string(),
7581
7589
  throttleMbps: number().min(1).max(1e3).optional()
7590
+ }).extend({ leaseId: string().min(1) });
7591
+ /** The independently selectable logical storage classes. `recordings`
7592
+ * encompasses the high and mid segment profiles; `recordingsLow` is low
7593
+ * segments; `eventMedia` is post-analysis blobs. */
7594
+ var StorageMigrationClassSchema = _enum([
7595
+ "recordings",
7596
+ "recordingsLow",
7597
+ "eventMedia"
7598
+ ]);
7599
+ /** A destination is always an existing, fully-qualified location id. The
7600
+ * migration API intentionally never changes a source location's `basePath`:
7601
+ * callers create a new `<type>:<slug>` location, then select it here. */
7602
+ var StorageMigrationDestinationsSchema = object({
7603
+ recordings: string().min(1).optional(),
7604
+ recordingsLow: string().min(1).optional(),
7605
+ eventMedia: string().min(1).optional()
7606
+ }).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
7607
+ /** Shared input for planning and starting an orchestrated storage migration. */
7608
+ var StorageMigrationInputSchema = object({
7609
+ destinations: StorageMigrationDestinationsSchema,
7610
+ throttleMbps: number().min(1).max(1e3).optional()
7611
+ });
7612
+ /** The durable coordinator state machine. The only phase that changes default
7613
+ * locations is `repointing`, after every selected mover has completed and been
7614
+ * verified. */
7615
+ var StorageMigrationPhaseSchema = _enum([
7616
+ "planning",
7617
+ "pausing",
7618
+ "moving",
7619
+ "verifying",
7620
+ "repointing",
7621
+ "refreshing",
7622
+ "resuming",
7623
+ "done",
7624
+ "failed",
7625
+ "cancelled"
7626
+ ]);
7627
+ var StorageMigrationParticipantSchema = _enum([
7628
+ "pipeline",
7629
+ "recorder",
7630
+ "analytics"
7631
+ ]);
7632
+ var StorageMigrationMoveSchema = object({
7633
+ storageClass: StorageMigrationClassSchema,
7634
+ fromLocationId: string(),
7635
+ toLocationId: string(),
7636
+ moverJobId: string().nullable(),
7637
+ state: RelocateJobStateSchema.nullable(),
7638
+ error: string().nullable()
7639
+ });
7640
+ var StorageMigrationJobSchema = object({
7641
+ jobId: string(),
7642
+ phase: StorageMigrationPhaseSchema,
7643
+ destinations: StorageMigrationDestinationsSchema,
7644
+ throttleMbps: number(),
7645
+ moves: array(StorageMigrationMoveSchema),
7646
+ pauseLeaseId: string().nullable(),
7647
+ pausedParticipants: array(StorageMigrationParticipantSchema),
7648
+ repointed: boolean(),
7649
+ cancelRequested: boolean(),
7650
+ startedAt: number(),
7651
+ updatedAt: number(),
7652
+ finishedAt: number().nullable(),
7653
+ error: string().nullable()
7654
+ });
7655
+ var StorageMigrationPlanSchema = object({
7656
+ destinations: StorageMigrationDestinationsSchema,
7657
+ moves: array(object({
7658
+ storageClass: StorageMigrationClassSchema,
7659
+ fromLocationId: string(),
7660
+ toLocationId: string()
7661
+ }))
7582
7662
  });
7583
7663
  /**
7584
7664
  * `StorageLocationType` — an addon-declared id that identifies the *kind* of
@@ -15971,13 +16051,19 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
15971
16051
  }), method(object({ deviceId: number() }), EventPruneCountsSchema, {
15972
16052
  kind: "mutation",
15973
16053
  auth: "admin"
15974
- }), method(RelocateMediaInputSchema, object({ jobId: string() }), {
16054
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
15975
16055
  kind: "mutation",
15976
16056
  auth: "admin"
15977
- }), method(object({}), array(RelocateJobSchema).readonly(), {
15978
- kind: "query",
16057
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
16058
+ kind: "mutation",
16059
+ auth: "admin"
16060
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
16061
+ kind: "mutation",
16062
+ auth: "admin"
16063
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
16064
+ kind: "mutation",
15979
16065
  auth: "admin"
15980
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16066
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
15981
16067
  kind: "mutation",
15982
16068
  auth: "admin"
15983
16069
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
@@ -17474,7 +17560,13 @@ var NodeInferenceDevicesSchema = object({
17474
17560
  reachable: boolean(),
17475
17561
  devices: array(NodeInferenceDeviceSchema).readonly()
17476
17562
  });
17477
- method(object({
17563
+ method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
17564
+ kind: "mutation",
17565
+ auth: "admin"
17566
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
17567
+ kind: "mutation",
17568
+ auth: "admin"
17569
+ }), method(object({
17478
17570
  deviceId: number(),
17479
17571
  agentNodeId: string()
17480
17572
  }), object({ success: literal(true) }), {
@@ -18148,6 +18240,13 @@ method(object({ locationId: string() }), EvictableUsageSchema), method(object({
18148
18240
  locationId: string(),
18149
18241
  targetBytes: number().int().positive()
18150
18242
  }), EvictResultSchema, { kind: "mutation" });
18243
+ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
18244
+ kind: "mutation",
18245
+ auth: "admin"
18246
+ }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
18247
+ kind: "mutation",
18248
+ auth: "admin"
18249
+ });
18151
18250
  var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
18152
18251
  providerId: string().min(1),
18153
18252
  displayName: string().min(1),
@@ -18251,6 +18350,28 @@ var TerminalProfileInfoSchema = object({
18251
18350
  label: string(),
18252
18351
  description: string().optional()
18253
18352
  });
18353
+ /**
18354
+ * A durable operator-created Terminal instance. Profiles are templates; only
18355
+ * an instance declares a camera.
18356
+ */
18357
+ var TerminalInstanceInfoSchema = object({
18358
+ instanceId: string(),
18359
+ cameraStableId: string(),
18360
+ nodeId: string(),
18361
+ profileId: string(),
18362
+ profileLabel: string(),
18363
+ name: string(),
18364
+ enabled: boolean()
18365
+ });
18366
+ var TerminalLegacyCameraSchema = object({
18367
+ stableId: string(),
18368
+ nodeId: string(),
18369
+ profileId: string(),
18370
+ profileLabel: string(),
18371
+ name: string(),
18372
+ /** Only legacy monitor cameras can retain their historic stable identity. */
18373
+ adoptable: boolean()
18374
+ });
18254
18375
  var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
18255
18376
  seq: number().int().positive(),
18256
18377
  kind: literal("data"),
@@ -18267,7 +18388,29 @@ var TerminalOutputBatchSchema = object({
18267
18388
  snapshot: string().optional(),
18268
18389
  events: array(TerminalOutputEventSchema).readonly()
18269
18390
  });
18270
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18391
+ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
18392
+ targetNodeId: string().min(1),
18393
+ profileId: string().min(1),
18394
+ name: string().trim().min(1).max(160).optional()
18395
+ }), TerminalInstanceInfoSchema, {
18396
+ kind: "mutation",
18397
+ auth: "admin"
18398
+ }), method(object({ instanceId: string().min(1) }), _void(), {
18399
+ kind: "mutation",
18400
+ auth: "admin"
18401
+ }), method(object({
18402
+ instanceId: string().min(1),
18403
+ enabled: boolean()
18404
+ }), TerminalInstanceInfoSchema, {
18405
+ kind: "mutation",
18406
+ auth: "admin"
18407
+ }), method(_void(), array(TerminalLegacyCameraSchema).readonly(), { auth: "admin" }), method(object({
18408
+ stableId: string().min(1),
18409
+ name: string().trim().min(1).max(160).optional()
18410
+ }), TerminalInstanceInfoSchema, {
18411
+ kind: "mutation",
18412
+ auth: "admin"
18413
+ }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18271
18414
  profileId: string(),
18272
18415
  cols: number().int().positive(),
18273
18416
  rows: number().int().positive()
@@ -18284,7 +18427,13 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
18284
18427
  }), method(object({
18285
18428
  sessionId: string(),
18286
18429
  afterSeq: number().int().nonnegative(),
18287
- waitMs: number().int().min(0).max(2e3).default(0)
18430
+ waitMs: number().int().min(0).max(2e3).default(0),
18431
+ /**
18432
+ * Wait when a just-opened session has no output yet. Kept opt-in so a
18433
+ * browser's initial repaint remains immediate; the camera snapshot
18434
+ * relay uses it to avoid encoding a blank startup frame.
18435
+ */
18436
+ waitForOutput: boolean().optional()
18288
18437
  }), TerminalOutputBatchSchema, {
18289
18438
  kind: "mutation",
18290
18439
  auth: "admin",
@@ -20225,6 +20374,7 @@ var FaceInfoSchema = object({
20225
20374
  var FaceFilterEnum = _enum([
20226
20375
  "unassigned",
20227
20376
  "recognized",
20377
+ "identified",
20228
20378
  "all"
20229
20379
  ]);
20230
20380
  var MediaFileLiteSchema$1 = object({
@@ -20253,6 +20403,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
20253
20403
  kind: "mutation",
20254
20404
  auth: "admin"
20255
20405
  }), method(object({
20406
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
20407
+ deviceId: number().int().optional(),
20256
20408
  limit: number().int().positive().optional(),
20257
20409
  filter: FaceFilterEnum.optional(),
20258
20410
  /**
@@ -22079,6 +22231,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
22079
22231
  capName: string().min(1).max(64),
22080
22232
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
22081
22233
  valuePath: string().min(1).max(64)
22234
+ }),
22235
+ object({
22236
+ kind: literal("latest-recognition"),
22237
+ recognition: _enum(["person", "plate"])
22082
22238
  })
22083
22239
  ]);
22084
22240
  var OsdSlotBindingSchema = object({
@@ -22184,6 +22340,15 @@ method(object({ deviceId: number().int() }), object({
22184
22340
  }), object({ success: literal(true) }), {
22185
22341
  kind: "mutation",
22186
22342
  auth: "admin"
22343
+ }), method(object({
22344
+ sourceDeviceId: number().int(),
22345
+ targetDeviceId: number().int()
22346
+ }), object({
22347
+ copied: number().int().nonnegative(),
22348
+ skipped: number().int().nonnegative()
22349
+ }), {
22350
+ kind: "mutation",
22351
+ auth: "admin"
22187
22352
  }), method(object({
22188
22353
  deviceId: number().int(),
22189
22354
  slotId: string().min(1),
@@ -23069,13 +23234,19 @@ method(object({
23069
23234
  }), {
23070
23235
  kind: "mutation",
23071
23236
  auth: "admin"
23072
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
23237
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
23073
23238
  kind: "mutation",
23074
23239
  auth: "admin"
23075
- }), method(object({}), array(RelocateJobSchema).readonly(), {
23076
- kind: "query",
23240
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
23241
+ kind: "mutation",
23077
23242
  auth: "admin"
23078
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23243
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
23244
+ kind: "mutation",
23245
+ auth: "admin"
23246
+ }), method(StorageMigrationFootageMoveInputSchema, object({ jobId: string() }), {
23247
+ kind: "mutation",
23248
+ auth: "admin"
23249
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23079
23250
  kind: "mutation",
23080
23251
  auth: "admin"
23081
23252
  });
@@ -27197,6 +27368,12 @@ Object.freeze({
27197
27368
  addonId: null,
27198
27369
  access: "delete"
27199
27370
  },
27371
+ "osdManager.copyDeviceConfiguration": {
27372
+ capName: "osd-manager",
27373
+ capScope: "system",
27374
+ addonId: null,
27375
+ access: "create"
27376
+ },
27200
27377
  "osdManager.getConditionSupport": {
27201
27378
  capName: "osd-manager",
27202
27379
  capScope: "system",
@@ -27293,7 +27470,7 @@ Object.freeze({
27293
27470
  addonId: null,
27294
27471
  access: "create"
27295
27472
  },
27296
- "pipelineAnalytics.cancelMediaRelocate": {
27473
+ "pipelineAnalytics.cancelStorageMigrationMove": {
27297
27474
  capName: "pipeline-analytics",
27298
27475
  capScope: "device",
27299
27476
  addonId: null,
@@ -27365,12 +27542,6 @@ Object.freeze({
27365
27542
  addonId: null,
27366
27543
  access: "view"
27367
27544
  },
27368
- "pipelineAnalytics.getMediaRelocateStatus": {
27369
- capName: "pipeline-analytics",
27370
- capScope: "device",
27371
- addonId: null,
27372
- access: "view"
27373
- },
27374
27545
  "pipelineAnalytics.getMotionEvents": {
27375
27546
  capName: "pipeline-analytics",
27376
27547
  capScope: "device",
@@ -27407,6 +27578,12 @@ Object.freeze({
27407
27578
  addonId: null,
27408
27579
  access: "view"
27409
27580
  },
27581
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
27582
+ capName: "pipeline-analytics",
27583
+ capScope: "device",
27584
+ addonId: null,
27585
+ access: "view"
27586
+ },
27410
27587
  "pipelineAnalytics.getTrack": {
27411
27588
  capName: "pipeline-analytics",
27412
27589
  capScope: "device",
@@ -27485,6 +27662,12 @@ Object.freeze({
27485
27662
  addonId: null,
27486
27663
  access: "view"
27487
27664
  },
27665
+ "pipelineAnalytics.pauseForStorageMigration": {
27666
+ capName: "pipeline-analytics",
27667
+ capScope: "device",
27668
+ addonId: null,
27669
+ access: "create"
27670
+ },
27488
27671
  "pipelineAnalytics.proposeRetrainAnnotations": {
27489
27672
  capName: "pipeline-analytics",
27490
27673
  capScope: "device",
@@ -27515,7 +27698,7 @@ Object.freeze({
27515
27698
  addonId: null,
27516
27699
  access: "create"
27517
27700
  },
27518
- "pipelineAnalytics.relocateMedia": {
27701
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
27519
27702
  capName: "pipeline-analytics",
27520
27703
  capScope: "device",
27521
27704
  addonId: null,
@@ -27527,6 +27710,12 @@ Object.freeze({
27527
27710
  addonId: null,
27528
27711
  access: "create"
27529
27712
  },
27713
+ "pipelineAnalytics.resumeForStorageMigration": {
27714
+ capName: "pipeline-analytics",
27715
+ capScope: "device",
27716
+ addonId: null,
27717
+ access: "create"
27718
+ },
27530
27719
  "pipelineAnalytics.saveRetrainAnnotations": {
27531
27720
  capName: "pipeline-analytics",
27532
27721
  capScope: "device",
@@ -27551,6 +27740,12 @@ Object.freeze({
27551
27740
  addonId: null,
27552
27741
  access: "create"
27553
27742
  },
27743
+ "pipelineAnalytics.startStorageMigrationMove": {
27744
+ capName: "pipeline-analytics",
27745
+ capScope: "device",
27746
+ addonId: null,
27747
+ access: "create"
27748
+ },
27554
27749
  "pipelineAnalytics.wipeAllAnalytics": {
27555
27750
  capName: "pipeline-analytics",
27556
27751
  capScope: "device",
@@ -27917,6 +28112,12 @@ Object.freeze({
27917
28112
  addonId: null,
27918
28113
  access: "view"
27919
28114
  },
28115
+ "pipelineOrchestrator.pauseForStorageMigration": {
28116
+ capName: "pipeline-orchestrator",
28117
+ capScope: "system",
28118
+ addonId: null,
28119
+ access: "create"
28120
+ },
27920
28121
  "pipelineOrchestrator.rebalance": {
27921
28122
  capName: "pipeline-orchestrator",
27922
28123
  capScope: "system",
@@ -27941,6 +28142,12 @@ Object.freeze({
27941
28142
  addonId: null,
27942
28143
  access: "view"
27943
28144
  },
28145
+ "pipelineOrchestrator.resumeForStorageMigration": {
28146
+ capName: "pipeline-orchestrator",
28147
+ capScope: "system",
28148
+ addonId: null,
28149
+ access: "create"
28150
+ },
27944
28151
  "pipelineOrchestrator.saveTemplate": {
27945
28152
  capName: "pipeline-orchestrator",
27946
28153
  capScope: "system",
@@ -28337,7 +28544,7 @@ Object.freeze({
28337
28544
  addonId: null,
28338
28545
  access: "create"
28339
28546
  },
28340
- "recording.cancelRelocate": {
28547
+ "recording.cancelStorageMigrationMove": {
28341
28548
  capName: "recording",
28342
28549
  capScope: "system",
28343
28550
  addonId: null,
@@ -28373,7 +28580,7 @@ Object.freeze({
28373
28580
  addonId: null,
28374
28581
  access: "view"
28375
28582
  },
28376
- "recording.getRelocateStatus": {
28583
+ "recording.getStorageMigrationMoveStatus": {
28377
28584
  capName: "recording",
28378
28585
  capScope: "system",
28379
28586
  addonId: null,
@@ -28397,6 +28604,12 @@ Object.freeze({
28397
28604
  addonId: null,
28398
28605
  access: "view"
28399
28606
  },
28607
+ "recording.pauseForStorageMigration": {
28608
+ capName: "recording",
28609
+ capScope: "system",
28610
+ addonId: null,
28611
+ access: "create"
28612
+ },
28400
28613
  "recording.pruneFootage": {
28401
28614
  capName: "recording",
28402
28615
  capScope: "system",
@@ -28415,7 +28628,7 @@ Object.freeze({
28415
28628
  addonId: null,
28416
28629
  access: "view"
28417
28630
  },
28418
- "recording.relocateFootage": {
28631
+ "recording.refreshStorageLocationsForMigration": {
28419
28632
  capName: "recording",
28420
28633
  capScope: "system",
28421
28634
  addonId: null,
@@ -28439,12 +28652,24 @@ Object.freeze({
28439
28652
  addonId: null,
28440
28653
  access: "create"
28441
28654
  },
28655
+ "recording.resumeForStorageMigration": {
28656
+ capName: "recording",
28657
+ capScope: "system",
28658
+ addonId: null,
28659
+ access: "create"
28660
+ },
28442
28661
  "recording.setDeviceConfig": {
28443
28662
  capName: "recording",
28444
28663
  capScope: "system",
28445
28664
  addonId: null,
28446
28665
  access: "create"
28447
28666
  },
28667
+ "recording.startStorageMigrationMove": {
28668
+ capName: "recording",
28669
+ capScope: "system",
28670
+ addonId: null,
28671
+ access: "create"
28672
+ },
28448
28673
  "recordingExport.cancelExport": {
28449
28674
  capName: "recordingExport",
28450
28675
  capScope: "system",
@@ -28835,6 +29060,30 @@ Object.freeze({
28835
29060
  addonId: null,
28836
29061
  access: "view"
28837
29062
  },
29063
+ "storageMigration.cancel": {
29064
+ capName: "storage-migration",
29065
+ capScope: "system",
29066
+ addonId: null,
29067
+ access: "create"
29068
+ },
29069
+ "storageMigration.plan": {
29070
+ capName: "storage-migration",
29071
+ capScope: "system",
29072
+ addonId: null,
29073
+ access: "view"
29074
+ },
29075
+ "storageMigration.start": {
29076
+ capName: "storage-migration",
29077
+ capScope: "system",
29078
+ addonId: null,
29079
+ access: "create"
29080
+ },
29081
+ "storageMigration.status": {
29082
+ capName: "storage-migration",
29083
+ capScope: "system",
29084
+ addonId: null,
29085
+ access: "view"
29086
+ },
28838
29087
  "storageProvider.abortUpload": {
28839
29088
  capName: "storage-provider",
28840
29089
  capScope: "system",
@@ -29213,12 +29462,42 @@ Object.freeze({
29213
29462
  addonId: null,
29214
29463
  access: "create"
29215
29464
  },
29465
+ "terminalSession.adoptLegacyMonitor": {
29466
+ capName: "terminal-session",
29467
+ capScope: "system",
29468
+ addonId: null,
29469
+ access: "create"
29470
+ },
29216
29471
  "terminalSession.close": {
29217
29472
  capName: "terminal-session",
29218
29473
  capScope: "system",
29219
29474
  addonId: null,
29220
29475
  access: "create"
29221
29476
  },
29477
+ "terminalSession.createInstance": {
29478
+ capName: "terminal-session",
29479
+ capScope: "system",
29480
+ addonId: null,
29481
+ access: "create"
29482
+ },
29483
+ "terminalSession.deleteInstance": {
29484
+ capName: "terminal-session",
29485
+ capScope: "system",
29486
+ addonId: null,
29487
+ access: "delete"
29488
+ },
29489
+ "terminalSession.listInstances": {
29490
+ capName: "terminal-session",
29491
+ capScope: "system",
29492
+ addonId: null,
29493
+ access: "view"
29494
+ },
29495
+ "terminalSession.listLegacyCameras": {
29496
+ capName: "terminal-session",
29497
+ capScope: "system",
29498
+ addonId: null,
29499
+ access: "view"
29500
+ },
29222
29501
  "terminalSession.listProfiles": {
29223
29502
  capName: "terminal-session",
29224
29503
  capScope: "system",
@@ -29249,6 +29528,12 @@ Object.freeze({
29249
29528
  addonId: null,
29250
29529
  access: "create"
29251
29530
  },
29531
+ "terminalSession.setInstanceEnabled": {
29532
+ capName: "terminal-session",
29533
+ capScope: "system",
29534
+ addonId: null,
29535
+ access: "create"
29536
+ },
29252
29537
  "terminalSession.writeInput": {
29253
29538
  capName: "terminal-session",
29254
29539
  capScope: "system",
@@ -7534,12 +7534,11 @@ var RecordingConfigSchema = object({
7534
7534
  /**
7535
7535
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
7536
7536
  *
7537
- * One shape shared by the recorder's `relocateFootage` (segments) and
7538
- * pipeline-analytics' `relocateMedia` (event media blobs) so the admin Data
7539
- * page renders both movers with one component. Jobs are in-RAM (a restart
7540
- * forgets them — re-running is safe by construction: copy-if-absent, delete
7541
- * after verify) and each completed/failed run also lands one durable ops-log
7542
- * row on the owning addon's surface.
7537
+ * One shape shared by the recorder and pipeline-analytics internal movers.
7538
+ * The public admin surface is `storage-migration`; child jobs remain in RAM
7539
+ * because copy-if-absent, verify, delete and index/row repoint are resumable.
7540
+ * Each completed/failed run also lands one durable ops-log row on its owning
7541
+ * addon surface.
7543
7542
  */
7544
7543
  var RelocateJobStateSchema = _enum([
7545
7544
  "running",
@@ -7566,19 +7565,100 @@ var RelocateJobSchema = object({
7566
7565
  finishedAt: number().nullable(),
7567
7566
  error: string().nullable()
7568
7567
  });
7568
+ /** Profile-derived footage selection used only by the migration coordinator:
7569
+ * `recordings` owns high+mid; `recordingsLow` owns low. */
7570
+ var RelocateFootageClassSchema = _enum(["recordings", "recordingsLow"]);
7569
7571
  var RelocateFootageInputSchema = object({
7570
- deviceId: number().optional(),
7571
7572
  fromLocationId: string(),
7572
7573
  toLocationId: string(),
7573
7574
  entities: array(_enum(["segments"])).optional(),
7575
+ /** Limits relocation to the logical profile class. Omit only for the
7576
+ * pre-orchestration compatibility path. */
7577
+ footageClass: RelocateFootageClassSchema.optional(),
7574
7578
  /** Copy throttle in MB/s (default 40) — the drain is a background chore,
7575
7579
  * never allowed to starve live writers. */
7576
7580
  throttleMbps: number().min(1).max(1e3).optional()
7577
7581
  });
7578
- var RelocateMediaInputSchema = object({
7579
- deviceId: number().optional(),
7582
+ /** Internal, lease-scoped participant operation. It is intentionally separate
7583
+ * from persistent recording settings: a migration never changes
7584
+ * `RecordingConfig.enabled` or camera wrapper bindings. */
7585
+ var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
7586
+ var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
7587
+ var StorageMigrationMediaMoveInputSchema = object({
7580
7588
  toLocationId: string(),
7581
7589
  throttleMbps: number().min(1).max(1e3).optional()
7590
+ }).extend({ leaseId: string().min(1) });
7591
+ /** The independently selectable logical storage classes. `recordings`
7592
+ * encompasses the high and mid segment profiles; `recordingsLow` is low
7593
+ * segments; `eventMedia` is post-analysis blobs. */
7594
+ var StorageMigrationClassSchema = _enum([
7595
+ "recordings",
7596
+ "recordingsLow",
7597
+ "eventMedia"
7598
+ ]);
7599
+ /** A destination is always an existing, fully-qualified location id. The
7600
+ * migration API intentionally never changes a source location's `basePath`:
7601
+ * callers create a new `<type>:<slug>` location, then select it here. */
7602
+ var StorageMigrationDestinationsSchema = object({
7603
+ recordings: string().min(1).optional(),
7604
+ recordingsLow: string().min(1).optional(),
7605
+ eventMedia: string().min(1).optional()
7606
+ }).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
7607
+ /** Shared input for planning and starting an orchestrated storage migration. */
7608
+ var StorageMigrationInputSchema = object({
7609
+ destinations: StorageMigrationDestinationsSchema,
7610
+ throttleMbps: number().min(1).max(1e3).optional()
7611
+ });
7612
+ /** The durable coordinator state machine. The only phase that changes default
7613
+ * locations is `repointing`, after every selected mover has completed and been
7614
+ * verified. */
7615
+ var StorageMigrationPhaseSchema = _enum([
7616
+ "planning",
7617
+ "pausing",
7618
+ "moving",
7619
+ "verifying",
7620
+ "repointing",
7621
+ "refreshing",
7622
+ "resuming",
7623
+ "done",
7624
+ "failed",
7625
+ "cancelled"
7626
+ ]);
7627
+ var StorageMigrationParticipantSchema = _enum([
7628
+ "pipeline",
7629
+ "recorder",
7630
+ "analytics"
7631
+ ]);
7632
+ var StorageMigrationMoveSchema = object({
7633
+ storageClass: StorageMigrationClassSchema,
7634
+ fromLocationId: string(),
7635
+ toLocationId: string(),
7636
+ moverJobId: string().nullable(),
7637
+ state: RelocateJobStateSchema.nullable(),
7638
+ error: string().nullable()
7639
+ });
7640
+ var StorageMigrationJobSchema = object({
7641
+ jobId: string(),
7642
+ phase: StorageMigrationPhaseSchema,
7643
+ destinations: StorageMigrationDestinationsSchema,
7644
+ throttleMbps: number(),
7645
+ moves: array(StorageMigrationMoveSchema),
7646
+ pauseLeaseId: string().nullable(),
7647
+ pausedParticipants: array(StorageMigrationParticipantSchema),
7648
+ repointed: boolean(),
7649
+ cancelRequested: boolean(),
7650
+ startedAt: number(),
7651
+ updatedAt: number(),
7652
+ finishedAt: number().nullable(),
7653
+ error: string().nullable()
7654
+ });
7655
+ var StorageMigrationPlanSchema = object({
7656
+ destinations: StorageMigrationDestinationsSchema,
7657
+ moves: array(object({
7658
+ storageClass: StorageMigrationClassSchema,
7659
+ fromLocationId: string(),
7660
+ toLocationId: string()
7661
+ }))
7582
7662
  });
7583
7663
  /**
7584
7664
  * `StorageLocationType` — an addon-declared id that identifies the *kind* of
@@ -15971,13 +16051,19 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
15971
16051
  }), method(object({ deviceId: number() }), EventPruneCountsSchema, {
15972
16052
  kind: "mutation",
15973
16053
  auth: "admin"
15974
- }), method(RelocateMediaInputSchema, object({ jobId: string() }), {
16054
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
15975
16055
  kind: "mutation",
15976
16056
  auth: "admin"
15977
- }), method(object({}), array(RelocateJobSchema).readonly(), {
15978
- kind: "query",
16057
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
16058
+ kind: "mutation",
16059
+ auth: "admin"
16060
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
16061
+ kind: "mutation",
16062
+ auth: "admin"
16063
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
16064
+ kind: "mutation",
15979
16065
  auth: "admin"
15980
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16066
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
15981
16067
  kind: "mutation",
15982
16068
  auth: "admin"
15983
16069
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
@@ -17474,7 +17560,13 @@ var NodeInferenceDevicesSchema = object({
17474
17560
  reachable: boolean(),
17475
17561
  devices: array(NodeInferenceDeviceSchema).readonly()
17476
17562
  });
17477
- method(object({
17563
+ method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
17564
+ kind: "mutation",
17565
+ auth: "admin"
17566
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
17567
+ kind: "mutation",
17568
+ auth: "admin"
17569
+ }), method(object({
17478
17570
  deviceId: number(),
17479
17571
  agentNodeId: string()
17480
17572
  }), object({ success: literal(true) }), {
@@ -18148,6 +18240,13 @@ method(object({ locationId: string() }), EvictableUsageSchema), method(object({
18148
18240
  locationId: string(),
18149
18241
  targetBytes: number().int().positive()
18150
18242
  }), EvictResultSchema, { kind: "mutation" });
18243
+ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
18244
+ kind: "mutation",
18245
+ auth: "admin"
18246
+ }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
18247
+ kind: "mutation",
18248
+ auth: "admin"
18249
+ });
18151
18250
  var ProviderInfoSchema = discriminatedUnion("shouldSaveDiskSpace", [object({
18152
18251
  providerId: string().min(1),
18153
18252
  displayName: string().min(1),
@@ -18251,6 +18350,28 @@ var TerminalProfileInfoSchema = object({
18251
18350
  label: string(),
18252
18351
  description: string().optional()
18253
18352
  });
18353
+ /**
18354
+ * A durable operator-created Terminal instance. Profiles are templates; only
18355
+ * an instance declares a camera.
18356
+ */
18357
+ var TerminalInstanceInfoSchema = object({
18358
+ instanceId: string(),
18359
+ cameraStableId: string(),
18360
+ nodeId: string(),
18361
+ profileId: string(),
18362
+ profileLabel: string(),
18363
+ name: string(),
18364
+ enabled: boolean()
18365
+ });
18366
+ var TerminalLegacyCameraSchema = object({
18367
+ stableId: string(),
18368
+ nodeId: string(),
18369
+ profileId: string(),
18370
+ profileLabel: string(),
18371
+ name: string(),
18372
+ /** Only legacy monitor cameras can retain their historic stable identity. */
18373
+ adoptable: boolean()
18374
+ });
18254
18375
  var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
18255
18376
  seq: number().int().positive(),
18256
18377
  kind: literal("data"),
@@ -18267,7 +18388,29 @@ var TerminalOutputBatchSchema = object({
18267
18388
  snapshot: string().optional(),
18268
18389
  events: array(TerminalOutputEventSchema).readonly()
18269
18390
  });
18270
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18391
+ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalInstanceInfoSchema).readonly(), { auth: "admin" }), method(object({
18392
+ targetNodeId: string().min(1),
18393
+ profileId: string().min(1),
18394
+ name: string().trim().min(1).max(160).optional()
18395
+ }), TerminalInstanceInfoSchema, {
18396
+ kind: "mutation",
18397
+ auth: "admin"
18398
+ }), method(object({ instanceId: string().min(1) }), _void(), {
18399
+ kind: "mutation",
18400
+ auth: "admin"
18401
+ }), method(object({
18402
+ instanceId: string().min(1),
18403
+ enabled: boolean()
18404
+ }), TerminalInstanceInfoSchema, {
18405
+ kind: "mutation",
18406
+ auth: "admin"
18407
+ }), method(_void(), array(TerminalLegacyCameraSchema).readonly(), { auth: "admin" }), method(object({
18408
+ stableId: string().min(1),
18409
+ name: string().trim().min(1).max(160).optional()
18410
+ }), TerminalInstanceInfoSchema, {
18411
+ kind: "mutation",
18412
+ auth: "admin"
18413
+ }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
18271
18414
  profileId: string(),
18272
18415
  cols: number().int().positive(),
18273
18416
  rows: number().int().positive()
@@ -18284,7 +18427,13 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
18284
18427
  }), method(object({
18285
18428
  sessionId: string(),
18286
18429
  afterSeq: number().int().nonnegative(),
18287
- waitMs: number().int().min(0).max(2e3).default(0)
18430
+ waitMs: number().int().min(0).max(2e3).default(0),
18431
+ /**
18432
+ * Wait when a just-opened session has no output yet. Kept opt-in so a
18433
+ * browser's initial repaint remains immediate; the camera snapshot
18434
+ * relay uses it to avoid encoding a blank startup frame.
18435
+ */
18436
+ waitForOutput: boolean().optional()
18288
18437
  }), TerminalOutputBatchSchema, {
18289
18438
  kind: "mutation",
18290
18439
  auth: "admin",
@@ -20225,6 +20374,7 @@ var FaceInfoSchema = object({
20225
20374
  var FaceFilterEnum = _enum([
20226
20375
  "unassigned",
20227
20376
  "recognized",
20377
+ "identified",
20228
20378
  "all"
20229
20379
  ]);
20230
20380
  var MediaFileLiteSchema$1 = object({
@@ -20253,6 +20403,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
20253
20403
  kind: "mutation",
20254
20404
  auth: "admin"
20255
20405
  }), method(object({
20406
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
20407
+ deviceId: number().int().optional(),
20256
20408
  limit: number().int().positive().optional(),
20257
20409
  filter: FaceFilterEnum.optional(),
20258
20410
  /**
@@ -22079,6 +22231,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
22079
22231
  capName: string().min(1).max(64),
22080
22232
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
22081
22233
  valuePath: string().min(1).max(64)
22234
+ }),
22235
+ object({
22236
+ kind: literal("latest-recognition"),
22237
+ recognition: _enum(["person", "plate"])
22082
22238
  })
22083
22239
  ]);
22084
22240
  var OsdSlotBindingSchema = object({
@@ -22184,6 +22340,15 @@ method(object({ deviceId: number().int() }), object({
22184
22340
  }), object({ success: literal(true) }), {
22185
22341
  kind: "mutation",
22186
22342
  auth: "admin"
22343
+ }), method(object({
22344
+ sourceDeviceId: number().int(),
22345
+ targetDeviceId: number().int()
22346
+ }), object({
22347
+ copied: number().int().nonnegative(),
22348
+ skipped: number().int().nonnegative()
22349
+ }), {
22350
+ kind: "mutation",
22351
+ auth: "admin"
22187
22352
  }), method(object({
22188
22353
  deviceId: number().int(),
22189
22354
  slotId: string().min(1),
@@ -23069,13 +23234,19 @@ method(object({
23069
23234
  }), {
23070
23235
  kind: "mutation",
23071
23236
  auth: "admin"
23072
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
23237
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
23073
23238
  kind: "mutation",
23074
23239
  auth: "admin"
23075
- }), method(object({}), array(RelocateJobSchema).readonly(), {
23076
- kind: "query",
23240
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
23241
+ kind: "mutation",
23077
23242
  auth: "admin"
23078
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23243
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
23244
+ kind: "mutation",
23245
+ auth: "admin"
23246
+ }), method(StorageMigrationFootageMoveInputSchema, object({ jobId: string() }), {
23247
+ kind: "mutation",
23248
+ auth: "admin"
23249
+ }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
23079
23250
  kind: "mutation",
23080
23251
  auth: "admin"
23081
23252
  });
@@ -27197,6 +27368,12 @@ Object.freeze({
27197
27368
  addonId: null,
27198
27369
  access: "delete"
27199
27370
  },
27371
+ "osdManager.copyDeviceConfiguration": {
27372
+ capName: "osd-manager",
27373
+ capScope: "system",
27374
+ addonId: null,
27375
+ access: "create"
27376
+ },
27200
27377
  "osdManager.getConditionSupport": {
27201
27378
  capName: "osd-manager",
27202
27379
  capScope: "system",
@@ -27293,7 +27470,7 @@ Object.freeze({
27293
27470
  addonId: null,
27294
27471
  access: "create"
27295
27472
  },
27296
- "pipelineAnalytics.cancelMediaRelocate": {
27473
+ "pipelineAnalytics.cancelStorageMigrationMove": {
27297
27474
  capName: "pipeline-analytics",
27298
27475
  capScope: "device",
27299
27476
  addonId: null,
@@ -27365,12 +27542,6 @@ Object.freeze({
27365
27542
  addonId: null,
27366
27543
  access: "view"
27367
27544
  },
27368
- "pipelineAnalytics.getMediaRelocateStatus": {
27369
- capName: "pipeline-analytics",
27370
- capScope: "device",
27371
- addonId: null,
27372
- access: "view"
27373
- },
27374
27545
  "pipelineAnalytics.getMotionEvents": {
27375
27546
  capName: "pipeline-analytics",
27376
27547
  capScope: "device",
@@ -27407,6 +27578,12 @@ Object.freeze({
27407
27578
  addonId: null,
27408
27579
  access: "view"
27409
27580
  },
27581
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
27582
+ capName: "pipeline-analytics",
27583
+ capScope: "device",
27584
+ addonId: null,
27585
+ access: "view"
27586
+ },
27410
27587
  "pipelineAnalytics.getTrack": {
27411
27588
  capName: "pipeline-analytics",
27412
27589
  capScope: "device",
@@ -27485,6 +27662,12 @@ Object.freeze({
27485
27662
  addonId: null,
27486
27663
  access: "view"
27487
27664
  },
27665
+ "pipelineAnalytics.pauseForStorageMigration": {
27666
+ capName: "pipeline-analytics",
27667
+ capScope: "device",
27668
+ addonId: null,
27669
+ access: "create"
27670
+ },
27488
27671
  "pipelineAnalytics.proposeRetrainAnnotations": {
27489
27672
  capName: "pipeline-analytics",
27490
27673
  capScope: "device",
@@ -27515,7 +27698,7 @@ Object.freeze({
27515
27698
  addonId: null,
27516
27699
  access: "create"
27517
27700
  },
27518
- "pipelineAnalytics.relocateMedia": {
27701
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
27519
27702
  capName: "pipeline-analytics",
27520
27703
  capScope: "device",
27521
27704
  addonId: null,
@@ -27527,6 +27710,12 @@ Object.freeze({
27527
27710
  addonId: null,
27528
27711
  access: "create"
27529
27712
  },
27713
+ "pipelineAnalytics.resumeForStorageMigration": {
27714
+ capName: "pipeline-analytics",
27715
+ capScope: "device",
27716
+ addonId: null,
27717
+ access: "create"
27718
+ },
27530
27719
  "pipelineAnalytics.saveRetrainAnnotations": {
27531
27720
  capName: "pipeline-analytics",
27532
27721
  capScope: "device",
@@ -27551,6 +27740,12 @@ Object.freeze({
27551
27740
  addonId: null,
27552
27741
  access: "create"
27553
27742
  },
27743
+ "pipelineAnalytics.startStorageMigrationMove": {
27744
+ capName: "pipeline-analytics",
27745
+ capScope: "device",
27746
+ addonId: null,
27747
+ access: "create"
27748
+ },
27554
27749
  "pipelineAnalytics.wipeAllAnalytics": {
27555
27750
  capName: "pipeline-analytics",
27556
27751
  capScope: "device",
@@ -27917,6 +28112,12 @@ Object.freeze({
27917
28112
  addonId: null,
27918
28113
  access: "view"
27919
28114
  },
28115
+ "pipelineOrchestrator.pauseForStorageMigration": {
28116
+ capName: "pipeline-orchestrator",
28117
+ capScope: "system",
28118
+ addonId: null,
28119
+ access: "create"
28120
+ },
27920
28121
  "pipelineOrchestrator.rebalance": {
27921
28122
  capName: "pipeline-orchestrator",
27922
28123
  capScope: "system",
@@ -27941,6 +28142,12 @@ Object.freeze({
27941
28142
  addonId: null,
27942
28143
  access: "view"
27943
28144
  },
28145
+ "pipelineOrchestrator.resumeForStorageMigration": {
28146
+ capName: "pipeline-orchestrator",
28147
+ capScope: "system",
28148
+ addonId: null,
28149
+ access: "create"
28150
+ },
27944
28151
  "pipelineOrchestrator.saveTemplate": {
27945
28152
  capName: "pipeline-orchestrator",
27946
28153
  capScope: "system",
@@ -28337,7 +28544,7 @@ Object.freeze({
28337
28544
  addonId: null,
28338
28545
  access: "create"
28339
28546
  },
28340
- "recording.cancelRelocate": {
28547
+ "recording.cancelStorageMigrationMove": {
28341
28548
  capName: "recording",
28342
28549
  capScope: "system",
28343
28550
  addonId: null,
@@ -28373,7 +28580,7 @@ Object.freeze({
28373
28580
  addonId: null,
28374
28581
  access: "view"
28375
28582
  },
28376
- "recording.getRelocateStatus": {
28583
+ "recording.getStorageMigrationMoveStatus": {
28377
28584
  capName: "recording",
28378
28585
  capScope: "system",
28379
28586
  addonId: null,
@@ -28397,6 +28604,12 @@ Object.freeze({
28397
28604
  addonId: null,
28398
28605
  access: "view"
28399
28606
  },
28607
+ "recording.pauseForStorageMigration": {
28608
+ capName: "recording",
28609
+ capScope: "system",
28610
+ addonId: null,
28611
+ access: "create"
28612
+ },
28400
28613
  "recording.pruneFootage": {
28401
28614
  capName: "recording",
28402
28615
  capScope: "system",
@@ -28415,7 +28628,7 @@ Object.freeze({
28415
28628
  addonId: null,
28416
28629
  access: "view"
28417
28630
  },
28418
- "recording.relocateFootage": {
28631
+ "recording.refreshStorageLocationsForMigration": {
28419
28632
  capName: "recording",
28420
28633
  capScope: "system",
28421
28634
  addonId: null,
@@ -28439,12 +28652,24 @@ Object.freeze({
28439
28652
  addonId: null,
28440
28653
  access: "create"
28441
28654
  },
28655
+ "recording.resumeForStorageMigration": {
28656
+ capName: "recording",
28657
+ capScope: "system",
28658
+ addonId: null,
28659
+ access: "create"
28660
+ },
28442
28661
  "recording.setDeviceConfig": {
28443
28662
  capName: "recording",
28444
28663
  capScope: "system",
28445
28664
  addonId: null,
28446
28665
  access: "create"
28447
28666
  },
28667
+ "recording.startStorageMigrationMove": {
28668
+ capName: "recording",
28669
+ capScope: "system",
28670
+ addonId: null,
28671
+ access: "create"
28672
+ },
28448
28673
  "recordingExport.cancelExport": {
28449
28674
  capName: "recordingExport",
28450
28675
  capScope: "system",
@@ -28835,6 +29060,30 @@ Object.freeze({
28835
29060
  addonId: null,
28836
29061
  access: "view"
28837
29062
  },
29063
+ "storageMigration.cancel": {
29064
+ capName: "storage-migration",
29065
+ capScope: "system",
29066
+ addonId: null,
29067
+ access: "create"
29068
+ },
29069
+ "storageMigration.plan": {
29070
+ capName: "storage-migration",
29071
+ capScope: "system",
29072
+ addonId: null,
29073
+ access: "view"
29074
+ },
29075
+ "storageMigration.start": {
29076
+ capName: "storage-migration",
29077
+ capScope: "system",
29078
+ addonId: null,
29079
+ access: "create"
29080
+ },
29081
+ "storageMigration.status": {
29082
+ capName: "storage-migration",
29083
+ capScope: "system",
29084
+ addonId: null,
29085
+ access: "view"
29086
+ },
28838
29087
  "storageProvider.abortUpload": {
28839
29088
  capName: "storage-provider",
28840
29089
  capScope: "system",
@@ -29213,12 +29462,42 @@ Object.freeze({
29213
29462
  addonId: null,
29214
29463
  access: "create"
29215
29464
  },
29465
+ "terminalSession.adoptLegacyMonitor": {
29466
+ capName: "terminal-session",
29467
+ capScope: "system",
29468
+ addonId: null,
29469
+ access: "create"
29470
+ },
29216
29471
  "terminalSession.close": {
29217
29472
  capName: "terminal-session",
29218
29473
  capScope: "system",
29219
29474
  addonId: null,
29220
29475
  access: "create"
29221
29476
  },
29477
+ "terminalSession.createInstance": {
29478
+ capName: "terminal-session",
29479
+ capScope: "system",
29480
+ addonId: null,
29481
+ access: "create"
29482
+ },
29483
+ "terminalSession.deleteInstance": {
29484
+ capName: "terminal-session",
29485
+ capScope: "system",
29486
+ addonId: null,
29487
+ access: "delete"
29488
+ },
29489
+ "terminalSession.listInstances": {
29490
+ capName: "terminal-session",
29491
+ capScope: "system",
29492
+ addonId: null,
29493
+ access: "view"
29494
+ },
29495
+ "terminalSession.listLegacyCameras": {
29496
+ capName: "terminal-session",
29497
+ capScope: "system",
29498
+ addonId: null,
29499
+ access: "view"
29500
+ },
29222
29501
  "terminalSession.listProfiles": {
29223
29502
  capName: "terminal-session",
29224
29503
  capScope: "system",
@@ -29249,6 +29528,12 @@ Object.freeze({
29249
29528
  addonId: null,
29250
29529
  access: "create"
29251
29530
  },
29531
+ "terminalSession.setInstanceEnabled": {
29532
+ capName: "terminal-session",
29533
+ capScope: "system",
29534
+ addonId: null,
29535
+ access: "create"
29536
+ },
29252
29537
  "terminalSession.writeInput": {
29253
29538
  capName: "terminal-session",
29254
29539
  capScope: "system",
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-CSc3X4AE.js");
5
+ const require_dist = require("../dist-GM5pUTqy.js");
6
6
  let node_crypto = require("node:crypto");
7
7
  let node_child_process = require("node:child_process");
8
8
  //#region src/ingress/tailscale-cli.ts
@@ -1,4 +1,4 @@
1
- import { i as EventCategory, n as networkAccessCapability, r as BaseAddon } from "../dist-BRf5w7H0.mjs";
1
+ import { i as EventCategory, n as networkAccessCapability, r as BaseAddon } from "../dist-DodL65lc.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { execFile } from "node:child_process";
4
4
  import { promisify } from "node:util";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-tailscale",
3
- "version": "1.2.11",
3
+ "version": "1.2.12",
4
4
  "description": "Tailscale bundle for CamStack — joins the host to a tailnet (client) and exposes the hub via Serve/Funnel (ingress). Multi-entry npm package shipping 2 addons under a single bundle.",
5
5
  "keywords": [
6
6
  "camstack",