@pollen-robotics/reachy-mini-sdk 1.13.0-dev.0.main.55a68f6 → 1.13.0-dev.0.main.5b43130

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.
@@ -31,6 +31,7 @@ function makeSupervisor(overrides = {}, options = { autoReconnect: true }) {
31
31
  rejectPendingSession: vi.fn().mockReturnValue(false),
32
32
  reconnectSignaling: vi.fn().mockResolvedValue(undefined),
33
33
  dial: vi.fn().mockResolvedValue(undefined),
34
+ redialTargetResolver: vi.fn((id) => () => id),
34
35
  teardownForRedial: vi.fn(),
35
36
  nudgeState: vi.fn(),
36
37
  emit: vi.fn(),
@@ -1 +1 @@
1
- {"version":3,"file":"ice-grace.test.js","sourceRoot":"","sources":["../../lib/ice-grace.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ice-grace.test.js","sourceRoot":"","sources":["../../lib/ice-grace.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=peer-link-liveness.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer-link-liveness.test.d.ts","sourceRoot":"","sources":["../../lib/peer-link-liveness.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Session liveness follows the peer-to-peer link, not central's signaling.
3
+ *
4
+ * The properties that must hold:
5
+ * - a reason-less endSession from central (its own eviction after our
6
+ * signaling timed out) is advisory while the peer link is live;
7
+ * - an endSession with a reason, or one arriving on an idle link, still
8
+ * ends the session;
9
+ * - losing signaling while streaming keeps the session (state stays
10
+ * `streaming`) and reconnects signaling in the background.
11
+ */
12
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
13
+ import { ReachyMini } from './reachy-mini.js';
14
+ function liveSession() {
15
+ const r = new ReachyMini();
16
+ const s = r;
17
+ s._state = 'streaming';
18
+ s._sessionId = 'central-1';
19
+ s._dcOpen = true;
20
+ s._dc = { readyState: 'open', close: vi.fn() };
21
+ s._pc = { iceConnectionState: 'connected', close: vi.fn() };
22
+ s._token = 'hf_test';
23
+ s._sendToServer = vi.fn().mockResolvedValue(null);
24
+ s._supervisor.stampDcInbound();
25
+ return { r, s };
26
+ }
27
+ function events(r, name) {
28
+ const seen = [];
29
+ r.addEventListener(name, (e) => seen.push(e.detail));
30
+ return seen;
31
+ }
32
+ beforeEach(() => {
33
+ vi.useFakeTimers();
34
+ });
35
+ afterEach(() => {
36
+ vi.useRealTimers();
37
+ vi.unstubAllGlobals();
38
+ });
39
+ describe('central endSession on a streaming session', () => {
40
+ it('is advisory without a reason while the peer link is live', () => {
41
+ const { r, s } = liveSession();
42
+ const stopped = events(r, 'sessionStopped');
43
+ const advisory = events(r, 'signalingSessionEnded');
44
+ s._handleEndSession({ type: 'endSession', sessionId: 'central-1' });
45
+ expect(stopped).toEqual([]);
46
+ expect(advisory).toEqual([{ reason: null }]);
47
+ expect(s._state).toBe('streaming');
48
+ expect(s._sessionId).toBeNull(); // stale on central now
49
+ });
50
+ it('ends the session when it carries a reason', () => {
51
+ const { r, s } = liveSession();
52
+ const stopped = events(r, 'sessionStopped');
53
+ s._handleEndSession({ type: 'endSession', sessionId: 'central-1', reason: 'local_app_started' });
54
+ // Exactly one event, with the robot's reason (no extra `user` one).
55
+ expect(stopped).toEqual([{ reason: 'local_app_started', message: 'Disconnected: a local Python app started on the robot' }]);
56
+ expect(s._state).toBe('connected');
57
+ });
58
+ it('ends the session when the peer link has gone quiet', () => {
59
+ const { r, s } = liveSession();
60
+ const stopped = events(r, 'sessionStopped');
61
+ vi.advanceTimersByTime(10_000); // nothing heard from the robot
62
+ s._handleEndSession({ type: 'endSession', sessionId: 'central-1' });
63
+ expect(stopped[0]).toMatchObject({ reason: 'remote_end' });
64
+ });
65
+ });
66
+ describe('signaling loss while streaming', () => {
67
+ function sseResponse(lines) {
68
+ const body = new ReadableStream({
69
+ start(controller) {
70
+ for (const l of lines)
71
+ controller.enqueue(new TextEncoder().encode(l));
72
+ controller.close();
73
+ },
74
+ });
75
+ return new Response(body, { status: 200 });
76
+ }
77
+ it('keeps the session and reconnects signaling in the background', async () => {
78
+ const { r, s } = liveSession();
79
+ const lost = events(r, 'signalingLost');
80
+ const restored = events(r, 'signalingRestored');
81
+ const disconnected = events(r, 'disconnected');
82
+ const fetchMock = vi.fn().mockResolvedValue(sseResponse(['data: {"type":"welcome","peerId":"me"}\n']));
83
+ vi.stubGlobal('fetch', fetchMock);
84
+ // A stream that welcomes us and then ends: the drop happens mid-session.
85
+ await s._openSignaling();
86
+ await vi.advanceTimersByTimeAsync(0);
87
+ expect(restored).toEqual([{ peerId: 'me' }]);
88
+ expect(lost).toEqual([{ reason: 'SSE closed' }]);
89
+ expect(disconnected).toEqual([]);
90
+ expect(s._state).toBe('streaming');
91
+ expect(s._signalingDown).toBe(true);
92
+ // The background retry dials central again after a short backoff.
93
+ await vi.advanceTimersByTimeAsync(1_000);
94
+ expect(fetchMock).toHaveBeenCalledTimes(2);
95
+ });
96
+ });
97
+ //# sourceMappingURL=peer-link-liveness.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer-link-liveness.test.js","sourceRoot":"","sources":["../../lib/peer-link-liveness.test.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,15 @@ export declare class ReachyMini extends EventTarget implements ReachyMiniInstanc
31
31
  _micStream: MediaStream | null;
32
32
  private _robotAudioTrack;
33
33
  private _outgoingAudioTrack;
34
+ /** Context driving the silent placeholder track; closed with it. */
35
+ private _micCtx;
36
+ /** Robot dialed last and its stable identity (see `_redialTargetResolver`). */
37
+ private _dialedRobotId;
38
+ private _dialedRobotIdentity;
39
+ /** Signaling (SSE) dropped while streaming; reconnecting in the background. */
40
+ private _signalingDown;
41
+ private _signalingRetryTimer;
42
+ private _signalingRetryAttempt;
34
43
  private _micMuted;
35
44
  private _audioMuted;
36
45
  private _micSupported;
@@ -94,6 +103,12 @@ export declare class ReachyMini extends EventTarget implements ReachyMiniInstanc
94
103
  login(options?: LoginOptions): Promise<void>;
95
104
  logout(): void;
96
105
  connect(token?: string): Promise<void>;
106
+ /**
107
+ * Open the signaling SSE stream and resolve on central's `welcome`.
108
+ * Shared by `connect()` and the background reconnect that runs while a
109
+ * session keeps streaming without signaling (see `signalingLost`).
110
+ */
111
+ private _openSignaling;
97
112
  autoConnect(options?: AutoConnectOptions): Promise<AutoConnectResult>;
98
113
  private _fetchOwnedRobots;
99
114
  private _waitForRobotInList;
@@ -139,7 +154,40 @@ export declare class ReachyMini extends EventTarget implements ReachyMiniInstanc
139
154
  * armed, and a late signaling reply could otherwise settle them
140
155
  * against a closed pc).
141
156
  */
157
+ /**
158
+ * Resolver for the redial loop. Matches on the robot's stable
159
+ * identity (`install_id`, else `hardware_id`; never the name, which
160
+ * users often leave at the default and share across robots). A
161
+ * listed robot with that identity under a NEW id is the same robot,
162
+ * re-registered; otherwise keep dialing the original id.
163
+ */
164
+ private _redialTargetResolver;
165
+ /**
166
+ * Stop the placeholder sender track AND close its AudioContext.
167
+ * Stopping the track alone left the context (and its oscillator)
168
+ * running: one leaked context per dial, and browsers cap open audio
169
+ * outputs (Chromium: 10 per page), so after a few re-dials every
170
+ * new AudioContext in the host app fails silently.
171
+ */
172
+ private _releaseMicPlaceholder;
142
173
  private _teardownForRedial;
174
+ /**
175
+ * The robot (or central on its behalf) ended a streaming session:
176
+ * tear our side down and emit ONE `sessionStopped` carrying the
177
+ * robot's reason (`stopSession()` would add a second, `user`, one).
178
+ * No endSession goes back: the other side already ended it.
179
+ */
180
+ private _endedByRobot;
181
+ /** Session over while signaling is down: surface the real state. */
182
+ private _dropToDisconnectedIfSignalingDown;
183
+ private _clearSignalingRetry;
184
+ /** Background signaling reconnect while a session keeps streaming. */
185
+ private _scheduleSignalingRetry;
186
+ /**
187
+ * Liveness of the peer link itself: data channel open, ICE up, and the
188
+ * robot heard from recently (it answers the ~500 ms state poll).
189
+ */
190
+ private _peerLinkLive;
143
191
  /**
144
192
  * Atomic raw-units pose update over the data channel. Channels you
145
193
  * omit are held at their last commanded value (per-axis, independent).
@@ -1 +1 @@
1
- {"version":3,"file":"reachy-mini.d.ts","sourceRoot":"","sources":["../../lib/reachy-mini.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reachy-mini.d.ts","sourceRoot":"","sources":["../../lib/reachy-mini.ts"],"names":[],"mappings":"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"}
@@ -32,6 +32,21 @@ const log = createLogger('sdk');
32
32
  * flip it back and forth.
33
33
  */
34
34
  const POSE_STREAM_FRESH_MS = 750;
35
+ /**
36
+ * A streaming peer link counts as live when the robot was heard from this
37
+ * recently (it answers the ~500 ms state poll). Past it, a reason-less
38
+ * endSession from central is believed again.
39
+ */
40
+ const PEER_LINK_LIVE_MS = 2500;
41
+ /**
42
+ * A robot's stable identity across central re-registrations (its peer id
43
+ * changes each time): `install_id`, else `hardware_id`. Never the name,
44
+ * which users often leave at the default and share across robots.
45
+ */
46
+ function robotIdentity(r) {
47
+ const meta = r?.meta;
48
+ return meta?.install_id ?? meta?.hardware_id ?? null;
49
+ }
35
50
  /**
36
51
  * Upper bound on how long `ensureAwake()` waits for the wake trajectory to
37
52
  * complete. The emote itself takes ~2-3 s on hardware; the extra headroom
@@ -83,6 +98,15 @@ export class ReachyMini extends EventTarget {
83
98
  _micStream = null;
84
99
  _robotAudioTrack = null;
85
100
  _outgoingAudioTrack = null;
101
+ /** Context driving the silent placeholder track; closed with it. */
102
+ _micCtx = null;
103
+ /** Robot dialed last and its stable identity (see `_redialTargetResolver`). */
104
+ _dialedRobotId = null;
105
+ _dialedRobotIdentity = null;
106
+ /** Signaling (SSE) dropped while streaming; reconnecting in the background. */
107
+ _signalingDown = false;
108
+ _signalingRetryTimer = null;
109
+ _signalingRetryAttempt = 0;
86
110
  _micMuted = true;
87
111
  _audioMuted = true;
88
112
  _micSupported = false;
@@ -135,7 +159,7 @@ export class ReachyMini extends EventTarget {
135
159
  hasPc: () => !!this._pc,
136
160
  isStreaming: () => this._state === 'streaming',
137
161
  isMidSetup: () => !!(this._sessionResolve || this._sessionReject),
138
- isSignalingDown: () => this._state === 'disconnected',
162
+ isSignalingDown: () => this._state === 'disconnected' || this._signalingDown,
139
163
  selectedRobotId: () => this._selectedRobotId,
140
164
  rejectPendingSession: (err) => {
141
165
  if (!this._sessionReject)
@@ -150,6 +174,7 @@ export class ReachyMini extends EventTarget {
150
174
  // The private dial skips the public startSession()'s
151
175
  // cancelRedial, so the loop's own attempts don't cancel it.
152
176
  dial: (robotId) => this._startSessionInternal(robotId),
177
+ redialTargetResolver: (robotId) => this._redialTargetResolver(robotId),
153
178
  teardownForRedial: () => this._teardownForRedial(),
154
179
  nudgeState: () => { this.requestState(); },
155
180
  emit: (name, detail) => this._emit(name, detail),
@@ -291,6 +316,14 @@ export class ReachyMini extends EventTarget {
291
316
  this._token = token;
292
317
  if (!this._token)
293
318
  throw new Error('No token — call authenticate() first or pass a token');
319
+ return this._openSignaling();
320
+ }
321
+ /**
322
+ * Open the signaling SSE stream and resolve on central's `welcome`.
323
+ * Shared by `connect()` and the background reconnect that runs while a
324
+ * session keeps streaming without signaling (see `signalingLost`).
325
+ */
326
+ async _openSignaling() {
294
327
  this._sseAbortController = new AbortController();
295
328
  let res;
296
329
  try {
@@ -328,13 +361,25 @@ export class ReachyMini extends EventTarget {
328
361
  const msg = JSON.parse(line.slice(5).trim());
329
362
  if (!welcomed && msg.type === 'welcome' && msg.peerId) {
330
363
  welcomed = true;
331
- this._state = 'connected';
364
+ // A background reconnect lands mid-session:
365
+ // the session state is left alone.
366
+ const restoring = this._state !== 'disconnected';
367
+ if (!restoring)
368
+ this._state = 'connected';
369
+ this._signalingDown = false;
370
+ this._signalingRetryAttempt = 0;
332
371
  await this._sendToServer({
333
372
  type: 'setPeerStatus',
334
373
  roles: ['listener'],
335
374
  meta: { name: this._appName },
336
375
  });
337
- this._emit('connected', { peerId: msg.peerId });
376
+ if (restoring) {
377
+ log.info('signaling restored while streaming');
378
+ this._emit('signalingRestored', { peerId: msg.peerId });
379
+ }
380
+ else {
381
+ this._emit('connected', { peerId: msg.peerId });
382
+ }
338
383
  resolve();
339
384
  }
340
385
  this._handleSignalingMessage(msg);
@@ -352,7 +397,20 @@ export class ReachyMini extends EventTarget {
352
397
  return;
353
398
  }
354
399
  }
355
- if (this._state !== 'disconnected') {
400
+ if (this._state === 'streaming') {
401
+ // Signaling is only needed to SET UP a session: a live
402
+ // one is peer-to-peer. Keep it, reconnect in the
403
+ // background (same token: central's reconnect grace
404
+ // keeps our peer id).
405
+ this._sseAbortController = null;
406
+ if (!this._signalingDown) {
407
+ this._signalingDown = true;
408
+ log.warn('signaling lost while streaming; keeping the session');
409
+ this._emit('signalingLost', { reason: 'SSE closed' });
410
+ }
411
+ this._scheduleSignalingRetry();
412
+ }
413
+ else if (this._state !== 'disconnected') {
356
414
  this._state = 'disconnected';
357
415
  this._emit('disconnected', { reason: 'SSE closed' });
358
416
  }
@@ -500,6 +558,15 @@ export class ReachyMini extends EventTarget {
500
558
  if (this._state !== 'connected')
501
559
  throw new Error('Not connected');
502
560
  this._selectedRobotId = robotId;
561
+ // Remember who this is while it is surely listed (see
562
+ // `_redialTargetResolver`). Kept across redial attempts that dial
563
+ // the same robot under a fresh id.
564
+ const dialedIdentity = robotIdentity(this._robots.find((r) => r.id === robotId));
565
+ if (dialedIdentity)
566
+ this._dialedRobotIdentity = dialedIdentity;
567
+ else if (this._dialedRobotId !== robotId)
568
+ this._dialedRobotIdentity = null;
569
+ this._dialedRobotId = robotId;
503
570
  this._iceConnected = false;
504
571
  this._dcOpen = false;
505
572
  this._micSupported = false;
@@ -522,7 +589,11 @@ export class ReachyMini extends EventTarget {
522
589
  const Ctx = w.AudioContext ?? w.webkitAudioContext;
523
590
  if (!Ctx)
524
591
  throw new Error('AudioContext not supported');
592
+ // A dial can follow a teardown that skipped the release
593
+ // (e.g. a rejected attempt): never keep two contexts alive.
594
+ this._releaseMicPlaceholder();
525
595
  const ctx = new Ctx();
596
+ this._micCtx = ctx;
526
597
  const dst = ctx.createMediaStreamDestination();
527
598
  const osc = ctx.createOscillator();
528
599
  const gain = ctx.createGain();
@@ -647,6 +718,21 @@ export class ReachyMini extends EventTarget {
647
718
  if (msg)
648
719
  this._handleRobotMessage(msg);
649
720
  };
721
+ // The robot ending the session closes the channel in an
722
+ // orderly way while ICE is still up: that, not central's
723
+ // signaling, is how a live session learns it is over. A dead
724
+ // network doesn't close it (ICE fails first and the
725
+ // supervisor re-dials), nor does our own teardown (the
726
+ // channel is no longer `this._dc` by then).
727
+ ch.onclose = () => {
728
+ if (this._dc !== ch || this._state !== 'streaming')
729
+ return;
730
+ const ice = this._pc?.iceConnectionState;
731
+ if (ice !== 'connected' && ice !== 'completed')
732
+ return;
733
+ log.info('robot closed the session');
734
+ this._endedByRobot('remote_end', null);
735
+ };
650
736
  };
651
737
  this._sendToServer({ type: 'startSession', peerId: robotId }).then((r) => {
652
738
  if (r?.type === 'sessionRejected') {
@@ -691,10 +777,7 @@ export class ReachyMini extends EventTarget {
691
777
  clearInterval(this._latencyMonitorId);
692
778
  this._latencyMonitorId = null;
693
779
  }
694
- if (this._micStream) {
695
- this._micStream.getTracks().forEach((t) => t.stop());
696
- this._micStream = null;
697
- }
780
+ this._releaseMicPlaceholder();
698
781
  this._robotAudioTrack = null;
699
782
  this._micMuted = true;
700
783
  this._micSupported = false;
@@ -737,13 +820,17 @@ export class ReachyMini extends EventTarget {
737
820
  this._outgoingAudioTrack = null;
738
821
  const sessionId = this._closeTransport(new Error('Session stopped'));
739
822
  if (sessionId) {
740
- await this._sendToServer({ type: 'endSession', sessionId });
823
+ // A reason marks a deliberate hang-up: the robot ends the session
824
+ // on it, whereas a reason-less endSession (central's own
825
+ // eviction) is advisory while the peer link is live.
826
+ await this._sendToServer({ type: 'endSession', sessionId, reason: 'client_stop' });
741
827
  }
742
828
  const wasStreaming = this._state === 'streaming';
743
829
  if (wasStreaming) {
744
830
  this._state = 'connected';
745
831
  this._emit('sessionStopped', { reason: 'user' });
746
832
  }
833
+ this._dropToDisconnectedIfSignalingDown();
747
834
  }
748
835
  disconnect() {
749
836
  this._supervisor.cancelRedial();
@@ -754,9 +841,11 @@ export class ReachyMini extends EventTarget {
754
841
  this._logSubscribers.clear();
755
842
  this._updateProgressSubscribers.clear();
756
843
  this._outgoingAudioTrack = null;
844
+ this._clearSignalingRetry();
845
+ this._signalingDown = false;
757
846
  const sessionId = this._closeTransport(new Error('Disconnected'));
758
847
  if (sessionId && this._token) {
759
- void this._sendToServer({ type: 'endSession', sessionId });
848
+ void this._sendToServer({ type: 'endSession', sessionId, reason: 'client_disconnect' });
760
849
  }
761
850
  this._robots = [];
762
851
  this._state = 'disconnected';
@@ -793,6 +882,41 @@ export class ReachyMini extends EventTarget {
793
882
  * armed, and a late signaling reply could otherwise settle them
794
883
  * against a closed pc).
795
884
  */
885
+ /**
886
+ * Resolver for the redial loop. Matches on the robot's stable
887
+ * identity (`install_id`, else `hardware_id`; never the name, which
888
+ * users often leave at the default and share across robots). A
889
+ * listed robot with that identity under a NEW id is the same robot,
890
+ * re-registered; otherwise keep dialing the original id.
891
+ */
892
+ _redialTargetResolver(robotId) {
893
+ // Prefer the identity recorded when the session was dialed: by the
894
+ // time a redial starts, central may already have dropped the old
895
+ // entry from the list (it evicts a robot whose signaling went
896
+ // silent), leaving nothing to match against.
897
+ const key = (this._dialedRobotId === robotId ? this._dialedRobotIdentity : null)
898
+ ?? robotIdentity(this._robots.find((r) => r.id === robotId));
899
+ if (!key)
900
+ return () => robotId;
901
+ return () => this._robots.find((r) => r.id !== robotId && robotIdentity(r) === key)?.id ?? robotId;
902
+ }
903
+ /**
904
+ * Stop the placeholder sender track AND close its AudioContext.
905
+ * Stopping the track alone left the context (and its oscillator)
906
+ * running: one leaked context per dial, and browsers cap open audio
907
+ * outputs (Chromium: 10 per page), so after a few re-dials every
908
+ * new AudioContext in the host app fails silently.
909
+ */
910
+ _releaseMicPlaceholder() {
911
+ if (this._micStream) {
912
+ this._micStream.getTracks().forEach((t) => t.stop());
913
+ this._micStream = null;
914
+ }
915
+ const ctx = this._micCtx;
916
+ this._micCtx = null;
917
+ if (ctx && ctx.state !== 'closed')
918
+ void ctx.close().catch(() => { });
919
+ }
796
920
  _teardownForRedial() {
797
921
  const sessionId = this._closeTransport(new Error('Session reconnecting'));
798
922
  // Free the robot-side slot: the relay refuses a second session
@@ -800,10 +924,83 @@ export class ReachyMini extends EventTarget {
800
924
  // own consent-freshness timeout, ~30 s) clears it. Fire and
801
925
  // forget — _sendToServer never throws.
802
926
  if (sessionId && this._token) {
803
- void this._sendToServer({ type: 'endSession', sessionId });
927
+ void this._sendToServer({ type: 'endSession', sessionId, reason: 'client_redial' });
928
+ }
929
+ if (this._state === 'streaming')
930
+ this._state = 'connected';
931
+ // The redial loop reconnects signaling itself (isSignalingDown).
932
+ if (this._signalingDown) {
933
+ this._clearSignalingRetry();
934
+ this._signalingDown = false;
935
+ this._state = 'disconnected';
804
936
  }
937
+ }
938
+ /**
939
+ * The robot (or central on its behalf) ended a streaming session:
940
+ * tear our side down and emit ONE `sessionStopped` carrying the
941
+ * robot's reason (`stopSession()` would add a second, `user`, one).
942
+ * No endSession goes back: the other side already ended it.
943
+ */
944
+ _endedByRobot(reason, message) {
945
+ this._supervisor.cancelRedial();
946
+ this._logSubscribers.clear();
947
+ this._updateProgressSubscribers.clear();
948
+ this._outgoingAudioTrack = null;
949
+ this._closeTransport(new Error('Session ended by the robot'));
805
950
  if (this._state === 'streaming')
806
951
  this._state = 'connected';
952
+ this._emit('sessionStopped', { reason, message });
953
+ this._dropToDisconnectedIfSignalingDown();
954
+ }
955
+ /** Session over while signaling is down: surface the real state. */
956
+ _dropToDisconnectedIfSignalingDown() {
957
+ if (!this._signalingDown)
958
+ return;
959
+ this._clearSignalingRetry();
960
+ this._signalingDown = false;
961
+ if (this._state !== 'disconnected') {
962
+ this._state = 'disconnected';
963
+ this._emit('disconnected', { reason: 'SSE closed' });
964
+ }
965
+ }
966
+ _clearSignalingRetry() {
967
+ if (this._signalingRetryTimer !== null) {
968
+ clearTimeout(this._signalingRetryTimer);
969
+ this._signalingRetryTimer = null;
970
+ }
971
+ if (this._signalingDown && this._sseAbortController) {
972
+ this._sseAbortController.abort();
973
+ this._sseAbortController = null;
974
+ }
975
+ this._signalingRetryAttempt = 0;
976
+ }
977
+ /** Background signaling reconnect while a session keeps streaming. */
978
+ _scheduleSignalingRetry() {
979
+ if (this._signalingRetryTimer !== null)
980
+ return;
981
+ const delays = [1000, 2000, 4000, 8000, 15000];
982
+ const delay = delays[Math.min(this._signalingRetryAttempt, delays.length - 1)];
983
+ this._signalingRetryAttempt += 1;
984
+ this._signalingRetryTimer = setTimeout(() => {
985
+ this._signalingRetryTimer = null;
986
+ if (!this._signalingDown || this._state !== 'streaming')
987
+ return;
988
+ this._openSignaling().catch(() => {
989
+ if (this._signalingDown && this._state === 'streaming')
990
+ this._scheduleSignalingRetry();
991
+ });
992
+ }, delay);
993
+ }
994
+ /**
995
+ * Liveness of the peer link itself: data channel open, ICE up, and the
996
+ * robot heard from recently (it answers the ~500 ms state poll).
997
+ */
998
+ _peerLinkLive() {
999
+ const ice = this._pc?.iceConnectionState;
1000
+ return this._dcOpen
1001
+ && this._dc?.readyState === 'open'
1002
+ && (ice === 'connected' || ice === 'completed')
1003
+ && this._supervisor.dcInboundAgeMs < PEER_LINK_LIVE_MS;
807
1004
  }
808
1005
  // ─── Commands ────────────────────────────────────────────────────────
809
1006
  /**
@@ -1715,10 +1912,7 @@ export class ReachyMini extends EventTarget {
1715
1912
  this._pc.close();
1716
1913
  this._pc = null;
1717
1914
  }
1718
- if (this._micStream) {
1719
- this._micStream.getTracks().forEach((t) => t.stop());
1720
- this._micStream = null;
1721
- }
1915
+ this._releaseMicPlaceholder();
1722
1916
  this._robotAudioTrack = null;
1723
1917
  this._iceConnected = false;
1724
1918
  this._dcOpen = false;
@@ -1731,11 +1925,17 @@ export class ReachyMini extends EventTarget {
1731
1925
  return;
1732
1926
  }
1733
1927
  if (this._state === 'streaming') {
1734
- this._emit('sessionStopped', {
1735
- reason: reason || 'remote_end',
1736
- message: friendly,
1737
- });
1738
- this.stopSession().catch(() => { });
1928
+ // Without a reason this is central's own bookkeeping (our
1929
+ // signaling timed out and it evicted us), not the robot hanging
1930
+ // up: the robot gives a reason, or closes the data channel. The
1931
+ // session lives as long as the peer link does.
1932
+ if (!reason && this._peerLinkLive()) {
1933
+ log.info('central ended the session but the peer link is live; keeping it');
1934
+ this._sessionId = null; // stale on central
1935
+ this._emit('signalingSessionEnded', { reason: null });
1936
+ return;
1937
+ }
1938
+ this._endedByRobot(reason || 'remote_end', friendly);
1739
1939
  }
1740
1940
  }
1741
1941
  async _handlePeerMessage(msg) {