camstack 1.2.109 → 1.2.110

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.
@@ -15741,13 +15741,28 @@ var RecordingBandSchema = external_exports.object({
15741
15741
  end: external_exports.string().regex(HHMM),
15742
15742
  mode: RecordingBandModeSchema,
15743
15743
  triggers: RecordingBandTriggersSchema.optional(),
15744
+ /**
15745
+ * RETIRED (D381). A band no longer carries a pre-buffer of its own.
15746
+ *
15747
+ * It was the retroactive KEEP bound — which already-written segments survive
15748
+ * a trigger — and it had to be at least as wide as the widest pre-roll the
15749
+ * broker could serve, or the gate would delete the seconds the ring had just
15750
+ * handed the writer. That "at least as wide as" is the tell: it was a second
15751
+ * expression of the broker's retention, in different units, in a different
15752
+ * addon, with an invariant the operator had to maintain by hand. The keep
15753
+ * bound is now derived from the one prebuffer ceiling and there is nothing
15754
+ * left to configure here.
15755
+ *
15756
+ * The key survives in the SHAPE so a config written before that record still
15757
+ * parses and can be migrated deliberately — `RecordingBandSchema` is not
15758
+ * strict, so simply deleting it would strip an operator's value in silence on
15759
+ * the next save (the failure D380 came one commit from shipping). Nothing
15760
+ * reads it: {@link stripRetiredBandPreBufferSec} removes it on load.
15761
+ */
15744
15762
  preBufferSec: external_exports.number().min(0).optional(),
15745
15763
  postBufferSec: external_exports.number().min(0).optional()
15746
15764
  });
15747
- var DEFAULT_EVENTS_BAND_BUFFER_SEC = {
15748
- preBufferSec: 15,
15749
- postBufferSec: 30
15750
- };
15765
+ var DEFAULT_EVENTS_BAND_BUFFER_SEC = { postBufferSec: 30 };
15751
15766
  var VISIT_MERGE_GAP_MS = DEFAULT_EVENTS_BAND_BUFFER_SEC.postBufferSec * 1e3;
15752
15767
  var RecordingRetentionSchema = external_exports.object({
15753
15768
  maxAgeDays: external_exports.number().min(0).optional(),
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runDiscover
4
- } from "./chunk-667FSBVG.js";
4
+ } from "./chunk-YK6NE5VI.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-DE3AXTYV.js");
41
+ await import("./launcher-YBWRBM2B.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-DE3AXTYV.js");
86
+ await import("./launcher-YBWRBM2B.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-UWXU5NPV.js");
1133
+ const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-6YJTDHZO.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-667FSBVG.js";
8
+ } from "./chunk-YK6NE5VI.js";
9
9
  import "./chunk-LMMQX4CK.js";
10
10
  export {
11
11
  DEFAULT_HUB_HTTPS_PORT,
@@ -23633,9 +23633,9 @@ var require_zod = __commonJS({
23633
23633
  }
23634
23634
  });
23635
23635
 
23636
- // ../system/dist/dist-HAP38XvL.js
23637
- var require_dist_HAP38XvL = __commonJS({
23638
- "../system/dist/dist-HAP38XvL.js"(exports) {
23636
+ // ../system/dist/dist-KQ5D2wqr.js
23637
+ var require_dist_KQ5D2wqr = __commonJS({
23638
+ "../system/dist/dist-KQ5D2wqr.js"(exports) {
23639
23639
  "use strict";
23640
23640
  var zod = require_zod();
23641
23641
  var EventCategory = /* @__PURE__ */ (function(EventCategory2) {
@@ -26240,13 +26240,28 @@ var require_dist_HAP38XvL = __commonJS({
26240
26240
  end: zod.z.string().regex(HHMM),
26241
26241
  mode: RecordingBandModeSchema,
26242
26242
  triggers: RecordingBandTriggersSchema.optional(),
26243
+ /**
26244
+ * RETIRED (D381). A band no longer carries a pre-buffer of its own.
26245
+ *
26246
+ * It was the retroactive KEEP bound — which already-written segments survive
26247
+ * a trigger — and it had to be at least as wide as the widest pre-roll the
26248
+ * broker could serve, or the gate would delete the seconds the ring had just
26249
+ * handed the writer. That "at least as wide as" is the tell: it was a second
26250
+ * expression of the broker's retention, in different units, in a different
26251
+ * addon, with an invariant the operator had to maintain by hand. The keep
26252
+ * bound is now derived from the one prebuffer ceiling and there is nothing
26253
+ * left to configure here.
26254
+ *
26255
+ * The key survives in the SHAPE so a config written before that record still
26256
+ * parses and can be migrated deliberately — `RecordingBandSchema` is not
26257
+ * strict, so simply deleting it would strip an operator's value in silence on
26258
+ * the next save (the failure D380 came one commit from shipping). Nothing
26259
+ * reads it: {@link stripRetiredBandPreBufferSec} removes it on load.
26260
+ */
26243
26261
  preBufferSec: zod.z.number().min(0).optional(),
26244
26262
  postBufferSec: zod.z.number().min(0).optional()
26245
26263
  });
26246
- ({
26247
- preBufferSec: 15,
26248
- postBufferSec: 30
26249
- }).postBufferSec * 1e3;
26264
+ ({ postBufferSec: 30 }).postBufferSec * 1e3;
26250
26265
  var RecordingRetentionSchema = zod.z.object({
26251
26266
  maxAgeDays: zod.z.number().min(0).optional(),
26252
26267
  maxSizeGb: zod.z.number().min(0).optional()
@@ -60660,7 +60675,7 @@ var require_alerts_addon = __commonJS({
60660
60675
  [Symbol.toStringTag]: { value: "Module" }
60661
60676
  });
60662
60677
  require_chunk_Cek0wNdY();
60663
- var require_dist10 = require_dist_HAP38XvL();
60678
+ var require_dist10 = require_dist_KQ5D2wqr();
60664
60679
  function selectExpired(alerts, cutoffMs) {
60665
60680
  return alerts.filter((a) => a.createdAt < cutoffMs).sort((a, b) => a.createdAt - b.createdAt).map((a) => a.id);
60666
60681
  }
@@ -61479,7 +61494,7 @@ var require_console_logging = __commonJS({
61479
61494
  [Symbol.toStringTag]: { value: "Module" }
61480
61495
  });
61481
61496
  require_chunk_Cek0wNdY();
61482
- var require_dist10 = require_dist_HAP38XvL();
61497
+ var require_dist10 = require_dist_KQ5D2wqr();
61483
61498
  var require_formatter = require_formatter_DqAKDlvN();
61484
61499
  var LEVEL_RANK = {
61485
61500
  debug: 0,
@@ -61573,7 +61588,7 @@ var require_core_blocks_addon = __commonJS({
61573
61588
  "use strict";
61574
61589
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
61575
61590
  var require_chunk = require_chunk_Cek0wNdY();
61576
- var require_dist10 = require_dist_HAP38XvL();
61591
+ var require_dist10 = require_dist_KQ5D2wqr();
61577
61592
  var node_crypto = __require("crypto");
61578
61593
  var node_fs_promises = __require("fs/promises");
61579
61594
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -62470,11 +62485,11 @@ var require_core_blocks = __commonJS({
62470
62485
  }
62471
62486
  });
62472
62487
 
62473
- // ../system/dist/retired-settings-keys-BYiTW-q4.js
62474
- var require_retired_settings_keys_BYiTW_q4 = __commonJS({
62475
- "../system/dist/retired-settings-keys-BYiTW-q4.js"(exports) {
62488
+ // ../system/dist/retired-settings-keys-2lWk7OeU.js
62489
+ var require_retired_settings_keys_2lWk7OeU = __commonJS({
62490
+ "../system/dist/retired-settings-keys-2lWk7OeU.js"(exports) {
62476
62491
  "use strict";
62477
- var require_dist10 = require_dist_HAP38XvL();
62492
+ var require_dist10 = require_dist_KQ5D2wqr();
62478
62493
  function settingsStoreIsAuthoritativeHere(env) {
62479
62494
  const raw = (env["CAMSTACK_ROLE"] ?? "").trim().toLowerCase();
62480
62495
  return raw === "" || raw === "hub";
@@ -64688,8 +64703,8 @@ var require_device_manager_addon = __commonJS({
64688
64703
  [Symbol.toStringTag]: { value: "Module" }
64689
64704
  });
64690
64705
  require_chunk_Cek0wNdY();
64691
- var require_dist10 = require_dist_HAP38XvL();
64692
- var require_retired_settings_keys = require_retired_settings_keys_BYiTW_q4();
64706
+ var require_dist10 = require_dist_KQ5D2wqr();
64707
+ var require_retired_settings_keys = require_retired_settings_keys_2lWk7OeU();
64693
64708
  var node_crypto = __require("crypto");
64694
64709
  var _camstack_types_node = require_node();
64695
64710
  var JOB_HISTORY = 20;
@@ -70314,7 +70329,7 @@ var require_hub_forwarder = __commonJS({
70314
70329
  [Symbol.toStringTag]: { value: "Module" }
70315
70330
  });
70316
70331
  require_chunk_Cek0wNdY();
70317
- var require_dist10 = require_dist_HAP38XvL();
70332
+ var require_dist10 = require_dist_KQ5D2wqr();
70318
70333
  var require_formatter = require_formatter_DqAKDlvN();
70319
70334
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
70320
70335
  var HubForwarderDestination = class {
@@ -70451,7 +70466,7 @@ var require_liveness_monitor_addon = __commonJS({
70451
70466
  "use strict";
70452
70467
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
70453
70468
  require_chunk_Cek0wNdY();
70454
- var require_dist10 = require_dist_HAP38XvL();
70469
+ var require_dist10 = require_dist_KQ5D2wqr();
70455
70470
  var NO_DEVICES = "liveness:no-devices";
70456
70471
  var ALL_OFFLINE = "liveness:all-devices-offline";
70457
70472
  var NO_FOOTAGE_PREFIX = "liveness:no-footage:";
@@ -70647,7 +70662,7 @@ var require_local_auth_addon = __commonJS({
70647
70662
  [Symbol.toStringTag]: { value: "Module" }
70648
70663
  });
70649
70664
  var require_chunk = require_chunk_Cek0wNdY();
70650
- var require_dist10 = require_dist_HAP38XvL();
70665
+ var require_dist10 = require_dist_KQ5D2wqr();
70651
70666
  var node_crypto = __require("crypto");
70652
70667
  node_crypto = require_chunk.__toESM(node_crypto);
70653
70668
  var crypto$1 = __require("crypto");
@@ -78460,7 +78475,7 @@ var require_loki_logging = __commonJS({
78460
78475
  [Symbol.toStringTag]: { value: "Module" }
78461
78476
  });
78462
78477
  require_chunk_Cek0wNdY();
78463
- var require_dist10 = require_dist_HAP38XvL();
78478
+ var require_dist10 = require_dist_KQ5D2wqr();
78464
78479
  function sanitizeLabelName(raw) {
78465
78480
  const replaced = raw.replaceAll(/[^a-zA-Z0-9_]/g, "_");
78466
78481
  return /^[a-zA-Z_]/.test(replaced) ? replaced : `_${replaced}`;
@@ -79025,7 +79040,7 @@ var require_native_metrics_addon = __commonJS({
79025
79040
  [Symbol.toStringTag]: { value: "Module" }
79026
79041
  });
79027
79042
  var require_chunk = require_chunk_Cek0wNdY();
79028
- var require_dist10 = require_dist_HAP38XvL();
79043
+ var require_dist10 = require_dist_KQ5D2wqr();
79029
79044
  var node_fs_promises = __require("fs/promises");
79030
79045
  var node_child_process = __require("child_process");
79031
79046
  var node_util = __require("util");
@@ -81609,7 +81624,7 @@ var require_filesystem_storage_addon = __commonJS({
81609
81624
  [Symbol.toStringTag]: { value: "Module" }
81610
81625
  });
81611
81626
  var require_chunk = require_chunk_Cek0wNdY();
81612
- var require_dist10 = require_dist_HAP38XvL();
81627
+ var require_dist10 = require_dist_KQ5D2wqr();
81613
81628
  var node_crypto = __require("crypto");
81614
81629
  var node_fs_promises = __require("fs/promises");
81615
81630
  var node_path = __require("path");
@@ -82725,8 +82740,8 @@ var require_sqlite_settings_addon = __commonJS({
82725
82740
  [Symbol.toStringTag]: { value: "Module" }
82726
82741
  });
82727
82742
  var require_chunk = require_chunk_Cek0wNdY();
82728
- var require_dist10 = require_dist_HAP38XvL();
82729
- var require_retired_settings_keys = require_retired_settings_keys_BYiTW_q4();
82743
+ var require_dist10 = require_dist_KQ5D2wqr();
82744
+ var require_retired_settings_keys = require_retired_settings_keys_2lWk7OeU();
82730
82745
  var node_crypto = __require("crypto");
82731
82746
  var node_fs = __require("fs");
82732
82747
  var node_module = __require("module");
@@ -85216,7 +85231,7 @@ var require_storage_orchestrator_addon = __commonJS({
85216
85231
  [Symbol.toStringTag]: { value: "Module" }
85217
85232
  });
85218
85233
  var require_chunk = require_chunk_Cek0wNdY();
85219
- var require_dist10 = require_dist_HAP38XvL();
85234
+ var require_dist10 = require_dist_KQ5D2wqr();
85220
85235
  var require_hub_cap_forward = require_hub_cap_forward_DmHNjbB0();
85221
85236
  var zod = require_zod();
85222
85237
  var node_crypto = __require("crypto");
@@ -88167,7 +88182,7 @@ var require_system_config_addon = __commonJS({
88167
88182
  [Symbol.toStringTag]: { value: "Module" }
88168
88183
  });
88169
88184
  require_chunk_Cek0wNdY();
88170
- var require_dist10 = require_dist_HAP38XvL();
88185
+ var require_dist10 = require_dist_KQ5D2wqr();
88171
88186
  var SECTION_TITLES = {
88172
88187
  server: "Server",
88173
88188
  auth: "Authentication"
@@ -106228,7 +106243,7 @@ var require_winston_logging = __commonJS({
106228
106243
  [Symbol.toStringTag]: { value: "Module" }
106229
106244
  });
106230
106245
  var require_chunk = require_chunk_Cek0wNdY();
106231
- var require_dist10 = require_dist_HAP38XvL();
106246
+ var require_dist10 = require_dist_KQ5D2wqr();
106232
106247
  var require_formatter = require_formatter_DqAKDlvN();
106233
106248
  var node_path = __require("path");
106234
106249
  node_path = require_chunk.__toESM(node_path);
@@ -130866,7 +130881,7 @@ var require_dist3 = __commonJS({
130866
130881
  "use strict";
130867
130882
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
130868
130883
  var require_chunk = require_chunk_Cek0wNdY();
130869
- var require_dist10 = require_dist_HAP38XvL();
130884
+ var require_dist10 = require_dist_KQ5D2wqr();
130870
130885
  var require_builtins_alerts_alerts_addon = require_alerts_addon();
130871
130886
  require_alerts();
130872
130887
  var require_formatter = require_formatter_DqAKDlvN();
@@ -213249,13 +213264,48 @@ var require_dist4 = __commonJS({
213249
213264
  end: zod.z.string().regex(HHMM),
213250
213265
  mode: RecordingBandModeSchema,
213251
213266
  triggers: RecordingBandTriggersSchema.optional(),
213267
+ /**
213268
+ * RETIRED (D381). A band no longer carries a pre-buffer of its own.
213269
+ *
213270
+ * It was the retroactive KEEP bound — which already-written segments survive
213271
+ * a trigger — and it had to be at least as wide as the widest pre-roll the
213272
+ * broker could serve, or the gate would delete the seconds the ring had just
213273
+ * handed the writer. That "at least as wide as" is the tell: it was a second
213274
+ * expression of the broker's retention, in different units, in a different
213275
+ * addon, with an invariant the operator had to maintain by hand. The keep
213276
+ * bound is now derived from the one prebuffer ceiling and there is nothing
213277
+ * left to configure here.
213278
+ *
213279
+ * The key survives in the SHAPE so a config written before that record still
213280
+ * parses and can be migrated deliberately — `RecordingBandSchema` is not
213281
+ * strict, so simply deleting it would strip an operator's value in silence on
213282
+ * the next save (the failure D380 came one commit from shipping). Nothing
213283
+ * reads it: {@link stripRetiredBandPreBufferSec} removes it on load.
213284
+ */
213252
213285
  preBufferSec: zod.z.number().min(0).optional(),
213253
213286
  postBufferSec: zod.z.number().min(0).optional()
213254
213287
  });
213255
- var DEFAULT_EVENTS_BAND_BUFFER_SEC = {
213256
- preBufferSec: 15,
213257
- postBufferSec: 30
213258
- };
213288
+ var DEFAULT_EVENTS_BAND_BUFFER_SEC = { postBufferSec: 30 };
213289
+ function stripRetiredBandPreBufferSec(config) {
213290
+ const strippedBands = [];
213291
+ const bands = config.bands.map((band, index) => {
213292
+ if (band.preBufferSec === void 0) return band;
213293
+ strippedBands.push(index);
213294
+ const { preBufferSec: _retired, ...rest } = band;
213295
+ return rest;
213296
+ });
213297
+ if (strippedBands.length === 0) return {
213298
+ config,
213299
+ strippedBands
213300
+ };
213301
+ return {
213302
+ config: {
213303
+ ...config,
213304
+ bands
213305
+ },
213306
+ strippedBands
213307
+ };
213308
+ }
213259
213309
  var VISIT_MERGE_GAP_MS = DEFAULT_EVENTS_BAND_BUFFER_SEC.postBufferSec * 1e3;
213260
213310
  var RecordingRetentionSchema = zod.z.object({
213261
213311
  maxAgeDays: zod.z.number().min(0).optional(),
@@ -257536,6 +257586,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
257536
257586
  exports.streamParamsCapability = streamParamsCapability;
257537
257587
  exports.streamPixels = streamPixels;
257538
257588
  exports.streamQualityLabel = streamQualityLabel;
257589
+ exports.stripRetiredBandPreBufferSec = stripRetiredBandPreBufferSec;
257539
257590
  exports.subKindsOf = subKindsOf;
257540
257591
  exports.summarisePrivacyAudio = summarisePrivacyAudio;
257541
257592
  exports.summarizeEffectiveScope = summarizeEffectiveScope;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "camstack",
3
- "version": "1.2.109",
3
+ "version": "1.2.110",
4
4
  "description": "CLI tool for managing and running CamStack server",
5
5
  "keywords": [
6
6
  "camstack",