@camstack/addon-tailscale 1.2.10 → 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-CwEZ_Wrh.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-BB6_UnWs.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",
15979
16059
  auth: "admin"
15980
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16060
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
16061
+ kind: "mutation",
16062
+ auth: "admin"
16063
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
16064
+ kind: "mutation",
16065
+ auth: "admin"
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,7 +18350,67 @@ var TerminalProfileInfoSchema = object({
18251
18350
  label: string(),
18252
18351
  description: string().optional()
18253
18352
  });
18254
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
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
+ });
18375
+ var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
18376
+ seq: number().int().positive(),
18377
+ kind: literal("data"),
18378
+ data: string()
18379
+ }), object({
18380
+ seq: number().int().positive(),
18381
+ kind: literal("exit"),
18382
+ exitCode: number().int(),
18383
+ signal: number().int().optional()
18384
+ })]);
18385
+ var TerminalOutputBatchSchema = object({
18386
+ cursor: number().int().nonnegative(),
18387
+ reset: boolean(),
18388
+ snapshot: string().optional(),
18389
+ events: array(TerminalOutputEventSchema).readonly()
18390
+ });
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({
18255
18414
  profileId: string(),
18256
18415
  cols: number().int().positive(),
18257
18416
  rows: number().int().positive()
@@ -18265,6 +18424,26 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
18265
18424
  }), _void(), {
18266
18425
  kind: "mutation",
18267
18426
  auth: "admin"
18427
+ }), method(object({
18428
+ sessionId: string(),
18429
+ afterSeq: number().int().nonnegative(),
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()
18437
+ }), TerminalOutputBatchSchema, {
18438
+ kind: "mutation",
18439
+ auth: "admin",
18440
+ timeoutMs: 15e3
18441
+ }), method(object({
18442
+ sessionId: string(),
18443
+ data: string().max(64 * 1024)
18444
+ }), _void(), {
18445
+ kind: "mutation",
18446
+ auth: "admin"
18268
18447
  }), method(object({ sessionId: string() }), _void(), {
18269
18448
  kind: "mutation",
18270
18449
  auth: "admin"
@@ -20195,6 +20374,7 @@ var FaceInfoSchema = object({
20195
20374
  var FaceFilterEnum = _enum([
20196
20375
  "unassigned",
20197
20376
  "recognized",
20377
+ "identified",
20198
20378
  "all"
20199
20379
  ]);
20200
20380
  var MediaFileLiteSchema$1 = object({
@@ -20223,6 +20403,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
20223
20403
  kind: "mutation",
20224
20404
  auth: "admin"
20225
20405
  }), method(object({
20406
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
20407
+ deviceId: number().int().optional(),
20226
20408
  limit: number().int().positive().optional(),
20227
20409
  filter: FaceFilterEnum.optional(),
20228
20410
  /**
@@ -22049,6 +22231,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
22049
22231
  capName: string().min(1).max(64),
22050
22232
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
22051
22233
  valuePath: string().min(1).max(64)
22234
+ }),
22235
+ object({
22236
+ kind: literal("latest-recognition"),
22237
+ recognition: _enum(["person", "plate"])
22052
22238
  })
22053
22239
  ]);
22054
22240
  var OsdSlotBindingSchema = object({
@@ -22154,6 +22340,15 @@ method(object({ deviceId: number().int() }), object({
22154
22340
  }), object({ success: literal(true) }), {
22155
22341
  kind: "mutation",
22156
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"
22157
22352
  }), method(object({
22158
22353
  deviceId: number().int(),
22159
22354
  slotId: string().min(1),
@@ -23039,13 +23234,19 @@ method(object({
23039
23234
  }), {
23040
23235
  kind: "mutation",
23041
23236
  auth: "admin"
23042
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
23237
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
23043
23238
  kind: "mutation",
23044
23239
  auth: "admin"
23045
- }), method(object({}), array(RelocateJobSchema).readonly(), {
23046
- kind: "query",
23240
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
23241
+ kind: "mutation",
23047
23242
  auth: "admin"
23048
- }), 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() }), {
23049
23250
  kind: "mutation",
23050
23251
  auth: "admin"
23051
23252
  });
@@ -27167,6 +27368,12 @@ Object.freeze({
27167
27368
  addonId: null,
27168
27369
  access: "delete"
27169
27370
  },
27371
+ "osdManager.copyDeviceConfiguration": {
27372
+ capName: "osd-manager",
27373
+ capScope: "system",
27374
+ addonId: null,
27375
+ access: "create"
27376
+ },
27170
27377
  "osdManager.getConditionSupport": {
27171
27378
  capName: "osd-manager",
27172
27379
  capScope: "system",
@@ -27263,7 +27470,7 @@ Object.freeze({
27263
27470
  addonId: null,
27264
27471
  access: "create"
27265
27472
  },
27266
- "pipelineAnalytics.cancelMediaRelocate": {
27473
+ "pipelineAnalytics.cancelStorageMigrationMove": {
27267
27474
  capName: "pipeline-analytics",
27268
27475
  capScope: "device",
27269
27476
  addonId: null,
@@ -27335,12 +27542,6 @@ Object.freeze({
27335
27542
  addonId: null,
27336
27543
  access: "view"
27337
27544
  },
27338
- "pipelineAnalytics.getMediaRelocateStatus": {
27339
- capName: "pipeline-analytics",
27340
- capScope: "device",
27341
- addonId: null,
27342
- access: "view"
27343
- },
27344
27545
  "pipelineAnalytics.getMotionEvents": {
27345
27546
  capName: "pipeline-analytics",
27346
27547
  capScope: "device",
@@ -27377,6 +27578,12 @@ Object.freeze({
27377
27578
  addonId: null,
27378
27579
  access: "view"
27379
27580
  },
27581
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
27582
+ capName: "pipeline-analytics",
27583
+ capScope: "device",
27584
+ addonId: null,
27585
+ access: "view"
27586
+ },
27380
27587
  "pipelineAnalytics.getTrack": {
27381
27588
  capName: "pipeline-analytics",
27382
27589
  capScope: "device",
@@ -27455,6 +27662,12 @@ Object.freeze({
27455
27662
  addonId: null,
27456
27663
  access: "view"
27457
27664
  },
27665
+ "pipelineAnalytics.pauseForStorageMigration": {
27666
+ capName: "pipeline-analytics",
27667
+ capScope: "device",
27668
+ addonId: null,
27669
+ access: "create"
27670
+ },
27458
27671
  "pipelineAnalytics.proposeRetrainAnnotations": {
27459
27672
  capName: "pipeline-analytics",
27460
27673
  capScope: "device",
@@ -27485,7 +27698,7 @@ Object.freeze({
27485
27698
  addonId: null,
27486
27699
  access: "create"
27487
27700
  },
27488
- "pipelineAnalytics.relocateMedia": {
27701
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
27489
27702
  capName: "pipeline-analytics",
27490
27703
  capScope: "device",
27491
27704
  addonId: null,
@@ -27497,6 +27710,12 @@ Object.freeze({
27497
27710
  addonId: null,
27498
27711
  access: "create"
27499
27712
  },
27713
+ "pipelineAnalytics.resumeForStorageMigration": {
27714
+ capName: "pipeline-analytics",
27715
+ capScope: "device",
27716
+ addonId: null,
27717
+ access: "create"
27718
+ },
27500
27719
  "pipelineAnalytics.saveRetrainAnnotations": {
27501
27720
  capName: "pipeline-analytics",
27502
27721
  capScope: "device",
@@ -27521,6 +27740,12 @@ Object.freeze({
27521
27740
  addonId: null,
27522
27741
  access: "create"
27523
27742
  },
27743
+ "pipelineAnalytics.startStorageMigrationMove": {
27744
+ capName: "pipeline-analytics",
27745
+ capScope: "device",
27746
+ addonId: null,
27747
+ access: "create"
27748
+ },
27524
27749
  "pipelineAnalytics.wipeAllAnalytics": {
27525
27750
  capName: "pipeline-analytics",
27526
27751
  capScope: "device",
@@ -27887,6 +28112,12 @@ Object.freeze({
27887
28112
  addonId: null,
27888
28113
  access: "view"
27889
28114
  },
28115
+ "pipelineOrchestrator.pauseForStorageMigration": {
28116
+ capName: "pipeline-orchestrator",
28117
+ capScope: "system",
28118
+ addonId: null,
28119
+ access: "create"
28120
+ },
27890
28121
  "pipelineOrchestrator.rebalance": {
27891
28122
  capName: "pipeline-orchestrator",
27892
28123
  capScope: "system",
@@ -27911,6 +28142,12 @@ Object.freeze({
27911
28142
  addonId: null,
27912
28143
  access: "view"
27913
28144
  },
28145
+ "pipelineOrchestrator.resumeForStorageMigration": {
28146
+ capName: "pipeline-orchestrator",
28147
+ capScope: "system",
28148
+ addonId: null,
28149
+ access: "create"
28150
+ },
27914
28151
  "pipelineOrchestrator.saveTemplate": {
27915
28152
  capName: "pipeline-orchestrator",
27916
28153
  capScope: "system",
@@ -28307,7 +28544,7 @@ Object.freeze({
28307
28544
  addonId: null,
28308
28545
  access: "create"
28309
28546
  },
28310
- "recording.cancelRelocate": {
28547
+ "recording.cancelStorageMigrationMove": {
28311
28548
  capName: "recording",
28312
28549
  capScope: "system",
28313
28550
  addonId: null,
@@ -28343,7 +28580,7 @@ Object.freeze({
28343
28580
  addonId: null,
28344
28581
  access: "view"
28345
28582
  },
28346
- "recording.getRelocateStatus": {
28583
+ "recording.getStorageMigrationMoveStatus": {
28347
28584
  capName: "recording",
28348
28585
  capScope: "system",
28349
28586
  addonId: null,
@@ -28367,6 +28604,12 @@ Object.freeze({
28367
28604
  addonId: null,
28368
28605
  access: "view"
28369
28606
  },
28607
+ "recording.pauseForStorageMigration": {
28608
+ capName: "recording",
28609
+ capScope: "system",
28610
+ addonId: null,
28611
+ access: "create"
28612
+ },
28370
28613
  "recording.pruneFootage": {
28371
28614
  capName: "recording",
28372
28615
  capScope: "system",
@@ -28385,7 +28628,7 @@ Object.freeze({
28385
28628
  addonId: null,
28386
28629
  access: "view"
28387
28630
  },
28388
- "recording.relocateFootage": {
28631
+ "recording.refreshStorageLocationsForMigration": {
28389
28632
  capName: "recording",
28390
28633
  capScope: "system",
28391
28634
  addonId: null,
@@ -28409,12 +28652,24 @@ Object.freeze({
28409
28652
  addonId: null,
28410
28653
  access: "create"
28411
28654
  },
28655
+ "recording.resumeForStorageMigration": {
28656
+ capName: "recording",
28657
+ capScope: "system",
28658
+ addonId: null,
28659
+ access: "create"
28660
+ },
28412
28661
  "recording.setDeviceConfig": {
28413
28662
  capName: "recording",
28414
28663
  capScope: "system",
28415
28664
  addonId: null,
28416
28665
  access: "create"
28417
28666
  },
28667
+ "recording.startStorageMigrationMove": {
28668
+ capName: "recording",
28669
+ capScope: "system",
28670
+ addonId: null,
28671
+ access: "create"
28672
+ },
28418
28673
  "recordingExport.cancelExport": {
28419
28674
  capName: "recordingExport",
28420
28675
  capScope: "system",
@@ -28805,6 +29060,30 @@ Object.freeze({
28805
29060
  addonId: null,
28806
29061
  access: "view"
28807
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
+ },
28808
29087
  "storageProvider.abortUpload": {
28809
29088
  capName: "storage-provider",
28810
29089
  capScope: "system",
@@ -29183,12 +29462,42 @@ Object.freeze({
29183
29462
  addonId: null,
29184
29463
  access: "create"
29185
29464
  },
29465
+ "terminalSession.adoptLegacyMonitor": {
29466
+ capName: "terminal-session",
29467
+ capScope: "system",
29468
+ addonId: null,
29469
+ access: "create"
29470
+ },
29186
29471
  "terminalSession.close": {
29187
29472
  capName: "terminal-session",
29188
29473
  capScope: "system",
29189
29474
  addonId: null,
29190
29475
  access: "create"
29191
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
+ },
29192
29501
  "terminalSession.listProfiles": {
29193
29502
  capName: "terminal-session",
29194
29503
  capScope: "system",
@@ -29207,12 +29516,30 @@ Object.freeze({
29207
29516
  addonId: null,
29208
29517
  access: "create"
29209
29518
  },
29519
+ "terminalSession.pullOutput": {
29520
+ capName: "terminal-session",
29521
+ capScope: "system",
29522
+ addonId: null,
29523
+ access: "create"
29524
+ },
29210
29525
  "terminalSession.resize": {
29211
29526
  capName: "terminal-session",
29212
29527
  capScope: "system",
29213
29528
  addonId: null,
29214
29529
  access: "create"
29215
29530
  },
29531
+ "terminalSession.setInstanceEnabled": {
29532
+ capName: "terminal-session",
29533
+ capScope: "system",
29534
+ addonId: null,
29535
+ access: "create"
29536
+ },
29537
+ "terminalSession.writeInput": {
29538
+ capName: "terminal-session",
29539
+ capScope: "system",
29540
+ addonId: null,
29541
+ access: "create"
29542
+ },
29216
29543
  "toast.onToast": {
29217
29544
  capName: "toast",
29218
29545
  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",
15979
16059
  auth: "admin"
15980
- }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
16060
+ }), method(StorageMigrationLeaseInputSchema, object({ refreshed: literal(true) }), {
16061
+ kind: "mutation",
16062
+ auth: "admin"
16063
+ }), method(StorageMigrationMediaMoveInputSchema, object({ jobId: string() }), {
16064
+ kind: "mutation",
16065
+ auth: "admin"
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,7 +18350,67 @@ var TerminalProfileInfoSchema = object({
18251
18350
  label: string(),
18252
18351
  description: string().optional()
18253
18352
  });
18254
- method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
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
+ });
18375
+ var TerminalOutputEventSchema = discriminatedUnion("kind", [object({
18376
+ seq: number().int().positive(),
18377
+ kind: literal("data"),
18378
+ data: string()
18379
+ }), object({
18380
+ seq: number().int().positive(),
18381
+ kind: literal("exit"),
18382
+ exitCode: number().int(),
18383
+ signal: number().int().optional()
18384
+ })]);
18385
+ var TerminalOutputBatchSchema = object({
18386
+ cursor: number().int().nonnegative(),
18387
+ reset: boolean(),
18388
+ snapshot: string().optional(),
18389
+ events: array(TerminalOutputEventSchema).readonly()
18390
+ });
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({
18255
18414
  profileId: string(),
18256
18415
  cols: number().int().positive(),
18257
18416
  rows: number().int().positive()
@@ -18265,6 +18424,26 @@ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }),
18265
18424
  }), _void(), {
18266
18425
  kind: "mutation",
18267
18426
  auth: "admin"
18427
+ }), method(object({
18428
+ sessionId: string(),
18429
+ afterSeq: number().int().nonnegative(),
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()
18437
+ }), TerminalOutputBatchSchema, {
18438
+ kind: "mutation",
18439
+ auth: "admin",
18440
+ timeoutMs: 15e3
18441
+ }), method(object({
18442
+ sessionId: string(),
18443
+ data: string().max(64 * 1024)
18444
+ }), _void(), {
18445
+ kind: "mutation",
18446
+ auth: "admin"
18268
18447
  }), method(object({ sessionId: string() }), _void(), {
18269
18448
  kind: "mutation",
18270
18449
  auth: "admin"
@@ -20195,6 +20374,7 @@ var FaceInfoSchema = object({
20195
20374
  var FaceFilterEnum = _enum([
20196
20375
  "unassigned",
20197
20376
  "recognized",
20377
+ "identified",
20198
20378
  "all"
20199
20379
  ]);
20200
20380
  var MediaFileLiteSchema$1 = object({
@@ -20223,6 +20403,8 @@ method(_void(), array(IdentitySchema).readonly()), method(object({ name: string(
20223
20403
  kind: "mutation",
20224
20404
  auth: "admin"
20225
20405
  }), method(object({
20406
+ /** Restrict to one camera. Absent keeps the cluster-wide gallery view. */
20407
+ deviceId: number().int().optional(),
20226
20408
  limit: number().int().positive().optional(),
20227
20409
  filter: FaceFilterEnum.optional(),
20228
20410
  /**
@@ -22049,6 +22231,10 @@ var OsdSourceSchema = discriminatedUnion("kind", [
22049
22231
  capName: string().min(1).max(64),
22050
22232
  /** Dot path inside the slice, e.g. `detected`, `value`, `mode`. */
22051
22233
  valuePath: string().min(1).max(64)
22234
+ }),
22235
+ object({
22236
+ kind: literal("latest-recognition"),
22237
+ recognition: _enum(["person", "plate"])
22052
22238
  })
22053
22239
  ]);
22054
22240
  var OsdSlotBindingSchema = object({
@@ -22154,6 +22340,15 @@ method(object({ deviceId: number().int() }), object({
22154
22340
  }), object({ success: literal(true) }), {
22155
22341
  kind: "mutation",
22156
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"
22157
22352
  }), method(object({
22158
22353
  deviceId: number().int(),
22159
22354
  slotId: string().min(1),
@@ -23039,13 +23234,19 @@ method(object({
23039
23234
  }), {
23040
23235
  kind: "mutation",
23041
23236
  auth: "admin"
23042
- }), method(RelocateFootageInputSchema, object({ jobId: string() }), {
23237
+ }), method(StorageMigrationLeaseInputSchema, object({ paused: literal(true) }), {
23043
23238
  kind: "mutation",
23044
23239
  auth: "admin"
23045
- }), method(object({}), array(RelocateJobSchema).readonly(), {
23046
- kind: "query",
23240
+ }), method(StorageMigrationLeaseInputSchema, object({ resumed: literal(true) }), {
23241
+ kind: "mutation",
23047
23242
  auth: "admin"
23048
- }), 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() }), {
23049
23250
  kind: "mutation",
23050
23251
  auth: "admin"
23051
23252
  });
@@ -27167,6 +27368,12 @@ Object.freeze({
27167
27368
  addonId: null,
27168
27369
  access: "delete"
27169
27370
  },
27371
+ "osdManager.copyDeviceConfiguration": {
27372
+ capName: "osd-manager",
27373
+ capScope: "system",
27374
+ addonId: null,
27375
+ access: "create"
27376
+ },
27170
27377
  "osdManager.getConditionSupport": {
27171
27378
  capName: "osd-manager",
27172
27379
  capScope: "system",
@@ -27263,7 +27470,7 @@ Object.freeze({
27263
27470
  addonId: null,
27264
27471
  access: "create"
27265
27472
  },
27266
- "pipelineAnalytics.cancelMediaRelocate": {
27473
+ "pipelineAnalytics.cancelStorageMigrationMove": {
27267
27474
  capName: "pipeline-analytics",
27268
27475
  capScope: "device",
27269
27476
  addonId: null,
@@ -27335,12 +27542,6 @@ Object.freeze({
27335
27542
  addonId: null,
27336
27543
  access: "view"
27337
27544
  },
27338
- "pipelineAnalytics.getMediaRelocateStatus": {
27339
- capName: "pipeline-analytics",
27340
- capScope: "device",
27341
- addonId: null,
27342
- access: "view"
27343
- },
27344
27545
  "pipelineAnalytics.getMotionEvents": {
27345
27546
  capName: "pipeline-analytics",
27346
27547
  capScope: "device",
@@ -27377,6 +27578,12 @@ Object.freeze({
27377
27578
  addonId: null,
27378
27579
  access: "view"
27379
27580
  },
27581
+ "pipelineAnalytics.getStorageMigrationMoveStatus": {
27582
+ capName: "pipeline-analytics",
27583
+ capScope: "device",
27584
+ addonId: null,
27585
+ access: "view"
27586
+ },
27380
27587
  "pipelineAnalytics.getTrack": {
27381
27588
  capName: "pipeline-analytics",
27382
27589
  capScope: "device",
@@ -27455,6 +27662,12 @@ Object.freeze({
27455
27662
  addonId: null,
27456
27663
  access: "view"
27457
27664
  },
27665
+ "pipelineAnalytics.pauseForStorageMigration": {
27666
+ capName: "pipeline-analytics",
27667
+ capScope: "device",
27668
+ addonId: null,
27669
+ access: "create"
27670
+ },
27458
27671
  "pipelineAnalytics.proposeRetrainAnnotations": {
27459
27672
  capName: "pipeline-analytics",
27460
27673
  capScope: "device",
@@ -27485,7 +27698,7 @@ Object.freeze({
27485
27698
  addonId: null,
27486
27699
  access: "create"
27487
27700
  },
27488
- "pipelineAnalytics.relocateMedia": {
27701
+ "pipelineAnalytics.refreshStorageLocationsForMigration": {
27489
27702
  capName: "pipeline-analytics",
27490
27703
  capScope: "device",
27491
27704
  addonId: null,
@@ -27497,6 +27710,12 @@ Object.freeze({
27497
27710
  addonId: null,
27498
27711
  access: "create"
27499
27712
  },
27713
+ "pipelineAnalytics.resumeForStorageMigration": {
27714
+ capName: "pipeline-analytics",
27715
+ capScope: "device",
27716
+ addonId: null,
27717
+ access: "create"
27718
+ },
27500
27719
  "pipelineAnalytics.saveRetrainAnnotations": {
27501
27720
  capName: "pipeline-analytics",
27502
27721
  capScope: "device",
@@ -27521,6 +27740,12 @@ Object.freeze({
27521
27740
  addonId: null,
27522
27741
  access: "create"
27523
27742
  },
27743
+ "pipelineAnalytics.startStorageMigrationMove": {
27744
+ capName: "pipeline-analytics",
27745
+ capScope: "device",
27746
+ addonId: null,
27747
+ access: "create"
27748
+ },
27524
27749
  "pipelineAnalytics.wipeAllAnalytics": {
27525
27750
  capName: "pipeline-analytics",
27526
27751
  capScope: "device",
@@ -27887,6 +28112,12 @@ Object.freeze({
27887
28112
  addonId: null,
27888
28113
  access: "view"
27889
28114
  },
28115
+ "pipelineOrchestrator.pauseForStorageMigration": {
28116
+ capName: "pipeline-orchestrator",
28117
+ capScope: "system",
28118
+ addonId: null,
28119
+ access: "create"
28120
+ },
27890
28121
  "pipelineOrchestrator.rebalance": {
27891
28122
  capName: "pipeline-orchestrator",
27892
28123
  capScope: "system",
@@ -27911,6 +28142,12 @@ Object.freeze({
27911
28142
  addonId: null,
27912
28143
  access: "view"
27913
28144
  },
28145
+ "pipelineOrchestrator.resumeForStorageMigration": {
28146
+ capName: "pipeline-orchestrator",
28147
+ capScope: "system",
28148
+ addonId: null,
28149
+ access: "create"
28150
+ },
27914
28151
  "pipelineOrchestrator.saveTemplate": {
27915
28152
  capName: "pipeline-orchestrator",
27916
28153
  capScope: "system",
@@ -28307,7 +28544,7 @@ Object.freeze({
28307
28544
  addonId: null,
28308
28545
  access: "create"
28309
28546
  },
28310
- "recording.cancelRelocate": {
28547
+ "recording.cancelStorageMigrationMove": {
28311
28548
  capName: "recording",
28312
28549
  capScope: "system",
28313
28550
  addonId: null,
@@ -28343,7 +28580,7 @@ Object.freeze({
28343
28580
  addonId: null,
28344
28581
  access: "view"
28345
28582
  },
28346
- "recording.getRelocateStatus": {
28583
+ "recording.getStorageMigrationMoveStatus": {
28347
28584
  capName: "recording",
28348
28585
  capScope: "system",
28349
28586
  addonId: null,
@@ -28367,6 +28604,12 @@ Object.freeze({
28367
28604
  addonId: null,
28368
28605
  access: "view"
28369
28606
  },
28607
+ "recording.pauseForStorageMigration": {
28608
+ capName: "recording",
28609
+ capScope: "system",
28610
+ addonId: null,
28611
+ access: "create"
28612
+ },
28370
28613
  "recording.pruneFootage": {
28371
28614
  capName: "recording",
28372
28615
  capScope: "system",
@@ -28385,7 +28628,7 @@ Object.freeze({
28385
28628
  addonId: null,
28386
28629
  access: "view"
28387
28630
  },
28388
- "recording.relocateFootage": {
28631
+ "recording.refreshStorageLocationsForMigration": {
28389
28632
  capName: "recording",
28390
28633
  capScope: "system",
28391
28634
  addonId: null,
@@ -28409,12 +28652,24 @@ Object.freeze({
28409
28652
  addonId: null,
28410
28653
  access: "create"
28411
28654
  },
28655
+ "recording.resumeForStorageMigration": {
28656
+ capName: "recording",
28657
+ capScope: "system",
28658
+ addonId: null,
28659
+ access: "create"
28660
+ },
28412
28661
  "recording.setDeviceConfig": {
28413
28662
  capName: "recording",
28414
28663
  capScope: "system",
28415
28664
  addonId: null,
28416
28665
  access: "create"
28417
28666
  },
28667
+ "recording.startStorageMigrationMove": {
28668
+ capName: "recording",
28669
+ capScope: "system",
28670
+ addonId: null,
28671
+ access: "create"
28672
+ },
28418
28673
  "recordingExport.cancelExport": {
28419
28674
  capName: "recordingExport",
28420
28675
  capScope: "system",
@@ -28805,6 +29060,30 @@ Object.freeze({
28805
29060
  addonId: null,
28806
29061
  access: "view"
28807
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
+ },
28808
29087
  "storageProvider.abortUpload": {
28809
29088
  capName: "storage-provider",
28810
29089
  capScope: "system",
@@ -29183,12 +29462,42 @@ Object.freeze({
29183
29462
  addonId: null,
29184
29463
  access: "create"
29185
29464
  },
29465
+ "terminalSession.adoptLegacyMonitor": {
29466
+ capName: "terminal-session",
29467
+ capScope: "system",
29468
+ addonId: null,
29469
+ access: "create"
29470
+ },
29186
29471
  "terminalSession.close": {
29187
29472
  capName: "terminal-session",
29188
29473
  capScope: "system",
29189
29474
  addonId: null,
29190
29475
  access: "create"
29191
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
+ },
29192
29501
  "terminalSession.listProfiles": {
29193
29502
  capName: "terminal-session",
29194
29503
  capScope: "system",
@@ -29207,12 +29516,30 @@ Object.freeze({
29207
29516
  addonId: null,
29208
29517
  access: "create"
29209
29518
  },
29519
+ "terminalSession.pullOutput": {
29520
+ capName: "terminal-session",
29521
+ capScope: "system",
29522
+ addonId: null,
29523
+ access: "create"
29524
+ },
29210
29525
  "terminalSession.resize": {
29211
29526
  capName: "terminal-session",
29212
29527
  capScope: "system",
29213
29528
  addonId: null,
29214
29529
  access: "create"
29215
29530
  },
29531
+ "terminalSession.setInstanceEnabled": {
29532
+ capName: "terminal-session",
29533
+ capScope: "system",
29534
+ addonId: null,
29535
+ access: "create"
29536
+ },
29537
+ "terminalSession.writeInput": {
29538
+ capName: "terminal-session",
29539
+ capScope: "system",
29540
+ addonId: null,
29541
+ access: "create"
29542
+ },
29216
29543
  "toast.onToast": {
29217
29544
  capName: "toast",
29218
29545
  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-CwEZ_Wrh.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-BB6_UnWs.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.10",
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",