camstack 1.2.87 → 1.2.88

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.
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runDiscover
4
- } from "./chunk-I6O2CHPR.js";
4
+ } from "./chunk-BLJRLA7I.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-3OHBVI43.js");
41
+ await import("./launcher-VABTDHRC.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-3OHBVI43.js");
86
+ await import("./launcher-VABTDHRC.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-LZJPQBVA.js");
1133
+ const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-FHE2CTRJ.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-I6O2CHPR.js";
8
+ } from "./chunk-BLJRLA7I.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-D8VIyu_0.js
23637
- var require_dist_D8VIyu_0 = __commonJS({
23638
- "../system/dist/dist-D8VIyu_0.js"(exports) {
23636
+ // ../system/dist/dist-DGrXE5nL.js
23637
+ var require_dist_DGrXE5nL = __commonJS({
23638
+ "../system/dist/dist-DGrXE5nL.js"(exports) {
23639
23639
  "use strict";
23640
23640
  var zod = require_zod();
23641
23641
  var EventCategory = /* @__PURE__ */ (function(EventCategory2) {
@@ -50286,16 +50286,36 @@ var require_dist_D8VIyu_0 = __commonJS({
50286
50286
  "image",
50287
50287
  "sensor"
50288
50288
  ];
50289
+ var CONTAINER_CHILD_ROLE_PRIORITY = [
50290
+ "contact-sensor",
50291
+ "motion-sensor",
50292
+ "occupancy-sensor",
50293
+ "smoke-sensor",
50294
+ "co-sensor",
50295
+ "gas-sensor",
50296
+ "leak-sensor",
50297
+ "vibration-sensor",
50298
+ "tamper-sensor",
50299
+ "sound-sensor",
50300
+ "binary-sensor",
50301
+ "binary-helper"
50302
+ ];
50303
+ function roleRank(role) {
50304
+ if (role === void 0) return CONTAINER_CHILD_ROLE_PRIORITY.length;
50305
+ const i = CONTAINER_CHILD_ROLE_PRIORITY.indexOf(role);
50306
+ return i === -1 ? CONTAINER_CHILD_ROLE_PRIORITY.length : i;
50307
+ }
50289
50308
  function rank(type) {
50290
50309
  const i = CONTAINER_CHILD_PRIORITY.indexOf(type);
50291
50310
  return i === -1 ? CONTAINER_CHILD_PRIORITY.length : i;
50292
50311
  }
50293
- function resolveContainerPrimaryChild(children, overrideEntityId) {
50312
+ function resolveContainerPrimaryChild(children, overrideEntityId, containerName) {
50294
50313
  if (overrideEntityId !== void 0 && overrideEntityId !== null) {
50295
50314
  const picked = children.find((c) => c.stableId === overrideEntityId) ?? children.find((c) => c.entityId !== void 0 && c.entityId === overrideEntityId);
50296
50315
  if (picked !== void 0) return picked;
50297
50316
  }
50298
- return [...children].toSorted((a, b) => rank(a.type) - rank(b.type))[0] ?? null;
50317
+ const namesake = (c) => containerName !== void 0 && containerName.length > 0 && c.name !== void 0 && c.name.toLowerCase() === containerName.toLowerCase() ? 0 : 1;
50318
+ return [...children].toSorted((a, b) => roleRank(a.role) - roleRank(b.role) || namesake(a) - namesake(b) || rank(a.type) - rank(b.type))[0] ?? null;
50299
50319
  }
50300
50320
  var AccessoryKind = {
50301
50321
  Siren: DeviceRole.Siren,
@@ -60061,7 +60081,7 @@ var require_alerts_addon = __commonJS({
60061
60081
  [Symbol.toStringTag]: { value: "Module" }
60062
60082
  });
60063
60083
  require_chunk_Cek0wNdY();
60064
- var require_dist10 = require_dist_D8VIyu_0();
60084
+ var require_dist10 = require_dist_DGrXE5nL();
60065
60085
  function selectExpired(alerts, cutoffMs) {
60066
60086
  return alerts.filter((a) => a.createdAt < cutoffMs).sort((a, b) => a.createdAt - b.createdAt).map((a) => a.id);
60067
60087
  }
@@ -60880,7 +60900,7 @@ var require_console_logging = __commonJS({
60880
60900
  [Symbol.toStringTag]: { value: "Module" }
60881
60901
  });
60882
60902
  require_chunk_Cek0wNdY();
60883
- var require_dist10 = require_dist_D8VIyu_0();
60903
+ var require_dist10 = require_dist_DGrXE5nL();
60884
60904
  var require_formatter = require_formatter_DqAKDlvN();
60885
60905
  var LEVEL_RANK = {
60886
60906
  debug: 0,
@@ -60974,7 +60994,7 @@ var require_core_blocks_addon = __commonJS({
60974
60994
  "use strict";
60975
60995
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
60976
60996
  var require_chunk = require_chunk_Cek0wNdY();
60977
- var require_dist10 = require_dist_D8VIyu_0();
60997
+ var require_dist10 = require_dist_DGrXE5nL();
60978
60998
  var node_crypto = __require("crypto");
60979
60999
  var node_fs_promises = __require("fs/promises");
60980
61000
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -61871,11 +61891,11 @@ var require_core_blocks = __commonJS({
61871
61891
  }
61872
61892
  });
61873
61893
 
61874
- // ../system/dist/retired-settings-keys-wakiINPT.js
61875
- var require_retired_settings_keys_wakiINPT = __commonJS({
61876
- "../system/dist/retired-settings-keys-wakiINPT.js"(exports) {
61894
+ // ../system/dist/retired-settings-keys-BxUjEt2b.js
61895
+ var require_retired_settings_keys_BxUjEt2b = __commonJS({
61896
+ "../system/dist/retired-settings-keys-BxUjEt2b.js"(exports) {
61877
61897
  "use strict";
61878
- var require_dist10 = require_dist_D8VIyu_0();
61898
+ var require_dist10 = require_dist_DGrXE5nL();
61879
61899
  function settingsStoreIsAuthoritativeHere(env) {
61880
61900
  const raw = (env["CAMSTACK_ROLE"] ?? "").trim().toLowerCase();
61881
61901
  return raw === "" || raw === "hub";
@@ -64089,8 +64109,8 @@ var require_device_manager_addon = __commonJS({
64089
64109
  [Symbol.toStringTag]: { value: "Module" }
64090
64110
  });
64091
64111
  require_chunk_Cek0wNdY();
64092
- var require_dist10 = require_dist_D8VIyu_0();
64093
- var require_retired_settings_keys = require_retired_settings_keys_wakiINPT();
64112
+ var require_dist10 = require_dist_DGrXE5nL();
64113
+ var require_retired_settings_keys = require_retired_settings_keys_BxUjEt2b();
64094
64114
  var node_crypto = __require("crypto");
64095
64115
  var _camstack_types_node = require_node();
64096
64116
  var JOB_HISTORY = 20;
@@ -65736,8 +65756,10 @@ var require_device_manager_addon = __commonJS({
65736
65756
  const primary = require_dist10.resolveContainerPrimaryChild((byParent.get(id) ?? []).map((c) => ({
65737
65757
  id: c.id,
65738
65758
  stableId: c.stableId,
65739
- type: c.type
65740
- })), byId.get(id)?.primaryChildEntityId);
65759
+ type: c.type,
65760
+ ...c.role !== void 0 && c.role !== null ? { role: c.role } : {},
65761
+ ...c.name !== void 0 ? { name: c.name } : {}
65762
+ })), byId.get(id)?.primaryChildEntityId, byId.get(id)?.name);
65741
65763
  if (primary !== null) expandContainer(primary.id, byId, byParent, nextVisited, out);
65742
65764
  }
65743
65765
  function resolveLinkedDeviceIds(params) {
@@ -67243,6 +67265,16 @@ var require_device_manager_addon = __commonJS({
67243
67265
  const { deviceId, primaryChildEntityId } = input;
67244
67266
  await pctx.metaStore.withMetaWriteLock(async () => {
67245
67267
  if (!await pctx.metaStore.resolvePersistedById(deviceId)) throw new Error(`[device-manager] setPrimaryChildEntityId: unknown device id=${deviceId}`);
67268
+ if (primaryChildEntityId !== null) {
67269
+ const children = await pctx.metaStore.rows.listByParent(deviceId);
67270
+ if (!children.some((child) => child.meta.stableId === primaryChildEntityId)) pctx.host.ctx.logger.warn("setPrimaryChildEntityId: pick matches no child \u2014 the container will keep its priority default", {
67271
+ tags: { deviceId },
67272
+ meta: {
67273
+ primaryChildEntityId,
67274
+ childStableIds: children.map((child) => child.meta.stableId).slice(0, 12)
67275
+ }
67276
+ });
67277
+ }
67246
67278
  await pctx.metaStore.rows.patch(deviceId, { primaryChildEntityId });
67247
67279
  });
67248
67280
  pctx.host.ctx.eventBus.emit({
@@ -69362,7 +69394,7 @@ var require_hub_forwarder = __commonJS({
69362
69394
  [Symbol.toStringTag]: { value: "Module" }
69363
69395
  });
69364
69396
  require_chunk_Cek0wNdY();
69365
- var require_dist10 = require_dist_D8VIyu_0();
69397
+ var require_dist10 = require_dist_DGrXE5nL();
69366
69398
  var require_formatter = require_formatter_DqAKDlvN();
69367
69399
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
69368
69400
  var HubForwarderDestination = class {
@@ -69499,7 +69531,7 @@ var require_liveness_monitor_addon = __commonJS({
69499
69531
  "use strict";
69500
69532
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
69501
69533
  require_chunk_Cek0wNdY();
69502
- var require_dist10 = require_dist_D8VIyu_0();
69534
+ var require_dist10 = require_dist_DGrXE5nL();
69503
69535
  var NO_DEVICES = "liveness:no-devices";
69504
69536
  var ALL_OFFLINE = "liveness:all-devices-offline";
69505
69537
  var NO_FOOTAGE_PREFIX = "liveness:no-footage:";
@@ -69689,7 +69721,7 @@ var require_local_auth_addon = __commonJS({
69689
69721
  [Symbol.toStringTag]: { value: "Module" }
69690
69722
  });
69691
69723
  var require_chunk = require_chunk_Cek0wNdY();
69692
- var require_dist10 = require_dist_D8VIyu_0();
69724
+ var require_dist10 = require_dist_DGrXE5nL();
69693
69725
  var node_crypto = __require("crypto");
69694
69726
  node_crypto = require_chunk.__toESM(node_crypto);
69695
69727
  var crypto$1 = __require("crypto");
@@ -77502,7 +77534,7 @@ var require_loki_logging = __commonJS({
77502
77534
  [Symbol.toStringTag]: { value: "Module" }
77503
77535
  });
77504
77536
  require_chunk_Cek0wNdY();
77505
- var require_dist10 = require_dist_D8VIyu_0();
77537
+ var require_dist10 = require_dist_DGrXE5nL();
77506
77538
  function sanitizeLabelName(raw) {
77507
77539
  const replaced = raw.replaceAll(/[^a-zA-Z0-9_]/g, "_");
77508
77540
  return /^[a-zA-Z_]/.test(replaced) ? replaced : `_${replaced}`;
@@ -78067,7 +78099,7 @@ var require_native_metrics_addon = __commonJS({
78067
78099
  [Symbol.toStringTag]: { value: "Module" }
78068
78100
  });
78069
78101
  var require_chunk = require_chunk_Cek0wNdY();
78070
- var require_dist10 = require_dist_D8VIyu_0();
78102
+ var require_dist10 = require_dist_DGrXE5nL();
78071
78103
  var node_fs_promises = __require("fs/promises");
78072
78104
  var node_child_process = __require("child_process");
78073
78105
  var node_util = __require("util");
@@ -80651,7 +80683,7 @@ var require_filesystem_storage_addon = __commonJS({
80651
80683
  [Symbol.toStringTag]: { value: "Module" }
80652
80684
  });
80653
80685
  var require_chunk = require_chunk_Cek0wNdY();
80654
- var require_dist10 = require_dist_D8VIyu_0();
80686
+ var require_dist10 = require_dist_DGrXE5nL();
80655
80687
  var node_crypto = __require("crypto");
80656
80688
  var node_fs_promises = __require("fs/promises");
80657
80689
  var node_path = __require("path");
@@ -81767,8 +81799,8 @@ var require_sqlite_settings_addon = __commonJS({
81767
81799
  [Symbol.toStringTag]: { value: "Module" }
81768
81800
  });
81769
81801
  var require_chunk = require_chunk_Cek0wNdY();
81770
- var require_dist10 = require_dist_D8VIyu_0();
81771
- var require_retired_settings_keys = require_retired_settings_keys_wakiINPT();
81802
+ var require_dist10 = require_dist_DGrXE5nL();
81803
+ var require_retired_settings_keys = require_retired_settings_keys_BxUjEt2b();
81772
81804
  var node_crypto = __require("crypto");
81773
81805
  var node_fs = __require("fs");
81774
81806
  var node_module = __require("module");
@@ -84258,7 +84290,7 @@ var require_storage_orchestrator_addon = __commonJS({
84258
84290
  [Symbol.toStringTag]: { value: "Module" }
84259
84291
  });
84260
84292
  var require_chunk = require_chunk_Cek0wNdY();
84261
- var require_dist10 = require_dist_D8VIyu_0();
84293
+ var require_dist10 = require_dist_DGrXE5nL();
84262
84294
  var require_hub_cap_forward = require_hub_cap_forward_DmHNjbB0();
84263
84295
  var zod = require_zod();
84264
84296
  var node_crypto = __require("crypto");
@@ -87209,7 +87241,7 @@ var require_system_config_addon = __commonJS({
87209
87241
  [Symbol.toStringTag]: { value: "Module" }
87210
87242
  });
87211
87243
  require_chunk_Cek0wNdY();
87212
- var require_dist10 = require_dist_D8VIyu_0();
87244
+ var require_dist10 = require_dist_DGrXE5nL();
87213
87245
  var SECTION_TITLES = {
87214
87246
  server: "Server",
87215
87247
  auth: "Authentication"
@@ -105270,7 +105302,7 @@ var require_winston_logging = __commonJS({
105270
105302
  [Symbol.toStringTag]: { value: "Module" }
105271
105303
  });
105272
105304
  var require_chunk = require_chunk_Cek0wNdY();
105273
- var require_dist10 = require_dist_D8VIyu_0();
105305
+ var require_dist10 = require_dist_DGrXE5nL();
105274
105306
  var require_formatter = require_formatter_DqAKDlvN();
105275
105307
  var node_path = __require("path");
105276
105308
  node_path = require_chunk.__toESM(node_path);
@@ -117772,12 +117804,12 @@ var require_dist2 = __commonJS({
117772
117804
  }
117773
117805
  });
117774
117806
 
117775
- // ../system/dist/manifest-system-deps-BbP419V1.js
117776
- var require_manifest_system_deps_BbP419V1 = __commonJS({
117777
- "../system/dist/manifest-system-deps-BbP419V1.js"(exports) {
117807
+ // ../system/dist/manifest-system-deps-ezj0SKDM.js
117808
+ var require_manifest_system_deps_ezj0SKDM = __commonJS({
117809
+ "../system/dist/manifest-system-deps-ezj0SKDM.js"(exports) {
117778
117810
  "use strict";
117779
117811
  var require_chunk = require_chunk_Cek0wNdY();
117780
- require_dist_D8VIyu_0();
117812
+ require_dist_DGrXE5nL();
117781
117813
  require_hub_cap_forward_DmHNjbB0();
117782
117814
  var node_crypto = __require("crypto");
117783
117815
  node_crypto = require_chunk.__toESM(node_crypto);
@@ -129844,7 +129876,7 @@ var require_dist3 = __commonJS({
129844
129876
  "use strict";
129845
129877
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
129846
129878
  var require_chunk = require_chunk_Cek0wNdY();
129847
- var require_dist10 = require_dist_D8VIyu_0();
129879
+ var require_dist10 = require_dist_DGrXE5nL();
129848
129880
  var require_builtins_alerts_alerts_addon = require_alerts_addon();
129849
129881
  require_alerts();
129850
129882
  var require_formatter = require_formatter_DqAKDlvN();
@@ -129871,7 +129903,7 @@ var require_dist3 = __commonJS({
129871
129903
  var require_builtins_winston_logging_index = require_winston_logging();
129872
129904
  var require_file_data_plane = require_file_data_plane_DO8KbxCe();
129873
129905
  var require_tls$1 = require_tls_BxQlomxd();
129874
- var require_manifest_system_deps = require_manifest_system_deps_BbP419V1();
129906
+ var require_manifest_system_deps = require_manifest_system_deps_ezj0SKDM();
129875
129907
  var require_resource_monitor = require_resource_monitor_CdnzxBLP();
129876
129908
  var require_custom_action_registry = require_custom_action_registry_jY0NOZK8();
129877
129909
  var zod = require_zod();
@@ -238555,16 +238587,36 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
238555
238587
  "image",
238556
238588
  "sensor"
238557
238589
  ];
238590
+ var CONTAINER_CHILD_ROLE_PRIORITY = [
238591
+ "contact-sensor",
238592
+ "motion-sensor",
238593
+ "occupancy-sensor",
238594
+ "smoke-sensor",
238595
+ "co-sensor",
238596
+ "gas-sensor",
238597
+ "leak-sensor",
238598
+ "vibration-sensor",
238599
+ "tamper-sensor",
238600
+ "sound-sensor",
238601
+ "binary-sensor",
238602
+ "binary-helper"
238603
+ ];
238604
+ function roleRank(role) {
238605
+ if (role === void 0) return CONTAINER_CHILD_ROLE_PRIORITY.length;
238606
+ const i = CONTAINER_CHILD_ROLE_PRIORITY.indexOf(role);
238607
+ return i === -1 ? CONTAINER_CHILD_ROLE_PRIORITY.length : i;
238608
+ }
238558
238609
  function rank(type) {
238559
238610
  const i = CONTAINER_CHILD_PRIORITY.indexOf(type);
238560
238611
  return i === -1 ? CONTAINER_CHILD_PRIORITY.length : i;
238561
238612
  }
238562
- function resolveContainerPrimaryChild(children, overrideEntityId) {
238613
+ function resolveContainerPrimaryChild(children, overrideEntityId, containerName) {
238563
238614
  if (overrideEntityId !== void 0 && overrideEntityId !== null) {
238564
238615
  const picked = children.find((c) => c.stableId === overrideEntityId) ?? children.find((c) => c.entityId !== void 0 && c.entityId === overrideEntityId);
238565
238616
  if (picked !== void 0) return picked;
238566
238617
  }
238567
- return [...children].toSorted((a, b) => rank(a.type) - rank(b.type))[0] ?? null;
238618
+ const namesake = (c) => containerName !== void 0 && containerName.length > 0 && c.name !== void 0 && c.name.toLowerCase() === containerName.toLowerCase() ? 0 : 1;
238619
+ return [...children].toSorted((a, b) => roleRank(a.role) - roleRank(b.role) || namesake(a) - namesake(b) || rank(a.type) - rank(b.type))[0] ?? null;
238568
238620
  }
238569
238621
  var AccessoryKind = {
238570
238622
  Siren: require_sleep.DeviceRole.Siren,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "camstack",
3
- "version": "1.2.87",
3
+ "version": "1.2.88",
4
4
  "description": "CLI tool for managing and running CamStack server",
5
5
  "keywords": [
6
6
  "camstack",
File without changes