@camstack/system 1.2.188 → 1.2.189

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.
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- const require_manifest_system_deps = require("./manifest-system-deps-CdIVy85V.js");
2
+ const require_manifest_system_deps = require("./manifest-system-deps-DvY1bY_n.js");
3
3
  const require_custom_action_registry = require("./custom-action-registry-jY0NOZK8.js");
4
4
  let node_path = require("node:path");
5
5
  node_path = require_chunk.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { A as createUdsLoggerWithControl, Ft as RUNNER_RSS_BUDGET_ENV, Jt as startRunnerHeapWatch, Qt as emitHeapDiagnosticReport, a as createUdsAddonContext, bt as resolveAddonClass, it as setWorkerNativeCapsChangeListener, j as LocalChildClient, n as installManifestPythonDeps, nt as getWorkerNativeCapSnapshot, ot as validateProviderRegistrations, t as installManifestSystemDeps, tt as getWorkerNativeCapProvider, yt as installManifestNativeDeps } from "./manifest-system-deps-CYKgsQ_b.mjs";
1
+ import { A as createUdsLoggerWithControl, Ft as RUNNER_RSS_BUDGET_ENV, Jt as startRunnerHeapWatch, Qt as emitHeapDiagnosticReport, a as createUdsAddonContext, bt as resolveAddonClass, it as setWorkerNativeCapsChangeListener, j as LocalChildClient, n as installManifestPythonDeps, nt as getWorkerNativeCapSnapshot, ot as validateProviderRegistrations, t as installManifestSystemDeps, tt as getWorkerNativeCapProvider, yt as installManifestNativeDeps } from "./manifest-system-deps-726RBOX7.mjs";
2
2
  import { t as CustomActionRegistry } from "./custom-action-registry-F__gp_VX.mjs";
3
3
  import { register } from "node:module";
4
4
  import * as path$1 from "node:path";
@@ -458,6 +458,41 @@ async function renderCourtesyOverlayJpeg(background, spec) {
458
458
  if (bytes.length === 0) throw new Error("courtesy overlay produced no bytes");
459
459
  return bytes;
460
460
  }
461
+ var NativeSnapshotFatigue = class {
462
+ baseMs;
463
+ maxMs;
464
+ entries = /* @__PURE__ */ new Map();
465
+ constructor(options = {}) {
466
+ this.baseMs = options.baseMs ?? 1e4;
467
+ this.maxMs = options.maxMs ?? 3e5;
468
+ }
469
+ /** The instant the rest ends, or `null` when the camera may be dialled now. */
470
+ restingUntil(deviceId, now) {
471
+ const entry = this.entries.get(deviceId);
472
+ if (entry === void 0 || entry.restingUntil <= now) return null;
473
+ return entry.restingUntil;
474
+ }
475
+ /** A dial that did not produce a frame — thrown or answered `null`. */
476
+ recordFailure(deviceId, now) {
477
+ const streak = (this.entries.get(deviceId)?.streak ?? 0) + 1;
478
+ const restMs = Math.min(this.maxMs, this.baseMs * 2 ** (streak - 1));
479
+ this.entries.set(deviceId, {
480
+ streak,
481
+ restingUntil: now + restMs
482
+ });
483
+ return {
484
+ streak,
485
+ restMs
486
+ };
487
+ }
488
+ /** A frame landed: the camera is answering again. */
489
+ recordSuccess(deviceId) {
490
+ this.entries.delete(deviceId);
491
+ }
492
+ forget(deviceId) {
493
+ this.entries.delete(deviceId);
494
+ }
495
+ };
461
496
  //#endregion
462
497
  //#region src/builtins/snapshot/snapshot-link-url.ts
463
498
  /**
@@ -1046,6 +1081,8 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
1046
1081
  * that silently left the cache is the reason a later capture had to happen,
1047
1082
  * and per-camera is the only way that question is ever asked.
1048
1083
  */
1084
+ /** Cameras resting after a native miss — see `snapshot-fatigue.ts`. */
1085
+ fatigue = new NativeSnapshotFatigue();
1049
1086
  cache = new SnapshotCache({ onEvict: (deviceId, streamId, reason) => {
1050
1087
  this.ctx.logger.debug("snapshot cache evicted", {
1051
1088
  tags: { deviceId },
@@ -1847,11 +1884,17 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
1847
1884
  const now = Date.now();
1848
1885
  let nativeError = null;
1849
1886
  let nativeAbsent = false;
1887
+ const restingUntil = input.force === true ? null : this.fatigue.restingUntil(deviceId, now);
1850
1888
  try {
1851
- const native = this.ctx.getNativeProvider(require_dist.snapshotCapability, deviceId);
1852
- if (native) {
1889
+ const native = restingUntil === null ? this.ctx.getNativeProvider(require_dist.snapshotCapability, deviceId) : null;
1890
+ if (restingUntil !== null) log.info("native snapshot: camera resting after a miss — not dialled", {
1891
+ tags: { deviceId },
1892
+ meta: { restMsLeft: restingUntil - now }
1893
+ });
1894
+ else if (native) {
1853
1895
  const result = await this.nativePool.run(() => native.getSnapshot(input));
1854
1896
  if (result) {
1897
+ this.fatigue.recordSuccess(deviceId);
1855
1898
  this.stateFrames.delete(deviceId);
1856
1899
  this.cache.set(deviceId, effectiveStreamId, {
1857
1900
  data: result,
@@ -1863,7 +1906,14 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
1863
1906
  image: result
1864
1907
  };
1865
1908
  }
1866
- log.debug("native snapshot returned null — falling through to broker", { tags: { deviceId } });
1909
+ const rest = this.fatigue.recordFailure(deviceId, now);
1910
+ log.debug("native snapshot returned null — falling through to broker", {
1911
+ tags: { deviceId },
1912
+ meta: {
1913
+ restMs: rest.restMs,
1914
+ streak: rest.streak
1915
+ }
1916
+ });
1867
1917
  } else {
1868
1918
  nativeAbsent = true;
1869
1919
  log.debug("native snapshot provider not resolved — falling through to broker", { tags: { deviceId } });
@@ -1878,9 +1928,14 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
1878
1928
  });
1879
1929
  } else {
1880
1930
  nativeError = err;
1931
+ const rest = this.fatigue.recordFailure(deviceId, now);
1881
1932
  log.warn("native snapshot failed", {
1882
1933
  tags: { deviceId },
1883
- meta: { error: msg }
1934
+ meta: {
1935
+ error: msg,
1936
+ restMs: rest.restMs,
1937
+ streak: rest.streak
1938
+ }
1884
1939
  });
1885
1940
  }
1886
1941
  }
@@ -2062,6 +2117,7 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
2062
2117
  */
2063
2118
  evictRemovedDevice(deviceId, reason) {
2064
2119
  this.dropDeviceCaches(deviceId);
2120
+ this.fatigue.forget(deviceId);
2065
2121
  this.ctx.logger.info("snapshot: dropped cache for removed device", {
2066
2122
  tags: { deviceId },
2067
2123
  meta: { reason }
@@ -452,6 +452,41 @@ async function renderCourtesyOverlayJpeg(background, spec) {
452
452
  if (bytes.length === 0) throw new Error("courtesy overlay produced no bytes");
453
453
  return bytes;
454
454
  }
455
+ var NativeSnapshotFatigue = class {
456
+ baseMs;
457
+ maxMs;
458
+ entries = /* @__PURE__ */ new Map();
459
+ constructor(options = {}) {
460
+ this.baseMs = options.baseMs ?? 1e4;
461
+ this.maxMs = options.maxMs ?? 3e5;
462
+ }
463
+ /** The instant the rest ends, or `null` when the camera may be dialled now. */
464
+ restingUntil(deviceId, now) {
465
+ const entry = this.entries.get(deviceId);
466
+ if (entry === void 0 || entry.restingUntil <= now) return null;
467
+ return entry.restingUntil;
468
+ }
469
+ /** A dial that did not produce a frame — thrown or answered `null`. */
470
+ recordFailure(deviceId, now) {
471
+ const streak = (this.entries.get(deviceId)?.streak ?? 0) + 1;
472
+ const restMs = Math.min(this.maxMs, this.baseMs * 2 ** (streak - 1));
473
+ this.entries.set(deviceId, {
474
+ streak,
475
+ restingUntil: now + restMs
476
+ });
477
+ return {
478
+ streak,
479
+ restMs
480
+ };
481
+ }
482
+ /** A frame landed: the camera is answering again. */
483
+ recordSuccess(deviceId) {
484
+ this.entries.delete(deviceId);
485
+ }
486
+ forget(deviceId) {
487
+ this.entries.delete(deviceId);
488
+ }
489
+ };
455
490
  //#endregion
456
491
  //#region src/builtins/snapshot/snapshot-link-url.ts
457
492
  /**
@@ -1040,6 +1075,8 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
1040
1075
  * that silently left the cache is the reason a later capture had to happen,
1041
1076
  * and per-camera is the only way that question is ever asked.
1042
1077
  */
1078
+ /** Cameras resting after a native miss — see `snapshot-fatigue.ts`. */
1079
+ fatigue = new NativeSnapshotFatigue();
1043
1080
  cache = new SnapshotCache({ onEvict: (deviceId, streamId, reason) => {
1044
1081
  this.ctx.logger.debug("snapshot cache evicted", {
1045
1082
  tags: { deviceId },
@@ -1841,11 +1878,17 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
1841
1878
  const now = Date.now();
1842
1879
  let nativeError = null;
1843
1880
  let nativeAbsent = false;
1881
+ const restingUntil = input.force === true ? null : this.fatigue.restingUntil(deviceId, now);
1844
1882
  try {
1845
- const native = this.ctx.getNativeProvider(snapshotCapability, deviceId);
1846
- if (native) {
1883
+ const native = restingUntil === null ? this.ctx.getNativeProvider(snapshotCapability, deviceId) : null;
1884
+ if (restingUntil !== null) log.info("native snapshot: camera resting after a miss — not dialled", {
1885
+ tags: { deviceId },
1886
+ meta: { restMsLeft: restingUntil - now }
1887
+ });
1888
+ else if (native) {
1847
1889
  const result = await this.nativePool.run(() => native.getSnapshot(input));
1848
1890
  if (result) {
1891
+ this.fatigue.recordSuccess(deviceId);
1849
1892
  this.stateFrames.delete(deviceId);
1850
1893
  this.cache.set(deviceId, effectiveStreamId, {
1851
1894
  data: result,
@@ -1857,7 +1900,14 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
1857
1900
  image: result
1858
1901
  };
1859
1902
  }
1860
- log.debug("native snapshot returned null — falling through to broker", { tags: { deviceId } });
1903
+ const rest = this.fatigue.recordFailure(deviceId, now);
1904
+ log.debug("native snapshot returned null — falling through to broker", {
1905
+ tags: { deviceId },
1906
+ meta: {
1907
+ restMs: rest.restMs,
1908
+ streak: rest.streak
1909
+ }
1910
+ });
1861
1911
  } else {
1862
1912
  nativeAbsent = true;
1863
1913
  log.debug("native snapshot provider not resolved — falling through to broker", { tags: { deviceId } });
@@ -1872,9 +1922,14 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
1872
1922
  });
1873
1923
  } else {
1874
1924
  nativeError = err;
1925
+ const rest = this.fatigue.recordFailure(deviceId, now);
1875
1926
  log.warn("native snapshot failed", {
1876
1927
  tags: { deviceId },
1877
- meta: { error: msg }
1928
+ meta: {
1929
+ error: msg,
1930
+ restMs: rest.restMs,
1931
+ streak: rest.streak
1932
+ }
1878
1933
  });
1879
1934
  }
1880
1935
  }
@@ -2056,6 +2111,7 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
2056
2111
  */
2057
2112
  evictRemovedDevice(deviceId, reason) {
2058
2113
  this.dropDeviceCaches(deviceId);
2114
+ this.fatigue.forget(deviceId);
2059
2115
  this.ctx.logger.info("snapshot: dropped cache for removed device", {
2060
2116
  tags: { deviceId },
2061
2117
  meta: { reason }
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Rest for a camera that could not answer a native snapshot.
3
+ *
4
+ * The wrapper is polled — grids, cards, the media plane — and every miss used
5
+ * to be followed by another ISAPI/CGI dial on the next poll. On a camera that
6
+ * is already struggling ("Videocamera retro casa" answered HTTP 503 to 68
7
+ * native dials in one hour on 2026-09-05) that is the load that keeps it
8
+ * struggling. So a miss earns a rest window during which the native provider
9
+ * is NOT dialled: the request falls through to the stream-broker frame grab
10
+ * and the stale cache, which cost the camera nothing. The window doubles with
11
+ * consecutive misses and is capped; the first frame that lands ends it.
12
+ *
13
+ * Generic on purpose: every vendor's native provider sits behind this one
14
+ * wrapper, so one ledger here covers them all (D62 spirit: one owner).
15
+ * `force` bypasses it — an operator's deliberate wake is never held back.
16
+ */
17
+ export interface NativeSnapshotFatigueOptions {
18
+ /** Rest after the first miss. */
19
+ readonly baseMs?: number;
20
+ /** Longest rest a streak can earn. */
21
+ readonly maxMs?: number;
22
+ }
23
+ export interface FatigueVerdict {
24
+ readonly streak: number;
25
+ readonly restMs: number;
26
+ }
27
+ export declare const NATIVE_SNAPSHOT_REST_BASE_MS = 10000;
28
+ export declare const NATIVE_SNAPSHOT_REST_MAX_MS = 300000;
29
+ export declare class NativeSnapshotFatigue {
30
+ private readonly baseMs;
31
+ private readonly maxMs;
32
+ private readonly entries;
33
+ constructor(options?: NativeSnapshotFatigueOptions);
34
+ /** The instant the rest ends, or `null` when the camera may be dialled now. */
35
+ restingUntil(deviceId: number, now: number): number | null;
36
+ /** A dial that did not produce a frame — thrown or answered `null`. */
37
+ recordFailure(deviceId: number, now: number): FatigueVerdict;
38
+ /** A frame landed: the camera is answering again. */
39
+ recordSuccess(deviceId: number): void;
40
+ forget(deviceId: number): void;
41
+ }
@@ -36,6 +36,8 @@ export declare class SnapshotAddon extends BaseAddon<SnapshotAddonConfig> {
36
36
  * that silently left the cache is the reason a later capture had to happen,
37
37
  * and per-camera is the only way that question is ever asked.
38
38
  */
39
+ /** Cameras resting after a native miss — see `snapshot-fatigue.ts`. */
40
+ private readonly fatigue;
39
41
  private readonly cache;
40
42
  /** Card-sized derivatives of the frames above, keyed by width and validated
41
43
  * against the source frame's timestamp. */
package/dist/index.js CHANGED
@@ -27,7 +27,7 @@ require("./builtins/system-config/index.js");
27
27
  const require_builtins_winston_logging_index = require("./builtins/winston-logging/index.js");
28
28
  const require_file_data_plane = require("./file-data-plane-DO8KbxCe.js");
29
29
  const require_tls$1 = require("./tls-BxQlomxd.js");
30
- const require_manifest_system_deps = require("./manifest-system-deps-CdIVy85V.js");
30
+ const require_manifest_system_deps = require("./manifest-system-deps-DvY1bY_n.js");
31
31
  const require_resource_monitor = require("./resource-monitor-CdnzxBLP.js");
32
32
  const require_custom_action_registry = require("./custom-action-registry-jY0NOZK8.js");
33
33
  let zod = require("zod");
package/dist/index.mjs CHANGED
@@ -26,7 +26,7 @@ import "./builtins/system-config/index.mjs";
26
26
  import { WinstonDestination, WinstonLoggingAddon } from "./builtins/winston-logging/index.mjs";
27
27
  import { a as parseTokenizedUrl, c as collectModelFiles, d as downloadModel, f as ensureModel, h as isModelDownloaded, i as parseRangeHeader, l as deleteModelFromDisk, m as getModelFilePath, n as contentTypeFor, o as resolveFilePath, p as fetchJson, r as createAuthenticatedFileServer, s as ModelDownloadService, t as createFileDataPlaneHandler, u as downloadFile } from "./file-data-plane-BhKdxJgf.mjs";
28
28
  import { C as registerLanHttpHandler, S as readLanHttpState, _ as DEFAULT_LAN_HTTP_PORT, a as writeTlsMode, b as bindPendingLanHttp, c as loadTlsCert, d as collectCertIdentity, f as CA_VALIDITY_DAYS, g as evaluateExistingCert, h as SERVER_AUTH_OID, i as writeExtraSans, l as reissueTlsLeaf, m as MAX_LEAF_VALIDITY_DAYS, n as readTlsAccessStatus, o as validateUploadedTls, p as LEAF_RENEWAL_WINDOW_DAYS, r as readTlsMode, s as ensureTlsCert, t as readExtraSans, u as CA_COMMON_NAME, v as allFamiliesListenHost, x as closeLanHttp, y as applyLanHttp } from "./tls-DOTmtLCW.mjs";
29
- import { $ as buildUdsNativeCapProxy, $t as formatHeapSpaces, A as createUdsLoggerWithControl, At as HUB_MAIN_RSS_BUDGET_MB, B as readMoleculerFanoutMode, Bt as createV8Reclaimer, C as ipcParentLink, Ct as createAddonDataPlaneFacility, D as createUdsEventBus, Dt as HEAP_WATCH_INTERVAL_MS, E as createUdsEventBridge, Et as HEAP_RECLAIM_TRIGGER_MB, F as AGENT_CAP_FWD_SERVICE, Ft as RUNNER_RSS_BUDGET_ENV, G as createLocalTransport, Gt as reclaimIntervalMs, H as PARENT_ROUTED_PROVIDER_ADDON_ID, Ht as hubMainRssBudget, I as CapRouteResolver, It as ZERO_LOOP_DELAY, J as SocketChannel, Jt as startRunnerHeapWatch, K as UdsLocalTransportClient, Kt as shouldReclaim, L as CapRouteError, Lt as buildHeapSample, M as LocalChildRegistry, Mt as RSS_BUDGET_REANNOUNCE_MIN_MS, N as UDS_NO_ROUTE_PREFIX, Nt as RSS_BUDGET_RELEASE_RATIO, O as udsChildLogToWorkerEntry, Ot as HEAP_WATCH_WARN_RATIO, P as AGENT_CAP_FWD_ACTION, Pt as RUNNER_HEAP_WATCH_INTERVAL_MS, Q as buildNativeCapProxy, Qt as emitHeapDiagnosticReport, R as classifyCapRoute, Rt as createDeferredHeapWatchSink, S as buildLinkChain, St as runNpm, T as createParentUnownedCallHandler, Tt as HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, U as __resetCapUsageRegistryForTests, Ut as nextRssBudgetState, V as CapUsageRegistry, Vt as describeRss, W as getCapUsageRegistry, Wt as parseRssBudgetMb, X as FrameDecoder, Xt as DECISIVE_HEAP_SPACES, Y as localEndpointPath, Yt as strandedMb, Z as encodeFrame, Zt as HEAP_SPACE_REPORT_MIN_MB, _ as AddonDepsManager, _n as createEventPlaneReader, _t as CapabilityUnavailableError, a as createUdsAddonContext, an as createSocketPlaneMeter, at as createAddonService, b as brokerCallForCap, bt as resolveAddonClass, c as getOrInitReadinessRegistryForClient, cn as formatSocketPlane, ct as capActionName, d as clusterEventTopic, dn as recordSocketFrame, dt as capServiceName, en as heapSpaceField, et as createBrokerDeviceManagerApi, f as getBrokerEventBus, fn as sampleSocketDirection, ft as parseCapAction, g as subscribePassthrough, gn as createEventPlaneMeter, gt as CapabilityHandle, h as setNodeEventInterest, hn as EVENT_PLANE_TOP_N, ht as DeviceRegistry, i as createAddonContext, in as SOCKET_PLANE_TOP_N, j as LocalChildClient, jt as HUB_RSS_BUDGET_ENV, k as createUdsLogger, kt as HUB_MAIN_HEAP_WATCH_LABEL, l as setHubConnected, ln as EMPTY_SOCKET_DIRECTION, lt as capActionSuffix, m as registerEventBusService, mn as socketDirectionMessages, mt as serializeTypedArrays, n as installManifestPythonDeps, nn as selectReportedSpaces, o as getWorkerDeviceRegistry, on as createSocketPlaneReader, ot as validateProviderRegistrations, p as getMoleculerEventStats, pn as socketDirectionBytes, pt as deserializeTypedArrays, q as UdsLocalTransportServer, qt as startHeapWatch, r as adaptBrokerToCluster, rn as EMPTY_SOCKET_PLANE_BASELINE, rt as mountNativeCapService, s as getOrInitReadinessRegistry, sn as diffSocketPlane, st as NATIVE_PROVIDER_SERVICE_INFIX, t as installManifestSystemDeps, tn as readHeapSpaces, u as EVENT_TOPIC_PREFIX, un as createSocketDirectionCounters, ut as capBareAction, v as createKernelHwAccel, vn as diffEventPlane, vt as copyBundledNativeModules, w as localProviderLink, wt as HEAP_RECLAIM_MIN_INTERVAL_MS, x as brokerTransportLink, xt as resolveNpmInvocation, y as resolveHwAccel, yn as formatEventPlane, yt as installManifestNativeDeps, z as callWithServiceDiscovery, zt as createLoopDelayMeter } from "./manifest-system-deps-CYKgsQ_b.mjs";
29
+ import { $ as buildUdsNativeCapProxy, $t as formatHeapSpaces, A as createUdsLoggerWithControl, At as HUB_MAIN_RSS_BUDGET_MB, B as readMoleculerFanoutMode, Bt as createV8Reclaimer, C as ipcParentLink, Ct as createAddonDataPlaneFacility, D as createUdsEventBus, Dt as HEAP_WATCH_INTERVAL_MS, E as createUdsEventBridge, Et as HEAP_RECLAIM_TRIGGER_MB, F as AGENT_CAP_FWD_SERVICE, Ft as RUNNER_RSS_BUDGET_ENV, G as createLocalTransport, Gt as reclaimIntervalMs, H as PARENT_ROUTED_PROVIDER_ADDON_ID, Ht as hubMainRssBudget, I as CapRouteResolver, It as ZERO_LOOP_DELAY, J as SocketChannel, Jt as startRunnerHeapWatch, K as UdsLocalTransportClient, Kt as shouldReclaim, L as CapRouteError, Lt as buildHeapSample, M as LocalChildRegistry, Mt as RSS_BUDGET_REANNOUNCE_MIN_MS, N as UDS_NO_ROUTE_PREFIX, Nt as RSS_BUDGET_RELEASE_RATIO, O as udsChildLogToWorkerEntry, Ot as HEAP_WATCH_WARN_RATIO, P as AGENT_CAP_FWD_ACTION, Pt as RUNNER_HEAP_WATCH_INTERVAL_MS, Q as buildNativeCapProxy, Qt as emitHeapDiagnosticReport, R as classifyCapRoute, Rt as createDeferredHeapWatchSink, S as buildLinkChain, St as runNpm, T as createParentUnownedCallHandler, Tt as HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, U as __resetCapUsageRegistryForTests, Ut as nextRssBudgetState, V as CapUsageRegistry, Vt as describeRss, W as getCapUsageRegistry, Wt as parseRssBudgetMb, X as FrameDecoder, Xt as DECISIVE_HEAP_SPACES, Y as localEndpointPath, Yt as strandedMb, Z as encodeFrame, Zt as HEAP_SPACE_REPORT_MIN_MB, _ as AddonDepsManager, _n as createEventPlaneReader, _t as CapabilityUnavailableError, a as createUdsAddonContext, an as createSocketPlaneMeter, at as createAddonService, b as brokerCallForCap, bt as resolveAddonClass, c as getOrInitReadinessRegistryForClient, cn as formatSocketPlane, ct as capActionName, d as clusterEventTopic, dn as recordSocketFrame, dt as capServiceName, en as heapSpaceField, et as createBrokerDeviceManagerApi, f as getBrokerEventBus, fn as sampleSocketDirection, ft as parseCapAction, g as subscribePassthrough, gn as createEventPlaneMeter, gt as CapabilityHandle, h as setNodeEventInterest, hn as EVENT_PLANE_TOP_N, ht as DeviceRegistry, i as createAddonContext, in as SOCKET_PLANE_TOP_N, j as LocalChildClient, jt as HUB_RSS_BUDGET_ENV, k as createUdsLogger, kt as HUB_MAIN_HEAP_WATCH_LABEL, l as setHubConnected, ln as EMPTY_SOCKET_DIRECTION, lt as capActionSuffix, m as registerEventBusService, mn as socketDirectionMessages, mt as serializeTypedArrays, n as installManifestPythonDeps, nn as selectReportedSpaces, o as getWorkerDeviceRegistry, on as createSocketPlaneReader, ot as validateProviderRegistrations, p as getMoleculerEventStats, pn as socketDirectionBytes, pt as deserializeTypedArrays, q as UdsLocalTransportServer, qt as startHeapWatch, r as adaptBrokerToCluster, rn as EMPTY_SOCKET_PLANE_BASELINE, rt as mountNativeCapService, s as getOrInitReadinessRegistry, sn as diffSocketPlane, st as NATIVE_PROVIDER_SERVICE_INFIX, t as installManifestSystemDeps, tn as readHeapSpaces, u as EVENT_TOPIC_PREFIX, un as createSocketDirectionCounters, ut as capBareAction, v as createKernelHwAccel, vn as diffEventPlane, vt as copyBundledNativeModules, w as localProviderLink, wt as HEAP_RECLAIM_MIN_INTERVAL_MS, x as brokerTransportLink, xt as resolveNpmInvocation, y as resolveHwAccel, yn as formatEventPlane, yt as installManifestNativeDeps, z as callWithServiceDiscovery, zt as createLoopDelayMeter } from "./manifest-system-deps-726RBOX7.mjs";
30
30
  import { n as getSinglePidStats, t as getPidStats } from "./resource-monitor-BWmQ5i-o.mjs";
31
31
  import { t as CustomActionRegistry } from "./custom-action-registry-F__gp_VX.mjs";
32
32
  import { z } from "zod";
@@ -1504,7 +1504,8 @@ function createAddonDataPlaneFacility(args) {
1504
1504
  prefix,
1505
1505
  access: entry.access,
1506
1506
  baseUrl,
1507
- secret
1507
+ secret,
1508
+ ...entry.share !== void 0 ? { share: entry.share } : {}
1508
1509
  }));
1509
1510
  args.sink?.set(args.addonId, endpoints);
1510
1511
  };
@@ -1514,7 +1515,8 @@ function createAddonDataPlaneFacility(args) {
1514
1515
  await ensureServer();
1515
1516
  served.set(prefix, {
1516
1517
  access: options.access,
1517
- handler: options.handler
1518
+ handler: options.handler,
1519
+ ...options.share !== void 0 ? { share: options.share } : {}
1518
1520
  });
1519
1521
  publish();
1520
1522
  args.logger.info("data-plane endpoint served", { meta: {
@@ -1507,7 +1507,8 @@ function createAddonDataPlaneFacility(args) {
1507
1507
  prefix,
1508
1508
  access: entry.access,
1509
1509
  baseUrl,
1510
- secret
1510
+ secret,
1511
+ ...entry.share !== void 0 ? { share: entry.share } : {}
1511
1512
  }));
1512
1513
  args.sink?.set(args.addonId, endpoints);
1513
1514
  };
@@ -1517,7 +1518,8 @@ function createAddonDataPlaneFacility(args) {
1517
1518
  await ensureServer();
1518
1519
  served.set(prefix, {
1519
1520
  access: options.access,
1520
- handler: options.handler
1521
+ handler: options.handler,
1522
+ ...options.share !== void 0 ? { share: options.share } : {}
1521
1523
  });
1522
1524
  publish();
1523
1525
  args.logger.info("data-plane endpoint served", { meta: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/system",
3
- "version": "1.2.188",
3
+ "version": "1.2.189",
4
4
  "description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
5
5
  "keywords": [
6
6
  "camstack",