@enbox/dwn-clients 0.2.6 → 0.3.1

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.
@@ -34,6 +34,9 @@ const RESPONSE_TIMEOUT = 30000;
34
34
  const DEFAULT_BASE_RECONNECT_DELAY = 1000;
35
35
  const DEFAULT_MAX_RECONNECT_DELAY = 30000;
36
36
  const DEFAULT_MAX_RECONNECT_ATTEMPTS = Infinity;
37
+ /** Default heartbeat settings. */
38
+ const DEFAULT_HEARTBEAT_INTERVAL = 30000;
39
+ const DEFAULT_HEARTBEAT_TIMEOUT = 10000;
37
40
  /**
38
41
  * JSON RPC Socket Client for WebSocket request/response and long-running subscriptions.
39
42
  *
@@ -63,6 +66,8 @@ export class JsonRpcSocket {
63
66
  this.reconnecting = false;
64
67
  /** Whether the socket is currently connected. */
65
68
  this._isConnected = false;
69
+ /** Whether a heartbeat pong is pending. */
70
+ this._awaitingPong = false;
66
71
  this.url = url;
67
72
  this.options = options;
68
73
  this._isConnected = true;
@@ -86,6 +91,7 @@ export class JsonRpcSocket {
86
91
  }
87
92
  const jsonRpcSocket = new JsonRpcSocket(socket, responseTimeout, url, options);
88
93
  jsonRpcSocket.wireSocket(socket);
94
+ jsonRpcSocket.startHeartbeat();
89
95
  return jsonRpcSocket;
90
96
  });
91
97
  }
@@ -95,6 +101,7 @@ export class JsonRpcSocket {
95
101
  close() {
96
102
  this.closedByUser = true;
97
103
  this._isConnected = false;
104
+ this.stopHeartbeat();
98
105
  this.socket.close();
99
106
  }
100
107
  /**
@@ -240,6 +247,7 @@ export class JsonRpcSocket {
240
247
  ws.addEventListener('close', () => {
241
248
  var _a, _b, _c, _d, _e;
242
249
  this._isConnected = false;
250
+ this.stopHeartbeat();
243
251
  if (this.closedByUser) {
244
252
  (_b = (_a = this.options).onclose) === null || _b === void 0 ? void 0 : _b.call(_a);
245
253
  return;
@@ -277,6 +285,84 @@ export class JsonRpcSocket {
277
285
  }
278
286
  }
279
287
  }
288
+ // ---------------------------------------------------------------------------
289
+ // Internal: application-level heartbeat (ping/pong)
290
+ // ---------------------------------------------------------------------------
291
+ /**
292
+ * Starts the heartbeat interval. Sends a JSON-RPC `rpc.ping` every
293
+ * `heartbeatInterval` ms. If no `rpc.pong` response arrives within
294
+ * `heartbeatTimeout` ms, the socket is considered dead and closed
295
+ * (which triggers reconnection via the `close` handler).
296
+ */
297
+ startHeartbeat() {
298
+ var _a, _b;
299
+ this.stopHeartbeat();
300
+ const interval = (_a = this.options.heartbeatInterval) !== null && _a !== void 0 ? _a : DEFAULT_HEARTBEAT_INTERVAL;
301
+ if (interval <= 0) {
302
+ return;
303
+ }
304
+ const timeout = (_b = this.options.heartbeatTimeout) !== null && _b !== void 0 ? _b : DEFAULT_HEARTBEAT_TIMEOUT;
305
+ this._heartbeatInterval = setInterval(() => {
306
+ if (!this._isConnected || this._awaitingPong) {
307
+ return;
308
+ }
309
+ this._awaitingPong = true;
310
+ // Send a lightweight JSON-RPC request as the ping.
311
+ const pingId = `hb-${Date.now()}`;
312
+ const pingRequest = {
313
+ jsonrpc: '2.0',
314
+ id: pingId,
315
+ method: 'rpc.ping',
316
+ };
317
+ // Register a one-shot handler for the pong response.
318
+ this.messageHandlers.set(pingId, () => {
319
+ this._awaitingPong = false;
320
+ this.messageHandlers.delete(pingId);
321
+ if (this._heartbeatTimeout) {
322
+ clearTimeout(this._heartbeatTimeout);
323
+ this._heartbeatTimeout = undefined;
324
+ }
325
+ });
326
+ try {
327
+ this.send(pingRequest);
328
+ }
329
+ catch (_a) {
330
+ // Socket may already be closing — the close handler will deal with it.
331
+ this.messageHandlers.delete(pingId);
332
+ this._awaitingPong = false;
333
+ return;
334
+ }
335
+ // If the pong doesn't arrive in time, force-close and reconnect.
336
+ this._heartbeatTimeout = setTimeout(() => {
337
+ this._heartbeatTimeout = undefined;
338
+ this.messageHandlers.delete(pingId);
339
+ this._awaitingPong = false;
340
+ if (!this.closedByUser && this._isConnected) {
341
+ console.warn('JsonRpcSocket: heartbeat timeout — closing dead connection');
342
+ this._isConnected = false;
343
+ try {
344
+ this.socket.close();
345
+ }
346
+ catch ( /* best effort */_a) { /* best effort */ }
347
+ }
348
+ }, timeout);
349
+ }, interval);
350
+ }
351
+ /** Stops the heartbeat timer and clears any pending timeout. */
352
+ stopHeartbeat() {
353
+ if (this._heartbeatInterval) {
354
+ clearInterval(this._heartbeatInterval);
355
+ this._heartbeatInterval = undefined;
356
+ }
357
+ if (this._heartbeatTimeout) {
358
+ clearTimeout(this._heartbeatTimeout);
359
+ this._heartbeatTimeout = undefined;
360
+ }
361
+ this._awaitingPong = false;
362
+ }
363
+ // ---------------------------------------------------------------------------
364
+ // Internal: reconnection
365
+ // ---------------------------------------------------------------------------
280
366
  /**
281
367
  * Exponential backoff reconnection loop with jitter.
282
368
  */
@@ -314,6 +400,7 @@ export class JsonRpcSocket {
314
400
  this._isConnected = true;
315
401
  this.reconnecting = false;
316
402
  this.wireSocket(newSocket);
403
+ this.startHeartbeat();
317
404
  (_d = (_c = this.options).onreconnected) === null || _d === void 0 ? void 0 : _d.call(_c);
318
405
  }
319
406
  catch (_e) {
@@ -1 +1 @@
1
- {"version":3,"file":"json-rpc-socket.js","sourceRoot":"","sources":["../../src/json-rpc-socket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"json-rpc-socket.js","sourceRoot":"","sources":["../../src/json-rpc-socket.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,16 @@ export interface JsonRpcSocketOptions {
23
23
  onreconnecting?: (attempt: number) => void;
24
24
  /** Called when the socket has successfully reconnected. */
25
25
  onreconnected?: () => void;
26
+ /**
27
+ * Interval in ms between heartbeat pings. Set to `0` to disable.
28
+ * Default 30000 (30s).
29
+ */
30
+ heartbeatInterval?: number;
31
+ /**
32
+ * How long in ms to wait for a pong before considering the connection dead.
33
+ * Default 10000 (10s).
34
+ */
35
+ heartbeatTimeout?: number;
26
36
  }
27
37
  /**
28
38
  * JSON RPC Socket Client for WebSocket request/response and long-running subscriptions.
@@ -56,6 +66,12 @@ export declare class JsonRpcSocket {
56
66
  private reconnecting;
57
67
  /** Whether the socket is currently connected. */
58
68
  private _isConnected;
69
+ /** Heartbeat interval timer. */
70
+ private _heartbeatInterval;
71
+ /** Heartbeat timeout timer — fires when a pong is not received in time. */
72
+ private _heartbeatTimeout;
73
+ /** Whether a heartbeat pong is pending. */
74
+ private _awaitingPong;
59
75
  private constructor();
60
76
  /** Whether the socket is currently connected. */
61
77
  get isConnected(): boolean;
@@ -95,6 +111,15 @@ export declare class JsonRpcSocket {
95
111
  * by synthesizing a transport error event.
96
112
  */
97
113
  private rejectPendingRequests;
114
+ /**
115
+ * Starts the heartbeat interval. Sends a JSON-RPC `rpc.ping` every
116
+ * `heartbeatInterval` ms. If no `rpc.pong` response arrives within
117
+ * `heartbeatTimeout` ms, the socket is considered dead and closed
118
+ * (which triggers reconnection via the `close` handler).
119
+ */
120
+ private startHeartbeat;
121
+ /** Stops the heartbeat timer and clears any pending timeout. */
122
+ private stopHeartbeat;
98
123
  /**
99
124
  * Exponential backoff reconnection loop with jitter.
100
125
  */
@@ -1 +1 @@
1
- {"version":3,"file":"json-rpc-socket.d.ts","sourceRoot":"","sources":["../../src/json-rpc-socket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAiChF,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,oCAAoC;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAEhC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,2EAA2E;IAC3E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,+EAA+E;IAC/E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,mEAAmE;IACnE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,4DAA4D;IAC5D,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAE3C,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,qBAAa,aAAa;IA+BtB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,eAAe;IA/BzB;;;;OAIG;IACH,OAAO,CAAC,eAAe,CAA6D;IAEpF;;;;OAIG;IACH,OAAO,CAAC,sBAAsB,CAA6B;IAE3D,uCAAuC;IACvC,OAAO,CAAC,GAAG,CAAS;IAEpB,uCAAuC;IACvC,OAAO,CAAC,OAAO,CAAuB;IAEtC,8DAA8D;IAC9D,OAAO,CAAC,YAAY,CAAS;IAE7B,+DAA+D;IAC/D,OAAO,CAAC,YAAY,CAAS;IAE7B,iDAAiD;IACjD,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO;IAWP,iDAAiD;IACjD,IAAW,WAAW,IAAI,OAAO,CAEhC;WAEmB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,aAAa,CAAC;IAkBpG;;OAEG;IACI,KAAK,IAAI,IAAI;IAMpB;;OAEG;IACU,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAyBvE;;;OAGG;IACU,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC;QACtG,QAAQ,EAAE,eAAe,CAAC;QAC1B,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;KAC5B,CAAC;IA2DH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACI,IAAI,CAAC,OAAO,EAAE,cAAc,GAAE,IAAI;IAQzC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IA+B9B;;;OAGG;IACH,OAAO,CAAC,UAAU;IAsClB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAe7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAmDzB"}
1
+ {"version":3,"file":"json-rpc-socket.d.ts","sourceRoot":"","sources":["../../src/json-rpc-socket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAqChF,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,oCAAoC;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAEhC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,2EAA2E;IAC3E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,+EAA+E;IAC/E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,mEAAmE;IACnE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,4DAA4D;IAC5D,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAE3C,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAE3B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,qBAAa,aAAa;IAwCtB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,eAAe;IAxCzB;;;;OAIG;IACH,OAAO,CAAC,eAAe,CAA6D;IAEpF;;;;OAIG;IACH,OAAO,CAAC,sBAAsB,CAA6B;IAE3D,uCAAuC;IACvC,OAAO,CAAC,GAAG,CAAS;IAEpB,uCAAuC;IACvC,OAAO,CAAC,OAAO,CAAuB;IAEtC,8DAA8D;IAC9D,OAAO,CAAC,YAAY,CAAS;IAE7B,+DAA+D;IAC/D,OAAO,CAAC,YAAY,CAAS;IAE7B,iDAAiD;IACjD,OAAO,CAAC,YAAY,CAAS;IAE7B,gCAAgC;IAChC,OAAO,CAAC,kBAAkB,CAA6C;IAEvE,2EAA2E;IAC3E,OAAO,CAAC,iBAAiB,CAA4C;IAErE,2CAA2C;IAC3C,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO;IAWP,iDAAiD;IACjD,IAAW,WAAW,IAAI,OAAO,CAEhC;WAEmB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,aAAa,CAAC;IAmBpG;;OAEG;IACI,KAAK,IAAI,IAAI;IAOpB;;OAEG;IACU,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAyBvE;;;OAGG;IACU,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC;QACtG,QAAQ,EAAE,eAAe,CAAC;QAC1B,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;KAC5B,CAAC;IA2DH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACI,IAAI,CAAC,OAAO,EAAE,cAAc,GAAE,IAAI;IAQzC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IA+B9B;;;OAGG;IACH,OAAO,CAAC,UAAU;IAuClB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAmB7B;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAuDtB,gEAAgE;IAChE,OAAO,CAAC,aAAa;IAgBrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAoDzB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enbox/dwn-clients",
3
- "version": "0.2.6",
3
+ "version": "0.3.1",
4
4
  "type": "module",
5
5
  "main": "./dist/esm/index.js",
6
6
  "module": "./dist/esm/index.js",
@@ -48,7 +48,7 @@
48
48
  "dependencies": {
49
49
  "@enbox/common": "0.1.0",
50
50
  "@enbox/crypto": "0.1.0",
51
- "@enbox/dwn-sdk-js": "0.3.2",
51
+ "@enbox/dwn-sdk-js": "0.3.3",
52
52
  "ms": "2.1.3"
53
53
  },
54
54
  "devDependencies": {
@@ -31,6 +31,10 @@ const DEFAULT_BASE_RECONNECT_DELAY = 1_000;
31
31
  const DEFAULT_MAX_RECONNECT_DELAY = 30_000;
32
32
  const DEFAULT_MAX_RECONNECT_ATTEMPTS = Infinity;
33
33
 
34
+ /** Default heartbeat settings. */
35
+ const DEFAULT_HEARTBEAT_INTERVAL = 30_000;
36
+ const DEFAULT_HEARTBEAT_TIMEOUT = 10_000;
37
+
34
38
  export interface JsonRpcSocketOptions {
35
39
  /** socket connection timeout in milliseconds */
36
40
  connectTimeout?: number;
@@ -61,6 +65,18 @@ export interface JsonRpcSocketOptions {
61
65
 
62
66
  /** Called when the socket has successfully reconnected. */
63
67
  onreconnected?: () => void;
68
+
69
+ /**
70
+ * Interval in ms between heartbeat pings. Set to `0` to disable.
71
+ * Default 30000 (30s).
72
+ */
73
+ heartbeatInterval?: number;
74
+
75
+ /**
76
+ * How long in ms to wait for a pong before considering the connection dead.
77
+ * Default 10000 (10s).
78
+ */
79
+ heartbeatTimeout?: number;
64
80
  }
65
81
 
66
82
  /**
@@ -100,6 +116,15 @@ export class JsonRpcSocket {
100
116
  /** Whether the socket is currently connected. */
101
117
  private _isConnected = false;
102
118
 
119
+ /** Heartbeat interval timer. */
120
+ private _heartbeatInterval: ReturnType<typeof setInterval> | undefined;
121
+
122
+ /** Heartbeat timeout timer — fires when a pong is not received in time. */
123
+ private _heartbeatTimeout: ReturnType<typeof setTimeout> | undefined;
124
+
125
+ /** Whether a heartbeat pong is pending. */
126
+ private _awaitingPong = false;
127
+
103
128
  private constructor(
104
129
  private socket: WebSocket,
105
130
  private responseTimeout: number,
@@ -130,6 +155,7 @@ export class JsonRpcSocket {
130
155
 
131
156
  const jsonRpcSocket = new JsonRpcSocket(socket, responseTimeout, url, options);
132
157
  jsonRpcSocket.wireSocket(socket);
158
+ jsonRpcSocket.startHeartbeat();
133
159
 
134
160
  return jsonRpcSocket;
135
161
  }
@@ -140,6 +166,7 @@ export class JsonRpcSocket {
140
166
  public close(): void {
141
167
  this.closedByUser = true;
142
168
  this._isConnected = false;
169
+ this.stopHeartbeat();
143
170
  this.socket.close();
144
171
  }
145
172
 
@@ -306,6 +333,7 @@ export class JsonRpcSocket {
306
333
 
307
334
  ws.addEventListener('close', () => {
308
335
  this._isConnected = false;
336
+ this.stopHeartbeat();
309
337
 
310
338
  if (this.closedByUser) {
311
339
  this.options.onclose?.();
@@ -349,6 +377,88 @@ export class JsonRpcSocket {
349
377
  }
350
378
  }
351
379
 
380
+ // ---------------------------------------------------------------------------
381
+ // Internal: application-level heartbeat (ping/pong)
382
+ // ---------------------------------------------------------------------------
383
+
384
+ /**
385
+ * Starts the heartbeat interval. Sends a JSON-RPC `rpc.ping` every
386
+ * `heartbeatInterval` ms. If no `rpc.pong` response arrives within
387
+ * `heartbeatTimeout` ms, the socket is considered dead and closed
388
+ * (which triggers reconnection via the `close` handler).
389
+ */
390
+ private startHeartbeat(): void {
391
+ this.stopHeartbeat();
392
+
393
+ const interval = this.options.heartbeatInterval ?? DEFAULT_HEARTBEAT_INTERVAL;
394
+ if (interval <= 0) { return; }
395
+
396
+ const timeout = this.options.heartbeatTimeout ?? DEFAULT_HEARTBEAT_TIMEOUT;
397
+
398
+ this._heartbeatInterval = setInterval(() => {
399
+ if (!this._isConnected || this._awaitingPong) { return; }
400
+
401
+ this._awaitingPong = true;
402
+
403
+ // Send a lightweight JSON-RPC request as the ping.
404
+ const pingId = `hb-${Date.now()}`;
405
+ const pingRequest: JsonRpcRequest = {
406
+ jsonrpc : '2.0',
407
+ id : pingId,
408
+ method : 'rpc.ping',
409
+ };
410
+
411
+ // Register a one-shot handler for the pong response.
412
+ this.messageHandlers.set(pingId, () => {
413
+ this._awaitingPong = false;
414
+ this.messageHandlers.delete(pingId);
415
+ if (this._heartbeatTimeout) {
416
+ clearTimeout(this._heartbeatTimeout);
417
+ this._heartbeatTimeout = undefined;
418
+ }
419
+ });
420
+
421
+ try {
422
+ this.send(pingRequest);
423
+ } catch {
424
+ // Socket may already be closing — the close handler will deal with it.
425
+ this.messageHandlers.delete(pingId);
426
+ this._awaitingPong = false;
427
+ return;
428
+ }
429
+
430
+ // If the pong doesn't arrive in time, force-close and reconnect.
431
+ this._heartbeatTimeout = setTimeout(() => {
432
+ this._heartbeatTimeout = undefined;
433
+ this.messageHandlers.delete(pingId);
434
+ this._awaitingPong = false;
435
+
436
+ if (!this.closedByUser && this._isConnected) {
437
+ console.warn('JsonRpcSocket: heartbeat timeout — closing dead connection');
438
+ this._isConnected = false;
439
+ try { this.socket.close(); } catch { /* best effort */ }
440
+ }
441
+ }, timeout);
442
+ }, interval);
443
+ }
444
+
445
+ /** Stops the heartbeat timer and clears any pending timeout. */
446
+ private stopHeartbeat(): void {
447
+ if (this._heartbeatInterval) {
448
+ clearInterval(this._heartbeatInterval);
449
+ this._heartbeatInterval = undefined;
450
+ }
451
+ if (this._heartbeatTimeout) {
452
+ clearTimeout(this._heartbeatTimeout);
453
+ this._heartbeatTimeout = undefined;
454
+ }
455
+ this._awaitingPong = false;
456
+ }
457
+
458
+ // ---------------------------------------------------------------------------
459
+ // Internal: reconnection
460
+ // ---------------------------------------------------------------------------
461
+
352
462
  /**
353
463
  * Exponential backoff reconnection loop with jitter.
354
464
  */
@@ -394,6 +504,7 @@ export class JsonRpcSocket {
394
504
  this._isConnected = true;
395
505
  this.reconnecting = false;
396
506
  this.wireSocket(newSocket);
507
+ this.startHeartbeat();
397
508
  this.options.onreconnected?.();
398
509
  } catch {
399
510
  // Connection failed — retry.