@riddix/hamh 2.1.0-alpha.518 → 2.1.0-alpha.519

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.
@@ -166866,7 +166866,7 @@ function ensureCommissioningConfig(server) {
166866
166866
 
166867
166867
  // src/services/bridges/bridge.ts
166868
166868
  var AUTO_FORCE_SYNC_INTERVAL_MS = 9e4;
166869
- var DEAD_SESSION_TIMEOUT_MS = 3 * 60 * 1e3;
166869
+ var DEAD_SESSION_TIMEOUT_MS = 6e4;
166870
166870
  var Bridge = class {
166871
166871
  constructor(env, logger203, dataProvider, endpointManager) {
166872
166872
  this.dataProvider = dataProvider;
@@ -166890,6 +166890,7 @@ var Bridge = class {
166890
166890
  onStatusChange;
166891
166891
  autoForceSyncTimer = null;
166892
166892
  deadSessionTimer = null;
166893
+ staleSessionTimers = /* @__PURE__ */ new Map();
166893
166894
  // Tracks the last synced state JSON per entity to avoid pushing unchanged states.
166894
166895
  // Key: entity_id, Value: JSON.stringify of entity.state
166895
166896
  lastSyncedStates = /* @__PURE__ */ new Map();
@@ -167082,6 +167083,18 @@ ${e?.toString()}`);
167082
167083
  "Subscriptions recovered, canceled dead session cleanup"
167083
167084
  );
167084
167085
  }
167086
+ if (session.subscriptions.size === 0 && !this.staleSessionTimers.has(session.id)) {
167087
+ this.staleSessionTimers.set(
167088
+ session.id,
167089
+ setTimeout(() => {
167090
+ this.staleSessionTimers.delete(session.id);
167091
+ this.closeStaleSession(session.id);
167092
+ }, DEAD_SESSION_TIMEOUT_MS)
167093
+ );
167094
+ } else if (session.subscriptions.size > 0 && this.staleSessionTimers.has(session.id)) {
167095
+ clearTimeout(this.staleSessionTimers.get(session.id));
167096
+ this.staleSessionTimers.delete(session.id);
167097
+ }
167085
167098
  };
167086
167099
  sessionManager.subscriptionsChanged.on(this.sessionDiagHandler);
167087
167100
  this.sessionAddedHandler = (newSession) => {
@@ -167109,6 +167122,22 @@ ${e?.toString()}`);
167109
167122
  } catch {
167110
167123
  }
167111
167124
  }
167125
+ closeStaleSession(sessionId) {
167126
+ try {
167127
+ const sessionManager = this.server.env.get(SessionManager);
167128
+ for (const s of [...sessionManager.sessions]) {
167129
+ if (s.id === sessionId && !s.isClosing && s.subscriptions.size === 0) {
167130
+ this.log.warn(
167131
+ `Force-closing stale session ${s.id} (peer ${s.peerNodeId}, no subscriptions for ${DEAD_SESSION_TIMEOUT_MS / 1e3}s)`
167132
+ );
167133
+ s.initiateForceClose().catch(() => {
167134
+ });
167135
+ break;
167136
+ }
167137
+ }
167138
+ } catch {
167139
+ }
167140
+ }
167112
167141
  closeDeadSessions() {
167113
167142
  try {
167114
167143
  const sessionManager = this.server.env.get(SessionManager);
@@ -167146,6 +167175,10 @@ ${e?.toString()}`);
167146
167175
  clearTimeout(this.deadSessionTimer);
167147
167176
  this.deadSessionTimer = null;
167148
167177
  }
167178
+ for (const timer of this.staleSessionTimers.values()) {
167179
+ clearTimeout(timer);
167180
+ }
167181
+ this.staleSessionTimers.clear();
167149
167182
  }
167150
167183
  stopAutoForceSync() {
167151
167184
  if (this.autoForceSyncTimer) {
@@ -179545,7 +179578,7 @@ function hashAreaId(areaId) {
179545
179578
  // src/services/bridges/server-mode-bridge.ts
179546
179579
  init_dist();
179547
179580
  var AUTO_FORCE_SYNC_INTERVAL_MS2 = 9e4;
179548
- var DEAD_SESSION_TIMEOUT_MS2 = 3 * 60 * 1e3;
179581
+ var DEAD_SESSION_TIMEOUT_MS2 = 6e4;
179549
179582
  var ServerModeBridge = class {
179550
179583
  constructor(logger203, dataProvider, endpointManager, server) {
179551
179584
  this.dataProvider = dataProvider;
@@ -179563,6 +179596,7 @@ var ServerModeBridge = class {
179563
179596
  onStatusChange;
179564
179597
  autoForceSyncTimer = null;
179565
179598
  deadSessionTimer = null;
179599
+ staleSessionTimers = /* @__PURE__ */ new Map();
179566
179600
  warmStartTimer = null;
179567
179601
  // Tracks the last synced state JSON per entity to avoid pushing unchanged states.
179568
179602
  lastSyncedState;
@@ -179760,6 +179794,18 @@ ${e?.toString()}`);
179760
179794
  "Subscriptions recovered, canceled dead session cleanup"
179761
179795
  );
179762
179796
  }
179797
+ if (session.subscriptions.size === 0 && !this.staleSessionTimers.has(session.id)) {
179798
+ this.staleSessionTimers.set(
179799
+ session.id,
179800
+ setTimeout(() => {
179801
+ this.staleSessionTimers.delete(session.id);
179802
+ this.closeStaleSession(session.id);
179803
+ }, DEAD_SESSION_TIMEOUT_MS2)
179804
+ );
179805
+ } else if (session.subscriptions.size > 0 && this.staleSessionTimers.has(session.id)) {
179806
+ clearTimeout(this.staleSessionTimers.get(session.id));
179807
+ this.staleSessionTimers.delete(session.id);
179808
+ }
179763
179809
  };
179764
179810
  sessionManager.subscriptionsChanged.on(this.sessionDiagHandler);
179765
179811
  this.sessionAddedHandler = (newSession) => {
@@ -179787,6 +179833,22 @@ ${e?.toString()}`);
179787
179833
  } catch {
179788
179834
  }
179789
179835
  }
179836
+ closeStaleSession(sessionId) {
179837
+ try {
179838
+ const sessionManager = this.server.env.get(SessionManager);
179839
+ for (const s of [...sessionManager.sessions]) {
179840
+ if (s.id === sessionId && !s.isClosing && s.subscriptions.size === 0) {
179841
+ this.log.warn(
179842
+ `Force-closing stale session ${s.id} (peer ${s.peerNodeId}, no subscriptions for ${DEAD_SESSION_TIMEOUT_MS2 / 1e3}s)`
179843
+ );
179844
+ s.initiateForceClose().catch(() => {
179845
+ });
179846
+ break;
179847
+ }
179848
+ }
179849
+ } catch {
179850
+ }
179851
+ }
179790
179852
  closeDeadSessions() {
179791
179853
  try {
179792
179854
  const sessionManager = this.server.env.get(SessionManager);
@@ -179824,6 +179886,10 @@ ${e?.toString()}`);
179824
179886
  clearTimeout(this.deadSessionTimer);
179825
179887
  this.deadSessionTimer = null;
179826
179888
  }
179889
+ for (const timer of this.staleSessionTimers.values()) {
179890
+ clearTimeout(timer);
179891
+ }
179892
+ this.staleSessionTimers.clear();
179827
179893
  }
179828
179894
  stopAutoForceSync() {
179829
179895
  if (this.autoForceSyncTimer) {