@hcu-lab.me/mcp-device 1.0.8 → 1.0.9

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.
@@ -58,6 +58,7 @@ export declare class GatewayDeviceChannel {
58
58
  private sendUpdateStatusFlushed;
59
59
  reportUpdateFailure(requestId: string, targetVersion: string, code: string, message: string): Promise<void>;
60
60
  private handleUpdateRequest;
61
+ private dispatchToolCall;
61
62
  private handleToolCall;
62
63
  private scheduleReconnect;
63
64
  private startHeartbeat;
@@ -282,7 +282,7 @@ export class GatewayDeviceChannel {
282
282
  throw new Error('Gateway tool_call arrived before authentication');
283
283
  if (String(message.connection_epoch) !== String(this.connectionEpoch))
284
284
  throw new Error('Gateway tool_call connection_epoch mismatch');
285
- await this.handleToolCall(message);
285
+ this.dispatchToolCall(message);
286
286
  }
287
287
  async logoutAccount(timeoutMs = 5000) {
288
288
  if (!this.socket || this.socket.readyState !== WebSocket.OPEN || this.connectionEpoch === undefined || !this.authenticatedDeviceId) {
@@ -395,30 +395,45 @@ export class GatewayDeviceChannel {
395
395
  this.updateInFlight = undefined;
396
396
  }
397
397
  }
398
+ dispatchToolCall(message) {
399
+ void this.handleToolCall(message).catch(error => {
400
+ if (!this.shuttingDown)
401
+ this.fail(error instanceof Error ? error : new Error(String(error)));
402
+ });
403
+ }
398
404
  async handleToolCall(message) {
399
405
  if (this.connectionEpoch === undefined || !this.authenticatedDeviceId)
400
406
  throw new Error('Gateway tool_call arrived before authentication');
401
407
  const requestId = String(message.request_id || '');
402
408
  const tool = String(message.payload?.tool || '');
409
+ const deviceId = this.authenticatedDeviceId;
410
+ const connectionEpoch = this.connectionEpoch;
411
+ const socket = this.socket;
412
+ const connectionIsCurrent = () => Boolean(socket && socket.readyState === WebSocket.OPEN && this.socket === socket &&
413
+ this.authenticatedDeviceId === deviceId && String(this.connectionEpoch) === String(connectionEpoch));
403
414
  try {
404
415
  const result = await this.options.adapter.call(tool, message.payload?.arguments || {});
416
+ if (!connectionIsCurrent())
417
+ return;
405
418
  this.send({
406
419
  protocol_version: this.protocolVersion,
407
420
  type: 'tool_result',
408
421
  request_id: requestId,
409
- device_id: this.authenticatedDeviceId,
410
- connection_epoch: this.connectionEpoch,
422
+ device_id: deviceId,
423
+ connection_epoch: connectionEpoch,
411
424
  timestamp: Date.now(),
412
425
  payload: result
413
426
  });
414
427
  }
415
428
  catch (error) {
429
+ if (!connectionIsCurrent())
430
+ return;
416
431
  this.send({
417
432
  protocol_version: this.protocolVersion,
418
433
  type: 'tool_error',
419
434
  request_id: requestId,
420
- device_id: this.authenticatedDeviceId,
421
- connection_epoch: this.connectionEpoch,
435
+ device_id: deviceId,
436
+ connection_epoch: connectionEpoch,
422
437
  timestamp: Date.now(),
423
438
  payload: {
424
439
  message: String(error?.message || error),
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const VERSION = "1.0.8";
1
+ export declare const VERSION = "1.0.9";
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- export const VERSION = '1.0.8';
1
+ export const VERSION = '1.0.9';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hcu-lab.me/mcp-device",
3
- "version": "1.0.8",
3
+ "version": "1.0.9",
4
4
  "description": "MCP Device runtime.",
5
5
  "license": "MIT",
6
6
  "author": "Hirohimeow",