easyeda-mcp-pro 0.4.0 → 0.5.2
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.
- package/README.md +68 -24
- package/dist/bom-quality/adapter.d.ts +90 -0
- package/dist/bom-quality/adapter.js +295 -0
- package/dist/bom-quality/adapter.js.map +1 -0
- package/dist/bom-quality/index.d.ts +10 -0
- package/dist/bom-quality/index.js +9 -0
- package/dist/bom-quality/index.js.map +1 -0
- package/dist/bom-quality/quality.d.ts +28 -0
- package/dist/bom-quality/quality.js +179 -0
- package/dist/bom-quality/quality.js.map +1 -0
- package/dist/bom-quality/types.d.ts +94 -0
- package/dist/bom-quality/types.js +12 -0
- package/dist/bom-quality/types.js.map +1 -0
- package/dist/bridge/manager.d.ts +41 -0
- package/dist/bridge/manager.js +333 -51
- package/dist/bridge/manager.js.map +1 -1
- package/dist/bridge/protocol.d.ts +47 -1
- package/dist/bridge/protocol.js +42 -1
- package/dist/bridge/protocol.js.map +1 -1
- package/dist/bridge/types.d.ts +6 -0
- package/dist/bridge/types.js +6 -0
- package/dist/bridge/types.js.map +1 -1
- package/dist/catalog/errors.d.ts +49 -0
- package/dist/catalog/errors.js +60 -0
- package/dist/catalog/errors.js.map +1 -0
- package/dist/catalog/index.d.ts +15 -0
- package/dist/catalog/index.js +17 -0
- package/dist/catalog/index.js.map +1 -0
- package/dist/catalog/schema.d.ts +268 -0
- package/dist/catalog/schema.js +245 -0
- package/dist/catalog/schema.js.map +1 -0
- package/dist/catalog/starter.d.ts +159 -0
- package/dist/catalog/starter.js +579 -0
- package/dist/catalog/starter.js.map +1 -0
- package/dist/catalog/validation.d.ts +48 -0
- package/dist/catalog/validation.js +263 -0
- package/dist/catalog/validation.js.map +1 -0
- package/dist/circuit/circuit-ir.d.ts +460 -0
- package/dist/circuit/circuit-ir.js +292 -0
- package/dist/circuit/circuit-ir.js.map +1 -0
- package/dist/circuit/compiler.d.ts +55 -0
- package/dist/circuit/compiler.js +197 -0
- package/dist/circuit/compiler.js.map +1 -0
- package/dist/circuit/design-intent.d.ts +94 -0
- package/dist/circuit/design-intent.js +118 -0
- package/dist/circuit/design-intent.js.map +1 -0
- package/dist/circuit/errors.d.ts +50 -0
- package/dist/circuit/errors.js +61 -0
- package/dist/circuit/errors.js.map +1 -0
- package/dist/circuit/index.d.ts +17 -0
- package/dist/circuit/index.js +18 -0
- package/dist/circuit/index.js.map +1 -0
- package/dist/circuit/types.d.ts +186 -0
- package/dist/circuit/types.js +123 -0
- package/dist/circuit/types.js.map +1 -0
- package/dist/cli/auto-setup.d.ts +1 -8
- package/dist/cli/auto-setup.js +10 -178
- package/dist/cli/auto-setup.js.map +1 -1
- package/dist/cli/client-definitions.d.ts +34 -0
- package/dist/cli/client-definitions.js +194 -0
- package/dist/cli/client-definitions.js.map +1 -0
- package/dist/cli/local-setup.js +2 -2
- package/dist/cli/local-setup.js.map +1 -1
- package/dist/config/env.d.ts +6 -1
- package/dist/config/env.js +93 -5
- package/dist/config/env.js.map +1 -1
- package/dist/config/version.d.ts +1 -1
- package/dist/config/version.js +1 -1
- package/dist/export-manifest/errors.d.ts +55 -0
- package/dist/export-manifest/errors.js +69 -0
- package/dist/export-manifest/errors.js.map +1 -0
- package/dist/export-manifest/index.d.ts +10 -0
- package/dist/export-manifest/index.js +9 -0
- package/dist/export-manifest/index.js.map +1 -0
- package/dist/export-manifest/types.d.ts +170 -0
- package/dist/export-manifest/types.js +36 -0
- package/dist/export-manifest/types.js.map +1 -0
- package/dist/export-manifest/validation.d.ts +39 -0
- package/dist/export-manifest/validation.js +298 -0
- package/dist/export-manifest/validation.js.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/net-validation/errors.d.ts +89 -0
- package/dist/net-validation/errors.js +69 -0
- package/dist/net-validation/errors.js.map +1 -0
- package/dist/net-validation/fixtures.d.ts +38 -0
- package/dist/net-validation/fixtures.js +215 -0
- package/dist/net-validation/fixtures.js.map +1 -0
- package/dist/net-validation/index.d.ts +10 -0
- package/dist/net-validation/index.js +9 -0
- package/dist/net-validation/index.js.map +1 -0
- package/dist/net-validation/schema.d.ts +118 -0
- package/dist/net-validation/schema.js +140 -0
- package/dist/net-validation/schema.js.map +1 -0
- package/dist/net-validation/validation.d.ts +45 -0
- package/dist/net-validation/validation.js +369 -0
- package/dist/net-validation/validation.js.map +1 -0
- package/dist/pcb-constraints/errors.d.ts +39 -0
- package/dist/pcb-constraints/errors.js +133 -0
- package/dist/pcb-constraints/errors.js.map +1 -0
- package/dist/pcb-constraints/index.d.ts +9 -0
- package/dist/pcb-constraints/index.js +9 -0
- package/dist/pcb-constraints/index.js.map +1 -0
- package/dist/pcb-constraints/types.d.ts +102 -0
- package/dist/pcb-constraints/types.js +7 -0
- package/dist/pcb-constraints/types.js.map +1 -0
- package/dist/pcb-constraints/validation.d.ts +70 -0
- package/dist/pcb-constraints/validation.js +309 -0
- package/dist/pcb-constraints/validation.js.map +1 -0
- package/dist/server/factory.js +2 -0
- package/dist/server/factory.js.map +1 -1
- package/dist/server/transports/http.d.ts +20 -1
- package/dist/server/transports/http.js +156 -34
- package/dist/server/transports/http.js.map +1 -1
- package/dist/storage/database.d.ts +25 -0
- package/dist/storage/database.js +126 -51
- package/dist/storage/database.js.map +1 -1
- package/dist/tools/{L0_diagnostics.d.ts → L0_diagnostics_api.d.ts} +2 -2
- package/dist/tools/L0_diagnostics_api.js +152 -0
- package/dist/tools/L0_diagnostics_api.js.map +1 -0
- package/dist/tools/L0_diagnostics_core.d.ts +6 -0
- package/dist/tools/{L0_diagnostics.js → L0_diagnostics_core.js} +50 -124
- package/dist/tools/L0_diagnostics_core.js.map +1 -0
- package/dist/tools/L1_board.js +20 -4
- package/dist/tools/L1_board.js.map +1 -1
- package/dist/tools/{L1_bom.d.ts → L1_bom_core.d.ts} +2 -2
- package/dist/tools/{L1_bom.js → L1_bom_core.js} +21 -101
- package/dist/tools/L1_bom_core.js.map +1 -0
- package/dist/tools/{L1_schematic.d.ts → L1_bom_sourcing.d.ts} +2 -2
- package/dist/tools/L1_bom_sourcing.js +265 -0
- package/dist/tools/L1_bom_sourcing.js.map +1 -0
- package/dist/tools/L1_drc_erc.js +15 -3
- package/dist/tools/L1_drc_erc.js.map +1 -1
- package/dist/tools/L1_export.js +20 -4
- package/dist/tools/L1_export.js.map +1 -1
- package/dist/tools/L1_pcb_constraints.d.ts +6 -0
- package/dist/tools/L1_pcb_constraints.js +234 -0
- package/dist/tools/L1_pcb_constraints.js.map +1 -0
- package/dist/tools/L1_pcb_write.js +26 -12
- package/dist/tools/L1_pcb_write.js.map +1 -1
- package/dist/tools/L1_schematic_read.d.ts +6 -0
- package/dist/tools/{L1_schematic.js → L1_schematic_read.js} +125 -194
- package/dist/tools/L1_schematic_read.js.map +1 -0
- package/dist/tools/L1_schematic_write.d.ts +6 -0
- package/dist/tools/L1_schematic_write.js +516 -0
- package/dist/tools/L1_schematic_write.js.map +1 -0
- package/dist/tools/register.js +15 -7
- package/dist/tools/register.js.map +1 -1
- package/dist/tools/registry.d.ts +41 -7
- package/dist/tools/registry.js +95 -25
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/types.d.ts +16 -0
- package/dist/utils/logger.d.ts +1 -1
- package/dist/utils/logger.js +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/vendors/base-http-client.d.ts +48 -0
- package/dist/vendors/base-http-client.js +75 -0
- package/dist/vendors/base-http-client.js.map +1 -0
- package/dist/vendors/digikey/client.js +10 -19
- package/dist/vendors/digikey/client.js.map +1 -1
- package/dist/vendors/jlcpcb/client.js +41 -70
- package/dist/vendors/jlcpcb/client.js.map +1 -1
- package/dist/vendors/lcsc/client.js +5 -18
- package/dist/vendors/lcsc/client.js.map +1 -1
- package/dist/vendors/mouser/client.js +4 -12
- package/dist/vendors/mouser/client.js.map +1 -1
- package/easyeda-bridge-extension.eext +0 -0
- package/package.json +11 -10
- package/dist/tools/L0_diagnostics.js.map +0 -1
- package/dist/tools/L1_bom.js.map +0 -1
- package/dist/tools/L1_schematic.js.map +0 -1
package/dist/bridge/manager.js
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
import { EventEmitter } from 'node:events';
|
|
2
|
-
import
|
|
2
|
+
import crypto from 'node:crypto';
|
|
3
|
+
import { WebSocketServer, WebSocket } from 'ws';
|
|
3
4
|
import { getLogger } from '../utils/logger.js';
|
|
4
|
-
import { BridgeHandshakeSchema } from './protocol.js';
|
|
5
|
+
import { BridgeHandshakeSchema, BridgePairingResponseSchema, BridgeRequestSchema, SUPPORTED_PROTOCOL_VERSIONS, } from './protocol.js';
|
|
5
6
|
import { EasyedaApiMethodSchema } from './types.js';
|
|
6
7
|
import { SERVER_VERSION } from '../config/version.js';
|
|
8
|
+
const PAIRING_TIMEOUT_MS = 10_000;
|
|
9
|
+
const STALE_SWEEP_MS = 30_000;
|
|
10
|
+
const RECONNECT_BASE_MS = 1_000;
|
|
11
|
+
const RECONNECT_MAX_DELAY_MS = 30_000;
|
|
12
|
+
// Zombie detection: if no heartbeat received within 3× the heartbeat interval, close the socket.
|
|
13
|
+
const HEARTBEAT_LIVENESS_MULTIPLIER = 3;
|
|
7
14
|
export class BridgeManager extends EventEmitter {
|
|
8
15
|
state = 'disconnected';
|
|
9
16
|
hello = null;
|
|
@@ -11,15 +18,21 @@ export class BridgeManager extends EventEmitter {
|
|
|
11
18
|
ws = null;
|
|
12
19
|
heartbeatTimer = null;
|
|
13
20
|
reconnectTimer = null;
|
|
21
|
+
staleSweepTimer = null;
|
|
14
22
|
_activePort = 0;
|
|
15
23
|
_connectedAtMs = 0;
|
|
16
24
|
requestMap = new Map();
|
|
17
25
|
requestIdCounter = 0;
|
|
18
26
|
config;
|
|
19
27
|
_lastHeartbeatMs = 0;
|
|
28
|
+
reconnectAttempts = 0;
|
|
29
|
+
reconnectStartMs = 0;
|
|
30
|
+
pairingChallenges = new Map();
|
|
31
|
+
_methodRegistryHash;
|
|
20
32
|
constructor(config) {
|
|
21
33
|
super();
|
|
22
34
|
this.config = config;
|
|
35
|
+
this._methodRegistryHash = this.computeMethodRegistryHash();
|
|
23
36
|
}
|
|
24
37
|
get lastHeartbeatMs() {
|
|
25
38
|
return this._lastHeartbeatMs;
|
|
@@ -35,6 +48,35 @@ export class BridgeManager extends EventEmitter {
|
|
|
35
48
|
get connected() {
|
|
36
49
|
return this.state === 'connected';
|
|
37
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Wait until the bridge is in the 'connected' state.
|
|
53
|
+
* Resolves immediately if already connected. Rejects after timeoutMs.
|
|
54
|
+
*/
|
|
55
|
+
waitForConnection(timeoutMs) {
|
|
56
|
+
if (this.state === 'connected')
|
|
57
|
+
return Promise.resolve();
|
|
58
|
+
return new Promise((resolve, reject) => {
|
|
59
|
+
const timer = setTimeout(() => {
|
|
60
|
+
this.off('connected', onConnected);
|
|
61
|
+
reject(new Error('Bridge not connected'));
|
|
62
|
+
}, timeoutMs);
|
|
63
|
+
const onConnected = () => {
|
|
64
|
+
clearTimeout(timer);
|
|
65
|
+
resolve();
|
|
66
|
+
};
|
|
67
|
+
this.once('connected', onConnected);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
get methodRegistryHash() {
|
|
71
|
+
return this._methodRegistryHash;
|
|
72
|
+
}
|
|
73
|
+
isLoopbackHost(host) {
|
|
74
|
+
return host === '127.0.0.1' || host === 'localhost' || host === '::1';
|
|
75
|
+
}
|
|
76
|
+
computeMethodRegistryHash() {
|
|
77
|
+
const sorted = [...EasyedaApiMethodSchema.options].sort();
|
|
78
|
+
return crypto.createHash('sha256').update(sorted.join(',')).digest('hex').slice(0, 16);
|
|
79
|
+
}
|
|
38
80
|
async connect() {
|
|
39
81
|
if (this.state === 'connected' || this.state === 'connecting')
|
|
40
82
|
return;
|
|
@@ -86,56 +128,74 @@ export class BridgeManager extends EventEmitter {
|
|
|
86
128
|
}
|
|
87
129
|
handleConnection(ws) {
|
|
88
130
|
const logger = getLogger();
|
|
89
|
-
|
|
131
|
+
const isLoopback = this.isLoopbackHost(this.config.BRIDGE_HOST);
|
|
132
|
+
const needsPairing = !isLoopback && !!this.config.BRIDGE_TOKEN;
|
|
133
|
+
let paired = !needsPairing;
|
|
134
|
+
let pairingChallengeId = null;
|
|
135
|
+
logger.info({ needsPairing, isLoopback }, 'new bridge client connection');
|
|
136
|
+
// Issue pairing challenge for non-loopback connections with a token configured
|
|
137
|
+
if (needsPairing) {
|
|
138
|
+
const challenge = crypto.randomUUID();
|
|
139
|
+
pairingChallengeId = challenge;
|
|
140
|
+
const timer = setTimeout(() => {
|
|
141
|
+
if (this.pairingChallenges.has(challenge)) {
|
|
142
|
+
this.pairingChallenges.delete(challenge);
|
|
143
|
+
if (ws.readyState === WebSocket.OPEN) {
|
|
144
|
+
ws.close(4001, 'pairing_timeout');
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}, PAIRING_TIMEOUT_MS);
|
|
148
|
+
this.pairingChallenges.set(challenge, { challenge, timer });
|
|
149
|
+
ws.send(JSON.stringify({ type: 'pairing_challenge', challenge }));
|
|
150
|
+
logger.info('sent pairing challenge to new client');
|
|
151
|
+
}
|
|
90
152
|
ws.on('message', (raw) => {
|
|
91
153
|
try {
|
|
154
|
+
// 0. Payload size enforcement (before parsing)
|
|
155
|
+
const rawSize = Array.isArray(raw)
|
|
156
|
+
? raw.reduce((sum, chunk) => sum + chunk.byteLength, 0)
|
|
157
|
+
: raw.byteLength;
|
|
158
|
+
if (rawSize > this.config.BRIDGE_MAX_PAYLOAD_SIZE) {
|
|
159
|
+
logger.warn({ size: rawSize }, 'payload exceeds maximum size');
|
|
160
|
+
ws.close(4009, 'payload_too_large');
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
92
163
|
const data = JSON.parse(raw.toString());
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
logger.warn('bridge handshake rejected: invalid session token');
|
|
102
|
-
ws.close(4001, 'Invalid session token');
|
|
164
|
+
// 1. Handle pairing response (if challenge was issued)
|
|
165
|
+
if (!paired && pairingChallengeId && data.type === 'pairing_response') {
|
|
166
|
+
const parsed = BridgePairingResponseSchema.safeParse(data);
|
|
167
|
+
if (!parsed.success ||
|
|
168
|
+
parsed.data.challenge !== pairingChallengeId ||
|
|
169
|
+
parsed.data.sessionToken !== this.config.BRIDGE_TOKEN) {
|
|
170
|
+
logger.warn('pairing response validation failed');
|
|
171
|
+
ws.close(4001, 'invalid_pairing');
|
|
103
172
|
return;
|
|
104
173
|
}
|
|
105
|
-
|
|
106
|
-
const
|
|
107
|
-
if (
|
|
108
|
-
|
|
109
|
-
this.
|
|
110
|
-
previousWs.close(4000, 'Replaced by new bridge client');
|
|
111
|
-
this.stopHeartbeat();
|
|
112
|
-
}
|
|
113
|
-
this.ws = ws;
|
|
114
|
-
this.state = 'connected';
|
|
115
|
-
this._connectedAtMs = Date.now();
|
|
116
|
-
const extVer = parsed.data.extensionVersion;
|
|
117
|
-
if (extVer && extVer !== SERVER_VERSION) {
|
|
118
|
-
logger.warn(`⚠️ EasyEDA Pro bridge extension version mismatch: extension is v${extVer}, but MCP server is v${SERVER_VERSION}. Please update the extension in EasyEDA Pro.`);
|
|
174
|
+
// Pairing successful — clean up challenge and allow handshake
|
|
175
|
+
const entry = this.pairingChallenges.get(pairingChallengeId);
|
|
176
|
+
if (entry) {
|
|
177
|
+
clearTimeout(entry.timer);
|
|
178
|
+
this.pairingChallenges.delete(pairingChallengeId);
|
|
119
179
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
}
|
|
133
|
-
this.emit('connected', this.hello);
|
|
134
|
-
this.startHeartbeat();
|
|
180
|
+
paired = true;
|
|
181
|
+
logger.info('client pairing successful');
|
|
182
|
+
return; // Wait for the next message (handshake)
|
|
183
|
+
}
|
|
184
|
+
// 2. Reject if pairing is required but not yet completed
|
|
185
|
+
if (needsPairing && !paired) {
|
|
186
|
+
ws.close(4001, 'pairing_required');
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
// 3. Normal message routing
|
|
190
|
+
if (data.type === 'handshake') {
|
|
191
|
+
this.handleHandshake(ws, data);
|
|
135
192
|
}
|
|
136
193
|
else if (data.type === 'response') {
|
|
137
194
|
this.handleResponse(data);
|
|
138
195
|
}
|
|
196
|
+
else if (data.type === 'request') {
|
|
197
|
+
this.handleIncomingRequest(ws, data);
|
|
198
|
+
}
|
|
139
199
|
else if (data.type === 'heartbeat') {
|
|
140
200
|
this._lastHeartbeatMs = Date.now();
|
|
141
201
|
this.emit('heartbeat', data.timestamp);
|
|
@@ -156,16 +216,154 @@ export class BridgeManager extends EventEmitter {
|
|
|
156
216
|
this.state = 'connecting';
|
|
157
217
|
this._connectedAtMs = 0;
|
|
158
218
|
this.hello = null;
|
|
219
|
+
this.stopStaleSweep();
|
|
220
|
+
this.stopHeartbeat();
|
|
221
|
+
// Clean up any pending pairing challenges
|
|
222
|
+
for (const [, entry] of this.pairingChallenges) {
|
|
223
|
+
clearTimeout(entry.timer);
|
|
224
|
+
}
|
|
225
|
+
this.pairingChallenges.clear();
|
|
159
226
|
this.rejectPending(new Error(`Bridge disconnected: ${reason.toString() || 'connection closed'}`));
|
|
160
227
|
this.emit('stateChanged', this.state, prevState);
|
|
161
228
|
this.emit('disconnected', reason.toString() || 'connection closed');
|
|
162
|
-
this.
|
|
229
|
+
this.scheduleReconnect();
|
|
230
|
+
// The WSS is still listening; no reconnect needed — wait for the next client.
|
|
163
231
|
});
|
|
164
232
|
ws.on('error', (err) => {
|
|
165
233
|
logger.error({ err }, 'bridge client socket error');
|
|
166
234
|
});
|
|
167
235
|
}
|
|
236
|
+
/**
|
|
237
|
+
* Validate and accept a handshake message. Sets up the bridge session
|
|
238
|
+
* and replies with a hello containing the server's capabilities.
|
|
239
|
+
*/
|
|
240
|
+
handleHandshake(ws, data) {
|
|
241
|
+
const logger = getLogger();
|
|
242
|
+
const parsed = BridgeHandshakeSchema.safeParse(data);
|
|
243
|
+
if (!parsed.success) {
|
|
244
|
+
logger.warn({ errors: parsed.error.issues }, 'bridge handshake validation failed');
|
|
245
|
+
ws.close(4001, 'Invalid handshake');
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
// Protocol version validation
|
|
249
|
+
if (!SUPPORTED_PROTOCOL_VERSIONS.includes(parsed.data.protocolVersion)) {
|
|
250
|
+
logger.warn({ version: parsed.data.protocolVersion }, 'unsupported protocol version');
|
|
251
|
+
ws.close(4001, 'unsupported_protocol_version');
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
// Session token enforcement
|
|
255
|
+
if (this.config.BRIDGE_TOKEN) {
|
|
256
|
+
if (!parsed.data.sessionToken) {
|
|
257
|
+
logger.warn('bridge handshake rejected: session token required');
|
|
258
|
+
ws.close(4001, 'session_token_required');
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
if (parsed.data.sessionToken !== this.config.BRIDGE_TOKEN) {
|
|
262
|
+
logger.warn('bridge handshake rejected: invalid session token');
|
|
263
|
+
ws.close(4001, 'invalid_session_token');
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
// Replace existing connection if any
|
|
268
|
+
const previousWs = this.ws;
|
|
269
|
+
const prevState = this.state;
|
|
270
|
+
if (previousWs && previousWs !== ws) {
|
|
271
|
+
logger.info('replacing existing bridge client connection');
|
|
272
|
+
this.rejectPending(new Error('Bridge connection replaced by a new client.'));
|
|
273
|
+
previousWs.close(4000, 'Replaced by new bridge client');
|
|
274
|
+
this.stopHeartbeat();
|
|
275
|
+
this.stopStaleSweep();
|
|
276
|
+
}
|
|
277
|
+
this.ws = ws;
|
|
278
|
+
this.state = 'connected';
|
|
279
|
+
this._connectedAtMs = Date.now();
|
|
280
|
+
this._lastHeartbeatMs = Date.now(); // seed so first liveness check doesn't fire immediately
|
|
281
|
+
this.reconnectAttempts = 0;
|
|
282
|
+
this.reconnectStartMs = 0;
|
|
283
|
+
// Extension version mismatch warning
|
|
284
|
+
const extVer = parsed.data.extensionVersion;
|
|
285
|
+
if (extVer && extVer !== SERVER_VERSION) {
|
|
286
|
+
logger.warn(`⚠️ EasyEDA Pro bridge extension version mismatch: extension is v${extVer}, but MCP server is v${SERVER_VERSION}. Please update the extension in EasyEDA Pro.`);
|
|
287
|
+
}
|
|
288
|
+
this.hello = {
|
|
289
|
+
type: 'hello',
|
|
290
|
+
bridgeVersion: SERVER_VERSION,
|
|
291
|
+
easyedaVersion: parsed.data.easyedaVersion,
|
|
292
|
+
capabilities: EasyedaApiMethodSchema.options,
|
|
293
|
+
methodRegistryHash: this._methodRegistryHash,
|
|
294
|
+
devMode: parsed.data.devMode ?? false,
|
|
295
|
+
};
|
|
296
|
+
// Reply with hello
|
|
297
|
+
ws.send(JSON.stringify(this.hello));
|
|
298
|
+
if (prevState !== 'connected') {
|
|
299
|
+
this.emit('stateChanged', 'connected', prevState);
|
|
300
|
+
}
|
|
301
|
+
this.emit('connected', this.hello);
|
|
302
|
+
this.startHeartbeat();
|
|
303
|
+
this.startStaleSweep();
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Validate and handle an incoming request from the extension.
|
|
307
|
+
* The server does not currently accept arbitrary extension requests,
|
|
308
|
+
* so unknown methods are rejected with a structured error response.
|
|
309
|
+
*/
|
|
310
|
+
handleIncomingRequest(ws, data) {
|
|
311
|
+
const logger = getLogger();
|
|
312
|
+
const parsed = BridgeRequestSchema.safeParse(data);
|
|
313
|
+
if (!parsed.success) {
|
|
314
|
+
const fallbackId = data?.id ?? 'unknown';
|
|
315
|
+
logger.warn({ id: fallbackId }, 'incoming request validation failed');
|
|
316
|
+
ws.send(JSON.stringify({
|
|
317
|
+
id: String(fallbackId),
|
|
318
|
+
type: 'response',
|
|
319
|
+
ok: false,
|
|
320
|
+
error: {
|
|
321
|
+
code: 'INVALID_PARAMS',
|
|
322
|
+
message: 'Invalid request schema',
|
|
323
|
+
suggestion: 'Check the request format and required fields.',
|
|
324
|
+
},
|
|
325
|
+
durationMs: 0,
|
|
326
|
+
}));
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
// Reject unknown methods
|
|
330
|
+
if (!EasyedaApiMethodSchema.options.includes(parsed.data.method)) {
|
|
331
|
+
logger.warn({ method: parsed.data.method }, 'unknown bridge method requested');
|
|
332
|
+
ws.send(JSON.stringify({
|
|
333
|
+
id: parsed.data.id,
|
|
334
|
+
type: 'response',
|
|
335
|
+
ok: false,
|
|
336
|
+
error: {
|
|
337
|
+
code: 'METHOD_NOT_FOUND',
|
|
338
|
+
message: `Unknown bridge method: "${parsed.data.method}"`,
|
|
339
|
+
suggestion: `Use one of the supported methods: ${EasyedaApiMethodSchema.options.slice(0, 5).join(', ')}…`,
|
|
340
|
+
},
|
|
341
|
+
durationMs: 0,
|
|
342
|
+
}));
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
// Known method, but the server does not handle incoming extension requests directly.
|
|
346
|
+
// This path is reserved for future use (e.g., event notifications from the extension).
|
|
347
|
+
logger.warn({ method: parsed.data.method }, 'incoming request not supported');
|
|
348
|
+
ws.send(JSON.stringify({
|
|
349
|
+
id: parsed.data.id,
|
|
350
|
+
type: 'response',
|
|
351
|
+
ok: false,
|
|
352
|
+
error: {
|
|
353
|
+
code: 'BRIDGE_NOT_READY',
|
|
354
|
+
message: 'Incoming extension requests are not supported yet.',
|
|
355
|
+
suggestion: 'Use the MCP tool API to invoke this method.',
|
|
356
|
+
},
|
|
357
|
+
durationMs: 0,
|
|
358
|
+
}));
|
|
359
|
+
}
|
|
168
360
|
async call(method, params, opts) {
|
|
361
|
+
if (this.state !== 'connected') {
|
|
362
|
+
const waitMs = this.config.BRIDGE_WAIT_FOR_EDA_MS;
|
|
363
|
+
if (waitMs > 0) {
|
|
364
|
+
await this.waitForConnection(waitMs);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
169
367
|
const ws = this.ws;
|
|
170
368
|
if (this.state !== 'connected' || !ws) {
|
|
171
369
|
throw new Error(`Bridge not connected. Cannot call method "${method}".`);
|
|
@@ -182,6 +380,7 @@ export class BridgeManager extends EventEmitter {
|
|
|
182
380
|
reject,
|
|
183
381
|
timer,
|
|
184
382
|
method,
|
|
383
|
+
startedAt: Date.now(),
|
|
185
384
|
});
|
|
186
385
|
const message = JSON.stringify({
|
|
187
386
|
id,
|
|
@@ -198,6 +397,13 @@ export class BridgeManager extends EventEmitter {
|
|
|
198
397
|
const prev = this.state;
|
|
199
398
|
this.state = 'disconnected';
|
|
200
399
|
this.stopHeartbeat();
|
|
400
|
+
this.stopStaleSweep();
|
|
401
|
+
this.clearReconnectTimer();
|
|
402
|
+
// Clean up pending pairing challenges
|
|
403
|
+
for (const [, entry] of this.pairingChallenges) {
|
|
404
|
+
clearTimeout(entry.timer);
|
|
405
|
+
}
|
|
406
|
+
this.pairingChallenges.clear();
|
|
201
407
|
this.rejectPending(new Error(`Bridge disconnected: ${reason ?? 'unknown'}`));
|
|
202
408
|
if (this.ws) {
|
|
203
409
|
this.ws.close();
|
|
@@ -208,6 +414,7 @@ export class BridgeManager extends EventEmitter {
|
|
|
208
414
|
this.wss = null;
|
|
209
415
|
}
|
|
210
416
|
this.hello = null;
|
|
417
|
+
this.reconnectAttempts = 0;
|
|
211
418
|
this.emit('stateChanged', this.state, prev);
|
|
212
419
|
this.emit('disconnected', reason ?? 'unknown');
|
|
213
420
|
}
|
|
@@ -238,14 +445,22 @@ export class BridgeManager extends EventEmitter {
|
|
|
238
445
|
if (this.heartbeatTimer)
|
|
239
446
|
clearInterval(this.heartbeatTimer);
|
|
240
447
|
this.heartbeatTimer = setInterval(() => {
|
|
241
|
-
if (this.ws
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
448
|
+
if (!this.ws || this.state !== 'connected')
|
|
449
|
+
return;
|
|
450
|
+
// Zombie detection: close if no heartbeat received within 3x the interval.
|
|
451
|
+
const silenceMs = Date.now() - this._lastHeartbeatMs;
|
|
452
|
+
const timeoutMs = this.config.BRIDGE_HEARTBEAT_MS * HEARTBEAT_LIVENESS_MULTIPLIER;
|
|
453
|
+
if (silenceMs > timeoutMs) {
|
|
454
|
+
getLogger().warn({ silenceMs, timeoutMs }, 'bridge heartbeat timeout — zombie connection detected, closing');
|
|
455
|
+
this.ws.close(4002, 'heartbeat_timeout');
|
|
456
|
+
return;
|
|
457
|
+
}
|
|
458
|
+
try {
|
|
459
|
+
this.ws.send(JSON.stringify({ type: 'heartbeat', timestamp: Date.now() }));
|
|
460
|
+
}
|
|
461
|
+
catch {
|
|
462
|
+
getLogger().warn('bridge heartbeat send failed, disconnecting');
|
|
463
|
+
this.disconnect('heartbeat failed');
|
|
249
464
|
}
|
|
250
465
|
}, this.config.BRIDGE_HEARTBEAT_MS);
|
|
251
466
|
}
|
|
@@ -255,6 +470,73 @@ export class BridgeManager extends EventEmitter {
|
|
|
255
470
|
this.heartbeatTimer = null;
|
|
256
471
|
}
|
|
257
472
|
}
|
|
473
|
+
/**
|
|
474
|
+
* Schedule a reconnect attempt with tiered backoff. Never stops retrying.
|
|
475
|
+
* Tiers (elapsed since first disconnect):
|
|
476
|
+
* 0–30 s → 1 s interval
|
|
477
|
+
* 30–120 s → 3 s interval
|
|
478
|
+
* >120 s → 10 s interval
|
|
479
|
+
* Each delay has ±10 % jitter.
|
|
480
|
+
*/
|
|
481
|
+
scheduleReconnect() {
|
|
482
|
+
if (this.state === 'disconnected')
|
|
483
|
+
return;
|
|
484
|
+
if (this.reconnectAttempts === 0) {
|
|
485
|
+
this.reconnectStartMs = Date.now();
|
|
486
|
+
}
|
|
487
|
+
this.reconnectAttempts++;
|
|
488
|
+
const elapsed = Date.now() - this.reconnectStartMs;
|
|
489
|
+
let base;
|
|
490
|
+
if (elapsed < 30_000)
|
|
491
|
+
base = RECONNECT_BASE_MS;
|
|
492
|
+
else if (elapsed < 120_000)
|
|
493
|
+
base = RECONNECT_BASE_MS * 3;
|
|
494
|
+
else
|
|
495
|
+
base = Math.min(RECONNECT_BASE_MS * 10, RECONNECT_MAX_DELAY_MS);
|
|
496
|
+
const jitter = base * 0.1 * (Math.random() * 2 - 1);
|
|
497
|
+
const delay = Math.round(base + jitter);
|
|
498
|
+
getLogger().info({ attempt: this.reconnectAttempts, delay, elapsed }, 'scheduling bridge reconnect');
|
|
499
|
+
this.emit('reconnecting', { attempt: this.reconnectAttempts, delay });
|
|
500
|
+
this.reconnectTimer = setTimeout(() => {
|
|
501
|
+
this.connect().catch((err) => {
|
|
502
|
+
getLogger().error({ err }, 'bridge reconnect failed');
|
|
503
|
+
this.scheduleReconnect();
|
|
504
|
+
});
|
|
505
|
+
}, delay);
|
|
506
|
+
}
|
|
507
|
+
clearReconnectTimer() {
|
|
508
|
+
if (this.reconnectTimer) {
|
|
509
|
+
clearTimeout(this.reconnectTimer);
|
|
510
|
+
this.reconnectTimer = null;
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Periodically sweep the pending-request map for entries whose
|
|
515
|
+
* timeout has elapsed but whose `setTimeout` may have been leaked
|
|
516
|
+
* (defence-in-depth). Runs every 30 s while connected.
|
|
517
|
+
*/
|
|
518
|
+
startStaleSweep() {
|
|
519
|
+
if (this.staleSweepTimer)
|
|
520
|
+
clearInterval(this.staleSweepTimer);
|
|
521
|
+
this.staleSweepTimer = setInterval(() => {
|
|
522
|
+
const now = Date.now();
|
|
523
|
+
for (const [id, entry] of this.requestMap) {
|
|
524
|
+
const elapsed = now - entry.startedAt;
|
|
525
|
+
if (elapsed >= this.config.BRIDGE_TIMEOUT_MS) {
|
|
526
|
+
getLogger().warn({ requestId: id, method: entry.method, elapsed }, 'stale sweep cleaning up expired request');
|
|
527
|
+
clearTimeout(entry.timer);
|
|
528
|
+
entry.reject(new Error(`Bridge request "${entry.method}" expired (stale sweep)`));
|
|
529
|
+
this.requestMap.delete(id);
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
}, STALE_SWEEP_MS);
|
|
533
|
+
}
|
|
534
|
+
stopStaleSweep() {
|
|
535
|
+
if (this.staleSweepTimer) {
|
|
536
|
+
clearInterval(this.staleSweepTimer);
|
|
537
|
+
this.staleSweepTimer = null;
|
|
538
|
+
}
|
|
539
|
+
}
|
|
258
540
|
}
|
|
259
541
|
/**
|
|
260
542
|
* Parse a port scan specification string into an ordered array of ports.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/bridge/manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/bridge/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,42 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
/** Supported protocol versions for the bridge pairing/handshake. */
|
|
3
|
+
export declare const SUPPORTED_PROTOCOL_VERSIONS: readonly ["1.0.0"];
|
|
4
|
+
/**
|
|
5
|
+
* Zod schema for the initial handshake message.
|
|
6
|
+
* Client → Server: identifies the client and its protocol version.
|
|
7
|
+
*/
|
|
2
8
|
export declare const BridgeHandshakeSchema: z.ZodObject<{
|
|
3
9
|
type: z.ZodLiteral<"handshake">;
|
|
4
10
|
protocol: z.ZodLiteral<"easyeda-mcp-pro.bridge">;
|
|
5
|
-
protocolVersion: z.
|
|
11
|
+
protocolVersion: z.ZodString;
|
|
6
12
|
clientName: z.ZodLiteral<"easyeda-mcp-pro">;
|
|
7
13
|
extensionVersion: z.ZodOptional<z.ZodString>;
|
|
8
14
|
easyedaVersion: z.ZodOptional<z.ZodString>;
|
|
9
15
|
devMode: z.ZodOptional<z.ZodBoolean>;
|
|
10
16
|
sessionToken: z.ZodOptional<z.ZodString>;
|
|
11
17
|
}, z.core.$strip>;
|
|
18
|
+
/**
|
|
19
|
+
* Server → Client: issued before handshake when the bridge requires
|
|
20
|
+
* a pairing proof-of-possession (non-loopback + BRIDGE_TOKEN set).
|
|
21
|
+
*/
|
|
22
|
+
export declare const BridgePairingChallengeSchema: z.ZodObject<{
|
|
23
|
+
type: z.ZodLiteral<"pairing_challenge">;
|
|
24
|
+
challenge: z.ZodString;
|
|
25
|
+
}, z.core.$strip>;
|
|
26
|
+
/**
|
|
27
|
+
* Client → Server: response to a pairing challenge.
|
|
28
|
+
* The client echoes the challenge and supplies the session token.
|
|
29
|
+
*/
|
|
30
|
+
export declare const BridgePairingResponseSchema: z.ZodObject<{
|
|
31
|
+
type: z.ZodLiteral<"pairing_response">;
|
|
32
|
+
challenge: z.ZodString;
|
|
33
|
+
sessionToken: z.ZodString;
|
|
34
|
+
}, z.core.$strip>;
|
|
35
|
+
/**
|
|
36
|
+
* Zod schema for the hello message.
|
|
37
|
+
* Server → Client: sent after successful handshake/pairing to announce
|
|
38
|
+
* bridge capabilities, version info, and the method registry hash.
|
|
39
|
+
*/
|
|
12
40
|
export declare const BridgeHelloSchema: z.ZodObject<{
|
|
13
41
|
type: z.ZodLiteral<"hello">;
|
|
14
42
|
bridgeVersion: z.ZodString;
|
|
@@ -18,6 +46,10 @@ export declare const BridgeHelloSchema: z.ZodObject<{
|
|
|
18
46
|
methodRegistryHash: z.ZodString;
|
|
19
47
|
devMode: z.ZodBoolean;
|
|
20
48
|
}, z.core.$strip>;
|
|
49
|
+
/**
|
|
50
|
+
* Zod schema for an RPC request message.
|
|
51
|
+
* Client → Server: invokes a named method with optional parameters.
|
|
52
|
+
*/
|
|
21
53
|
export declare const BridgeRequestSchema: z.ZodObject<{
|
|
22
54
|
id: z.ZodString;
|
|
23
55
|
type: z.ZodLiteral<"request">;
|
|
@@ -26,6 +58,10 @@ export declare const BridgeRequestSchema: z.ZodObject<{
|
|
|
26
58
|
timeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
27
59
|
traceparent: z.ZodOptional<z.ZodString>;
|
|
28
60
|
}, z.core.$strip>;
|
|
61
|
+
/**
|
|
62
|
+
* Zod schema for an RPC response message.
|
|
63
|
+
* Server → Client: carries the result or a structured error.
|
|
64
|
+
*/
|
|
29
65
|
export declare const BridgeResponseSchema: z.ZodObject<{
|
|
30
66
|
id: z.ZodString;
|
|
31
67
|
type: z.ZodLiteral<"response">;
|
|
@@ -36,6 +72,7 @@ export declare const BridgeResponseSchema: z.ZodObject<{
|
|
|
36
72
|
BRIDGE_NOT_READY: "BRIDGE_NOT_READY";
|
|
37
73
|
METHOD_NOT_ALLOWED: "METHOD_NOT_ALLOWED";
|
|
38
74
|
METHOD_NOT_FOUND: "METHOD_NOT_FOUND";
|
|
75
|
+
NET_NOT_FOUND: "NET_NOT_FOUND";
|
|
39
76
|
EASYEDA_API_ERROR: "EASYEDA_API_ERROR";
|
|
40
77
|
TIMEOUT: "TIMEOUT";
|
|
41
78
|
INVALID_PARAMS: "INVALID_PARAMS";
|
|
@@ -50,11 +87,20 @@ export declare const BridgeResponseSchema: z.ZodObject<{
|
|
|
50
87
|
}, z.core.$strip>>;
|
|
51
88
|
durationMs: z.ZodNumber;
|
|
52
89
|
}, z.core.$strip>;
|
|
90
|
+
/**
|
|
91
|
+
* Zod schema for a heartbeat keep-alive message.
|
|
92
|
+
* Both directions: ensures the WebSocket connection is still alive.
|
|
93
|
+
*/
|
|
53
94
|
export declare const BridgeHeartbeatSchema: z.ZodObject<{
|
|
54
95
|
type: z.ZodLiteral<"heartbeat">;
|
|
55
96
|
timestamp: z.ZodNumber;
|
|
56
97
|
}, z.core.$strip>;
|
|
98
|
+
/** Inferred TypeScript type for a hello message. */
|
|
57
99
|
export type BridgeHello = z.infer<typeof BridgeHelloSchema>;
|
|
100
|
+
/**
|
|
101
|
+
* Inferred TypeScript type for a response message with typed result.
|
|
102
|
+
* @template TResult - The shape of the successful result payload.
|
|
103
|
+
*/
|
|
58
104
|
export type BridgeResponse<TResult = unknown> = Omit<z.infer<typeof BridgeResponseSchema>, 'result' | 'error'> & {
|
|
59
105
|
result?: TResult;
|
|
60
106
|
error?: {
|