camstack 1.2.155 → 1.2.157

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.
@@ -26838,6 +26838,7 @@ var TrackAudioLabelSchema = external_exports.object({
26838
26838
  });
26839
26839
  var TrackSourceSchema = external_exports.enum([
26840
26840
  "pipeline",
26841
+ "onboard",
26841
26842
  "sensor",
26842
26843
  "audio"
26843
26844
  ]);
@@ -27298,6 +27299,7 @@ var MediaFileKindEnum = external_exports.enum([
27298
27299
  "keyFrame",
27299
27300
  "keyFrameSmall",
27300
27301
  "thumbnailSmall",
27302
+ "confirmationCrop",
27301
27303
  "sceneFrame"
27302
27304
  ]);
27303
27305
  var MediaFileRefSchema = external_exports.object({
@@ -29077,7 +29079,7 @@ var MotionSourceEnum = external_exports.enum([
29077
29079
  "device-activity"
29078
29080
  ]);
29079
29081
  var MotionSourcesSchema = external_exports.array(MotionSourceEnum);
29080
- var DetectionSourcesSchema = external_exports.array(DetectionSourceSchema);
29082
+ var DetectionSourcesSchema = external_exports.preprocess((value) => Array.isArray(value) && value.length > 1 ? value.slice(0, 1) : value, external_exports.array(DetectionSourceSchema).max(1));
29081
29083
  var ReportMotionInputSchema = external_exports.object({
29082
29084
  deviceId: external_exports.number(),
29083
29085
  detected: external_exports.boolean(),
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runDiscover
4
- } from "./chunk-NL37AEPX.js";
4
+ } from "./chunk-LFAXPGXW.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-QNK4R2TG.js");
41
+ await import("./launcher-MZZ42ZMY.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-QNK4R2TG.js");
86
+ await import("./launcher-MZZ42ZMY.js");
87
87
  }
88
88
 
89
89
  // src/commands/setup.ts
@@ -1140,7 +1140,7 @@ function isUnknown(_value) {
1140
1140
  return true;
1141
1141
  }
1142
1142
  async function resolveServerInteractive(presetNamespace) {
1143
- const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-FFHB2Q76.js");
1143
+ const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-AGYCTXAP.js");
1144
1144
  if (presetNamespace) {
1145
1145
  const spinner4 = clack.spinner();
1146
1146
  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-NL37AEPX.js";
8
+ } from "./chunk-LFAXPGXW.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-Dze0l7UM.js
23637
- var require_dist_Dze0l7UM = __commonJS({
23638
- "../system/dist/dist-Dze0l7UM.js"(exports) {
23636
+ // ../system/dist/dist-BETx_5mH.js
23637
+ var require_dist_BETx_5mH = __commonJS({
23638
+ "../system/dist/dist-BETx_5mH.js"(exports) {
23639
23639
  "use strict";
23640
23640
  var zod = require_zod();
23641
23641
  var EventCategory = /* @__PURE__ */ (function(EventCategory2) {
@@ -37590,6 +37590,7 @@ var require_dist_Dze0l7UM = __commonJS({
37590
37590
  });
37591
37591
  var TrackSourceSchema = zod.z.enum([
37592
37592
  "pipeline",
37593
+ "onboard",
37593
37594
  "sensor",
37594
37595
  "audio"
37595
37596
  ]);
@@ -38050,6 +38051,7 @@ var require_dist_Dze0l7UM = __commonJS({
38050
38051
  "keyFrame",
38051
38052
  "keyFrameSmall",
38052
38053
  "thumbnailSmall",
38054
+ "confirmationCrop",
38053
38055
  "sceneFrame"
38054
38056
  ]);
38055
38057
  var MediaFileSchema = zod.z.object({
@@ -39828,7 +39830,7 @@ var require_dist_Dze0l7UM = __commonJS({
39828
39830
  "device-activity"
39829
39831
  ]);
39830
39832
  var MotionSourcesSchema = zod.z.array(MotionSourceEnum);
39831
- var DetectionSourcesSchema = zod.z.array(DetectionSourceSchema);
39833
+ var DetectionSourcesSchema = zod.z.preprocess((value) => Array.isArray(value) && value.length > 1 ? value.slice(0, 1) : value, zod.z.array(DetectionSourceSchema).max(1));
39832
39834
  var ReportMotionInputSchema = zod.z.object({
39833
39835
  deviceId: zod.z.number(),
39834
39836
  detected: zod.z.boolean(),
@@ -62555,7 +62557,7 @@ var require_alerts_addon = __commonJS({
62555
62557
  [Symbol.toStringTag]: { value: "Module" }
62556
62558
  });
62557
62559
  require_chunk_Cek0wNdY();
62558
- var require_dist10 = require_dist_Dze0l7UM();
62560
+ var require_dist10 = require_dist_BETx_5mH();
62559
62561
  function selectExpired(alerts, cutoffMs) {
62560
62562
  return alerts.filter((a) => a.createdAt < cutoffMs).sort((a, b) => a.createdAt - b.createdAt).map((a) => a.id);
62561
62563
  }
@@ -63374,7 +63376,7 @@ var require_console_logging = __commonJS({
63374
63376
  [Symbol.toStringTag]: { value: "Module" }
63375
63377
  });
63376
63378
  require_chunk_Cek0wNdY();
63377
- var require_dist10 = require_dist_Dze0l7UM();
63379
+ var require_dist10 = require_dist_BETx_5mH();
63378
63380
  var require_formatter = require_formatter_DqAKDlvN();
63379
63381
  var LEVEL_RANK = {
63380
63382
  debug: 0,
@@ -63468,7 +63470,7 @@ var require_core_blocks_addon = __commonJS({
63468
63470
  "use strict";
63469
63471
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
63470
63472
  var require_chunk = require_chunk_Cek0wNdY();
63471
- var require_dist10 = require_dist_Dze0l7UM();
63473
+ var require_dist10 = require_dist_BETx_5mH();
63472
63474
  var node_crypto = __require("crypto");
63473
63475
  var node_fs_promises = __require("fs/promises");
63474
63476
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -64365,11 +64367,11 @@ var require_core_blocks = __commonJS({
64365
64367
  }
64366
64368
  });
64367
64369
 
64368
- // ../system/dist/retired-settings-keys-1GWw9mup.js
64369
- var require_retired_settings_keys_1GWw9mup = __commonJS({
64370
- "../system/dist/retired-settings-keys-1GWw9mup.js"(exports) {
64370
+ // ../system/dist/retired-settings-keys-BnTBoLTv.js
64371
+ var require_retired_settings_keys_BnTBoLTv = __commonJS({
64372
+ "../system/dist/retired-settings-keys-BnTBoLTv.js"(exports) {
64371
64373
  "use strict";
64372
- var require_dist10 = require_dist_Dze0l7UM();
64374
+ var require_dist10 = require_dist_BETx_5mH();
64373
64375
  function settingsStoreIsAuthoritativeHere(env) {
64374
64376
  const raw = (env["CAMSTACK_ROLE"] ?? "").trim().toLowerCase();
64375
64377
  return raw === "" || raw === "hub";
@@ -66606,8 +66608,8 @@ var require_device_manager_addon = __commonJS({
66606
66608
  [Symbol.toStringTag]: { value: "Module" }
66607
66609
  });
66608
66610
  require_chunk_Cek0wNdY();
66609
- var require_dist10 = require_dist_Dze0l7UM();
66610
- var require_retired_settings_keys = require_retired_settings_keys_1GWw9mup();
66611
+ var require_dist10 = require_dist_BETx_5mH();
66612
+ var require_retired_settings_keys = require_retired_settings_keys_BnTBoLTv();
66611
66613
  var node_crypto = __require("crypto");
66612
66614
  var _camstack_types_node = require_node();
66613
66615
  var JOB_HISTORY = 20;
@@ -66829,13 +66831,15 @@ var require_device_manager_addon = __commonJS({
66829
66831
  const startedAt = this.now();
66830
66832
  try {
66831
66833
  const per = input.perCandidate?.[childNativeId];
66832
- const entry = (await provider.adopt({
66834
+ const adoptCandidate = async () => await provider.adopt({
66833
66835
  integrationId: input.integrationId,
66834
66836
  childNativeIds: [childNativeId],
66835
66837
  ...input.filter !== void 0 ? { filter: input.filter } : {},
66836
66838
  ...input.importLocations !== void 0 ? { importLocations: input.importLocations } : {},
66837
66839
  ...per !== void 0 ? { perCandidate: { [childNativeId]: per } } : {}
66838
- })).adopted[0];
66840
+ });
66841
+ const fence = this.deps.removalFence;
66842
+ const entry = (fence === void 0 ? await adoptCandidate() : await fence.runUnfenced(adoptCandidate)).adopted[0];
66839
66843
  if (!entry) {
66840
66844
  job.results.push({
66841
66845
  childNativeId,
@@ -71877,6 +71881,17 @@ var require_device_manager_addon = __commonJS({
71877
71881
  remoteNativeCaps = /* @__PURE__ */ new Map();
71878
71882
  /** Background adoption jobs — lazily constructed (needs `ctx.logger`). */
71879
71883
  adoptionJobEngine = null;
71884
+ /**
71885
+ * ONE removal fence for this process, shared by the provider context and the
71886
+ * adoption-job engine.
71887
+ *
71888
+ * It used to be constructed inline into the context, so the job engine had
71889
+ * no way to reach it and an operator re-adopting hardware they had just
71890
+ * deleted was refused for the whole 5-minute TTL — their own action, denied.
71891
+ * Two fences would be worse than one: the engine would suspend a fence that
71892
+ * `allocateDeviceId` never consults.
71893
+ */
71894
+ removalFence = createRemovalFence();
71880
71895
  /** The runtime-state mirror, asserted present (constructed in onInitialize). */
71881
71896
  get stateMirror() {
71882
71897
  if (!this.stateMirrorImpl) throw new Error("DeviceManagerAddon: state mirror accessed before onInitialize");
@@ -71914,7 +71929,8 @@ var require_device_manager_addon = __commonJS({
71914
71929
  get adoptionJobsImpl() {
71915
71930
  if (!this.adoptionJobEngine) this.adoptionJobEngine = new AdoptionJobEngine({
71916
71931
  resolveProvider: async (addonId) => this.requireDeviceAdoptionProvider(addonId),
71917
- logger: this.ctx.logger
71932
+ logger: this.ctx.logger,
71933
+ removalFence: this.removalFence
71918
71934
  });
71919
71935
  return this.adoptionJobEngine;
71920
71936
  }
@@ -72065,7 +72081,7 @@ var require_device_manager_addon = __commonJS({
72065
72081
  registry,
72066
72082
  bindingsDeps: this.bindingsDeps,
72067
72083
  migrationGuard: createMigrationGuard(),
72068
- removalFence: createRemovalFence(),
72084
+ removalFence: this.removalFence,
72069
72085
  requireDeviceOps,
72070
72086
  stampIntegrationId: stampIntegrationId$1,
72071
72087
  get provider() {
@@ -72317,7 +72333,7 @@ var require_hub_forwarder = __commonJS({
72317
72333
  [Symbol.toStringTag]: { value: "Module" }
72318
72334
  });
72319
72335
  require_chunk_Cek0wNdY();
72320
- var require_dist10 = require_dist_Dze0l7UM();
72336
+ var require_dist10 = require_dist_BETx_5mH();
72321
72337
  var require_formatter = require_formatter_DqAKDlvN();
72322
72338
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
72323
72339
  var HubForwarderDestination = class {
@@ -72454,7 +72470,7 @@ var require_liveness_monitor_addon = __commonJS({
72454
72470
  "use strict";
72455
72471
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
72456
72472
  require_chunk_Cek0wNdY();
72457
- var require_dist10 = require_dist_Dze0l7UM();
72473
+ var require_dist10 = require_dist_BETx_5mH();
72458
72474
  var NO_DEVICES = "liveness:no-devices";
72459
72475
  var ALL_OFFLINE = "liveness:all-devices-offline";
72460
72476
  var NO_FOOTAGE_PREFIX = "liveness:no-footage:";
@@ -72650,7 +72666,7 @@ var require_local_auth_addon = __commonJS({
72650
72666
  [Symbol.toStringTag]: { value: "Module" }
72651
72667
  });
72652
72668
  var require_chunk = require_chunk_Cek0wNdY();
72653
- var require_dist10 = require_dist_Dze0l7UM();
72669
+ var require_dist10 = require_dist_BETx_5mH();
72654
72670
  var node_crypto = __require("crypto");
72655
72671
  node_crypto = require_chunk.__toESM(node_crypto);
72656
72672
  var crypto$1 = __require("crypto");
@@ -80463,7 +80479,7 @@ var require_loki_logging = __commonJS({
80463
80479
  [Symbol.toStringTag]: { value: "Module" }
80464
80480
  });
80465
80481
  require_chunk_Cek0wNdY();
80466
- var require_dist10 = require_dist_Dze0l7UM();
80482
+ var require_dist10 = require_dist_BETx_5mH();
80467
80483
  function sanitizeLabelName(raw) {
80468
80484
  const replaced = raw.replaceAll(/[^a-zA-Z0-9_]/g, "_");
80469
80485
  return /^[a-zA-Z_]/.test(replaced) ? replaced : `_${replaced}`;
@@ -81050,7 +81066,7 @@ var require_native_metrics_addon = __commonJS({
81050
81066
  [Symbol.toStringTag]: { value: "Module" }
81051
81067
  });
81052
81068
  var require_chunk = require_chunk_Cek0wNdY();
81053
- var require_dist10 = require_dist_Dze0l7UM();
81069
+ var require_dist10 = require_dist_BETx_5mH();
81054
81070
  var node_fs_promises = __require("fs/promises");
81055
81071
  var node_fs = __require("fs");
81056
81072
  node_fs = require_chunk.__toESM(node_fs);
@@ -83803,7 +83819,7 @@ var require_filesystem_storage_addon = __commonJS({
83803
83819
  [Symbol.toStringTag]: { value: "Module" }
83804
83820
  });
83805
83821
  var require_chunk = require_chunk_Cek0wNdY();
83806
- var require_dist10 = require_dist_Dze0l7UM();
83822
+ var require_dist10 = require_dist_BETx_5mH();
83807
83823
  var node_crypto = __require("crypto");
83808
83824
  var node_fs_promises = __require("fs/promises");
83809
83825
  var node_path = __require("path");
@@ -85030,8 +85046,8 @@ var require_sqlite_settings_addon = __commonJS({
85030
85046
  [Symbol.toStringTag]: { value: "Module" }
85031
85047
  });
85032
85048
  var require_chunk = require_chunk_Cek0wNdY();
85033
- var require_dist10 = require_dist_Dze0l7UM();
85034
- var require_retired_settings_keys = require_retired_settings_keys_1GWw9mup();
85049
+ var require_dist10 = require_dist_BETx_5mH();
85050
+ var require_retired_settings_keys = require_retired_settings_keys_BnTBoLTv();
85035
85051
  var require_wal_checkpoint_policy = require_wal_checkpoint_policy_CCJZngds();
85036
85052
  var node_crypto = __require("crypto");
85037
85053
  var node_path = __require("path");
@@ -87818,7 +87834,7 @@ var require_storage_orchestrator_addon = __commonJS({
87818
87834
  [Symbol.toStringTag]: { value: "Module" }
87819
87835
  });
87820
87836
  var require_chunk = require_chunk_Cek0wNdY();
87821
- var require_dist10 = require_dist_Dze0l7UM();
87837
+ var require_dist10 = require_dist_BETx_5mH();
87822
87838
  var require_hub_cap_forward = require_hub_cap_forward_DmHNjbB0();
87823
87839
  var zod = require_zod();
87824
87840
  var node_crypto = __require("crypto");
@@ -91545,7 +91561,7 @@ var require_system_config_addon = __commonJS({
91545
91561
  [Symbol.toStringTag]: { value: "Module" }
91546
91562
  });
91547
91563
  require_chunk_Cek0wNdY();
91548
- var require_dist10 = require_dist_Dze0l7UM();
91564
+ var require_dist10 = require_dist_BETx_5mH();
91549
91565
  var SECTION_TITLES = {
91550
91566
  server: "Server",
91551
91567
  auth: "Authentication"
@@ -109606,7 +109622,7 @@ var require_winston_logging = __commonJS({
109606
109622
  [Symbol.toStringTag]: { value: "Module" }
109607
109623
  });
109608
109624
  var require_chunk = require_chunk_Cek0wNdY();
109609
- var require_dist10 = require_dist_Dze0l7UM();
109625
+ var require_dist10 = require_dist_BETx_5mH();
109610
109626
  var require_formatter = require_formatter_DqAKDlvN();
109611
109627
  var node_path = __require("path");
109612
109628
  node_path = require_chunk.__toESM(node_path);
@@ -135873,7 +135889,7 @@ var require_dist3 = __commonJS({
135873
135889
  "use strict";
135874
135890
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
135875
135891
  var require_chunk = require_chunk_Cek0wNdY();
135876
- var require_dist10 = require_dist_Dze0l7UM();
135892
+ var require_dist10 = require_dist_BETx_5mH();
135877
135893
  var require_builtins_alerts_alerts_addon = require_alerts_addon();
135878
135894
  require_alerts();
135879
135895
  var require_formatter = require_formatter_DqAKDlvN();
@@ -231780,6 +231796,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
231780
231796
  });
231781
231797
  var TrackSourceSchema = zod.z.enum([
231782
231798
  "pipeline",
231799
+ "onboard",
231783
231800
  "sensor",
231784
231801
  "audio"
231785
231802
  ]);
@@ -232241,6 +232258,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
232241
232258
  "keyFrame",
232242
232259
  "keyFrameSmall",
232243
232260
  "thumbnailSmall",
232261
+ "confirmationCrop",
232244
232262
  "sceneFrame"
232245
232263
  ]);
232246
232264
  var MediaFileRefSchema = zod.z.object({
@@ -234036,7 +234054,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
234036
234054
  "device-activity"
234037
234055
  ]);
234038
234056
  var MotionSourcesSchema = zod.z.array(MotionSourceEnum);
234039
- var DetectionSourcesSchema = zod.z.array(DetectionSourceSchema);
234057
+ var DetectionSourcesSchema = zod.z.preprocess((value) => Array.isArray(value) && value.length > 1 ? value.slice(0, 1) : value, zod.z.array(DetectionSourceSchema).max(1));
234040
234058
  var ReportMotionInputSchema = zod.z.object({
234041
234059
  deviceId: zod.z.number(),
234042
234060
  detected: zod.z.boolean(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "camstack",
3
- "version": "1.2.155",
3
+ "version": "1.2.157",
4
4
  "description": "CLI tool for managing and running CamStack server",
5
5
  "keywords": [
6
6
  "camstack",