camstack 1.2.70 → 1.2.71

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.
@@ -15839,6 +15839,13 @@ var MediaRelocateModeSchema = external_exports.enum([
15839
15839
  ]);
15840
15840
  var RelocateMediaInputSchema = external_exports.object({
15841
15841
  toLocationId: external_exports.string(),
15842
+ /**
15843
+ * Restrict the pass to rows currently on this location. Omitted / `'*'` =
15844
+ * every row that is not already on `toLocationId` (the historical
15845
+ * behaviour). A named source is what a from→to migration needs: without it
15846
+ * "move events off disk 2" also emptied disk 1.
15847
+ */
15848
+ fromLocationId: external_exports.string().optional(),
15842
15849
  throttleMbps: external_exports.number().min(1).max(1e3).optional(),
15843
15850
  /** Omitted = `move`, the pre-existing behaviour. */
15844
15851
  mode: MediaRelocateModeSchema.optional()
@@ -15870,9 +15877,18 @@ var StorageMigrationDestinationsSchema = external_exports.object({
15870
15877
  backups: external_exports.string().min(1).optional(),
15871
15878
  galleryMedia: external_exports.string().min(1).optional()
15872
15879
  }).refine((value) => Object.keys(value).length > 0, { message: "select at least one storage class" });
15880
+ var StorageMigrationSourcesSchema = external_exports.object({
15881
+ recordings: external_exports.string().min(1).optional(),
15882
+ recordingsLow: external_exports.string().min(1).optional(),
15883
+ eventMedia: external_exports.string().min(1).optional(),
15884
+ backups: external_exports.string().min(1).optional(),
15885
+ galleryMedia: external_exports.string().min(1).optional()
15886
+ }).optional();
15873
15887
  var StorageMigrationModeSchema = external_exports.enum(["blocking", "nonBlocking"]);
15874
15888
  var StorageMigrationInputSchema = external_exports.object({
15875
15889
  destinations: StorageMigrationDestinationsSchema,
15890
+ /** Omitted = each class's current default. */
15891
+ sources: StorageMigrationSourcesSchema,
15876
15892
  throttleMbps: external_exports.number().min(1).max(1e3).optional(),
15877
15893
  /** Omitted = `blocking`, which stays the default. */
15878
15894
  mode: StorageMigrationModeSchema.optional()
@@ -15918,6 +15934,13 @@ var StorageMigrationMoveSchema = external_exports.object({
15918
15934
  storageClass: StorageMigrationClassSchema,
15919
15935
  fromLocationId: external_exports.string(),
15920
15936
  toLocationId: external_exports.string(),
15937
+ /**
15938
+ * True when `from` was NOT the class default at plan time. The move still
15939
+ * copies bytes, but the default is left alone and the source is disabled
15940
+ * once the copy verifies. Absent on jobs planned before this field existed
15941
+ * — those jobs always repointed, which is `false`.
15942
+ */
15943
+ freezeSource: external_exports.boolean().optional(),
15921
15944
  moverJobId: external_exports.string().nullable(),
15922
15945
  state: RelocateJobStateSchema.nullable(),
15923
15946
  error: external_exports.string().nullable(),
@@ -15931,6 +15954,7 @@ var StorageMigrationJobSchema = external_exports.object({
15931
15954
  * can tell a seconds-long cutover from a thirty-hour one. */
15932
15955
  mode: StorageMigrationModeSchema,
15933
15956
  destinations: StorageMigrationDestinationsSchema,
15957
+ sources: StorageMigrationSourcesSchema,
15934
15958
  throttleMbps: external_exports.number(),
15935
15959
  moves: external_exports.array(StorageMigrationMoveSchema),
15936
15960
  pauseLeaseId: external_exports.string().nullable(),
@@ -15957,6 +15981,7 @@ var StorageMigrationFindingSchema = external_exports.object({
15957
15981
  });
15958
15982
  var StorageMigrationPlanSchema = external_exports.object({
15959
15983
  destinations: StorageMigrationDestinationsSchema,
15984
+ sources: StorageMigrationSourcesSchema,
15960
15985
  /** The mode this plan was built for. A plan is only valid for its mode: the
15961
15986
  * `eventMedia` seal gate and the single-cardinality refusal both depend on
15962
15987
  * it. */
@@ -15964,7 +15989,8 @@ var StorageMigrationPlanSchema = external_exports.object({
15964
15989
  moves: external_exports.array(external_exports.object({
15965
15990
  storageClass: StorageMigrationClassSchema,
15966
15991
  fromLocationId: external_exports.string(),
15967
- toLocationId: external_exports.string()
15992
+ toLocationId: external_exports.string(),
15993
+ freezeSource: external_exports.boolean().optional()
15968
15994
  })),
15969
15995
  findings: external_exports.array(StorageMigrationFindingSchema)
15970
15996
  });
@@ -16076,9 +16102,42 @@ var LedgerWalkReportSchema = external_exports.object({
16076
16102
  var RelocatableMediaCountSchema = external_exports.object({ rows: external_exports.number().int().nonnegative() }).nullable();
16077
16103
  var RelocatableMediaCountInputSchema = external_exports.object({
16078
16104
  toLocationId: external_exports.string().min(1),
16105
+ /** Restrict the count to one source; omitted / `'*'` = every non-target row. */
16106
+ fromLocationId: external_exports.string().optional(),
16079
16107
  /** Omitted = `move`. */
16080
16108
  mode: MediaRelocateModeSchema.optional()
16081
16109
  });
16110
+ var StorageCleanupPhaseSchema = external_exports.enum([
16111
+ "orphans",
16112
+ "debug-media",
16113
+ "ghost-ledger",
16114
+ "done",
16115
+ "failed",
16116
+ "cancelled"
16117
+ ]);
16118
+ var StorageCleanupInputSchema = external_exports.object({
16119
+ /** Also walk motion stills / track filmstrips. Off by default. */
16120
+ includeDebugMedia: external_exports.boolean().optional()
16121
+ });
16122
+ var StorageCleanupJobSchema = external_exports.object({
16123
+ jobId: external_exports.string(),
16124
+ phase: StorageCleanupPhaseSchema,
16125
+ includeDebugMedia: external_exports.boolean(),
16126
+ orphansReclaimed: external_exports.number().int().nonnegative(),
16127
+ orphanBytesReclaimed: external_exports.number().int().nonnegative(),
16128
+ debugMediaReclaimed: external_exports.number().int().nonnegative(),
16129
+ debugMediaBytesReclaimed: external_exports.number().int().nonnegative(),
16130
+ ghostsForgotten: external_exports.number().int().nonnegative(),
16131
+ ghostBytesForgotten: external_exports.number().int().nonnegative(),
16132
+ /** Short operator-facing line: current collection, pass, or location. */
16133
+ detail: external_exports.string().nullable(),
16134
+ cancelRequested: external_exports.boolean(),
16135
+ startedAt: external_exports.number(),
16136
+ updatedAt: external_exports.number(),
16137
+ finishedAt: external_exports.number().nullable(),
16138
+ error: external_exports.string().nullable()
16139
+ });
16140
+ var StorageCleanupStatusInputSchema = external_exports.object({ jobId: external_exports.string().optional() });
16082
16141
  var StorageLocationTypeSchema = external_exports.string().regex(/^[a-z][a-zA-Z0-9-]*$/);
16083
16142
  var StorageLocationSchema = external_exports.object({
16084
16143
  id: external_exports.string().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/),
@@ -29793,7 +29852,23 @@ var storageMigrationCapability = {
29793
29852
  drain: method(StorageMigrationDrainInputSchema, external_exports.object({ jobId: external_exports.string() }), {
29794
29853
  kind: "mutation",
29795
29854
  auth: "admin"
29796
- })
29855
+ }),
29856
+ /**
29857
+ * One operator cleanup of leftover analytics (DB + blobs) and ghost
29858
+ * ledger rows on frozen footage locations. Optional debug-media sweep.
29859
+ * Returns immediately; poll {@link cleanupStatus}.
29860
+ */
29861
+ cleanupStart: method(StorageCleanupInputSchema, external_exports.object({ jobId: external_exports.string() }), {
29862
+ kind: "mutation",
29863
+ auth: "admin"
29864
+ }),
29865
+ cleanupStatus: method(StorageCleanupStatusInputSchema, StorageCleanupJobSchema.nullable(), { auth: "admin" }),
29866
+ cleanupCancel: method(external_exports.object({ jobId: external_exports.string() }), external_exports.object({ cancelled: external_exports.boolean() }), {
29867
+ kind: "mutation",
29868
+ auth: "admin"
29869
+ }),
29870
+ /** Recent finished migration jobs, newest first. The live job is `status`. */
29871
+ history: method(external_exports.object({}), external_exports.array(StorageMigrationJobSchema).readonly(), { auth: "admin" })
29797
29872
  }
29798
29873
  };
29799
29874
  var ProviderInfoSchema = external_exports.discriminatedUnion("shouldSaveDiskSpace", [external_exports.object({
@@ -36585,6 +36660,26 @@ var RecordingRebalanceInputSchema = external_exports.object({
36585
36660
  /** Ignore piles smaller than this (default 1 GB). */
36586
36661
  minMoveGb: external_exports.number().min(0).optional()
36587
36662
  });
36663
+ var RecordingDevicePlacementSchema = external_exports.object({
36664
+ deviceId: external_exports.number().int(),
36665
+ profile: external_exports.string(),
36666
+ locationId: external_exports.string()
36667
+ });
36668
+ var RecordingDevicePinSchema = external_exports.object({
36669
+ deviceId: external_exports.number().int(),
36670
+ /** Recordings-class location this camera is pinned to. */
36671
+ locationId: external_exports.string()
36672
+ });
36673
+ var RecordingPlacementViewSchema = external_exports.object({
36674
+ assignments: external_exports.array(RecordingDevicePlacementSchema),
36675
+ pins: external_exports.array(RecordingDevicePinSchema),
36676
+ defaultLocations: external_exports.record(external_exports.string(), external_exports.string())
36677
+ });
36678
+ var RecordingSetDevicePlacementInputSchema = external_exports.object({
36679
+ deviceId: external_exports.number().int(),
36680
+ /** `null` = Auto. Otherwise a `recordings:*` location id. */
36681
+ locationId: external_exports.string().nullable()
36682
+ });
36588
36683
  var LocateSegmentResultSchema = external_exports.discriminatedUnion("kind", [external_exports.object({
36589
36684
  kind: external_exports.literal("segment"),
36590
36685
  startMs: external_exports.number(),
@@ -36903,6 +36998,22 @@ var recordingCapability = {
36903
36998
  startStorageRebalance: method(RecordingRebalanceInputSchema, RecordingRebalancePlanSchema, {
36904
36999
  kind: "mutation",
36905
37000
  auth: "admin"
37001
+ }),
37002
+ /**
37003
+ * The placement plan in force plus operator pins. Drives the Locations
37004
+ * admin page: Auto vs a named recordings location, per camera.
37005
+ */
37006
+ getPlacement: method(external_exports.object({}), RecordingPlacementViewSchema, {
37007
+ kind: "query",
37008
+ auth: "admin"
37009
+ }),
37010
+ /**
37011
+ * Pin a camera to a recordings location, or clear the pin (Auto). High and
37012
+ * mid follow the pin; low stays with the recordingsLow planner.
37013
+ */
37014
+ setDevicePlacement: method(RecordingSetDevicePlacementInputSchema, external_exports.object({ ok: external_exports.literal(true) }), {
37015
+ kind: "mutation",
37016
+ auth: "admin"
36906
37017
  })
36907
37018
  }
36908
37019
  };
@@ -43360,6 +43471,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
43360
43471
  addonId: null,
43361
43472
  access: "view"
43362
43473
  },
43474
+ "recording.getPlacement": {
43475
+ capName: "recording",
43476
+ capScope: "system",
43477
+ addonId: null,
43478
+ access: "view"
43479
+ },
43363
43480
  "recording.getPlaybackManifest": {
43364
43481
  capName: "recording",
43365
43482
  capScope: "system",
@@ -43486,6 +43603,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
43486
43603
  addonId: null,
43487
43604
  access: "create"
43488
43605
  },
43606
+ "recording.setDevicePlacement": {
43607
+ capName: "recording",
43608
+ capScope: "system",
43609
+ addonId: null,
43610
+ access: "create"
43611
+ },
43489
43612
  "recording.startStorageMigrationMove": {
43490
43613
  capName: "recording",
43491
43614
  capScope: "system",
@@ -43930,12 +44053,36 @@ var METHOD_ACCESS_MAP = Object.freeze({
43930
44053
  addonId: null,
43931
44054
  access: "create"
43932
44055
  },
44056
+ "storageMigration.cleanupCancel": {
44057
+ capName: "storage-migration",
44058
+ capScope: "system",
44059
+ addonId: null,
44060
+ access: "create"
44061
+ },
44062
+ "storageMigration.cleanupStart": {
44063
+ capName: "storage-migration",
44064
+ capScope: "system",
44065
+ addonId: null,
44066
+ access: "create"
44067
+ },
44068
+ "storageMigration.cleanupStatus": {
44069
+ capName: "storage-migration",
44070
+ capScope: "system",
44071
+ addonId: null,
44072
+ access: "view"
44073
+ },
43933
44074
  "storageMigration.drain": {
43934
44075
  capName: "storage-migration",
43935
44076
  capScope: "system",
43936
44077
  addonId: null,
43937
44078
  access: "create"
43938
44079
  },
44080
+ "storageMigration.history": {
44081
+ capName: "storage-migration",
44082
+ capScope: "system",
44083
+ addonId: null,
44084
+ access: "view"
44085
+ },
43939
44086
  "storageMigration.movers": {
43940
44087
  capName: "storage-migration",
43941
44088
  capScope: "system",
@@ -46422,6 +46569,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
46422
46569
  form: "single",
46423
46570
  optional: false
46424
46571
  }],
46572
+ "recording.setDevicePlacement": [{
46573
+ name: "deviceId",
46574
+ form: "single",
46575
+ optional: false
46576
+ }],
46425
46577
  "recording.startStorageMigrationMove": [{
46426
46578
  name: "deviceId",
46427
46579
  form: "single",
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runDiscover
4
- } from "./chunk-45XQKO4Y.js";
4
+ } from "./chunk-TAXPJ53T.js";
5
5
  import "./chunk-LMMQX4CK.js";
6
6
 
7
7
  // src/cli.ts
@@ -38,7 +38,7 @@ async function runServe(args) {
38
38
  ...typeof values.data === "string" ? { data: values.data } : {}
39
39
  };
40
40
  Object.assign(process.env, buildServeEnv(opts));
41
- await import("./launcher-E2VZZ5O3.js");
41
+ await import("./launcher-4QRZCB6O.js");
42
42
  }
43
43
 
44
44
  // src/commands/agent.ts
@@ -83,7 +83,7 @@ async function runAgent(args) {
83
83
  ...typeof values.port === "string" ? { port: values.port } : {}
84
84
  };
85
85
  Object.assign(process.env, buildAgentEnv(opts));
86
- await import("./launcher-E2VZZ5O3.js");
86
+ await import("./launcher-4QRZCB6O.js");
87
87
  }
88
88
 
89
89
  // src/commands/setup.ts
@@ -1130,7 +1130,7 @@ function isUnknown(_value) {
1130
1130
  return true;
1131
1131
  }
1132
1132
  async function resolveServerInteractive(presetNamespace) {
1133
- const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-KE6GFVKY.js");
1133
+ const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-TJE5IRDV.js");
1134
1134
  if (presetNamespace) {
1135
1135
  const spinner4 = clack.spinner();
1136
1136
  spinner4.start(`Discovering hub on LAN (namespace "${presetNamespace}")`);
@@ -5,7 +5,7 @@ import {
5
5
  filterHubNodes,
6
6
  resolveHubFromDiscovered,
7
7
  runDiscover
8
- } from "./chunk-45XQKO4Y.js";
8
+ } from "./chunk-TAXPJ53T.js";
9
9
  import "./chunk-LMMQX4CK.js";
10
10
  export {
11
11
  DEFAULT_HUB_HTTPS_PORT,