camstack 1.2.97 → 1.2.99

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.
@@ -14522,7 +14522,7 @@ function date4(params) {
14522
14522
  // ../../node_modules/zod/v4/classic/external.js
14523
14523
  config(en_default());
14524
14524
 
14525
- // ../types/dist/sleep-CbBk_3GJ.mjs
14525
+ // ../types/dist/sleep-BQJlnUOJ.mjs
14526
14526
  var WELL_KNOWN_TABS = [
14527
14527
  {
14528
14528
  id: "overview",
@@ -28593,6 +28593,14 @@ var AgentPipelineSettingsSchema = external_exports.object({
28593
28593
  /** Node is eligible to be the ingest / source-owner (serve the restream). */
28594
28594
  ingest: external_exports.boolean().optional(),
28595
28595
  /**
28596
+ * This node's decode RAM budget, MB. Wins over the cluster
28597
+ * `nodeDecodeBudgetMb`; absent, the runner derives a share of the node's
28598
+ * own RAM unless the operator moved the cluster value (D365).
28599
+ */
28600
+ decodeBudgetMb: external_exports.number().int().min(1024).max(65536).optional(),
28601
+ /** This node's live decode-worker cap. Wins over the cluster `maxLiveDecodeWorkers`. */
28602
+ maxLiveDecodeWorkers: external_exports.number().int().min(1).max(32).optional(),
28603
+ /**
28596
28604
  * Operator override for the LAN host a cross-node decoder dials to reach
28597
28605
  * THIS node's restream (Cluster UI). Absent → auto-detect: a remote runner
28598
28606
  * falls back to its `CAMSTACK_HUB_URL`-derived host (the Moleculer address
@@ -29156,6 +29164,20 @@ var pipelineOrchestratorCapability = {
29156
29164
  auth: "admin"
29157
29165
  }),
29158
29166
  /**
29167
+ * Size ONE node's decode admission: its RAM budget and live-worker cap.
29168
+ * `null` clears a limit (back to the cluster setting or the RAM-derived
29169
+ * default); an omitted key leaves it alone. Read by the node's runner on
29170
+ * its next lease refresh (D365).
29171
+ */
29172
+ setAgentDecodeLimits: method(external_exports.object({
29173
+ agentNodeId: external_exports.string(),
29174
+ decodeBudgetMb: external_exports.number().int().min(1024).max(65536).nullable().optional(),
29175
+ maxLiveDecodeWorkers: external_exports.number().int().min(1).max(32).nullable().optional()
29176
+ }), external_exports.object({ success: external_exports.literal(true) }), {
29177
+ kind: "mutation",
29178
+ auth: "admin"
29179
+ }),
29180
+ /**
29159
29181
  * Set (or clear) the operator override for the LAN host a cross-node
29160
29182
  * decoder dials to reach this node's restream. Pass a non-empty string to
29161
29183
  * override the auto-detected address (the runner's `CAMSTACK_HUB_URL`
@@ -43423,6 +43445,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
43423
43445
  addonId: null,
43424
43446
  access: "create"
43425
43447
  },
43448
+ "pipelineOrchestrator.setAgentDecodeLimits": {
43449
+ capName: "pipeline-orchestrator",
43450
+ capScope: "system",
43451
+ addonId: null,
43452
+ access: "create"
43453
+ },
43426
43454
  "pipelineOrchestrator.setAgentDetectWeight": {
43427
43455
  capName: "pipeline-orchestrator",
43428
43456
  capScope: "system",
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runDiscover
4
- } from "./chunk-MKOPVONP.js";
4
+ } from "./chunk-MVI45IY3.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-PPFRDC5W.js");
41
+ await import("./launcher-F62YE57J.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-PPFRDC5W.js");
86
+ await import("./launcher-F62YE57J.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-BRZ4GUUB.js");
1133
+ const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-F3GZOIXQ.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-MKOPVONP.js";
8
+ } from "./chunk-MVI45IY3.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-DlL8iWQo.js
23637
- var require_dist_DlL8iWQo = __commonJS({
23638
- "../system/dist/dist-DlL8iWQo.js"(exports) {
23636
+ // ../system/dist/dist-2wpm3tOu.js
23637
+ var require_dist_2wpm3tOu = __commonJS({
23638
+ "../system/dist/dist-2wpm3tOu.js"(exports) {
23639
23639
  "use strict";
23640
23640
  var zod = require_zod();
23641
23641
  var EventCategory = /* @__PURE__ */ (function(EventCategory2) {
@@ -39155,6 +39155,14 @@ var require_dist_DlL8iWQo = __commonJS({
39155
39155
  /** Node is eligible to be the ingest / source-owner (serve the restream). */
39156
39156
  ingest: zod.z.boolean().optional(),
39157
39157
  /**
39158
+ * This node's decode RAM budget, MB. Wins over the cluster
39159
+ * `nodeDecodeBudgetMb`; absent, the runner derives a share of the node's
39160
+ * own RAM unless the operator moved the cluster value (D365).
39161
+ */
39162
+ decodeBudgetMb: zod.z.number().int().min(1024).max(65536).optional(),
39163
+ /** This node's live decode-worker cap. Wins over the cluster `maxLiveDecodeWorkers`. */
39164
+ maxLiveDecodeWorkers: zod.z.number().int().min(1).max(32).optional(),
39165
+ /**
39158
39166
  * Operator override for the LAN host a cross-node decoder dials to reach
39159
39167
  * THIS node's restream (Cluster UI). Absent → auto-detect: a remote runner
39160
39168
  * falls back to its `CAMSTACK_HUB_URL`-derived host (the Moleculer address
@@ -39717,6 +39725,20 @@ var require_dist_DlL8iWQo = __commonJS({
39717
39725
  auth: "admin"
39718
39726
  }),
39719
39727
  /**
39728
+ * Size ONE node's decode admission: its RAM budget and live-worker cap.
39729
+ * `null` clears a limit (back to the cluster setting or the RAM-derived
39730
+ * default); an omitted key leaves it alone. Read by the node's runner on
39731
+ * its next lease refresh (D365).
39732
+ */
39733
+ setAgentDecodeLimits: method(zod.z.object({
39734
+ agentNodeId: zod.z.string(),
39735
+ decodeBudgetMb: zod.z.number().int().min(1024).max(65536).nullable().optional(),
39736
+ maxLiveDecodeWorkers: zod.z.number().int().min(1).max(32).nullable().optional()
39737
+ }), zod.z.object({ success: zod.z.literal(true) }), {
39738
+ kind: "mutation",
39739
+ auth: "admin"
39740
+ }),
39741
+ /**
39720
39742
  * Set (or clear) the operator override for the LAN host a cross-node
39721
39743
  * decoder dials to reach this node's restream. Pass a non-empty string to
39722
39744
  * override the auto-detected address (the runner's `CAMSTACK_HUB_URL`
@@ -54805,6 +54827,12 @@ var require_dist_DlL8iWQo = __commonJS({
54805
54827
  addonId: null,
54806
54828
  access: "create"
54807
54829
  },
54830
+ "pipelineOrchestrator.setAgentDecodeLimits": {
54831
+ capName: "pipeline-orchestrator",
54832
+ capScope: "system",
54833
+ addonId: null,
54834
+ access: "create"
54835
+ },
54808
54836
  "pipelineOrchestrator.setAgentDetectWeight": {
54809
54837
  capName: "pipeline-orchestrator",
54810
54838
  capScope: "system",
@@ -60118,7 +60146,7 @@ var require_alerts_addon = __commonJS({
60118
60146
  [Symbol.toStringTag]: { value: "Module" }
60119
60147
  });
60120
60148
  require_chunk_Cek0wNdY();
60121
- var require_dist10 = require_dist_DlL8iWQo();
60149
+ var require_dist10 = require_dist_2wpm3tOu();
60122
60150
  function selectExpired(alerts, cutoffMs) {
60123
60151
  return alerts.filter((a) => a.createdAt < cutoffMs).sort((a, b) => a.createdAt - b.createdAt).map((a) => a.id);
60124
60152
  }
@@ -60937,7 +60965,7 @@ var require_console_logging = __commonJS({
60937
60965
  [Symbol.toStringTag]: { value: "Module" }
60938
60966
  });
60939
60967
  require_chunk_Cek0wNdY();
60940
- var require_dist10 = require_dist_DlL8iWQo();
60968
+ var require_dist10 = require_dist_2wpm3tOu();
60941
60969
  var require_formatter = require_formatter_DqAKDlvN();
60942
60970
  var LEVEL_RANK = {
60943
60971
  debug: 0,
@@ -61031,7 +61059,7 @@ var require_core_blocks_addon = __commonJS({
61031
61059
  "use strict";
61032
61060
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
61033
61061
  var require_chunk = require_chunk_Cek0wNdY();
61034
- var require_dist10 = require_dist_DlL8iWQo();
61062
+ var require_dist10 = require_dist_2wpm3tOu();
61035
61063
  var node_crypto = __require("crypto");
61036
61064
  var node_fs_promises = __require("fs/promises");
61037
61065
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -61928,11 +61956,11 @@ var require_core_blocks = __commonJS({
61928
61956
  }
61929
61957
  });
61930
61958
 
61931
- // ../system/dist/retired-settings-keys-B5wVSU65.js
61932
- var require_retired_settings_keys_B5wVSU65 = __commonJS({
61933
- "../system/dist/retired-settings-keys-B5wVSU65.js"(exports) {
61959
+ // ../system/dist/retired-settings-keys-D6gkOkcN.js
61960
+ var require_retired_settings_keys_D6gkOkcN = __commonJS({
61961
+ "../system/dist/retired-settings-keys-D6gkOkcN.js"(exports) {
61934
61962
  "use strict";
61935
- var require_dist10 = require_dist_DlL8iWQo();
61963
+ var require_dist10 = require_dist_2wpm3tOu();
61936
61964
  function settingsStoreIsAuthoritativeHere(env) {
61937
61965
  const raw = (env["CAMSTACK_ROLE"] ?? "").trim().toLowerCase();
61938
61966
  return raw === "" || raw === "hub";
@@ -64146,8 +64174,8 @@ var require_device_manager_addon = __commonJS({
64146
64174
  [Symbol.toStringTag]: { value: "Module" }
64147
64175
  });
64148
64176
  require_chunk_Cek0wNdY();
64149
- var require_dist10 = require_dist_DlL8iWQo();
64150
- var require_retired_settings_keys = require_retired_settings_keys_B5wVSU65();
64177
+ var require_dist10 = require_dist_2wpm3tOu();
64178
+ var require_retired_settings_keys = require_retired_settings_keys_D6gkOkcN();
64151
64179
  var node_crypto = __require("crypto");
64152
64180
  var _camstack_types_node = require_node();
64153
64181
  var JOB_HISTORY = 20;
@@ -69662,7 +69690,7 @@ var require_hub_forwarder = __commonJS({
69662
69690
  [Symbol.toStringTag]: { value: "Module" }
69663
69691
  });
69664
69692
  require_chunk_Cek0wNdY();
69665
- var require_dist10 = require_dist_DlL8iWQo();
69693
+ var require_dist10 = require_dist_2wpm3tOu();
69666
69694
  var require_formatter = require_formatter_DqAKDlvN();
69667
69695
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
69668
69696
  var HubForwarderDestination = class {
@@ -69799,7 +69827,7 @@ var require_liveness_monitor_addon = __commonJS({
69799
69827
  "use strict";
69800
69828
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
69801
69829
  require_chunk_Cek0wNdY();
69802
- var require_dist10 = require_dist_DlL8iWQo();
69830
+ var require_dist10 = require_dist_2wpm3tOu();
69803
69831
  var NO_DEVICES = "liveness:no-devices";
69804
69832
  var ALL_OFFLINE = "liveness:all-devices-offline";
69805
69833
  var NO_FOOTAGE_PREFIX = "liveness:no-footage:";
@@ -69989,7 +70017,7 @@ var require_local_auth_addon = __commonJS({
69989
70017
  [Symbol.toStringTag]: { value: "Module" }
69990
70018
  });
69991
70019
  var require_chunk = require_chunk_Cek0wNdY();
69992
- var require_dist10 = require_dist_DlL8iWQo();
70020
+ var require_dist10 = require_dist_2wpm3tOu();
69993
70021
  var node_crypto = __require("crypto");
69994
70022
  node_crypto = require_chunk.__toESM(node_crypto);
69995
70023
  var crypto$1 = __require("crypto");
@@ -77802,7 +77830,7 @@ var require_loki_logging = __commonJS({
77802
77830
  [Symbol.toStringTag]: { value: "Module" }
77803
77831
  });
77804
77832
  require_chunk_Cek0wNdY();
77805
- var require_dist10 = require_dist_DlL8iWQo();
77833
+ var require_dist10 = require_dist_2wpm3tOu();
77806
77834
  function sanitizeLabelName(raw) {
77807
77835
  const replaced = raw.replaceAll(/[^a-zA-Z0-9_]/g, "_");
77808
77836
  return /^[a-zA-Z_]/.test(replaced) ? replaced : `_${replaced}`;
@@ -78367,7 +78395,7 @@ var require_native_metrics_addon = __commonJS({
78367
78395
  [Symbol.toStringTag]: { value: "Module" }
78368
78396
  });
78369
78397
  var require_chunk = require_chunk_Cek0wNdY();
78370
- var require_dist10 = require_dist_DlL8iWQo();
78398
+ var require_dist10 = require_dist_2wpm3tOu();
78371
78399
  var node_fs_promises = __require("fs/promises");
78372
78400
  var node_child_process = __require("child_process");
78373
78401
  var node_util = __require("util");
@@ -80951,7 +80979,7 @@ var require_filesystem_storage_addon = __commonJS({
80951
80979
  [Symbol.toStringTag]: { value: "Module" }
80952
80980
  });
80953
80981
  var require_chunk = require_chunk_Cek0wNdY();
80954
- var require_dist10 = require_dist_DlL8iWQo();
80982
+ var require_dist10 = require_dist_2wpm3tOu();
80955
80983
  var node_crypto = __require("crypto");
80956
80984
  var node_fs_promises = __require("fs/promises");
80957
80985
  var node_path = __require("path");
@@ -82067,8 +82095,8 @@ var require_sqlite_settings_addon = __commonJS({
82067
82095
  [Symbol.toStringTag]: { value: "Module" }
82068
82096
  });
82069
82097
  var require_chunk = require_chunk_Cek0wNdY();
82070
- var require_dist10 = require_dist_DlL8iWQo();
82071
- var require_retired_settings_keys = require_retired_settings_keys_B5wVSU65();
82098
+ var require_dist10 = require_dist_2wpm3tOu();
82099
+ var require_retired_settings_keys = require_retired_settings_keys_D6gkOkcN();
82072
82100
  var node_crypto = __require("crypto");
82073
82101
  var node_fs = __require("fs");
82074
82102
  var node_module = __require("module");
@@ -84558,7 +84586,7 @@ var require_storage_orchestrator_addon = __commonJS({
84558
84586
  [Symbol.toStringTag]: { value: "Module" }
84559
84587
  });
84560
84588
  var require_chunk = require_chunk_Cek0wNdY();
84561
- var require_dist10 = require_dist_DlL8iWQo();
84589
+ var require_dist10 = require_dist_2wpm3tOu();
84562
84590
  var require_hub_cap_forward = require_hub_cap_forward_DmHNjbB0();
84563
84591
  var zod = require_zod();
84564
84592
  var node_crypto = __require("crypto");
@@ -87509,7 +87537,7 @@ var require_system_config_addon = __commonJS({
87509
87537
  [Symbol.toStringTag]: { value: "Module" }
87510
87538
  });
87511
87539
  require_chunk_Cek0wNdY();
87512
- var require_dist10 = require_dist_DlL8iWQo();
87540
+ var require_dist10 = require_dist_2wpm3tOu();
87513
87541
  var SECTION_TITLES = {
87514
87542
  server: "Server",
87515
87543
  auth: "Authentication"
@@ -105570,7 +105598,7 @@ var require_winston_logging = __commonJS({
105570
105598
  [Symbol.toStringTag]: { value: "Module" }
105571
105599
  });
105572
105600
  var require_chunk = require_chunk_Cek0wNdY();
105573
- var require_dist10 = require_dist_DlL8iWQo();
105601
+ var require_dist10 = require_dist_2wpm3tOu();
105574
105602
  var require_formatter = require_formatter_DqAKDlvN();
105575
105603
  var node_path = __require("path");
105576
105604
  node_path = require_chunk.__toESM(node_path);
@@ -107513,9 +107541,9 @@ var require_event_category_BaEgqJNv = __commonJS({
107513
107541
  }
107514
107542
  });
107515
107543
 
107516
- // ../types/dist/sleep-BtIF8lWc.js
107517
- var require_sleep_BtIF8lWc = __commonJS({
107518
- "../types/dist/sleep-BtIF8lWc.js"(exports) {
107544
+ // ../types/dist/sleep-BCUreN6s.js
107545
+ var require_sleep_BCUreN6s = __commonJS({
107546
+ "../types/dist/sleep-BCUreN6s.js"(exports) {
107519
107547
  "use strict";
107520
107548
  var require_event_category = require_event_category_BaEgqJNv();
107521
107549
  var zod = require_zod();
@@ -108507,6 +108535,7 @@ var require_sleep_BtIF8lWc = __commonJS({
108507
108535
  }
108508
108536
  };
108509
108537
  var DATAPLANE_SECRET_HEADER = "x-camstack-dataplane-secret";
108538
+ var SHARE_VIEW_KINDS = ["grid-view", "events-view"];
108510
108539
  var CamProfileSchema = zod.z.enum([
108511
108540
  "high",
108512
108541
  "mid",
@@ -110875,6 +110904,12 @@ var require_sleep_BtIF8lWc = __commonJS({
110875
110904
  return ReadinessTimeoutError;
110876
110905
  }
110877
110906
  });
110907
+ Object.defineProperty(exports, "SHARE_VIEW_KINDS", {
110908
+ enumerable: true,
110909
+ get: function() {
110910
+ return SHARE_VIEW_KINDS;
110911
+ }
110912
+ });
110878
110913
  Object.defineProperty(exports, "StreamSourceEntrySchema", {
110879
110914
  enumerable: true,
110880
110915
  get: function() {
@@ -111196,7 +111231,7 @@ var require_addon = __commonJS({
111196
111231
  "use strict";
111197
111232
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
111198
111233
  var require_event_category = require_event_category_BaEgqJNv();
111199
- var require_sleep = require_sleep_BtIF8lWc();
111234
+ var require_sleep = require_sleep_BCUreN6s();
111200
111235
  var require_err_msg = require_err_msg_COpsHMw2();
111201
111236
  var CAP_INPUT_DEFAULTS = Object.freeze({
111202
111237
  "addons": { "getLogs": { "limit": 100 } },
@@ -118080,9 +118115,9 @@ var require_dist2 = __commonJS({
118080
118115
  }
118081
118116
  });
118082
118117
 
118083
- // ../system/dist/manifest-system-deps-CdIVy85V.js
118084
- var require_manifest_system_deps_CdIVy85V = __commonJS({
118085
- "../system/dist/manifest-system-deps-CdIVy85V.js"(exports) {
118118
+ // ../system/dist/manifest-system-deps-DvY1bY_n.js
118119
+ var require_manifest_system_deps_DvY1bY_n = __commonJS({
118120
+ "../system/dist/manifest-system-deps-DvY1bY_n.js"(exports) {
118086
118121
  "use strict";
118087
118122
  var require_chunk = require_chunk_Cek0wNdY();
118088
118123
  require_hub_cap_forward_DmHNjbB0();
@@ -118730,7 +118765,8 @@ var require_manifest_system_deps_CdIVy85V = __commonJS({
118730
118765
  prefix,
118731
118766
  access: entry.access,
118732
118767
  baseUrl,
118733
- secret
118768
+ secret,
118769
+ ...entry.share !== void 0 ? { share: entry.share } : {}
118734
118770
  }));
118735
118771
  args.sink?.set(args.addonId, endpoints);
118736
118772
  };
@@ -118740,7 +118776,8 @@ var require_manifest_system_deps_CdIVy85V = __commonJS({
118740
118776
  await ensureServer();
118741
118777
  served.set(prefix, {
118742
118778
  access: options.access,
118743
- handler: options.handler
118779
+ handler: options.handler,
118780
+ ...options.share !== void 0 ? { share: options.share } : {}
118744
118781
  });
118745
118782
  publish();
118746
118783
  args.logger.info("data-plane endpoint served", { meta: {
@@ -130153,7 +130190,7 @@ var require_dist3 = __commonJS({
130153
130190
  "use strict";
130154
130191
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
130155
130192
  var require_chunk = require_chunk_Cek0wNdY();
130156
- var require_dist10 = require_dist_DlL8iWQo();
130193
+ var require_dist10 = require_dist_2wpm3tOu();
130157
130194
  var require_builtins_alerts_alerts_addon = require_alerts_addon();
130158
130195
  require_alerts();
130159
130196
  var require_formatter = require_formatter_DqAKDlvN();
@@ -130180,7 +130217,7 @@ var require_dist3 = __commonJS({
130180
130217
  var require_builtins_winston_logging_index = require_winston_logging();
130181
130218
  var require_file_data_plane = require_file_data_plane_DO8KbxCe();
130182
130219
  var require_tls$1 = require_tls_BxQlomxd();
130183
- var require_manifest_system_deps = require_manifest_system_deps_CdIVy85V();
130220
+ var require_manifest_system_deps = require_manifest_system_deps_DvY1bY_n();
130184
130221
  var require_resource_monitor = require_resource_monitor_CdnzxBLP();
130185
130222
  var require_custom_action_registry = require_custom_action_registry_jY0NOZK8();
130186
130223
  var zod = require_zod();
@@ -211270,7 +211307,7 @@ var require_dist4 = __commonJS({
211270
211307
  "use strict";
211271
211308
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
211272
211309
  var require_event_category = require_event_category_BaEgqJNv();
211273
- var require_sleep = require_sleep_BtIF8lWc();
211310
+ var require_sleep = require_sleep_BCUreN6s();
211274
211311
  var require_canonical_hash = require_canonical_hash_DNV8S5ET();
211275
211312
  var require_enums2 = require_enums();
211276
211313
  var require_err_msg = require_err_msg_COpsHMw2();
@@ -227614,6 +227651,14 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
227614
227651
  /** Node is eligible to be the ingest / source-owner (serve the restream). */
227615
227652
  ingest: zod.z.boolean().optional(),
227616
227653
  /**
227654
+ * This node's decode RAM budget, MB. Wins over the cluster
227655
+ * `nodeDecodeBudgetMb`; absent, the runner derives a share of the node's
227656
+ * own RAM unless the operator moved the cluster value (D365).
227657
+ */
227658
+ decodeBudgetMb: zod.z.number().int().min(1024).max(65536).optional(),
227659
+ /** This node's live decode-worker cap. Wins over the cluster `maxLiveDecodeWorkers`. */
227660
+ maxLiveDecodeWorkers: zod.z.number().int().min(1).max(32).optional(),
227661
+ /**
227617
227662
  * Operator override for the LAN host a cross-node decoder dials to reach
227618
227663
  * THIS node's restream (Cluster UI). Absent → auto-detect: a remote runner
227619
227664
  * falls back to its `CAMSTACK_HUB_URL`-derived host (the Moleculer address
@@ -228177,6 +228222,20 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
228177
228222
  auth: "admin"
228178
228223
  }),
228179
228224
  /**
228225
+ * Size ONE node's decode admission: its RAM budget and live-worker cap.
228226
+ * `null` clears a limit (back to the cluster setting or the RAM-derived
228227
+ * default); an omitted key leaves it alone. Read by the node's runner on
228228
+ * its next lease refresh (D365).
228229
+ */
228230
+ setAgentDecodeLimits: require_sleep.method(zod.z.object({
228231
+ agentNodeId: zod.z.string(),
228232
+ decodeBudgetMb: zod.z.number().int().min(1024).max(65536).nullable().optional(),
228233
+ maxLiveDecodeWorkers: zod.z.number().int().min(1).max(32).nullable().optional()
228234
+ }), zod.z.object({ success: zod.z.literal(true) }), {
228235
+ kind: "mutation",
228236
+ auth: "admin"
228237
+ }),
228238
+ /**
228180
228239
  * Set (or clear) the operator override for the LAN host a cross-node
228181
228240
  * decoder dials to reach this node's restream. Pass a non-empty string to
228182
228241
  * override the auto-detected address (the runner's `CAMSTACK_HUB_URL`
@@ -240214,7 +240273,15 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
240214
240273
  if (!Class) throw new Error(`no device class registered for type "${saved.type}"`);
240215
240274
  if (saved.parentDeviceId !== null && !restored.has(saved.parentDeviceId)) throw new Error(`parent device ${saved.parentDeviceId} not restored`);
240216
240275
  await this.healSavedConfig(saved, savedDevices);
240217
- await this.ctx.kernel.devices.create(saved.stableId, Class, {}, saved.parentDeviceId);
240276
+ try {
240277
+ await this.ctx.kernel.devices.create(saved.stableId, Class, {}, saved.parentDeviceId);
240278
+ } catch (err) {
240279
+ if (!(await this.ctx.kernel.devices.getAll()).some((device2) => device2.stableId === saved.stableId)) throw err;
240280
+ this.ctx.logger.debug("Restore row came to life during its own dial \u2014 kept", { tags: {
240281
+ deviceId: saved.id,
240282
+ stableId: saved.stableId
240283
+ } });
240284
+ }
240218
240285
  restored.add(saved.id);
240219
240286
  };
240220
240287
  const topLevel = savedDevices.filter((saved) => saved.parentDeviceId === null);
@@ -246580,6 +246647,12 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
246580
246647
  addonId: null,
246581
246648
  access: "create"
246582
246649
  },
246650
+ "pipelineOrchestrator.setAgentDecodeLimits": {
246651
+ capName: "pipeline-orchestrator",
246652
+ capScope: "system",
246653
+ addonId: null,
246654
+ access: "create"
246655
+ },
246583
246656
  "pipelineOrchestrator.setAgentDetectWeight": {
246584
246657
  capName: "pipeline-orchestrator",
246585
246658
  capScope: "system",
@@ -251694,6 +251767,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
251694
251767
  setAgentMaxCameras: (input) => dispatch("pipelineOrchestrator", "setAgentMaxCameras", "mutation", input),
251695
251768
  setAgentDetectWeight: (input) => dispatch("pipelineOrchestrator", "setAgentDetectWeight", "mutation", input),
251696
251769
  setAgentCapabilities: (input) => dispatch("pipelineOrchestrator", "setAgentCapabilities", "mutation", input),
251770
+ setAgentDecodeLimits: (input) => dispatch("pipelineOrchestrator", "setAgentDecodeLimits", "mutation", input),
251697
251771
  setAgentReachableHost: (input) => dispatch("pipelineOrchestrator", "setAgentReachableHost", "mutation", input),
251698
251772
  setAgentInferenceDevices: (input) => dispatch("pipelineOrchestrator", "setAgentInferenceDevices", "mutation", input),
251699
251773
  getNodeInferenceDevices: (input) => dispatch("pipelineOrchestrator", "getNodeInferenceDevices", "query", input),
@@ -255389,6 +255463,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
255389
255463
  exports.SCOPE_PRESETS = SCOPE_PRESETS;
255390
255464
  exports.SENSOR_FEATURES = SENSOR_FEATURES;
255391
255465
  exports.SENSOR_MAP = SENSOR_MAP;
255466
+ exports.SHARE_VIEW_KINDS = require_sleep.SHARE_VIEW_KINDS;
255392
255467
  exports.SOURCE_CAPS = SOURCE_CAPS;
255393
255468
  exports.SOURCE_CAP_ACTIVE_FIELD = SOURCE_CAP_ACTIVE_FIELD;
255394
255469
  exports.SOURCE_CAP_CHANGED_AT_FIELD = SOURCE_CAP_CHANGED_AT_FIELD;
@@ -415493,6 +415568,7 @@ var require_share_token_service = __commonJS({
415493
415568
  })();
415494
415569
  Object.defineProperty(exports, "__esModule", { value: true });
415495
415570
  exports.ShareTokenService = exports.ShareTokenRecordSchema = exports.ShareTokenScopeSchema = exports.SHARE_TOKEN_MAX_DEVICES = exports.SHARE_TOKEN_TTL_DEFAULT_SEC = exports.SHARE_TOKEN_TTL_MAX_SEC = exports.SHARE_TOKEN_TTL_MIN_SEC = exports.SHARE_TOKEN_PREFIX = void 0;
415571
+ var types_1 = require_dist4();
415496
415572
  var crypto2 = __importStar(__require("crypto"));
415497
415573
  var zod_1 = require_zod();
415498
415574
  var SHARE_TOKENS_COLLECTION = "share_view_tokens";
@@ -415506,7 +415582,7 @@ var require_share_token_service = __commonJS({
415506
415582
  exports.SHARE_TOKEN_TTL_DEFAULT_SEC = 7 * 24 * 60 * 60;
415507
415583
  exports.SHARE_TOKEN_MAX_DEVICES = 64;
415508
415584
  exports.ShareTokenScopeSchema = zod_1.z.object({
415509
- kind: zod_1.z.enum(["grid-view", "events-view"]),
415585
+ kind: zod_1.z.enum(types_1.SHARE_VIEW_KINDS),
415510
415586
  deviceIds: zod_1.z.array(zod_1.z.number().int().nonnegative()).min(1).max(exports.SHARE_TOKEN_MAX_DEVICES)
415511
415587
  });
415512
415588
  exports.ShareTokenRecordSchema = zod_1.z.object({
@@ -420202,6 +420278,44 @@ var require_addon_route_jwt_gate = __commonJS({
420202
420278
  }
420203
420279
  });
420204
420280
 
420281
+ // ../../server/backend/dist/auth/addon-route-share-gate.js
420282
+ var require_addon_route_share_gate = __commonJS({
420283
+ "../../server/backend/dist/auth/addon-route-share-gate.js"(exports) {
420284
+ "use strict";
420285
+ Object.defineProperty(exports, "__esModule", { value: true });
420286
+ exports.SHARE_DEVICES_HEADER = exports.SHARE_KIND_HEADER = void 0;
420287
+ exports.gateAddonShareToken = gateAddonShareToken;
420288
+ exports.stripShareHeaders = stripShareHeaders;
420289
+ exports.SHARE_KIND_HEADER = "x-camstack-share-kind";
420290
+ exports.SHARE_DEVICES_HEADER = "x-camstack-share-devices";
420291
+ function gateAddonShareToken(input) {
420292
+ if (input.record === null)
420293
+ return { ok: false, status: 401, error: "Invalid token" };
420294
+ const kind = input.record.scope.kind;
420295
+ if (!(input.endpoint.share ?? []).includes(kind)) {
420296
+ return { ok: false, status: 403, error: "Share token not accepted here" };
420297
+ }
420298
+ return {
420299
+ ok: true,
420300
+ headers: {
420301
+ [exports.SHARE_KIND_HEADER]: kind,
420302
+ [exports.SHARE_DEVICES_HEADER]: input.record.scope.deviceIds.join(",")
420303
+ }
420304
+ };
420305
+ }
420306
+ function stripShareHeaders(headers) {
420307
+ const out = {};
420308
+ for (const [key, value] of Object.entries(headers)) {
420309
+ const lower = key.toLowerCase();
420310
+ if (lower === exports.SHARE_KIND_HEADER || lower === exports.SHARE_DEVICES_HEADER)
420311
+ continue;
420312
+ out[key] = value;
420313
+ }
420314
+ return out;
420315
+ }
420316
+ }
420317
+ });
420318
+
420205
420319
  // ../../server/backend/dist/core/config/config.schema.js
420206
420320
  var require_config_schema = __commonJS({
420207
420321
  "../../server/backend/dist/core/config/config.schema.js"(exports) {
@@ -421239,6 +421353,7 @@ var require_addon_registry_service = __commonJS({
421239
421353
  exports.AddonRegistryService = void 0;
421240
421354
  exports.shouldEvictMissingOnDisk = shouldEvictMissingOnDisk;
421241
421355
  exports.addonUpdatePayload = addonUpdatePayload;
421356
+ exports.parseDataPlaneEndpoints = parseDataPlaneEndpoints;
421242
421357
  exports.shouldEmitProviderRegisteredReady = shouldEmitProviderRegisteredReady;
421243
421358
  var node_crypto_1 = __require("crypto");
421244
421359
  var fs = __importStar(__require("fs"));
@@ -421357,9 +421472,30 @@ var require_addon_registry_service = __commonJS({
421357
421472
  if (typeof prefix !== "string" || typeof baseUrl !== "string" || typeof secret !== "string") {
421358
421473
  throw new Error("data-planes: endpoint descriptor missing prefix/baseUrl/secret");
421359
421474
  }
421360
- return { prefix, access: asRouteAccess(Reflect.get(entry, "access")), baseUrl, secret };
421475
+ const share = parseDataPlaneShare(Reflect.get(entry, "share"));
421476
+ return {
421477
+ prefix,
421478
+ access: asRouteAccess(Reflect.get(entry, "access")),
421479
+ baseUrl,
421480
+ secret,
421481
+ ...share !== void 0 ? { share } : {}
421482
+ };
421361
421483
  });
421362
421484
  }
421485
+ function parseDataPlaneShare(value) {
421486
+ if (value === void 0)
421487
+ return void 0;
421488
+ if (!Array.isArray(value))
421489
+ throw new Error("data-planes: `share` is not an array");
421490
+ return value.map((kind) => {
421491
+ if (!isShareViewKind(kind))
421492
+ throw new Error(`data-planes: unknown share kind ${String(kind)}`);
421493
+ return kind;
421494
+ });
421495
+ }
421496
+ function isShareViewKind(value) {
421497
+ return typeof value === "string" && types_1.SHARE_VIEW_KINDS.includes(value);
421498
+ }
421363
421499
  function shouldEmitProviderRegisteredReady(capability) {
421364
421500
  return capability !== "platform-probe";
421365
421501
  }
@@ -428219,6 +428355,7 @@ var require_main4 = __commonJS({
428219
428355
  var trpc_error_device_tags_1 = require_trpc_error_device_tags();
428220
428356
  var ws_request_census_1 = require_ws_request_census();
428221
428357
  var addon_route_jwt_gate_js_1 = require_addon_route_jwt_gate();
428358
+ var addon_route_share_gate_js_1 = require_addon_route_share_gate();
428222
428359
  var session_cookie_js_1 = require_session_cookie();
428223
428360
  var boot_config_1 = require_boot_config();
428224
428361
  var integration_id_backfill_1 = require_integration_id_backfill();
@@ -428770,6 +428907,7 @@ var require_main4 = __commonJS({
428770
428907
  const dpMatch = dataPlaneRegistry.match(addonId, subPath);
428771
428908
  if (dpMatch) {
428772
428909
  const access = dpMatch.endpoint.access;
428910
+ let shareHeaders = null;
428773
428911
  if (access !== "public") {
428774
428912
  const authHeader = request.headers.authorization;
428775
428913
  const cookieToken = request.cookies?.[session_cookie_js_1.SESSION_COOKIE];
@@ -428777,7 +428915,13 @@ var require_main4 = __commonJS({
428777
428915
  return reply.status(401).send({ error: "Unauthorized" });
428778
428916
  }
428779
428917
  const token2 = authHeader ? authHeader.replace("Bearer ", "") : cookieToken;
428780
- if (token2.startsWith("cst_")) {
428918
+ if (token2.startsWith("csv_")) {
428919
+ const record = await shareTokenService.validate(token2);
428920
+ const gate = (0, addon_route_share_gate_js_1.gateAddonShareToken)({ record, endpoint: dpMatch.endpoint });
428921
+ if (!gate.ok)
428922
+ return reply.status(gate.status).send({ error: gate.error });
428923
+ shareHeaders = gate.headers;
428924
+ } else if (token2.startsWith("cst_")) {
428781
428925
  const userMgmt = capabilityRegistry?.getSingleton("user-management");
428782
428926
  if (!userMgmt)
428783
428927
  return reply.status(503).send({ error: "User management not available" });
@@ -428802,6 +428946,12 @@ var require_main4 = __commonJS({
428802
428946
  const qIdx = request.url.indexOf("?");
428803
428947
  const queryString = qIdx >= 0 ? request.url.slice(qIdx) : "";
428804
428948
  const upstreamPath = `/${subPath}${queryString}`;
428949
+ for (const name of Object.keys(request.raw.headers)) {
428950
+ if (name.toLowerCase() === addon_route_share_gate_js_1.SHARE_KIND_HEADER || name.toLowerCase() === addon_route_share_gate_js_1.SHARE_DEVICES_HEADER)
428951
+ delete request.raw.headers[name];
428952
+ }
428953
+ if (shareHeaders !== null)
428954
+ Object.assign(request.raw.headers, shareHeaders);
428805
428955
  reply.hijack();
428806
428956
  const replayBody = request.body === void 0 ? void 0 : Buffer.isBuffer(request.body) ? request.body : Buffer.from(typeof request.body === "string" ? request.body : JSON.stringify(request.body));
428807
428957
  (0, system_1.proxyToUpstream)({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "camstack",
3
- "version": "1.2.97",
3
+ "version": "1.2.99",
4
4
  "description": "CLI tool for managing and running CamStack server",
5
5
  "keywords": [
6
6
  "camstack",